Переменная ORes внутри ФБ WT1 никогда не принимает значения TRUE, нет условий.
Попробуйте
Код:if Sec and IsOn then OTime:=ITime+1; end_if if Res then OTime:=0; end_if if OTime = 0 then ORes:=true; else ORes:=false; end_if;
Переменная ORes внутри ФБ WT1 никогда не принимает значения TRUE, нет условий.
Попробуйте
Код:if Sec and IsOn then OTime:=ITime+1; end_if if Res then OTime:=0; end_if if OTime = 0 then ORes:=true; else ORes:=false; end_if;
Последний раз редактировалось Sulfur; 21.01.2026 в 14:14.
Я расчитывал, что Reset:=TRUE, введенный через экран, продержится достаточно, чтобы обнулить Wt внутри ФБ WT1, и уже после этого снова примет значение FALSE. В чём ошибка? (Кажется мне, всё дело где-то в порядке выполнения)
Поставьте для переменной Reset свойство "Запись в конце цикла"
Безымянный.png
Большое спасибо! Заработало.
Сигнал ORes - это сигнал, что сброс выполнен. Осталось только прикрутить его к сбросу Reset, может быть через таймер. То есть сброс ресета производить по истечении какого-либо времени. В других средах есть операторы SET\RST, но тут с этим проблемы.
Всё дело в том, что, похоже, после присвоения Reset:=TRUE с экрана происходит присвоение Reset:=ORes, и только потом Res:=Reset при инициализации ФБ WT1, то есть, именно в порядке исполнения. Таймеры тут не помогают ровно по той же причине - Reset становится FALSE непосредственно после ввода, а, скорее всего, и в процессе ввода - программа-то фоном крутится.
Здравствуйте! Подскажите пожалуйста: в чем отличие макросов от функциональных блоков в OwenLogik?
В Лоджике есть справка, вызывается по F1
Макросы на языке FBD (схема квадратиками), а ФБ на языке ST (текстовый язык), примеры на ST ниже
https://owen.ru/forum/showthread.php...=9&p=429061#81
Последний раз редактировалось kondor3000; 23.01.2026 в 08:01.
Вот библиотечный ФБ
01.png
Вот пользовательский ФБ на языке ST
02.png
Вот макрос
03.png
А, вот справка Лоджика
Безымянный.png
Prosto tak лучше посмотрите справку CodeSys - собственно разница между макросом и FB кратко можно описать так - для первого выделяется память для каждого блока, для второго нет, так как он выполняет только вычисления (пришли данные, обработал, выкинул результат, забыл про данные и так по кругу), первый же может сохранить промежуточные данные, так как ПО для него выделяет память, часто незаметно для вас.