И я свои пять копеек вставлю
Ранее делал простой как грабли TON - дополнен только входом паузы
Код:
FUNCTION_BLOCK TON_P
VAR_INPUT
IN: BOOL; (*Старт*)
P: BOOL; (*Пауза*)
PT: TIME; (*Уставка времени*)
END_VAR
VAR_OUTPUT
Q: BOOL;
ET: TIME; (*Время работы таймера*)
END_VAR
VAR
clk: BOOL;
StartTime: TIME;
tx: TIME;
END_VAR
x:= TIME();
IF P THEN
StartTime:= tx - ET;
END_IF
IF IN AND NOT clk THEN
StartTime:= tx;
clk:= TRUE;
ELSIF NOT IN THEN
clk:= FALSE;
Q:= FALSE;
ET:= t#0s;
END_IF
IF clk AND NOT Q THEN
ET:= MIN(PT, tx - StartTime);
Q:= ET = PT AND IN;
END_IF
Захват-1.png