Моя проблема в подсчёте времени процесса в секундах от 0 до 3800 секунд.
IF ms >= 1000 THEN
_SEC_PROC := _SEC_PROC + 1;
Но разница по эталонным часам на 300 сек 60 сек. Если я использую ms := TIME_TO_DWORD(TIME()) - tx;
Откуда погрешность не томи
Вид для печати
Моя проблема в подсчёте времени процесса в секундах от 0 до 3800 секунд.
IF ms >= 1000 THEN
_SEC_PROC := _SEC_PROC + 1;
Но разница по эталонным часам на 300 сек 60 сек. Если я использую ms := TIME_TO_DWORD(TIME()) - tx;
Откуда погрешность не томи
А можно привести код (ну недоходит до меня уж простите)
После изнасилования МОЗГА получил результат
Код:R_trigger( CLK := START_TIMER AND NOT (STOP_TIMER) );
IF (RESET_TIMER) THEN
_SEC_ := 0;
_MIN_ := 0;
_HUR_ := 0;
_SEC_PROC_ := 0;
RESET_TIMER := FALSE;
END_IF
IF ( START_TIMER AND NOT (STOP_TIMER) ) THEN
IF R_trigger.Q = TRUE THEN
tik0 := TIME_TO_UDINT(TIME());
END_IF
tik := TIME_TO_UDINT(TIME()) - tik0;
_SEC_PROC_ := tik;
tik := tik / 1000;
_SEC_ := UDINT_TO_INT(tik MOD 60);
tik := tik / 60;
_MIN_ := UDINT_TO_INT(tik MOD 60);
tik := tik / 60;
_HUR_ := UDINT_TO_INT(tik MOD 24);
END_IF
Итак. В ПЛК есть 2-е часов. Системные (на базе кварца 16МГц) и реального времени (32768Гц).
Первые действительно не идеально точные, и такой уход (5 секунд за 10 минут, или 0,8%) не является неисправностью.
Поэтому, если требуется высокая точность задания времени на больших отрезках - используйте часы реального времени.
Если же нужно отмерить 300часов 10мс - то корректируйте системное время по часам реального времени, а лучше не пытайтесь достичь недостижимого. Атомных часов в ПЛК мы не ставим. не помещаются.