Работа с датой и временем

Задача: Рассчёт времени работы механизма. 
Вариантов может быть масса, ниже приводятся два примера для решения данной задачи. Примеры составлял бегло, так что критика очень даже уместна.
Допустим, переменная M1_RUN типа BOOL отвечает за работу двигателя M1 (например состояние контакта с пускателя). Нужно в момент остановки двигателя получить значение времени его работы.
Решение 1. В этом примере используем функцию RRTC_DT для получения реального времени с ПЛК в формате типа DT (Date and Time), и функцию SUB_DT_DT, которая рассчитывает разницу переменных типа DT и возвращает результат типа TIME. 
В момент пуска запоминаем текущее значение времени в переменной M1_StartTime (тип DT), а в момент останова - в переменной M1_StopTime (тип DT) и вычисляем разницу между ними с помощью функции SUB_DT_DT. Результат получаем в переменной M1_RuningTime типа TIME. Для отлова фронтов использовался функциональный блок TRIGGER: выход RISE сработает на один цикл по переходу FALSE->TRUE, а выход FALL - на один цикл по переходу TRUE->FALSE. При использовании M1_RUN типа EBOOL вместо BOOL, для отлова фронтов можно пользоваться функциями RE и FE.  
Напоминаю, что вход EN активирует/деактивирует выполнение функции/функц_блока. Следует также отметить, что максимальное значение в переменных типа TIME - T#49D_17H_2M_47S_295MS (49 дней, 17 часов). Если двигатель проработает больше, SUB_DT_DT обработается с ошибкой, а %S18 (OVERFLOW) станет =TRUE.    
 Решение 2. В этом примере обойдемся таймером. Таймер стартует при включении M1_RUN и работает, пока M1_RUN=TRUE. Уставка таймера равна 30 дней (помним, что возможный максимум - 49 дней 17 часов). По заднему фронту (останов двигателя) сигнала M1_RUN выход таймера ET (текущее значение) записываем в M1_RuningTime. Если двигатель может работать непрерывно больше 30 дней, такой подход не годится.  
Для отлова заднего фронта используется функциональный блок F_TRIG. При использовании M1_RUN типа EBOOL вместо BOOL, для отлова заднего фронта можно пользоваться функцией FE. 
    
 
 
 
Comments