1. Скажите, можно ли вычитать друг из друга переменные типа date_and_time?
2. Как записать в такую переменную текущее системное значение даты и времени?
Спасибо.
Вид для печати
1. Скажите, можно ли вычитать друг из друга переменные типа date_and_time?
2. Как записать в такую переменную текущее системное значение даты и времени?
Спасибо.
Как-то так:
http://www.codesys.ru/docs/TimeExperience.pdf
Мануал толковый, но не нашёл ответов.
А как определили что толковый ?
1.Можно, но рез-т - TIME; //что естественно коли читали толковый документ
2.Способов много:
2.1. Надыбать формул и вычислить. В толковом документе - есть.
2.2. Надыбать функцию и применить.
2.3. Не парить моск и заставить пахать германский трактор через строки
2.4 ..
Валенок, спасибо за наводку! Так и сделал, всё работает отлично!
Код:
VAR
cur_datetime_dt:DT; // текущее время в формате DT
cur_datetime_str:STRING; // текущее время в формате
TIME_NOW: CurTimeEx;
YEAR,MONTH,DAY,HOUR,MINUTE,SEC:UINT;
MONTH_S,DAY_S,HOUR_S,MIN_S,SEC_S:STRING(2);
YEAR_S:STRING(4);
SystemTime: SysTime64;
TimeDate: SystemTimeDate;
END_VAR
// получаем текущее время и дату в формате DT
TIME_NOW(SystemTime:=SystemTime , TimeDate:=TimeDate );
YEAR:=TimeDate.Year;
MONTH:=TimeDate.Month;
DAY:=TimeDate.Day;
HOUR:=TimeDate.Hour;
MINUTE:=TimeDate.Minute;
SEC:=TimeDate.Second;
YEAR_S:=UINT_TO_STRING(YEAR);
MONTH_S:=UINT_TO_STRING(MONTH);
DAY_S:=UINT_TO_STRING(DAY);
HOUR_S:=UINT_TO_STRING(HOUR);
MIN_S:=UINT_TO_STRING(MINUTE);
SEC_S:=UINT_TO_STRING(SEC);
cur_datetime_str:=concat('dt#',concat(year_s,concat('-',concat(month_s,concat('-',concat(day_s,concat('-',concat(hour_s,concat(':',concat(min_s,concat(':',sec_s)))))))))));
// 2015-04-19-12:59:01
cur_datetime_dt := STRING_TO_DT(cur_datetime_str);
Дальше дело техники. Если кому интересно - могу скинуть управление ПРкой для освещения в квартире.
Народ, а еще вопрос - с DT# можно в визуализации выдернуть значения, например “%t[ddd MMM dd.MM.yyyy HH:mm:ss]”.
А как вытащить данные в нормальном виде HH:mm:ss из T# (TIME)?
Всё, разобрался, только руками :)
Можно оживить тему?
Мне нужно отобразить время запуска и время работы программы.
Делаю это так:
В визуализации отображаю переменные StartTime и WorkTime.PHP код:PROGRAM PLC_PRG
VAR
RTC: Real_Time_Clock; // FB из библиотеки SPK Tools 1.3.0
Year, Month, Day, Hour, Minute, Second: UINT;
DT_STRING: STRING;
START: BOOL:= FALSE;
StartTime: DATE_AND_TIME;
NOW: DATE_AND_TIME;
WorkTime: TIME;
END_VAR
IF NOT START THEN // первый запуск
RTC(
Year=> Year,
Month=> Month,
Day=> Day,
Hour=> Hour,
Minute=> Minute,
Second=> Second,
w_str_time=> ,
w_str_dateM=> );
DT_STRING:= 'DT#';
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Year));
DT_STRING:= CONCAT(DT_STRING, '-');
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Month));
DT_STRING:= CONCAT(DT_STRING, '-');
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Day));
DT_STRING:= CONCAT(DT_STRING, '-');
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Hour));
DT_STRING:= CONCAT(DT_STRING, ':');
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Minute));
DT_STRING:= CONCAT(DT_STRING, ':');
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Second));
StartTime:= STRING_TO_DT(DT_STRING);
START:= TRUE;
END_IF;
RTC(
Year=> Year,
Month=> Month,
Day=> Day,
Hour=> Hour,
Minute=> Minute,
Second=> Second,
w_str_time=> ,
w_str_dateM=> );
DT_STRING:= 'DT#';
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Year));
DT_STRING:= CONCAT(DT_STRING, '-');
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Month));
DT_STRING:= CONCAT(DT_STRING, '-');
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Day));
DT_STRING:= CONCAT(DT_STRING, '-');
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Hour));
DT_STRING:= CONCAT(DT_STRING, ':');
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Minute));
DT_STRING:= CONCAT(DT_STRING, ':');
DT_STRING:= CONCAT(DT_STRING, UINT_TO_STRING(Second));
NOW:= STRING_TO_DT(DT_STRING);
WorkTime:= NOW - StartTime;
В отладчике вижу то, что надо: StartTime - время запуска (не изменяется), WorkTime - время работы (тикает, как положено).
На визуализации же вижу и StartTime, WorkTime тикают и показывают текущее реальное время.
Где я мог ошибиться и сделать что-то не так?
Вероятно, вы столкнулись с этим:
http://www.owen.ru/forum/showthread.php?t=24638
Спасибо. Обновился до CODESYS v3.5 SP7 Patch 4 и всё заработало как надо.
Подскажите, какой самый простой и локаничный способ записать в String текущую дату и время в формате по типу "18:26 17.02.2025"?
а если не ипользую?
Доброе утро. Я прописал
dtRtcGet := TO_DT(SysTimeRtc.SysTimeRtcGet);
на что CODESYS выдаёт ошибку
"Невозможно конвертировать тип 'SYSTIMERTCGET(systimertc, 3.5.20.0 (system))' в тип 'ANY'".
Что я делаю не так?
Тут смотрите, всю страницу
https://owen.ru/forum/showthread.php...l=1#post455664
Разобрался. В скобках после SysTimeRtcGet обязательно должна быть указана переменная кода ошибки типа DWORD. Даже если она не используется.