Здравствуйте!
Как узнать текущее время и дату в виде DATE_AND_TIME на ПЛК160? Про CurTimeEx знаю и поля структуры SystemTimeDate меня не интересуют — там всё по отдельности.
Спасибо.
Вид для печати
Здравствуйте!
Как узнать текущее время и дату в виде DATE_AND_TIME на ПЛК160? Про CurTimeEx знаю и поля структуры SystemTimeDate меня не интересуют — там всё по отдельности.
Спасибо.
Не понятен вопрос.
Вам надо собрать дату и время в один параметр??? А зачем?
Чтобы без костылей передавать это по модбасу на ПК, где ведётся протокол событий. Полагаться на часы ПК при этом нельзя.
Я не пробовал, но на сколько знаю есть операторы сбора параметров.
Так же в интернете есть статьи Игоря Петрова - временные сложности (скорее всего есть и на сайте www.codesys.ru)
Там есть ответы на все случаи работы с часами.
Да, спасибо, нашёл, пошёл читать. А стандартных средств для этого нет что ли? Во деревня :(
В назидание потомкам
Качаем архив с 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-регистры сделать.