Среда разработки Unimod PRO 2 (версия 2.3.40)
 Руководство по программированию
×

TIME_SYNC - синхронизация времени


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