Вот мой вариант блока
1. Правда такой блок имеет ограничение и может считать только до 49 дней включая добавочные часы и дни.Код:FUNCTION_BLOCK ENGINE_HOURS VAR_INPUT START: BOOL; (*АКТИВАЦИЯ СЧЕТА МОТОЧАСОВ*) I_TH : DWORD; (*ВВОД НОВОГО ЗНАЧЕНИЯ НАРАБОТКИ В ЧАСАХ В РУЧНУЮ*) I_TD : DWORD; (*ВВОД НОВОГО ЗНАЧЕНИЯ НАРАБОТКИ В СУТКАХ В РУЧНУЮ*) ENTER: BOOL; (*АКТИВАЦИЯ ВВЕДЕННЫХ В РУЧНУЮ ЗНАЧЕНИЙ*) RESET: BOOL; (*СБРОС СЧЕТЧИКОВ ПРИНУДИТЕЛЬНО*) END_VAR VAR_OUTPUT O_TM : WORD; (*ВРЕМЯ НАРАБОТКИ В МИНУТАХ*) O_TH : WORD; (*ВРЕМЯ НАРАБОТКИ В ЧАСАХ*) O_TD : WORD; (*ВРЕМЯ НАРАБОТКИ В СУТКАХ*) END_VAR VAR tStart: TIME; (* Точка времени начала счета *) tWorking: TIME; (* Общее время работы счетчика *) tMemmory: TIME; (* Общее время наработки после отключения *) dwCalc: DWORD; (* Для расчета минут и часов *) xStartMemmory: BOOL; xResetMemmory: BOOL; END_VAR (* Если появился сигнал на входе сброса, сбрасываем счетчик *) IF RESET AND NOT xResetMemmory THEN tStart := T#0s; tMemmory := T#0s; END_IF; xResetMemmory := RESET; (* Определяем передний фронт сигнала начала измерения. и сохраняем точку времени *) IF START AND NOT xStartMemmory THEN tStart := TIME(); END_IF; (* Определяем задний фронт START, и если отключился сохраняем наработанное время в переменную *) IF NOT START AND xStartMemmory THEN tMemmory := tMemmory + (TIME() - tStart); END_IF; xStartMemmory := START; tWorking := (TIME() - tStart) + tMemmory; IF ENTER THEN tWorking := tWorking + DWORD_TO_TIME((I_TH * 3600000) + (I_TD * 86400000)); END_IF; dwCalc := TIME_TO_DWORD(tWorking) / (1000 * 60); (* dwCalc хранит общее количество минут *) O_TM := dwCalc MOD 60; (* Остаток минут *) dwCalc := dwCalc / 60; (* dwCalc хранит общее количество часов *) O_TH := dwCalc MOD 24; (* Остаток часов *) O_TD := dwCalc / 24; (* Общее количество суток *) END_FUNCTION_BLOCK
2. Блок должен определяться в энергонезависимой памяти.
3. Расчет часов и дней происходит не общий а остаток. Например 10 дней 12 часов. То есть часов ни когда не будет больше чем 23. Тоже самое касается минут.




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