
Сообщение от
EFrol
Здесь пример таймера, реализованного прямо в панели.
Такой же таймер для ПР:
Owen.jpg
Код:
function_block TMR_Run
var_input
ctrl_in : udint;
delta : udint;
end_var
var_output
TMR : udint;
ctrl_out : udint;
end_var
var
rtInc, rtDec : SYS.RTRIG;
tmrSec : SYS.TON;
end_var
rtInc(I:=ctrl_in.0); rtDec(I:=ctrl_in.1); // Фиксируем нажатие кнопок
if rtInc.Q then TMR := TMR + delta; end_if // +10 к TMR
if rtDec.Q then // -10 или 0 в TMR
if TMR >= delta then
TMR := TMR - delta;
else
TMR := 0;
end_if
end_if
ctrl_out := ctrl_in; // Продублируем на выход
ctrl_out.2 := ctrl_out.2 and (TMR > 0); // Сбросить бит запуска при TMR = 0
if ctrl_out.2 then // Бит запуска активен
tmrSec(I:=true, T:=T#1s); // Отсчитываем 1сек
if tmrSec.Q then
TMR := TMR - 1; tmrSec(I:=false); // Декремент TMR и перезапуск секундного таймера
end_if
end_if
end_function_block