Просмотр полной версии : DATE_AND_TIME и прочие вопросы по времени
1. Скажите, можно ли вычитать друг из друга переменные типа date_and_time?
2. Как записать в такую переменную текущее системное значение даты и времени?
Спасибо.
lara197a
21.11.2015, 15:59
Как-то так:
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,conca t('-',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);
Дальше дело техники. Если кому интересно - могу скинуть управление ПРкой для освещения в квартире.
Валенок, спасибо за наводку! Так и сделал, всё работает отлично!
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,conca t('-',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)?
Всё, разобрался, только руками :)
Можно оживить тему?
Мне нужно отобразить время запуска и время работы программы.
Делаю это так:
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 - время работы (тикает, как положено).
На визуализации же вижу и StartTime, WorkTime тикают и показывают текущее реальное время.
Где я мог ошибиться и сделать что-то не так?
Евгений Кислов
10.09.2016, 08:38
Вероятно, вы столкнулись с этим:
http://www.owen.ru/forum/showthread.php?t=24638
Спасибо. Обновился до CODESYS v3.5 SP7 Patch 4 и всё заработало как надо.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot