Все переменные типа даты, времени, промежутков, длительности и т. п. хранятся в ПЛК как 32-х разрядные целые, беззнаковые.
TIME
Длительность или промежуток времени в миллисекундах. Аналогом в C# можно считать TimeSpan.
Формат:
:= T#521h33m23s231ms;
:= TIME#521h33m23s231ms;
Время в строку: TIME_TO_STRING(T#12ms);
Результат типа STRING: 'T#12ms'
Строка во время: STRING_TO_TIME('T#127ms');
Результат типа TIME: T#127ms
DATE
Формат:
:= D#1993-06-12;
:= DATE#1993-06-12;
Дата в строку: DATE_TO_STRING(D#2002-08-18);
Результат типа STRING: 'D#2002-08-18'
DATE_AND_TIME или DT
Дата и время — как число секунд, прошедших с 1 января 1970 года. В C# можно использовать DateTime, не забывая, что в ST дата-время начинаются в Unix-стиле с 1970 года, а в C# с нулевого года.
Формат:
:= DT#1993-06-12-15:36:55;
:= DATE_AND_TIME#1993-06-12-15:36:55;
Дата-время в строку: DT_TO_STRING(DT#1998-02-13-14:20);
Результат типа STRING: 'DT#1998-02-13-14:20'
Несложно избавиться в строке от префиксов T#, DT#, TOD# и т. п. Функция DELETE входит в стандартную библиотеку STANDART.lib. Удаляем слева n-символов:
str := DELETE(str, 2, 1); (* T#... TIME_TO_STRING *) str := DELETE(str, 3, 1); (* DT#... DT_TO_STRING *) str := DELETE(str, 4, 1); (* TOD#... TOD_TO_STRING *)
TIME_OF_DAY или TOD
Формат:
:= TOD#12:34:56.123;
:= TIME_OF_DAY#12:34:56.123;
Время дня в строку: TOD_TO_STRING(TOD#14:01:05.123);
Результат типа STRING: 'TOD#14:01:05.123'
FILETIME (T_FILETIME)
Структура из двух DWORD (udint) полей. 64-х разрядное целое, содержит число 100-наносекундных интервалов с 1 января 1601 года (UTC). Для вменяемой работы с этим форматом (распаковки), существуют вспомогательные функции FILETIME_TO_DT, FILETIME_TO_SYSTEMTIME, и в обратную сторону [...]_TO_FILETIME.
SYSTEMTIME (TIMESTRUCT)
Удобная структура с большим количеством удобных 16-разрядных полей типа WORD (uint):
- wYear — год, 1970..2106;
- wMonth — месяц, 1..12 (1 - январь, 2 - февраль и т. д);
- wDayOfWeek — день недели, 0..6 (0 - воскресенье (!), 1 - понедельник, ...);
- wDay — день месяца, 1..31;
- wHour — час, 0..23;
- wMinute — минуты, 0..59;
- wSecond — секунды, 0..59;
- wMilliseconds — миллисекунды, 0..999.
Существует функция для преобразования строки в системное время: STRING_TO_SYSTEMTIME( 'YYYY-MM-DD-hh:mm:ss.xxx' ). На выходе получаем TIMESTRUCT.
Формат входной строки жестко фиксирован: через разделители '-' и ':' должны быть введены все цифры, а недостающие — заменены нулями:
- YYYY — год,1601..9999;
- MM — месяц, 01..12;
- DD — день, 01..31;
- hh — час, 00..23;
- mm — минуты, 00..59;
- ss — секунды, 00..59;
- xxx — миллисекунды, 000..999.
Например:
ts := STRING_TO_SYSTEMTIME( '2012-01-30-05:12:09.567' );
Обновлено: 5 февраля 2017 г.
No comments
Post a Comment
Note: Only a member of this blog may post a comment.