Сообщение от
павелсиражев
А почему он не работает внутри конструкции if...then?
Потому, что таймер не аппаратный, а программный
Код:
FUNCTION_BLOCK TON
(*
Timer on delay.
Q is TRUE, PT milliseconds after IN had a rising edge.
*)
VAR_INPUT
IN: BOOL; (* starts timer with rising edge, resets timer with falling edge *)
PT: TIME; (* time to pass, before Q is set *)
END_VAR
VAR_OUTPUT
Q: BOOL; (* is TRUE, PT seconds after IN had a rising edge *)
ET: TIME; (* elapsed time *)
END_VAR
VAR
M: BOOL; (* internal variable *)
StartTime: TIME; (* internal variable *)
END_VAR
F (IN) THEN
IF (NOT M) THEN
(* Start Timer *)
STARTTIME := TIME();
END_IF
IF (NOT Q) THEN
(* Timer is running *)
ET := TIME() - STARTTIME;
IF (ET >= PT) THEN
Q := TRUE;
ET := PT;
END_IF
END_IF
ELSE
(* Reset everything *)
Q := FALSE;
ET := t#0s;
END_IF
M := IN;
Если ты этот код не вызываешь каждый цикл ПЛК, то естественно переменные внутри кода никак не изменяются.