PDA

Просмотр полной версии : Сравнение времени



Georgiy
20.02.2011, 15:44
Подскажите пожалуйста, новичку - можно ли оператором IF сравнивать дату и время, записанную в массиве (в виде dt#2011-02-20-18:00:00)с текущей датой и временем? Я не найду, как текущую дату и время можно получить одной строкой в таком же виде, как у меня в массиве, а есть только отдельно день, час, и т.д. (sys_t.Day:=0); :confused:

Николаев Андрей
20.02.2011, 17:09
Найдите пример... все встанет на места.
Я сравнивал день, если да, то часы и минуты.
Все по отдельности...

Georgiy
20.02.2011, 17:21
Андрей, спасибо, пытаюсь найти. :eek:

Николаев Андрей
21.02.2011, 01:50
Из собственного примера для вентиляции (была SCADA задействована и панель).
Определение времени включения\выключения вент. установки от часов.
Надо в Вашем проекте выполнить команду Импорт из меню Проект и указать путь к разархивированному файлу

Georgiy
21.02.2011, 19:01
Спасибо, Андрей. Я немного по-другому сформулирую вопрос: у меня есть массив данных в формате DATE_AND_TIME, (dt#2011-02-21-20:00:00) и я хочу сравнить текущее время (до секунды) с числом в массиве. Я пытаюсь оператором IF сравнить число в массиве с текущим. Вот и вопрос такой - не пойму как сравнить. (Надо брать и сравниваю отдельно текущий системный час с часом в моей константе, забитой в массиве, затем минуте, затем сек. или можно как-то иначе?). Дело в том, что на мое выражение "IF (sys_time.Hour) > massiv[sys_time.Hour]" мне выдается ошибка ( "невозможно преобразовать DT в UINT"). Не пойму в чем ошибаюсь....

Gans
23.02.2011, 08:40
Дело в том, что на мое выражение "IF (sys_time.Hour) > massiv[sys_time.Hour]" мне выдается ошибка ( "невозможно преобразовать DT в UINT"). Не пойму в чем ошибаюсь....
Попробуйте так:
sys_time.Hour > massiv[wdCounter].sys_time.Hour
где wdCounter - вордовская переменная указывающая на элемент массива
и не забываем что по умолчанию нумерация массива начинается с нуля.

drvlas
23.02.2011, 10:22
я хочу сравнить текущее время (до секунды) с числом в массиве
+1
Я тоже с этим столкнулся. Работать со структурами SystemTimeDate и SysTime64 научился, а вот преобразование данных из этих структур пока хромает.

Сделал специально примерчик, прилагаю, в котором беру время из часиков ПЛК и пробую его преобразовать из "человеко-ориентированного" в "програмно-ориентированный".
Я называю человеко-ориентированным форматом структуру, в которой есть отдельно данные по секундам, минутам и т.д. А для програмной обработки товарищу Georgiy понадобилось представление в виде DT (фактически, внутренее представление в КДС - DWORD).
Вот и пробуем.

Как я понял, структура SysTime64 - именно "програмно-ориентированная. Она ведет отсчет (микросекунды) в огромной 64-битной структуре. Причем отсчет ведется от включения питания ПЛК. Во всяком случае, у меня именно так получается, а нигде в чудесной документации по КДС я иного не нашел.
Эту структуру (в примере st64) в формат DT преобразовать легко, ибо она "одной крови" с DT - два DWORD и один DWORD.

А структура std, содержащая настоящее время от 1970 года - как ее красиво преобразовать в формат DT? В моем примерчике, в последней строке поставлен знак вопроса. Хотелось бы от знатоков получить строчку, которая идет за моим знаком вопроса. Или иные правки в моем примере.
Или - где читать, на худой конец :)

Спасибо!

Georgiy
23.02.2011, 19:21
Ребята, всем спасибо, разобрался.

drvlas
23.02.2011, 19:34
Ребята, всем спасибо, разобрался.

А в ответ рассказать?
Т.е. сравниваешь по частям (минуты-секунды) или уже знаешь, как из часиков ПЛК получать текущее время в DT?

Georgiy
06.03.2011, 20:41
Долго не мог ответить - времени небыло. Отвечаю своим получившимся фунциональным блоком. Я сначала делаю массив со всему днями года (мне так нужно), потом выбираю из массива сегодняшний день, определяю текущее время (в формате TOD), перевожу его в миллисекунды (DWORD) и беру выбранное из массива время. Тоже перевожу его в миллисекунды и сравниваю. Смотрите мой фунциональный блок.

drvlas
06.03.2011, 23:45
Ну, вариант, конечно. Сравниваются, по сути, TOD-константы, записанные в массив, с j - величиной, равной текущему TOD. Для сравнения константы переводятся в формат DWORD.

И все же, не понимаю, как же из системных часиков, (из sys_t в данном примере) получить время в DT-формате...

Игорь Петров
09.03.2011, 14:39
И все же, не понимаю, как же из системных часиков, (из sys_t в данном примере) получить время в DT-формате...
При наличии SysLibRtc просто функцией SysRtcGetTime.

Без нее труднее. Скачайте тут (http://www.prolog-plc.ru/docs/timeexp.zip) мои примеры. Там есть PackTime, PackDate и CONCAT_DATE_TOD.

drvlas
15.03.2011, 23:33
Спасибо!
Когда выпадет свободная минутка, буду вкуривать. Там на беглый взгляд мне не все ясно...