Yegor, можете привести пример с использованием функции Time? т.к. требуется источник точного времени.
TIME() выдаёт не календарное время, а время с момента запуска. Насколько я понимаю, это не то. Как бы там ни было, вот пример:Совмещением TIME() и CurTimeEx можно добиться равномерности также и календарного времени, но точности всё равно не будет, т.к. часы безнадёжно отстают и забегают во время простоя. Остаётся надеяться, что «овны» займутся этой проблемой.Код:VAR uptime: TIME; END_VAR uptime := TIME();
Да.и в пустом проекте1000.максимальное время циклаПопробовал 200, 500 и 1000. Сначала выглядит будто ок, но потом всё равно перепрыгивает. В общем, та же фигня.пробовали Вы воспользоваться многозадачностью и считать время в отдельной задаче с фиксированным периодом?
Да и какое значение имеют условия исполнения, если при отключенном питании часы всё равно тупят? Я выключаю контроллер в 17:00 с синхронизированными по компу часами, а на утро к 8:00 обнаруживаю 30-секундное отставание. По праздникам и выходным больше минуты выходит. И в течение дня значительное отклонение набирается.
При использовании функц.блока CurTimeEx, обращение к времени происходит один раз, потом значения времени не меняются, в документации ничего вразумительного найти не нашел...
Если использовать
то при компиляции выдает "вызвать можно только экземпляр функционального блока" ошибка 4267PHP код:
VAR
timedate: SystemTimeDate;
systime: SysTime64;
GetTime: CurTimeEx;
END_VAR
(* Предварительно обнуляем структуры, как того требует CurTimeEx *)
SysMemSet(ADR(systime), 0, SIZEOF(systime));
SysMemSet(ADR(timedate), 0, SIZEOF(timedate));
GetTime(SystemTime := systime, TimeDate := timedate);
Структуры надо обнулять прежде чем передавать их в CurTimeEx. Иначе вы не запрашиваете время, а устанавливаете его.При использовании функц.блока CurTimeEx, обращение к времени происходит один раз, потом значения времени не меняются, в документации ничего вразумительного найти не нашел.Специально скопировал и вставил прямо этот код — он компилируется и работает. Возможно, у вас там какой-то конфликт имён, например, уже существует функция GetTime. Можете показать свой проект, и мы разберёмся, в чём дело.при компиляции выдает "вызвать можно только экземпляр функционального блока" ошибка 4267
Yegor
вот проект Вложение 5795
в программе "vremi"
Спасибо заранее!
Добавьте в проект SysLibMem.lib, о которой я говорил ранее, и уберите вот это:Код:SysMemSet: DATE;
SysLibMem.lib добавлена
убрал,Код:SysMemSet: DATE;
при компиляции все равно надо указать индентификатор SysMemSet.
не получилось