В разделе была рассмотрена синхронизация проектов на этапе разработки.Блок SyncMan из библиотеки paSync (менеджер синхронизации для синхронизирующихся блоков) выполняет синхронизацию проектов во время исполнения по протоколу OPC UA.
Синхронизация исполняемых проектов осуществляется по протоколу OPC UA.
Блок SyncMan является модифицированным блоком OPC UA-клиента (блок OpcUAClient из библиотеки paOpcUA), реализующим одну подписку к серверу.
Каждый ПЛК, программируемый в Полигон, является OPC UA-сервером, так как Отладчик среды подключается к контроллеру как OPC UA-клиент. Преднастроенный OPC UA-сервер (блок OpcUAServer из библиотеки paOpcUA) добавляется автоматически при создании модуля из шаблона Модуль с отладчиком для контроллера в месте работы Фон, программа Debug.
Подробно реализация протокола OPC UA в среде Полигон описана в документе Обмен с верхним уровнем. Библиотека paOpcUA.
Далее рассмотрена синхронизация программ в контроллерах на основе проекта, созданного в разделе. Для настройки следует:
Добавить на страницу таймера любого из дублированных модулей пару блоков из библиотеки paSync. Убедиться, что на аналогичной странице второго модуля изменения дублировались.
Страница модуля Страница «соседнего» модуля На любую страницу в месте работы Фон добавить блок SyncMan.
На входы блока lip, lprt, rip, rprt подать SQL-запросы к свойствам модуля. Примеры SQL-запросов приведены в разделе. В данном примере вход fnum = 0.
В данном примере блок SyncMan будет подключаться к OPC UA-серверу отладчика. При необходимости можно создать отдельный OPC UA-сервер, выделенный для синхронизации проектов.
Настройка OPC UA-сервера и SyncMan В данном примере в качестве «соседнего» контроллера будет выступать виртуальный контроллер.
Свойства модуля Свойства «соседнего» модуля Запустить программы на обоих контроллерах.
У блоков OPC UA-серверов в обоих модулях отобразится активное подключение клиента РА – блока SyncMan.
OPC UA-сервер. Подписка SyncMan «соседнего» контроллера После запуска входы sync блоков SyncMan в обоих модулях равны 0. Синхронизации не происходит.
Задать в одном из модулей sync = 1 – данный контроллер станет ведомым. Его блоки будут синхронизироваться с соответствующими блоками ведущего контроллера.
На выходе блока svld = 1 – синхронизация работает.
SyncMan. Синхронизация включена – этот контроллер ведомый Задать триггер на странице ведущего контроллера.
Изменение выходов блоков со стороны ведущего контроллера Проверить, что блок триггера на странице ведомого контроллера синхронизировался с блоком ведущего.
Синхронизация блока ведомого контроллера
Если попытаться сбросить значение на выходе триггера у ведомого контроллера, подав 1 на вход r, – выход не сбросится.

Помимо блоков с поддержкой синхронизации можно синхронизировать отдельные входы/выходы в модулях. Для этого следует добавить необходимые входы/выходы в раздел Данные внутри блока SyncMan.
См. описание синхронизации объектов данных из раздела Данные в разделе.
Добавить объект данных в раздел можно одним из следующих способов:
Открыть на одной странице блок SyncMan, на другой странице блок с входом/выходом, который необходимо добавить. Выделить вход/выход и с нажатым Ctrl перетащить его на блок SyncMan. Отпустить, выбрать команду Добавить.
Открыть блок SyncMan в дереве (со страницы это проще всего сделать командой Показать в дереве), раскрыть его. Перетащить вход/выход в раздел Данные, выбрать команду Добавить.