День добрый. Нужна помощь с преобразованием Ticks-ов в Date_and_time. По ModbusTCP получаем 4 word-а значения текущего времени в Ticks, как это все преобразовать в DT, может кто сталкивался?
День добрый. Нужна помощь с преобразованием Ticks-ов в Date_and_time. По ModbusTCP получаем 4 word-а значения текущего времени в Ticks, как это все преобразовать в DT, может кто сталкивался?
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Тики это вроде с миллисекундами, если не ошибаюсь. или даже с коэффициентом 10000... могу код на C# глянуть как делал. Но в каком виде оно у вас не знаю.
тут текущее время переводится в количество секунд (если не ошибся), и коэффициент 10000.Код HTML:public static long Ticks() { DateTime now = DateTime.Now; long time = now.Ticks/10000; return time; }
Примеров в нете должно быть много, если речь о компьютерных тиках
Последний раз редактировалось melky; 12.04.2023 в 10:02.
Ticks - это 1*10^-7 сек. А время в Ticks - это время прошедшее от Рождества Христова в этих самых тиксах.
По Modbus получаем такие ворды:
1) 19050
2) 36219
3) 15165
4) 2267
После преобразования 4-х вордов в LWord получаем значение: 638168907755768426
Если прогнать его через онлайн конвертер Ticks -> Date_and_time, то время и дата отображаются корректно. Мне нужно понять как можно реализовать эту конвертацию в Codesys
Да, извиняюсь /10000 это преобразование в миллисекунды
https://learn.microsoft.com/ru-ru/do...ew=netcore-3.1
Datetime dateFromTicks = new DateTime(ticks);
Только в CodeSys время если не ошибаюсь в UnixUTC и там вроде онли секунды.
По идее вам надо свои полученные тики привести к секундам и собственно вы получите Utix Time и делайте с этим что хотите.
Последний раз редактировалось melky; 12.04.2023 в 10:17.
Да, я тоже так понял что вроде только секунды, но есть библиотека Codesys-овская "Time and Date", там можно вроде как преобразовывать Ticks to Seconds. Вот только функция преобразования ест только UDint, в который такое огромное число ну никак не лезет(
Спасибо, будем пробовать
https://www.datetimetoticks-converter.com/Код:PROGRAM PLC_PRG VAR uliTicks: ULINT := 638168907755768426; uliFromTicksToUnixTimeOffset: ULINT := 621355968000000000; // https://stackoverflow.com/a/72567540 dtDateAndTime: DT; END_VAR // т.к один тик - это 100 наносекунд (10^-7 секунд), то для конверсии в DT переводим в секунды dtDateAndTime := TO_DT( (uliTicks - uliFromTicksToUnixTimeOffset) / 10000000 );
2023-04-12_10-39-39.png 2023-04-12_10-39-51.png
СODESYS V3.5: Repository Archive V3.5 SP4 (необходим для старых СПК) / Раздел CDS V3.5 на сайте
Форум: Вопросы и ответы / Визуализация / Настройка обмена с другими устройствами
Web-панель ВП110 / Modbus-индикатор СМИ2-М
Telegram: @JuneSmellsLikeBlood | e-mail: e.kislov@owen.ru | oscat.ru | Как обратиться в техподдержку?
Как отлаживать ошибки | Отладка проектов в CODESYS V3.5 | XY problem | Как правильно задавать вопросы | AnyDesk
Премного благодарен. Заработало!)