
Сообщение от
lara197a
FUNCTION_BLOCK Ychet_narabotki
VAR
RTC1: RTC; (*Время наработки*)
R_TRIG_Ust: R_TRIG; (*Команда запуска*)
Tek_schet_p: DWORD; (*Сигнал пуска*)
M1: BOOL;
F_TRIG_S: R_TRIG; (*Команда остановки*)
TOF_S: TOF; (*таймер задержки остановки*)
RS1: RS; (*Реле пуска -остановки наработки*)
Tek_schet_p1: DWORD;
M2: BOOL;
R_TRIG_Sch: R_TRIG;
Tim: DT;
Narabotka_p: TIME;
Narabotka_Chas_p: DWORD;
Narabotka_Chas_p1: DWORD;
Narabotka_Min_p: DWORD;
Narabotka_min_p1: DWORD;
Nt: BOOL;
END_VAR
VAR_INPUT
Tek_schet: DWORD; (*счетчик *)
In_Time: INT; (*астрономическое время(час дня)*)
END_VAR
VAR RETAIN
Narabotka: DT;
END_VAR
VAR_OUTPUT
END_VAR
VAR_OUTPUT RETAIN
Narabotka_Min: INT;
Narabotka_Chas: INT; (*наработка часов за смену*)
END_VAR
IF Tek_schet<>Tek_schet_p THEN
M1:=TRUE;
ELSE
M1:=FALSE;
END_IF;
R_TRIG_Ust(CLK:= TOF_S.Q, Q=> );
TOF_S(IN:=M1 , PT:=T#30s , Q=> , ET=> );
F_TRIG_S(CLK:=TOF_S.Q , Q=> );
RS1(SET:=R_TRIG_Ust.Q , RESET1:=F_TRIG_S.Q , Q1=> );
IF In_Time=7 OR In_Time=19 THEN (*Сброс часов*)
M2:=TRUE;
ELSE
M2:=FALSE;
END_IF;
R_TRIG_Sch(CLK:=M2 , Q=> ); (*Тригер сброса часов*)
RTC1(EN:=RS1.Q1 AND NOT R_TRIG_Sch.Q ,
PDT:=Tim , Q=> , CDT=>Narabotka );
IF R_TRIG_Sch.Q THEN
Tim:=DT#1970-01-01-00:00:00;
Narabotka:=DT#1970-01-01-00:00:00;
END_IF;
IF RS1.Q1 AND NOT R_TRIG_Sch.Q THEN
Tim:=Narabotka;
END_IF;
Narabotka_p:=DT_TO_TIME(Tim);
Narabotka_Chas_p:=TIME_TO_DWORD(Narabotka_p);
Narabotka_Chas_p1:=Narabotka_Chas_p/3600000;
Narabotka_Chas:=DWORD_TO_WORD(Narabotka_Chas_p1);
Narabotka_Min_p:=Narabotka_Chas_p-Narabotka_Chas_p1*3600000;
Narabotka_min_p1:=Narabotka_Min_p/60000;
Narabotka_Min:=DWORD_TO_WORD(Narabotka_Min_p1);
Tek_schet_p:=Tek_schet ;