Просмотр полной версии : ПЛК160: узнать дату и время в DATE_AND_TIME
Здравствуйте!
Как узнать текущее время и дату в виде DATE_AND_TIME на ПЛК160? Про CurTimeEx знаю и поля структуры SystemTimeDate меня не интересуют — там всё по отдельности.
Спасибо.
Николаев Андрей
22.12.2011, 10:13
Не понятен вопрос.
Вам надо собрать дату и время в один параметр??? А зачем?
Чтобы без костылей передавать это по модбасу на ПК, где ведётся протокол событий. Полагаться на часы ПК при этом нельзя.
Николаев Андрей
22.12.2011, 10:18
Я не пробовал, но на сколько знаю есть операторы сбора параметров.
Так же в интернете есть статьи Игоря Петрова - временные сложности (скорее всего есть и на сайте www.codesys.ru)
Там есть ответы на все случаи работы с часами.
Да, спасибо, нашёл (http://www.codesys.ru/docs/TimeExperience.pdf), пошёл читать. А стандартных средств для этого нет что ли? Во деревня :(
В назидание потомкам
Качаем архив (http://www.codesys.ru/docs/timeexp.zip) с codesys.ru и подключаем оттуда библиотеку TimeExp.lib, после чего делаем прыжок с переподвыподвертом:
VAR
timedate: SystemTimeDate;
systime: SysTime64;
datetime_packed: DT;
GetTime: CurTimeEx;
END_VAR
SysMemSet(ADR(systime), 0, SIZEOF(systime));
SysMemSet(ADR(timedate), 0, SIZEOF(timedate));
GetTime(SystemTime := systime, TimeDate := timedate);
datetime_packed := DATE_TO_DT(
PackDate(timedate.Year, timedate.Month, timedate.Day) +
PackTime(timedate.Hour, timedate.Minute, timedate.Second, timedate.Milliseconds) / 1000);
Так... А почему на ПЛК - если верить функции CurTimeEx - время неравномерно идёт?
У меня в одном блоке вызывается TIME() и CurTimeEx(), их показания идут в регистры Modbus, эти регистры "одновременно" считываются на ПК и там видно, что TIME() идёт равномерно, а в CurTimeEx() секунды меняются то быстрее, то медленнее. Чё за нафиг?
Это не глюки. Оно иногда чуть ли не перепрыгивает через одну-две секунды.
Окей. Но почему так сильно прыгает-то? Ужас.
Вышел из положения: при подключении к ПЛК запоминаем его текущий аптайм и дату/время, а дальше смотрим только аптайм и добавляем его дельту к запомненному значению даты и времени. Можно и на самом ПЛК до записи в Modbus-регистры сделать.
открою Вам страшную тайну, часы реального времени на ПЛК с определенной периодичностью надо синхронизировать с часами точного времени, это же Вам не ntp-сервер
Возникли очередные вопросы:
1. Как синхронизировать? Подключать к компьютеру и менять? Скадой?
2. Есть ли способ узнавать текущее время в режиме эмуляции (при этом платформа - правильная, т.е. ПЛК1хх, не SoftPLC)?
Николаев Андрей
22.09.2012, 23:32
Можно синхронизировать со скады.
Можно понять на сколько часы врут и ввести программную коррекцию.
В эмуляции вообще никакой информации с ПЛК Вы не получаете.
Есть ли способ узнавать текущее время в режиме эмуляции
Время ПК. RTC
Один товарищ попросил в виде проекта. Пускай в этой теме висит.
Можно синхронизировать со скады.
Можно понять на сколько часы врут и ввести программную коррекцию.
У вас есть какой-нибудь пример для обоих вариантов?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot