Код:
function_block TOF_P
VAR_INPUT
In, Paus : BOOL;
PT : UDINT;
END_VAR
VAR_OUTPUT
Q : BOOL;
ET: UDINT;
END_VAR
VAR
x,R1: BOOL;
tx,t0: UDINT;
END_VAR
PT:=PT*1000; (* Задача уставки в секундах или мс *)
tx:= TIME_TO_UDINT(TIME());
IF IN AND NOT x THEN Q:=TRUE; ELSIF IN AND x THEN ET:=0; END_IF
IF NOT In AND R1 THEN T0:=tx; x:=TRUE; END_IF R1:=In;
IF Paus THEN T0:= tx - ET; END_IF
IF IN AND x AND ET<=PT THEN t0:= tx; x:=FALSE; ET:= 0; END_IF
IF x AND NOT In THEN IF PT > (tx - T0) THEN ET:= tx - t0;
ELSE ET:= PT; END_IF Q:= ET<PT AND x; END_IF