Вот ФБ и программа:
FUNCTION_BLOCK Timer_CCL
VAR_INPUT
Start:BOOL;
Interval:TIME;
SwitchIN:BOOL;
END_VAR
VAR_OUTPUT
CicleON:BOOL;
SwitchOUT:BOOL;
TimeSee:REAL;
END_VAR
VAR
//Таймер TON
TON_GEN:TON;
END_VAR
_______________________________
TON_gen(IN:= Start, PT:= interval);
IF TON_gen.Q THEN (*если пришел импульс от таймера*)
Start:=FALSE;
SwitchOUT:=NOT SwitchIN; (* Переключение входной функции на противоположный знак*)
END_IF
// Вывод пройденного времени
TimeSee:=TIME_TO_REAL(TON_gen.ET/1000);
//Включение Цикла во время работы таймера
CicleON:=start AND NOT TON_gen.Q; (*Сигнал пока таймер работает*)
____________________________________________
Тело программы
IF PWR THEN
IF START THEN Timer_SDUV(Start:=PWR, Interval:=REAL_TO_TIME(TimeInSduv*1000),CicleON=>S ignalC);;
SignalO:=PWR; START:=FALSE;
END_IF;
Timer_SDUV(Start:=NOT SignalO, Interval:=REAL_TO_TIME(TimeInSduv*1000), CicleON=>SignalC, TimeSee=>TimeSeeSduv);
Cicle(Start:=NOT SignalC, Interval:=REAL_TO_TIME(TimeInCicle*1000), SwitchIN:=Switch, CicleON=>SignalO, SwitchOUT=>Switch, TimeSee=>TimeSeeCicle);
Otduv:=Timer_SDUV.CicleON;
ADSL:=SignalO AND NOT switch;
ADSR:=SignalO AND switch;
// Отдувка в работе
IF Otduv THEN RL1:=FALSE; RL2:=FALSE; RL3:=FALSE; RL4:=FALSE; RL5:=FALSE; RL6:=FALSE; RL7:=TRUE;
END_IF
// Правое направление в работе
IF ADSR THEN RL1:=FALSE; RL2:=TRUE; RL3:=TRUE; RL4:=FALSE; RL5:=FALSE; RL6:=TRUE; RL7:=TRUE;
END_IF
// Левое направление в работе
IF ADSL THEN RL1:=TRUE; RL2:=FALSE; RL3:=FALSE; RL4:=TRUE; RL5:=TRUE; RL6:=FALSE; RL7:=TRUE;
END_IF
ELSE Otduv:=FALSE; SignalO:=FALSE; SignalC:=FALSE; ADSR:=FALSE; ADSL:=FALSE;
RL1:=FALSE; RL2:=FALSE; RL3:=FALSE; RL4:=FALSE; RL5:=FALSE; RL6:=FALSE; RL7:=FALSE;
END_IF




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