Ну, так, размещаете вызов RTRIG самым первым и он будет действовать только до конца текста
Вид для печати
Спасибо, уже понял принцип работы. Мне нужно было именно уяснить принцип. Я имел в виду, что если бы импульс действовал только до конца текста, то на код, расположенный выше вызова, он бы не влиял. В этом случае место расположения имело бы большое значение. Ну а поскольку импульс работает полный круг, так тут и обсуждать уже нечего, по сути. Где ни размести, результат будет один. В моей программе, по крайней мере.
Я всегда думал что до окончания подпрограммы триггер работает... Может в лоджике и не так...
Надо проверить, поставить до и после условие сравнения и суммирование переменной и по ней определиться.
Функциональный блок работает только в момент его вызова. Все остальное время мы пользуемся результатом его работы.
Например
Здесь триггер взведется по фронту Е и останется таким навсегда (ну, или пока мы его где-нибудь в другом месте опять не вызовем)Код:var_input //объявление входных переменных
E : bool;
end_var
var_output //объявление выходных переменных
Q : bool;
end_var
var //объявление локальных переменных
RTrig : SYS.RTRIG;
end_var
RTrig.I := E;
if not RTrig.Q then RТrig(); end_if
Q := RTrig.Q;
Был грешен... Вы мне открыли глаза.
Проверил на codesys 3.5, выход триггера остаётся взведенным до его повторного вызова. Я всегда думал, что он работает до окончания цикла программы/подпрограммы. Т.е. по циклу программы он сбросится только когда снова в него упрется...
Или я знал это раньше, или не знал и забыл)
Надо это всё переосмыслить. Так знал я это или нет...
Камрады-новички (я без иронии). Я вот вас читаю и понимаю, что надо у себя на сайте, что ли, написать простую статью о том, чем Функциональнй Блок от Функции отличается... Прям этот вопрос заново возник у кучи народа на форуме.
А я и правда думал, что триггер возведён до конца цикла именно подпрограммы. Везде на диаграммах указан период работы - цикл. Но этот цикл не до окончания подпрограммы, а до того места, пока код в программе опять не увидит этот триггер.
Да, я туп оказался. Позор на мои седины.
Ну, если по серьёзному, без шуточек, то мнемонически можно запомнить, что во всей программе/задаче ПЛК цикл - это всё-всё целиком. Причём сначала считываются входы, обрабатывается программа, потом выдаются значения на выходы.
Наверное когда-нибудь я про это напишу всё же, так как сам тупил: думал что FB - автономны, и какой-нибудь таймер сам по себе будет считать, если его не вызывать в коде