Вопрос: для получения системного времени контроллеров ОВЕН в коде программы мы используем узел OwenRTC в дереве проекта.
Но для виртуального контроллера CODESYS Control Win V3 (и для контроллеров других производителей) данный узел недоступен.
Как получить системное время в этом случае?
Ответ: можно воспользоваться библиотекой SysTimeRtc. Ее потребуется добавить в Менеджер библиотек вашего проекта:
SysTimeRtc.png
- функция SysTimeRtcGet позволяет получить системное время контроллера;
- функция SysTimeRtcGetTimezone позволяет получить информацию о его часовом поясе (поддерживается не во всех контроллеров; для CODESYS Control Win V3 - поддерживается).
Пример функции-обертки для получения системного времени, которую вы можете создать в своем проекте:
Код:
// Функция для получения системного времени
FUNCTION GetSystemDT : DT
VAR_INPUT
// Установите TRUE, если ваш контроллер не поддерживает функцию SysTimeRtcGetTimezone...
xUseManuaTimeZonelOffset: BOOL := FALSE;
// ...и задайте смещение для вашего часового пояса сами ( в минутах); например: 180 для UTC+3
iTimeZoneOffsetInMinutes: INT(INT#-12*60..INT#14*60) := 0;
END_VAR
VAR
stTimeZone: SysTimeRtc.TimezoneInformation;
dwErrorCode: DWORD;
END_VAR
IF NOT(xUseManuaTimeZonelOffset) THEN
dwErrorCode := SysTimeRtc.SysTimeRtcGetTimezone(stTimeZone);
iTimeZoneOffsetInMinutes := -1 * stTimeZone.iBias;
END_IF
{warning disable C0196}
GetSystemDT := TO_DT(SysTimeRtc.SysTimeRtcGet(dwErrorCode) + (iTimeZoneOffsetInMinutes * 60) );
{warning restore C0196}
2025-04-10_6-31-07.png 2025-04-10_6-30-50.png