Есть свободно исполняемая задача в Кодесис 2.3 для ПОК110 М02 в которой ведётся отсчёт времени процесса от 0 до 1 час 30 мин 00 сек. Но получается очень большое отклонение по времени от "эталонного" секундомера. Код
Прошу помощи в решении проблемы более точного отсчёта времени.Код:PROGRAM TIMER_SEC VAR (* глобальные переменные _SEC : BYTE := 0; _MIN : BYTE := 0; _HUR : BYTE := 0; *) tx : DWORD; last : DWORD; ms : DWORD; (* ЭЛЕМЕНТЫ *) R_trigger : R_TRIG; END_VAR (* ОБНУЛЕНИЕ ПЕРЕМЕННЫХ ВРЕМЕНИ *) IF (RESET_TIMER) THEN _SEC := 0; _MIN := 0; _HUR := 0; _SEC_PROC := 0; RESET_TIMER := FALSE; END_IF (* ТАКТИРОВАНИЕ ТРИГГЕРА *) R_trigger( CLK := START_TIMER AND NOT (STOP_TIMER) ); (* ЗАПУСК ТАЙМЕРА ПО КОМАНДЕ *) IF ( START_TIMER AND NOT (STOP_TIMER) ) THEN (* ВХОД В ФУНКЦИЮ. ВЫПОЛНЯЕТСЯ ОДИН РАЗ ПРИ ВХОДЕ *) IF R_trigger.Q = TRUE THEN tx := TIME_TO_DWORD(TIME()); END_IF ms := TIME_TO_DWORD(TIME()) - tx; (* УВЕЛИЧЕНИЕ ВРЕМЕНИ ПРОЦЕССА НА 1 сек*) IF ms >= 1000 THEN _SEC_PROC := _SEC_PROC + 1; IF _SEC < 59 THEN _SEC := _SEC + 1; ELSE _SEC := 0; IF _MIN <59 THEN _MIN := _MIN + 1; ELSE _HUR := _HUR + 1; _MIN := 0; END_IF END_IF ms := 0; tx := TIME_TO_DWORD(TIME()); END_IF END_IF


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