Необходимо программно считывать показания аппаратных часов реального времени.SysLibRTC не работает.При использовании SysLibTime
корректное время появляется один раз, после чего часы "стоят"(меняются только микросекунды).Как быть?
Serhy
Вид для печати
Необходимо программно считывать показания аппаратных часов реального времени.SysLibRTC не работает.При использовании SysLibTime
корректное время появляется один раз, после чего часы "стоят"(меняются только микросекунды).Как быть?
Serhy
Обратите внимание что переменная SystemTime имеет тип VAR_IN_OUT и обращаться к ней нужно через указатели.
"...Обратите внимание, что переменные вход-выход (VAR_IN_OUT) передаются в экземпляр функцио-
нального блока через указатели. Поэтому таким переменным нельзя присваивать константы при вызове...".
Должно все работать.
Для корректной работы SysLibTime, если вы хотите считать данные, то надо обнулить структуру, передаваемую ФБ, иначе будет происходить запись! Это описано в документации.
пример простейший можно? что-то в доке написано как-то..... да и пример из доки у меня не заработал.
Пожалуйста:
FUNCTION_BLOCK DateAndTimeStr
...
VAR_OUTPUT
DateStr: STRING;
...
END_VAR
VAR
CTimeEX: CurTimeEx;
SystemTime: SysTime64;
TimeDate: SystemTimeDate;
StrTemp1: STRING;
StrTemp0: STRING;
END_VAR
(* получение системного времени *)
LD 0
ST TimeDate.Milliseconds
ST TimeDate.Second
ST TimeDate.Minute
ST TimeDate.Hour
ST TimeDate.Day
ST TimeDate.DayOfWeek
ST TimeDate.Month
ST TimeDate.Year
ST SystemTime.ulLow
ST SystemTime.ulHigh
CAL CTimeEX(SystemTime:=SystemTime, TimeDate:=TimeDate)
(* подготовка строки "дата" в формате DD Month YYYY (16) *)
LD TimeDate.Year
INT_TO_STRING
ST StrTemp1
LD DateFormat
(* вывод названия месяца *)
LD TimeDate.Month
SUB 1
MUX ' января ', ' февр. ', ' марта ', ' апреля ', ' мая ', ' июня ', ' июля ', ' авг. ', ' сент. ', ' окт. ', ' ноября ', ' дек. '
CONCAT StrTemp1
ST StrTemp1
LD TimeDate.Day
INT_TO_STRING
INSERT '0', 0
RIGHT 2
CONCAT StrTemp1
ST DateStr
ну и т.д. для времени.
Удачи.
В примере выше время конвертируется в строку.
А как перевести полученные INT-овые дату и время в формат DATE_AND_TIME (в секундах)?
Время-то таким образом переводить можно. А вот как перевести дату? Нет чёткого алгоритма, на сколько умножать, например, месяцы. Потому что в месяце может быть разное количество дней.
Или, может быть, кто-то подскажет другой способ получения текущих даты/времени в секундах от 01/01/1970.
яндекс поможет, существуюет стандартный алгоритм