PDA

Просмотр полной версии : DATE_AND_TIME и прочие вопросы по времени



vnkorol
21.11.2015, 15:32
1. Скажите, можно ли вычитать друг из друга переменные типа date_and_time?
2. Как записать в такую переменную текущее системное значение даты и времени?

Спасибо.

lara197a
21.11.2015, 15:59
Как-то так:
http://www.codesys.ru/docs/TimeExperience.pdf

vnkorol
21.11.2015, 19:43
Мануал толковый, но не нашёл ответов.

Валенок
21.11.2015, 20:28
А как определили что толковый ?

1.Можно, но рез-т - TIME; //что естественно коли читали толковый документ

2.Способов много:

2.1. Надыбать формул и вычислить. В толковом документе - есть.
2.2. Надыбать функцию и применить.
2.3. Не парить моск и заставить пахать германский трактор через строки
2.4 ..

vnkorol
22.11.2015, 09:12
Валенок, спасибо за наводку! Так и сделал, всё работает отлично!




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);






Дальше дело техники. Если кому интересно - могу скинуть управление ПРкой для освещения в квартире.

capzap
22.11.2015, 09:14
Валенок, спасибо за наводку! Так и сделал, всё работает отлично!




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);






Дальше дело техники. Если кому интересно - могу скинуть управление ПРкой для освещения в квартире.

вместе с квартирой?

vnkorol
22.11.2015, 10:31
вместе с квартирой?

в смысле? проект? да, могу с квартирой, только он еще до конца не доведен...

vnkorol
22.11.2015, 13:34
Народ, а еще вопрос - с DT# можно в визуализации выдернуть значения, например “%t[ddd MMM dd.MM.yyyy HH:mm:ss]”.

А как вытащить данные в нормальном виде HH:mm:ss из T# (TIME)?

Всё, разобрался, только руками :)

Selya
09.09.2016, 14:30
Можно оживить тему?

Мне нужно отобразить время запуска и время работы программы.
Делаю это так:


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

Selya
12.09.2016, 15:58
Спасибо. Обновился до CODESYS v3.5 SP7 Patch 4 и всё заработало как надо.