Синхронизация модулей. Менеджер синхронизации (SyncMan)

В разделе была рассмотрена синхронизация проектов на этапе разработки.Блок SyncMan из библиотеки paSync (менеджер синхронизации для синхронизирующихся блоков) выполняет синхронизацию проектов во время исполнения по протоколу OPC UA.

Синхронизация исполняемых проектов осуществляется по протоколу OPC UA.

Блок SyncMan является модифицированным блоком OPC UA-клиента (блок OpcUAClient из библиотеки paOpcUA), реализующим одну подписку к серверу.

Каждый ПЛК, программируемый в Полигон, является OPC UA-сервером, так как Отладчик среды подключается к контроллеру как OPC UA-клиент. Преднастроенный OPC UA-сервер (блок OpcUAServer из библиотеки paOpcUA) добавляется автоматически при создании модуля из шаблона Модуль с отладчиком для контроллера в месте работы Фон, программа Debug.

Подробно реализация протокола OPC UA в среде Полигон описана в документе Обмен с верхним уровнем. Библиотека paOpcUA.

Далее рассмотрена синхронизация программ в контроллерах на основе проекта, созданного в разделе. Для настройки следует:

  1. Добавить на страницу таймера любого из дублированных модулей пару блоков из библиотеки paSync. Убедиться, что на аналогичной странице второго модуля изменения дублировались.

    Graphic
    Страница модуля
    Graphic
    Страница «соседнего» модуля
  2. На любую страницу в месте работы Фон добавить блок SyncMan.

  3. На входы блока lip, lprt, rip, rprt подать SQL-запросы к свойствам модуля. Примеры SQL-запросов приведены в разделе. В данном примере вход fnum = 0.

    В данном примере блок SyncMan будет подключаться к OPC UA-серверу отладчика. При необходимости можно создать отдельный OPC UA-сервер, выделенный для синхронизации проектов.

    Graphic
    Настройка OPC UA-сервера и SyncMan

    В данном примере в качестве «соседнего» контроллера будет выступать виртуальный контроллер.

    Graphic
    Свойства модуля
    Graphic
    Свойства «соседнего» модуля
  4. Запустить программы на обоих контроллерах.

    У блоков OPC UA-серверов в обоих модулях отобразится активное подключение клиента РА – блока SyncMan.

    Graphic
    OPC UA-сервер. Подписка SyncMan «соседнего» контроллера

    После запуска входы sync блоков SyncMan в обоих модулях равны 0. Синхронизации не происходит.

  5. Задать в одном из модулей sync = 1 – данный контроллер станет ведомым. Его блоки будут синхронизироваться с соответствующими блоками ведущего контроллера.

    На выходе блока svld = 1 – синхронизация работает.

    Graphic
    SyncMan. Синхронизация включена – этот контроллер ведомый
  6. Задать триггер на странице ведущего контроллера.

    Graphic
    Изменение выходов блоков со стороны ведущего контроллера
  7. Проверить, что блок триггера на странице ведомого контроллера синхронизировался с блоком ведущего.

    Graphic
    Синхронизация блока ведомого контроллера

Если попытаться сбросить значение на выходе триггера у ведомого контроллера, подав 1 на вход r, – выход не сбросится.

Graphic
Изменение со стороны ведомого контроллера не принимается

Помимо блоков с поддержкой синхронизации можно синхронизировать отдельные входы/выходы в модулях. Для этого следует добавить необходимые входы/выходы в раздел Данные внутри блока SyncMan.

См. описание синхронизации объектов данных из раздела Данные в разделе.

Добавить объект данных в раздел можно одним из следующих способов:

  1. Открыть на одной странице блок SyncMan, на другой странице блок с входом/выходом, который необходимо добавить. Выделить вход/выход и с нажатым Ctrl перетащить его на блок SyncMan. Отпустить, выбрать команду Добавить.

  2. Открыть блок SyncMan в дереве (со страницы это проще всего сделать командой Показать в дереве), раскрыть его. Перетащить вход/выход в раздел Данные, выбрать команду Добавить.