Функциональный блок TIME_FROM_SERVER применяется для получения текущего времени удаленного устройства.
Входные параметры.
Название
Тип данных
Описание
RUN
BOOLEAN
RUN=TRUE - выполнить блок;
RUN=FALSE - не выполнять.
ID_DRV
INTEGER
1 - время запрашивается с удаленного NTP-сервера, на мастер-модуле должна быть запущена задача связи NTP.
2 - время поступает с удаленного мастер-модуля, работающего по протоколу МЭК-104 в режиме master, на принимающем устройстве должна быть запущена задача связи МЭК-104 Slave.
PARAM
Ссылка
Если ID_DRV=1 (запрос времени с NTP-сервера), на вход PARAM передается строка с IP-адресом удаленного NTP-сервера в формате Ipv4. Если ID_DRV=2, то на вход PARAM подается порт задачи МЭК-104. В иных случаях вход PARAM игнорируется.
Выходные параметры.
Название
Тип данных
Описание
UTC_MSEC
DOOBLE
Выводится полученное от удаленного устройства время в формате UTC.
FAULT
INTEGER
Коды завершения операции:
0 – выполнено успешно, ошибок нет;
1 – ошибка выделения памяти (некорректные параметры);
2 – превышено время ожидания ответа;
3 – системная ошибка при работе с портом;
4 – ошибка инициализации задачи связи;
5 – выполняется запрос;
6 – ошибка принятых данных;
7 – внутренняя ошибка;
8 – локальные часы.
Алгоритм получения времени с NTP-сервера.
Установите вход ID_DRV=1, а на вход PARAM передайте строку с IP-адресом удаленного NTP-сервера в формате Ipv4.
В дереве конфигурации среды разработки перейдите в раздел «Внешние коммуникации → NTP», включите передачу данных по протоколу NTP, выберите режим работы «Клиент» и укажите время ожидания ответа и время между запросами (периодичность) в миллисекундах. Подробное описание приведено в разделе «Задачи связи NTP» документа «Unimod PRO 2. Руководство пользователя».
Для запуска блока установите вход RUN=TRUE.
При первом запуске блока запускается задача связи NTP, в рамках которой на NTP-сервер по указанному IP-адресу отправляется первый запрос, до получения первого ответа выход FAULT= 5 (выполняется запрос, ни одного значения времени не получено). После получения первого ответа, значение времени в формате UTC выводится на выход UTC_MSEC функционального блока.
После этого, задача связи NTP продолжает выполняться независимо от состояния блока TIME_FROM_SERVER и в автоматическом режиме с заданной в конфигурации периодичностью запрашивать текущее время с NTP-сервера. Последнее полученное время сохраняется в памяти контроллера, и будет выводится на выход UTC_MSEC блока TIME_FROM_SERVER при запущенном состоянии (RUN=TRUE).
Если выход FAULT=7 → от сервера поступил ответ-исключение, значит сервер не может ответить на запрос из-за своего закрытого для доступа (закрытый сервер) или иного нестандартного состояния. При этом необходимо сменить IP-адрес сервера и перезапустить функциональный блок.
Если выход FAULT=8 → NTP-сервер не синхронизируется с более точным источником времени (например, с GPS-приемником) и передает время по своим внутренним (локальным) часам.
Алгоритм получения времени от мастер-модуля по протоколу МЭК-104.
В данном случае текущее устройство не запрашивается время с удаленного мастер-модуля, а ожидает его поступление от удаленного мастер-модуля.
Установите вход ID_DRV=2, вход PARAM не используется.
В дереве конфигурации среды разработки перейдите в раздел «Внешние коммуникации → МЭК-104 (Slave)», добавьте задачу связи и настройте ее параметры. Подробнее про добавление и настройку задачи связи МЭК-104 в разделе «Задачи связи МЭК-104» документа «Unimod PRO 2. Руководство пользователя».
Для запуска блока установите вход RUN=TRUE. На этом настройка блока завершена. На выход UTC_MSEC будет выводится время, полученное в запросе от удаленного мастер-модуля по команде синхронизации часов (идентификатор типа 103).
При этом на удаленном мастер-модуле должна быть запущена задача связи МЭК-104 в режиме Master, в рамках которой на Slave-устройства будут отправляться запросы с текущим временем.
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.TIME_FROM_SERVER(RUN, ID_DRV, PARAM);
//чтение полученного времени в формате UTC (в миллисекундах)