
Сообщение от
capzap
перечитаем строчку из поста№8 and Wrk_drv1(*Признак работы механизма*) команда на выключение дана, лишняя секунда не досчитается, так что мы не накапливаем а уменьшаем время

Сообщение от
petera
Накапливаем от 0 до времени цикла при каждом срабатывании секундного таймера здесь
IF Tmr_TON_1S.Q THEN
Wrk_sec_drv1:=Wrk_sec_drv1+1;
and Wrk_drv1(*Признак работы механизма*)
погрешность при времени цикла 5мс даст погрешность подсчета времени до 18 сек/на один час работы механизма
или 432 сек/день.
Немного изменим программу из поста #8
Код:
tim:=TIME();
(*Подсчет с использованием секундного таймера*)
Tmr_TON_1S(In:=(NOT Tmr_TON_1S.Q)AND Wrk_drv1 (*Признак работы механизма*),Pt:=t#1s);
IF Tmr_TON_1S.Q THEN
Wrk_sec_drv1:=Wrk_sec_drv1+1;
IF Wrk_sec_drv1>=60 THEN
Wrk_min_drv1:=Wrk_min_drv1+1;
Wrk_sec_drv1:=0;
END_IF
END_IF
(*Подсчет действительного времени наработки*)
IF NOT Wrk_drv1 THEN
t_Start:=tim;
ELSE
Wrk_tim:=tim-t_Start;
END_IF
В первой части подсчитываем секундные импульсы
Во второй измеряем интервал времени с помощью TIME()
В эмуляторе быстро видно нарастание погрешности, т.к. время цикла десятки мс.
Хорошо видно, что старт таймера(.StartTime) происходит не ровно через 1с, а с добавленной погрешностью
Ну и итог тоже видно погрешность больше 3 сек при времени работы механизма ~30 сек.