В ПР103 есть регистр 61553 доступный для записи, это время в секундах с 2000 года. Осталось придумать как преобразовать текущее время с панели в количество секунд с 2000 года с учётом всех високосных годов, а потом писать его в ПР. Есть ли для этого готовый макрос?
Связь со мной: 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
Дата, Время и День недели через DT с 2000г. (и с 1970г.)_ https://owen.ru/forum/showthread.php?t=40116#4
Спасибо ответившим, буду пробовать. По результатам напишу.
В общем, попробовал я этот макрос. В целом, получилось сформировать необходимое количество секунд, с 2000 года по текущую дату и время, с доработкой макроса. Проблема теперь в другом. Панель никак не может корректно записать эти секунды в регистр 61553 ПР103. Саму запись организовал по кнопке вот таким способом:
PSW[310]=LOWORD(UnixTime);
PSW[311]=HIWORD(UnixTime);
ArrValue[1]=PSW[300];
ArrValue[2]=PSW[301];
Writes(PLC, 1, MODBUS_RTU_REGS_4X, 61553, 2, ArrValue);
Где UnixTime и есть то необходимое количество секунд с 2000 года (не с 1970, уже вычислено).
Если записывать как есть, то дата получается какая-то странная, 2044 год, что неправильно. Если поменять местами регистры в массиве таким образом:
PSW[310]=HIWORD(UnixTime);
PSW[311]=LOWORD(UnixTime);
то дата пишется всегда корректно, но время постоянно какое-то разное. Пробую писать нажимая кнопку подряд примерно каждые 3-4 секунды, время в ПР103 увеличивается на минуты и часы. Такое чувство, что нужно как-то сформировать байты, но пока не знаю как.
Есть ли где-то информация, как именно нужно писать время в регистр 61553? В документации толком ничего про это не написано.
Пишите в [310..], перекладываете куда-то за каким то из [301] из этого "куда то" куда то отправляете.
Чего бы стразу из UnixTime не отправить?
Порядок байт ПР с панелью одинаковый, смотрите форматы. Обратную операцию сделайте для начала
Последний раз редактировалось Валенок; 27.02.2025 в 08:25.
Непонятно, сначала PSW310, а потом PSW300.
2025-02-27_09-20-55.png
В ПР написано, что 61563 регистр это время в мс
Нужен вообще 61568, я думаю
Последний раз редактировалось Sergey361; 27.02.2025 в 08:29.
Неправильно написал, везде 310, 311. Перекладываю для использования массива, так в справке написано. PSW[310-311] отображаю на экране как беззнаковый DWORD, а массив ArrValue пишу в ПР103, два элемента как два регистра.
Сразу UnixTime не пробовал отправлять, так как в справке пример с массивом приведён.
Написал выше, везде 310-311, ошибся когда переписывал сюда код. Регистры 61563 и 61568 судя по этой таблице не имеют функцию записи, значит доступны только для чтения. По регистру 61553 - я его взял из настроек прибора. Если в Owen Logic перейти в настройки прибора, и выбрать раздел где настраивается время, там есть ссылка на этот регистр. И служба поддержки мне ответила, что писать время надо именно туда, в секундах от 2000 года.