У меня так и сделано:
Код:
VAR
timedate: SystemTimeDate;
systime: SysTime64;
GetTime: CurTimeEx;
END_VAR
SysMemSet(ADR(systime), 0, SIZEOF(systime));
SysMemSet(ADR(timedate), 0, SIZEOF(timedate));
GetTime(SystemTime := systime, TimeDate := timedate);
Пробовал и без выпендрёжа задавая нули напрямую как в примере (timedate.Hour := 0) — то же самое.
Значения смотрю в собственной проге, которая читает данные по модбасу с периодичностью 50 (пятьдесят) мс. Никакие посредники не мешаются, т.к. передаваемое тем же способом и в тех же ответах значение TIME() идёт равномерно.