Моя проблема в подсчёте времени процесса в секундах от 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мс - то корректируйте системное время по часам реального времени, а лучше не пытайтесь достичь недостижимого. Атомных часов в ПЛК мы не ставим. не помещаются.
Тролль-наседка, добрый, нежный и ласковый