У меня проще, только код, без вспомогательных таймеров и триггеров
Код: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 tx:= 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Сравните с предложенным ранее:




Ответить с цитированием