PDA

Просмотр полной версии : SysLibTime выдает неправильное время.



Barabus
09.01.2016, 15:35
ПЛК110

Код следующий:

Объявление блока:

FUNCTION_BLOCK GET_SYSTEM_TIME_FB
VAR_OUTPUT
Milliseconds : UINT;
Seconds : UINT;
Minutes : UINT;
Hours : UINT;

DayOfWeek : UINT;
Day : UINT;
Month : UINT;
Year : UINT;
END_VAR
VAR
TimeAndDate: SystemTimeDate;
SysTime: SysTime64;
GetTime: CurTimeEx;
END_VAR

Тело блока:


TimeAndDate.Day :=0;
TimeAndDate.DayOfWeek :=0;
TimeAndDate.dwHighMsec :=0;
TimeAndDate.dwLowMSecs :=0;
TimeAndDate.Milliseconds :=0;
TimeAndDate.Second :=0;
TimeAndDate.Hour :=0;
TimeAndDate.Year :=0;
TimeAndDate.Month :=0;
SysTime.ulHigh :=0;
SysTime.ulLow :=0;

GetTime (SystemTime := SysTime , TimeDate := TimeAndDate);

Milliseconds := TimeAndDate.Milliseconds;
Seconds := TimeAndDate.Second;
Minutes := TimeAndDate.Minute;
Hours := TimeAndDate.Hour;

DayOfWeek := TimeAndDate.DayOfWeek;
Day := TimeAndDate.Day;
Month := TimeAndDate.Month;
Year := TimeAndDate.Year;

При работе дает время, которое со старта набежало что-то около 29 минут, которые даже близко не соответствуют дате и времени, выставленным для ПЛК. При этом кроме минут на выходе ничего не отображается.

GetTime в PLC браузере отображает правильное время.

Почему CurTimeEx не дает правильные данные? Где я ошибся?

Валенок
09.01.2016, 16:01
Где я ошибся?
В вызове своего блока.
Вижу по форме кофейной гущи.

Barabus
09.01.2016, 16:30
Не, я разобрался. Пропустил инициализацию

TimeAndDate.Minute :=0;
Теперь все работает как надо.

Есть один забавный момент. Системное время, устанавливаемое и читаемое SysLibTime, не соответствует времени, устанавливаемому в ПЛК через браузер. Это нормально или я опять что-то упускаю?

Во всяком случае мой некорректный блок, перезаписавший значение минут и обнуливший все прочие величины, на вышеуказанное время не повлиял.

Странно это.

Отбой. Все заработало правильно, часы синхронны.