да, таймеры внутри условий
Код:function_block PhaseLoadControl var_input Current : REAL; Hight_level : REAL; Low_level : REAL; end_var var_output Auto1Cmd, Auto2Cmd : BOOL := TRUE; (* Команды управления автоматами *) end_var var TimerOn1, TimerOn2, TimerOff1, TimerOff2 : sys.TON; T_On, T_Off : TIME := T#5S; end_var (* Отключение автоматов, если ток выше Hight_level *) IF Current > Hight_level THEN TimerOff1(I := Auto1Cmd, T := T_Off); IF TimerOff1.Q THEN Auto1Cmd := FALSE; END_IF; TimerOff2(I := (NOT Auto1Cmd) AND Auto2Cmd AND (Current > Hight_level), T := T_Off); IF TimerOff2.Q THEN Auto2Cmd := FALSE; END_IF; END_IF; (* Включение автоматов, если ток ниже Low_level *) IF Current < Low_level THEN TimerOn1(I := NOT Auto1Cmd, T := T_On); IF TimerOn1.Q THEN Auto1Cmd := TRUE; END_IF; TimerOn2(I := Auto1Cmd AND NOT Auto2Cmd, T := T_On); IF TimerOn2.Q THEN Auto2Cmd := TRUE; END_IF; END_IF; (* Удержание состояния в диапазоне Low_level-Hight_level *) IF (Current >= Low_level) AND (Current <= Hight_level) THEN (* Ничего не делаем, автоматы остаются в текущем состоянии *) END_IF; end_function_block




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