Спасибо. Это сработало.
Добрый день! Подскажите пожалуйста по функции SysTimeRtcGet из библиотеки SysTimeRtс, для применения на виртуальном ПЛК CoDeSys Control Win V3. Как правильно её применять, для использования системного времени в программе? Сложность в том, что системное время отображается некорректно ( к примеру время из функции показывает 15.23 на самом же деле время 16.10 ).
Запись в программе выглядит следующим образом: tdVar:= TO_TOD (SysTimeRtc.SysTimeRtcGet (dwErrorCode)*1000 ); . Без умножения на 1000 на выходе совсем даже не приблизительное время, а с умножением со стабильной разницей в 47 мин. )). Как устроена эта функция неведомо, и описание её работы очень скудно. Примеры её применения мною не обнаружены, поэтому надеюсь на вашу помощь в изучении этого вопроса.
Задача состоит в том, чтобы время с выхода этой функции применить в программе, для работы оборудования в определённые часы. Например, чтобы с 0 до 6 часов оно работало в одном режиме, а с 6ти до 23.59 в другом.
Последний раз редактировалось Diogen; 23.01.2025 в 17:56.
Добрый день.
Если нужен именно TOD - то см. ниже пример от kondor3000.Код:dtVar:= TO_DT(SysTimeRtc.SysTimeRtcGet(dwErrorCode) ); // получаем системное время в виде значения типа DT
Последний раз редактировалось Евгений Кислов; 24.01.2025 в 06:18.
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Здравствуйте! Да, нужен именно ТОD, но как "делить" на разряды и "собирать" из них TOD, я не знаю. Может где-то пример есть ?
У меня работает конвертация DT_TO_TOD, ничего не раскладывая 1 Формат TOD.jpg
Это отлично, благодарю за подсказку ! Меня терзают смутные сомнения по поводу дальнейших действий и в целом поведения функции SysTimeRtcGet. Выходит мне нужно конвертировать 2 раза ( сперва DWORD_TO_DT, затем DT_TO_TOD) ? Почему не выходит корректная конвертация с одного перевода? Особенности конвертации или я что-то неверно исполняю?
Связь со мной: telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru (личка на форуме - не подходит)
Раздел CDS V3.5 на сайте | Основные темы по CDS V3.5 на форуме: Вопросы и ответы | Визуализация | Настройка обмена с другими устройствами
Repository Archive V3.5 SP4 (необходим для СПК207/СПК1хх без Eth/ПЛК3xx)
oscat.ru | Как обратиться в техподдержку? | Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | Проблема XY | Как правильно задавать вопросы | AnyDesk
Если я правильно понимаю, то функция SysTimeRtcGet возвращает DWORD а не дату и время. Но опыт показал, что переводя результат этой функции в время суток - получается несоответствие. А вот двойная конвертация (DWORD_TO_DT, затем DT_TO_TOD) возвращает вполне адекватное время . Только нужно его подкорректировать ещё каким-то средством, потому как получается системное -2ч.
SysTimeRtcGet (FUN).png
Благодарю Вам душевно! Это верно, коротко и главное работает! Я в восторге - зарррабоооталаааа!!! Сколько пришлось повозиться, чтобы решить эту задачку, но спасибо добрым людям, и долгие вам лета!
Кстати, тем кому придётся когда-то как мне заморочиться - следует знать, что некорректная конвертация этой функции, даёт неверные результаты выражений с её использованием. Это нужно учитывать прежде, чем грешить на свои ошибки в коде.