Ошибка функции DTU.DTSplit()
Добрый вечер.
Речь пойдет о ПЛК 323, бибки CAA DTUtility 3.4.4.0 (или просто DTU).
Прямо перед НГ меня ждал подарок.
На сервер пришла дата: 2153-02-06 06:28:16.
Не буду вдаваться в подробности как я выяснил, что это не у меня руки кривые, (т.е. полгода все исправно приходило), а проблемы DTU бибки, а именно ф-ции DTU.DTSplit(). Скажу лишь? что в сообщение серверу передается DT самого ПЛК (нормальное, не 2153+ год), а вырезается в каких-либо сообщения год из даты функцией DTU.DTSplit().
Если ей скормить 2016-12-31 00:00:00 (именно эту дату, без разницы какое время) мы получим 2153-02-06 06:28:16.
Если вычесть эти 2 даты (в секундах), мы получим 4294967296 = 2^32. Где-то у немцев сдвиг на 4 байта получается.
Но, таких дат в промежуток с 2017 по 2099 будет 20 штук.
След. дата: 2020-12-31 00:00:00 мы получим 2157 г. и т.п.
Подскажите как обойтись без костылей? мб версия библиотеки старая и эта ошибка уже исправлена? мб есть аналоги данной функции?
Цитата:
dt1:=DT#2017-01-01-00:00:00;
WHILE dt1<=DT#2099-01-01-00:00:00 DO
dt_error:=DTU.DTSplit(
dt1,
ADR(year1),
ADR(month1),
ADR(day1),
ADR(hour1),
ADR(minute1),
ADR(second1)
);
IF
year1<2000 OR year1>2099 OR dt_error<>0
THEN
step:=23;
RETURN;
END_IF
dt1:=dt1+T#1D;
END_WHILE
PS DTU.DateSplit() не проверял, возможна таже ошибка.