не соображу по поводу IN_OUT и соответствующей логике, можете пояснить?
Вот собственно код ФБ
FUNCTION_BLOCK ENGINE_HOURS (*ФБ РАСЧЕТА ВРЕМЕНИ НАРАБОТКИ*)
VAR_INPUT
START: BOOL; (*АКТИВАЦИЯ СЧЕТА МОТОЧАСОВ*)
I_TH : DWORD; (*ВВОД НОВОГО ЗНАЧЕНИЯ НАРАБОТКИ В ЧАСАХ В РУЧНУЮ*)
I_TD :WORD; (*ВВОД НОВОГО ЗНАЧЕНИЯ НАРАБОТКИ В СУТКАХ В РУЧНУЮ*)
ENTER:BOOL; (*АКТИВАЦИЯ ВВЕДЕННЫХ В РУЧНУЮ ЗНАЧЕНИЙ*)
RESET: BOOL; (*СБРОС СЧЕТЧИКОВ ПРИНУДИТЕЛЬНО*)
END_VAR
VAR_OUTPUT
O_TH : DWORD; (*ВРЕМЯ НАРАБОТКИ В ЧАСАХ*)
O_TD : WORD; (*ВРЕМЯ НАРАБОТКИ В СУТКАХ*)
END_VAR
VAR
TMR :TON; (*ТАЙМЕР*)
TS:INT; (*РАБОТА В СЕКУНДАХ*)
TM:INT; (*РАБОТА В МИНУТАХ*)
END_VAR
IF ENTER THEN O_TH := I_TH; O_TD := I_TD; ELSE (*ЗАПИСЬ ЗНАЧЕНИЙ ЧАСОВ И СУТОК ПРИНУДИТЕЛЬНО В РУЧНУЮ*)
TMR(IN := NOT TMR.Q, PT := T#1ms);
IF TMR.Q THEN TS := TS + 1; END_IF (*СЧИТАЕМ СЕКУНДЫ*)
IF TS = 60 THEN TM := TM + 1; TS := 0; END_IF (*СЧИТАЕМ МИНУТЫ*)
IF TM = 60 THEN O_TH := O_TH + 1; TM := 0; END_IF (*СЧИТАЕМ ЧАСЫ*)
O_TD := REAL_TO_WORD(O_TH / 24); (*СЧИТАЕМ СУТКИ*) END_IF
IF RESET THEN O_TH := 0; O_TD := 0; END_IF (*ПРИНУДИТЕЛЬНЫЙ СБРОС СЧЕТЧИКОВ*)





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