FUNCTION_BLOCK RunTime_Counter //имя функционального блока
VAR_INPUT //объявление входных переменных
Run : BOOL; //разрешение работы
Set : BOOL; //запись уставок времени
Res : BOOL; //сброс счетчиов
Ih, Im, Is, Ion: UDINT; //входы уставок
Fh, Fm, Fs, Fon: UDINT; //вход обратной связи от внешних переменных
END_VAR
VAR_OUTPUT //объявление выходных переменных
Q_out : UDINT;
Qh, Qm, Qs, Qon: UDINT; //выходы времени и количества включений
END_VAR
VAR //объявление локальных переменных
T, T1: UDINT;
C_ : BOOL; //секундне импульсы в счетчик
CTN_1: SYS.CTN; //объявление уиверсального счетчика м/ч
Tic : BOOL; //переменная секундного генератора
SP : UDINT; //уставка универсального счетчика м/ч
RTrig_1: SYS.RTRIG; //объявление Rtrig_1 счетчика включений
Run1 : BOOL; //выход Rtrig_1
CTN_2: SYS.CTN; //объявление уиверсального счетчика включений
SP1 : UDINT; //уставка универсального счетчика включений
END_VAR
//область кода
T:= TIME_TO_UDINT(GET_TIME());
Tic:= T-T1 >=1000;
IF Run AND Tic THEN T1:=T; C_:=TRUE; ELSE C_:=FALSE; END_IF;
CTN_1(U := C_, D := FALSE, R := Set OR Res, N :=SP, Q => Q_out);
IF Set AND NOT Res THEN
Qh:=Ih;
Qm:=Im;
Qs:=Is;
SP1:=Ion;
ELSIF Res THEN
Qh:=0;
Qm:=0;
Qs:=0;
SP:=0;
SP1:=0;
ELSE
Qh:=(Q_out/3600);
Qm:=(Q_out-Qh*3600)/60;
Qs:=(Q_out-Qh*3600)-(Qm*60);
SP1:=Qon;
END_IF;
SP:=(Fh*3600+Fm*60+Fs);
RTrig_1(I:=Run, Q => Run1);
CTN_2(U := Run1, D := FALSE, R := Set OR Res, N :=SP1, Q => Qon);
SP1:=Fon;
END_FUNCTION_BLOCK