---
title: "Руководство пользователя Библиотека paSync"
product: "Полигон"
document_number: "№ 1-RU-139911-1.1"
version: "1.1"
language: "ru"
source: "https://docs.owen.ru/product/poligon/doc/1216"
pdf: "https://docs.owen.ru/download/pdf/FCewD.rp_biblioteka+pasync_1-ru-139911-1.1.pdf"
generated: "2026-10-16"
---

# Руководство пользователя Библиотека paSync

## Содержание

- [Используемые термины и сокращения](#topic-95952)
- [Введение](#topic-95953)
- [Общие сведения об организации резервирования в ОВЕН ПЛК210](#topic-95954)
  - [Аппаратное резервирование питания контроллера](#topic-95955)
  - [Программное резервирование контроллеров](#topic-95956)
- [Библиотека paSync](#topic-95957)
  - [Менеджер синхронизации (SyncMan)](#topic-95958)
  - [Определение ведущего (MasterSel)](#topic-95959)
- [Создание синхронизированных модулей](#topic-95960)
- [Синхронизация модулей. Менеджер синхронизации (SyncMan)](#topic-95961)
- [Определение ведущего контроллера (MasterSel)](#topic-95962)
  - [Пример реализации резервирования ПЛК с общими Мх210](#topic-95963)
  - [Пример реализации резервирования ПЛК с индивидуальными Мх210](#topic-95964)

<a id="topic-95952"></a>

## Используемые термины и сокращения

**Ведомый контроллер** – контроллер, который находится в «горячем» резерве и синхронизирует данные с ведущим контроллером.

**Ведущий контроллер** – контроллер, с которым синхронизируется ведомый контроллер. В зависимости от реализованной схемы резервирования ведущий контроллер может принимать на себя роль мастера для линейки модулей ввода/вывода, выдавать сигналы на каналы вывода на своем борту и т.д.

**Определение ведущего контроллера** или **переключение роли ведущего между контроллерами** – алгоритм выбора текущей роли контроллера: ведущий или ведомый. Может быть как автоматическим, так и ручным (по команде оператора).

**ОС** – операционная система.

**ЛКМ (ПКМ)** – левая (правая) кнопка мыши.

**ПЛК** – программируемый логический контроллер.

**Резервирование** (по ГОСТ 27.002-89) – способ обеспечения надежности объекта за счет использования дополнительных средств и (или) возможностей, избыточных по отношению к минимально необходимым для выполнения требуемых функций.

**Резервирование замещением** (по ГОСТ 27.002-89) или **100 % «горячее» резервирование** – резервирование, при котором функции основного элемента передаются резервному только после отказа основного элемента.

**Синхронизация данных** – устранение различий между двумя аналогичными наборами данных контроллеров посредством обмена информацией по выделенным линиям связи.

**Runtime (среда выполнения)** – вычислительное окружение, необходимое для выполнения компьютерной программы и доступное во время выполнения компьютерной программы.

**SQL** (**Structured Query Language**) – язык программирования для хранения и обработки информации в реляционной базе данных.

<a id="topic-95953"></a>

## Введение

Настоящее руководство описывает синхронизацию проектов и организацию резервирования для контроллеров ОВЕН, программируемых в среде **Полигон**. Подразумевается, что читатель обладает базовыми навыками работы с **Полигон**, поэтому общие вопросы (например, создание и загрузка проектов) в данном документе не рассматриваются – они подробно описаны в документах [Руководство по программированию. Библиотека paCore](https://owen.ru/product/polygon/documentation) и [Быстрый старт](https://owen.ru/product/polygon/documentation).

Библиотека <b>*paSync*</b> содержит функциональные блоки, которые нужны для синхронизации проектов и организации резервирования в среде **Полигон**. Данная библиотека доступна для работы при наличии соответствующей лицензии runtime (см. описание лицензионных пакетов [на странице среды разработки Полигон](https://owen.ru/product/polygon)).

Данный документ актуален для версии среды Полигон – **1994**, версии библиотеки <b>*paSync*</b> – **58** и выше.

<a id="topic-95954"></a>

## Общие сведения об организации резервирования в ОВЕН ПЛК210

ОВЕН ПЛК210 с исполнительной средой Полигон поддерживают:

- Горячее аппаратное резервирование питания контроллера – см. [раздел](#topic-95955);
- Горячее программное резервирование приложения пользователя – см. [раздел](#topic-95956).

<a id="topic-95955"></a>

### Аппаратное резервирование питания контроллера

В контроллерах ПЛК210 предусмотрено два порта для подключения источников питания **24 В**:

- **Порт 1** – основное питание;
- **Порт 2** – резервное питание.

Если напряжение основного питания падает ниже **9 В**, происходит переход на резервное питание.

При восстановлении работоспособности основного источника питания контроллер автоматически возвращается на питание от основного источника.

> [!NOTE]
> **Примечание.** Информацию о наличии питающего напряжения на портах контроллера можно получить с помощью блока <b>*210-Power*</b> из библиотеки <b>*paOwenIO*</b>. Также блок <b>*210-Power*</b> позволяет задать режим индикации светодиода **Батарея**  ![Батарейка](https://docs.owen.ru/book_img/1935/139851.png). Подробнее см. в документе [Работа с ОВЕН ПЛК. Библиотека paOwenIO](https://owen.ru/product/polygon/documentation).

<a id="topic-95956"></a>

### Программное резервирование контроллеров

Блоки из библиотеки <b>*paSync*</b> выполняют программное резервирование пользовательского приложения Полигон (см. описание библиотеки в [разделе](#topic-95957)).

Библиотека <b>*paSync*</b> доступна для постоянной работы при наличии соответствующей лицензии runtime контроллера (см. описание лицензионных пакетов [на странице среды разработки Полигон](https://owen.ru/product/polygon)).

Среда разработки **Полигон** предоставляет следующий функционал при организации резервирования контроллеров:

1. Дублирование (полное или частичное) пользовательских программ (модулей контроллеров в проекте Полигон) на стадии разработки.
2. Синхронизация данных дублированных программ контроллеров во время исполнения – блоков **\*\_**<b>*sync*</b> и данных в разделе блока <b>*SyncMan*</b> из библиотеки <b>*paSync*</b>.
3. Автоматическое переключение ролей контроллеров (ведущий/ведомый) – блок <b>*MasterSel*</b> из библиотеки <b>*paSync*</b>.
4. Ручное переключение ролей контроллеров (ведущий/ведомый) – блок <b>*MasterSel*</b> из библиотеки <b>*paSync*</b>.
5. Среда не ограничивает пользователя в создании собственного алгоритма переключения ролей контроллеров.

Варианты схем резервирования ОВЕН ПЛК с исполнительной средой **Полигон** практически не ограничены и могут модернизироваться в соответствии с требованиями конкретного автоматизируемого технологического объекта.

Примеры схем организации резервирования ОВЕН ПЛК с исполнительной средой **Полигон**:

![Схема резервирования контроллеров с общей линейкой модулей Мх210 нов](https://docs.owen.ru/book_img/1935/139850.png)

*Схема резервирования контроллеров с общей линейкой модулей Мх210*

![Схема резервирования контроллеров с индивидуальными линейками модулей Мх210 нов](https://docs.owen.ru/book_img/1935/139849.png)

*Схема резервирования контроллеров с индивидуальными линейками модулей Мх210* 

> [!NOTE]
> **Примечание.** Модификации резервированной пары контроллеров не обязательно должны совпадать.

> [!NOTE]
> **Примечание.** Режимы работы сетевых интерфейсов контроллера можно настроить в web-интерфейсе конфигурации (см. [Руководство по эксплуатации](https://owen.ru/product/plk210_polygon/documentation)).

На этапе разработки проекта осуществляется полное или частичное дублирование пользовательских программ контроллеров (см. пример настройки в [разделе](#topic-95960)).

После запуска дублированных программ на контроллерах следует определение ведущего и ведомого контроллера (ручное или автоматическое) с помощью готового алгоритма, который реализуется блоком <b>*MasterSel*</b> или алгоритмом пользователя.

Оба контроллера циклически выполняют пользовательское приложение.

Ведомый контроллер начинает работать в режиме **OPC UA**-клиента (блок <b>*SyncMan*</b>) и оформляет подписку на данные (блоки **\*\_**<b>*sync*</b> и раздел блока <b>*SyncMan*</b>) **OPC UA**-сервера ведущего контроллера. Ведомый контроллер синхронизирует свои данные с данными ведущего контроллера (см. пример в [разделе](#topic-95961)).

Обмен диагностическими сигналами двух контроллеров можно организовать по двум изолированным интерфейсам **Ethernet** с помощью готового блока <b>*MasterSel*</b> (см. примеры настройки в [разделе](#topic-95962) ).

Условия переключения ведущего контроллера при использовании блока <b>*MasterSel*</b> описаны в справке среды Полигон и в [разделе](#topic-95959).

Алгоритм работы резервированной пары контроллеров при использовании блока <b>*MasterSel*</b>:

![Алгоритм работы резервированной пары контроллеров при использовании блока Master Sel](https://docs.owen.ru/book_img/1935/139848.png)

*Алгоритм работы резервированной пары контроллеров при использовании блока MasterSel*

Примеры настройки резервированной пары контроллеров при использовании блока <i>**MasterSel**</i> приведены в [разделе](#topic-95962).

<a id="topic-95957"></a>

## Библиотека paSync

Библиотека <b>*paSync*</b> обеспечивает синхронизацию данных между дублированными модулями контроллеров и организацию резервирования.

Один из контроллеров выбирается **ведущим** – с ним синхронизируется **ведомый** контроллер. Синхронизация сигналов во время работы контроллеров обеспечивается для блоков с поддержкой синхронизации из библиотеки <b>*paSync*</b>, которые реализуют базовые алгоритмы аналогично блокам из библиотек <b>*paCore*</b> и <b>*paControls*</b>. Работа данных блоков описана в справке среды и в этом документе не рассматривается.

Для добавления библиотеки <b>*paSync*</b> в проект следует:

1. Перейти в меню <b>*Окна/Проекты*</b>. В появившемся окне отобразится текущий проект и добавленные библиотеки.

   ![Добавление библиотеки pa Sync в проект](https://docs.owen.ru/book_img/1935/139847.png)

   <i>Добавление библиотеки **paSync** **в проект**</i>

2. Нажать кнопку <b>*Открыть*</b> и перейти в папку с файлами библиотеки, которую необходимо добавить.

3. В выпадающем списке выбрать тип файла <b>*Библиотека Полигон 2 (\*.*</b><b>*ll*</b><b>*2)*</b>.

   ![Добавление библиотеки pa Sync в проект (2)](https://docs.owen.ru/book_img/1935/139846.png)

   <i>Добавление библиотеки **paSync** **в проект**</i>

4. В окне появится файл библиотеки с расширением **.****ll****2**. Следует выбрать его и нажать <b>*Открыть*</b>.

   ![Добавление библиотеки pa Sync в проект (3)](https://docs.owen.ru/book_img/1935/139845.png)

   <i>Добавление библиотеки **paSync** **в проект**</i>

Добавленная библиотека отобразится в окне <b>*Проекты*</b>.

<a id="topic-95958"></a>

### Менеджер синхронизации (SyncMan)

Блок <b>*SyncMan*</b> обеспечивает синхронизацию данных между **ведущим** и **ведомым** контроллерами. В ведомом контроллере создается подписка на изменение данных от ведущего. Обмен происходит по протоколу **OPC UA**.

<b>*SyncMan*</b> основан на блоке <b>*OpcUAClient*</b> из библиотеки <b>*paOpcUA*</b>. Подробнее реализация протокола **OPC** **UA** в среде Полигон описана в документе [Обмен с верхним уровнем. Библиотека paOpcUA](https://owen.ru/product/polygon/documentation).

Данный блок можно разместить только в <b>*Фоне*</b>.

Данные, необходимые для синхронизации блоков **\*\_**<b>*sync*</b> библиотеки <b>*paSync*</b>, добавляются в подписку автоматически. Дополнительные входы/выходы, которыми необходимо обмениваться с сервером, нужно добавить в раздел <b>*Данные*</b> внутри блока <b>*SyncMan*</b>.

> [!NOTE]
> **Примечание.** Если блоки библиотеки <b>*paSync*</b> находятся внутри составных блоков, то допускается до **7 вложенностей**.

**Назначение входов и выходов SyncMan**

**Входы**

| Элемент | Описание |
| --- | --- |
| **enb** | Разрешение на работу блока |
| **sync** | Синхронизация:<br>**0** – выключена;<br>**1** – включена<br>**Примечание.** На данный вход можно подать инвертированный сигнал с выхода **L****\_****Master** блока [MasterSel](#topic-95959) или пользовательского блока, реализующего алгоритм определения ведущего контроллера. |
| **wait** | Таймаут ожидания ответа от сервера, мс (константный) |
| **lip** | Локальный IP адрес (константный) |
| **lprt** | Локальный порт (константный) |
| **sdr** | Сетевой стек, для ПЛК ОВЕН **"/"** (константный) |
| **rip** | IP адрес сервера (константный) |
| **rprt** | Порт сервера (константный) |
| **usr** | Логин для доступа к серверу (константный) |
| **psw** | Пароль для доступа к серверу (константный) |
| **prio** | Приоритет дополнительного потока (константный), в котором выполняется синхронизация. Обычно элемент задают выше других фоновых потоков, чтобы обеспечить максимальную скорость синхронизации:<br>**0** – отключает создание дополнительного потока (обмен идет в текущем фоновом потоке);<br>**1…47** – приоритет потока<br>**Примечание.** Максимально возможное значение приоритета для конкретной ОС контроллера можно определить с помощью блока <b>*ThreadMan*</b> из библиотеки <b>*paCore*</b>, раздел <b>*Системные*</b>. |
| **rst** | Сброс максимальных значений временных счетчиков: выходов **mwrk** и **mscan** |
| **fnum** | Максимальное количество подмененных во время отладки входов/выходов, которое можно синхронизировать:<br>**0** – отключает синхронизацию подмененных значений |
| **m_rbufs** | Вход для подключения блоков типа <b>*BufSupEx*</b> (циклический) |

**Выходы**

| Элемент | Описание |
| --- | --- |
| **sts** | Статус работы:<br>**0** – нет обмена;<br>**1** – обмен;<br>**2** – в резерве;<br>**>2** – переходное состояние |
| **svld** | Синхронизация работает |
| **sst** | Статус сервера в соответствии со спецификацией **OPC** **UA** (см. [**Part** **5 – 12.6** **ServerState**](https://reference.opcfoundation.org/Core/Part5/v105/docs/12.6)) |
| **ssl** | Дополнительный статус сервера **ServiceLevel** в соответствии со спецификацией **OPC** **UA** (см. [**Part** **4 –** **6.6.2.4.2** **ServiceLevel**](https://reference.opcfoundation.org/Core/Part4/v105/docs/6.6.2.4.2)) |
| **sid** | ID подписки |
| **ssn** | Номер уведомления подписки |
| **rcnt** | Количество принятых пакетов |
| **wcnt** | Количество отправленных пакетов |
| **prio** | Приоритет дополнительного потока (**0** – отключен) |
| **dsz** | Количество синхронизируемых данных (входов и выходов блоков **\*\_**<b>*sync*</b> и добавленных в раздел <b>*SyncMan*</b>) |
| **wrk** | Текущее время работы одного цикла потока синхронизации, мс |
| **mwrk** | Максимальное время работы одного цикла потока синхронизации, мс |
| **scan** | Текущее время получения всех изменившихся данных (входов и выходов) от соседнего контроллера, мс |
| **mscan** | Максимальное время получения всех изменившихся данных (входов и выходов) от соседнего контроллера, мс |
| **diag** | Диагностический счетчик (используется для контроля получения всех данных и расчета времени) |
| **fnumo** | Количество синхронизируемых подмененных во время отладки входов/выходов |

![Менеджер синхронизации дублированного контроллера (Sync Man)](https://docs.owen.ru/book_img/1935/139844.png)

*Менеджер синхронизации дублированного контроллера (SyncMan)*

Выходы функциональных блоков, добавленные в раздел <b>*Данные*</b>, передаются на сервер всегда в соответствии со свойствами (подробнее см. в описании блока <b>*OpcUAClient*</b> из библиотеки <b>*paOpcUA*</b>).

Входы функциональных блоков, добавленные в раздел <b>*Данные*</b>, читаются из сервера в соответствии со следующими правилами:

1. Если у входа есть свойство <b>*ID источника/приемника*</b>, то он читается из сервера всегда при наличии связи. Такие данные используются для двустороннего обмена между ведущим и ведомым независимо от текущей роли контроллера.
2. Если у входа нет свойства <b>*ID источника/приемника*</b>, то он читается из сервера только при включенной синхронизации (**sync = 1**). Такие данные используются для синхронизации вручную.

Для синхронизации параметров можно использовать блоки <b>*BufSupEx*</b>, подключенные к входам **m_rbufs** блока <b>*SyncMan*</b> (дополнительные входы добавляются командой <b>*Создать*</b>). Значения параметров блока <b>*BufSupEx*</b> синхронизируются только при **sync = 1**.

<a id="topic-95959"></a>

### Определение ведущего (MasterSel)

Блок <b>*MasterSel*</b> определяет роли **ведущий**/**ведомый** для двух контроллеров в резервированной конфигурации.

**Назначение входов и выходов MasterSel**

**Входы**

| Элемент | Описание |
| --- | --- |
| **me1** | Признак **ПЛК1** (**me****1 = 1** у **ПЛК1**). Под **ПЛК1** подразумевается тот контроллер, который должен становиться ведущим при неопределенных условиях (восстановление связи между двумя работающими контроллерами) |
| **ready** | Внешнее условие готовности контроллера (разрешение стать основным) |
| **init** | Запуск таймера на инициализацию |
| **master1** | Команда **ПЛК1** стать ведущим (внутри выделяется фронт с **0** на **1**) |
| **master2** | Команда **ПЛК2** стать ведущим (внутри выделяется фронт с **0** на **1**) |
| **tpila** | Таймер залипания пилы, мс |
| **trecon** | Таймер восстановления связи, мс |
| **tinit** | Таймер на инициализацию, мс |

**Выходы**

| Элемент | Описание |
| --- | --- |
| **L_Master** | Признак ведущего:<br>**0** – данный контроллер ведомый;<br>**1** – данный контроллер ведущий |
| **L_pila** | Диагностика: генерируемый пилообразный сигнал этого контроллера |
| **L_ready** | Диагностика: готовность этого контроллера |
| **L_init_over** | Инициализация завершена |
| **conn_fault** | Нет связи с соседним контроллером |
| **R_pila_1** | Диагностика: пила соседнего контроллера по каналу связи 1 |
| **R_pila_2** | Диагностика: пила соседнего контроллера по каналу связи 2 |
| **R_ready** | Диагностика: готовность соседнего контроллера |
| **R_master** | Диагностика: соседний контроллер ведущий |

После запуска программы контроллера, выход блока **L_Master = 0**, т.е. ПЛК является ведомым.

Любое из условий переключения в роль ведущего может сработать только после завершения инициализации (выход **L_init_over = 1**). Инициализация считается завершенной после окончания отсчета времени **tinit** от появления единицы на входе **L_init** (обычно сразу установлен в **1**).

Контроллер может стать **ведущим** при одном из условий:

- Если он ведомый и готов (**L****\_****Master** **= 0** и **L****\_****ready** **= 1**), а соседний – не готов (**R****\_****ready** **= 0**);
- Если соседний ведущий контроллер получает команду на смену мастера (**master1** или **master2**). Тогда этот контроллер станет ведущим, если он готов, или оба контроллера не готовы;
- После восстановления связи между ПЛК, когда оба ведомые, и этот контроллер – **ПЛК1** (вход **me****1 = 1**);
- При потере связи с соседним ПЛК (**conn****\_****fault** **= 0**).

Контроллер может стать **ведомым** при одном из условий:

- Если он ведущий и не готов (**L****\_****Master** **= 1** и **L****\_****ready** **= 0**), а соседний – готов (**R****\_****ready** **= 1**)
- Если он получает команду на смену мастера (**master1** или **master2**). Тогда другой контроллер станет ведущим, если он готов, или оба контроллера не готовы;
- После восстановления связи между контроллерами, когда оба ведущие, и этот ПЛК – **ПЛК2** (вход **me****1 = 0**).

В иных случаях смены ролей не происходит.

Готовность контроллера (выход **L_ready** блока) формируется на основании двух условий по логике «И»:

- Есть внешнее условие готовности, заводимое на вход **ready**;
- Инициализация связи завершена.

Обмен данными с соседним контроллером происходит через две выделенные линии синхронизации. Связь контролируется посредством передачи по каждой линии пилообразного сигнала:

- Если не происходит обновления значений пилообразных сигналов ни по одной линии за заданное время (вход **tpila**), то фиксируется потеря связи между ПЛК (выход **conn_fault = 1**);
- Наличие связи фиксируется (выход **conn_fault = 0**) с задержкой времени (вход **trecon**) после того, когда снова начинают изменяться значения передаваемых пилообразных сигналов;
- Текущие значения пилообразного сигнала выдаются на выходы: **L_pila** и **R_pila_1**, **R_pila_2**, соответственно, собственный сигнал и сигналы от соседнего контроллера по двум линиям связи.

Для обмена двумя диагностическими сигналами в проекте контроллера следует добавить в проект два менеджера [SyncMan](#topic-95958), каждый из которых связывается по своему порту.

Выход **L_Master** используется в прикладной программе для задания признака ведущего у линейки ввода/вывода. Инверсия выхода задает признак необходимости синхронизации (входы **sync** блоков <b>*SyncMan*</b>). Другие выходы блока можно использовать для диагностики и в пользовательской логике.

> [!NOTE]
> **Примечание.** Блок <b>*MasterSel*</b> является составным, поэтому подробно логику его работы можно посмотреть на внутренних страницах. Для этого следует открыть библиотеку <b>*paSync*</b> в представлении <b>*Дерево*</b>.

![Определение ведущего (Master Sel)](https://docs.owen.ru/book_img/1935/139843.png)

*Определение ведущего (MasterSel)*

Пример работы с блоком приведен в [разделе](#topic-95962).

<a id="topic-95960"></a>

## Создание синхронизированных модулей

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

![Дерево проекта с двумя модулями](https://docs.owen.ru/book_img/1935/139842.png)

*Дерево проекта с двумя модулями*

Для того, чтобы дублировать место работы одного модуля, следует:

1. Захватить место работы мышью и перетащить на второй модуль.

2. В выпадающем меню выбрать <b>*Добавить*</b>. Места работы (у первого и у второго модуля) подсветятся желтым.

3. Удалить аналогичное место работы у второго модуля.

   ![Дерево проекта. Дублированные модули](https://docs.owen.ru/book_img/1935/139861.png)

   *Дерево проекта. Дублированные модули*

Теперь все изменения в местах работы одного модуля будут дублироваться во втором модуле, и наоборот.

> [!WARNING]
> **Внимание.** Важно понимать, что не только сами блоки и их расположение будет дублироваться во второй модуль, но и значения инициализации на входах блоков, комментарии, связи.

Для удобства перемещения по дублированным страницам модулей можно воспользоваться командой <b>*Показать*</b>. Вызвать ее можно в выпадающем меню при нажатии ПКМ на свободном месте страницы.

![Команда Показать](https://docs.owen.ru/book_img/1935/139860.png)

*Команда Показать*

При работе с синхронизированными модулями для блоков, которые реализуют протоколы обмена (<b>*OpcUAServer*</b> и <b>*OpcUAClient*</b> из библиотеки <b>*paOpcUA*</b>, <b>*TcpIpSrA*</b> и <b>*TcpIpClA*</b> из библиотеки paCore и др.), для задания входов следует использовать SQL-запросы к соответствующим свойствам модуля.

Это необходимо для уникальных параметров контроллеров, например, для IP-адресов. Для задания параметров «соседнего» контроллера рекомендуется использовать пользовательские свойства.

Запрос IP-адреса (**prop****\_****ip**):

```
"<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_ip"</sql>"
```

Запрос номера порта отладчика (**prop****\_****debug****\_****port**):

```
<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_debug_port"</sql>
```

Запрос пользовательского свойства <b>*Пользовательское свойство 00*</b> (**prop****\_0**):

```
<sql> SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_0"</sql
```

<a id="topic-95961"></a>

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

В [разделе](#topic-95960) была рассмотрена синхронизация проектов на этапе разработки.Блок [SyncMan](#topic-95958) из библиотеки <b>*paSync*</b> (менеджер синхронизации для синхронизирующихся блоков) выполняет синхронизацию проектов во время исполнения по протоколу OPC UA.

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

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

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

Подробно реализация протокола **OPC** **UA** в среде **Полигон** описана в документе [Обмен с верхним уровнем. Библиотека paOpcUA](https://owen.ru/product/polygon/documentation).

Далее рассмотрена синхронизация программ в контроллерах на основе проекта, созданного в [разделе](#topic-95960). Для настройки следует:

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

   ![Страница «соседнего» модуля](https://docs.owen.ru/book_img/1935/139859.png)

   *Страница модуля*

   ![Страница «соседнего» модуля (2)](https://docs.owen.ru/book_img/1935/139858.png)

   *Страница «соседнего» модуля*

2. На любую страницу в месте работы <b>*Фон*</b> добавить блок <b>*SyncMan*</b>.

3. На входы блока **lip**, **lprt**, **rip**, **rprt** подать SQL-запросы к свойствам модуля. Примеры SQL-запросов приведены в [разделе](#topic-95960). В данном примере вход **fnum** **=** <b></b>**0.**

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

   ![Настройка OPC UA-сервера и Sync Man](https://docs.owen.ru/book_img/1935/139857.png)

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

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

   ![Свойства модуля](https://docs.owen.ru/book_img/1935/139856.png)

   *Свойства модуля*

   ![Свойства «соседнего» модуля](https://docs.owen.ru/book_img/1935/139855.png)

   *Свойства «соседнего» модуля*

4. Запустить программы на обоих контроллерах.

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

   ![OPC UA-сервер. Подписка Sync Man «соседнего» контроллера](https://docs.owen.ru/book_img/1935/139854.png)

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

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

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

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

   ![Sync Man. Синхронизация включена – этот контроллер ведомый](https://docs.owen.ru/book_img/1935/139853.png)

   *SyncMan. Синхронизация включена – этот контроллер ведомый*

6. Задать триггер на странице ведущего контроллера.

   ![Изменение выходов блоков со стороны ведущего контроллера](https://docs.owen.ru/book_img/1935/139852.png)

   *Изменение выходов блоков со стороны ведущего контроллера*

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

   ![Синхронизация блока ведомого контроллера](https://docs.owen.ru/book_img/1935/139871.png)

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

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

![Изменение выходов блоков со стороны ведущего контроллера](https://docs.owen.ru/book_img/1935/139852.png)

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

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

См. описание синхронизации объектов данных из раздела <b>*Данные*</b> в [разделе](#topic-95958).

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

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

<a id="topic-95962"></a>

## Определение ведущего контроллера (MasterSel)

В [разделе](#topic-95958) было рассмотрено ручное включение синхронизации модулей с помощью установки значения входа **sync** у блоков [SyncMan](#topic-95958).

Для автоматического определения ролей ведущего/ведомого контроллера можно воспользоваться готовым блоком [MasterSel](#topic-95959) или написать свой алгоритм.

<b>*MasterSel*</b> предназначен для определения роли ведущего между двумя контроллерами. Блок контролирует наличие связи между контроллерами с помощью передачи пилообразного сигнала по двум линиям связи. Линии связи организуются с помощью двух блоков <b>*SyncMan*</b> в проекте, каждый из которых осуществляет связь по своему порту.

Далее приводятся примеры реализации резервированной пары контроллеров на основе блока <b>*MasterSel*</b>.

В проекте должно быть создано два синхронизированных модуля. Создание синхронизированных модулей было рассмотрено в [разделе](#topic-95960).

<a id="topic-95963"></a>

### Пример реализации резервирования ПЛК с общими Мх210

Далее рассмотрен пример реализации резервированной пары контроллеров с общей корзиной модулей серии [Мх210](https://owen.ru/catalog/moduli_vvoda_vivoda/features=83). Данную схему удобно настраивать с помощью **Мастера настройки** в web-конфигураторе ПЛК (см. **схему 4** в [Руководстве по эксплуатации](https://owen.ru/product/plk210_polygon/documentation)).

> [!NOTE]
> **Примечание.** Настройка обмена в среде Полигон для **схемы 5** (см. [Руководство по эксплуатации](https://owen.ru/product/plk210_polygon/documentation)) принципиально не отличается от рассмотренной в данном разделе.

Для организации двух линий связи между контроллерами использованы интерфейсы **LAN** и **REDU**. Для подключения отладчиком среды **Полигон** использован интерфейс **P3**.

<a id="img1"></a>

![структурная схема примера1 нов](https://docs.owen.ru/book_img/1935/139870.svg)

*Структурная схема примера*

<a id="t1"></a>

**Настройки интерфейсов контроллеров в примере**

| Контроллер | Интерфейс LAN<br>Ethernet 1…2 | Интерфейс P3<br>Ethernet 3 | Интерфейс REDU<br>Ethernet 4 |
| --- | --- | --- | --- |
| **ПЛК1** | 192.168.0.12/16<br>RSTP | DHCP-клиент | 192.168.10.12/24 |
| **ПЛК2** | 192.168.0.14/16<br>RSTP | DHCP-клиент | 192.168.10.14/24 |

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

1. Добавить в проект два **OPC** **UA**-сервера – блоки <b>*OpcUAServer*</b> из библиотеки <b>*paOpcUA*</b>.

2. Настроить **OPC** **UA**-серверы в соответствии с [таблицей](#img1) с помощью SQL-запросов к свойствам модуля – <b>*Пользовательское свойство 00*</b>(**LAN**) и <b>*Пользовательское свойство 01*</b> (**REDU**). Примеры SQL-запросов приведены в [разделе](#topic-95960).

   ![Настройка OPC UA-серверов установка локальных IP адресов](https://docs.owen.ru/book_img/1935/139869.png)

   *Настройка OPC UA-серверов: установка локальных IP-адресов*

3. Добавить в проект два блока <b>*SyncMan*</b> (**OPC** **UA**-клиенты).

4. Настроить блоки <b>*SyncMan*</b> в соответствии с [таблицей](#t1) с помощью SQL-запросов к свойствам модуля: для локальных адресов также использовать <b>*Пользовательское свойство 00*</b> и <b>*Пользовательское свойство 01*</b>, для IP-адресов соседнего контроллера задать <b>*Пользовательское свойство 02*</b> и <b>*Пользовательское свойство 03*</b>. В данном примере входы **fnum** **=** <b></b>**0**.

   ![Настройка Sync Man установка IP адресов](https://docs.owen.ru/book_img/1935/139868.png)

   *Настройка SyncMan: установка IP адресов*

5. Согласовать номера портов, выделяемых для обмена между OPC UA-серверами и клиентами контроллеров.

   ![Свойства модуля ПЛК1](https://docs.owen.ru/book_img/1935/139867.png)

   *Свойства модуля ПЛК1*

   ![Свойства модуля ПЛК2](https://docs.owen.ru/book_img/1935/139866.png)

   *Свойства модуля ПЛК2*

6. Загрузить проекты на контроллеры.

   ![Успешный обмен OPC UA-серверы (ПЛК1)](https://docs.owen.ru/book_img/1935/139865.png)

   *Успешный обмен: OPC UA-серверы (ПЛК1)*

   ![Успешный обмен OPC UA-клиенты Sync Man (ПЛК2)](https://docs.owen.ru/book_img/1935/139864.png)

   *Успешный обмен: OPC UA-клиенты SyncMan (ПЛК2)*

   ![Успешный обмен OPC UA-серверы (ПЛК2)](https://docs.owen.ru/book_img/1935/139863.png)

   *Успешный обмен: OPC UA-серверы (ПЛК2)*

   ![Успешный обмен OPC UA-клиенты Sync Man (ПЛК1)](https://docs.owen.ru/book_img/1935/139862.png)

   *Успешный обмен: OPC UA-клиенты SyncMan (ПЛК1)*

Убедившись, что настройка обмена произведена успешно, можно приступить к настройке блока выбора текущих ролей контроллеров [MasterSel](#topic-95959). Для этого следует:

1. Добавить блок <b>*MasterSel*</b> в проект.

   Выход **L****\_****Master** определяет роль контроллера: **L****\_****Master** **= 0** – контроллер ведомый, **L****\_****Master** **= 1** – контроллер ведущий.

2. Назначить сигнал с выхода **L_Master** глобальной константой, так как его можно использовать в проекте много раз. Для этого в свойствах выхода **L****\_****Master** следует добавить свойства <b>*Полный алиас*</b> и <b>*Глобальная константа*</b>.

3. Можно сразу задать вход блока **ready (готовность) = 1** или вывести другие сигналы из программы.

   ![Настройка Master Sel](https://docs.owen.ru/book_img/1935/139891.png)

   *Настройка MasterSel*

4. Провести скрытую связь между выходом **L****\_****Master** и входами **sync** блоков <b>*SyncMan*</b> через блок логического НЕ – <b>*NOT*</b> из библиотеки <b>*paCore*</b>, раздел <b>*Логические*</b>, так как синхронизацию следует включать на ведомом контроллере, когда **L****\_****Master** **= 0**.

   Для того, чтобы провести скрытую связь, нужно нажать ПКМ на вход и выбрать в контекстном меню **Задать константу**.

   ![Соединение Master Sel с Sync Man](https://docs.owen.ru/book_img/1935/139890.png)

   *Соединение блоков MasterSel с SyncMan*

5. Запустить программу на первом контроллере. Он станет **ведущим** по истечении времени инициализации **tinit**. На выход **L****\_****pila** выводится диагностический сигнал контроллера. Выход **conn****\_****fault** **= 1**, так как программа на втором контроллере еще не включена.

   ![Работа Master Sel (ПЛК1)](https://docs.owen.ru/book_img/1935/139889.png)

   *Работа MasterSel (ПЛК1)*

6. Установить **me****1 = 1** – данный контроллер имеет признак **ПЛК1**, он будет становиться ведущим при неопределенных условиях. На данный вход можно завести сигнал с внешней кнопки или с панели оператора и т.п.

   > **Примечание.** На входе **me1** можно задать константу при помощи SQL-запроса к пользовательскому свойству модуля и таким образом определить, какой ПЛК является главным. Примеры запросов к свойствам модуля см. в [разделе](#topic-95960).

   ![Работа Master Sel (ПЛК1) задание признака ПЛК1](https://docs.owen.ru/book_img/1935/139888.png)

   *Работа MasterSel (ПЛК1): задание признака ПЛК1*

7. Запустить программу на втором контроллере. Он станет **ведомым** по истечении времени инициализации **tinit**, так как он имеет признак **ПЛК2**, а соседний контроллер имеет признак **ПЛК1**.

   ![Работа Master Sel (ПЛК2)](https://docs.owen.ru/book_img/1935/139887.png)

   *Работа MasterSel (ПЛК2)*

   На выходах **R****\_****pila****\_1** и **R****\_****pila****\_2** блока <b>*MasterSel*</b> у обоих контроллеров отобразится диагностический сигнал от соседнего контроллера. На выходе **R****\_****ready** появится **1** – оба контроллера видят, что сосед готов.

   На выходе **R****\_****Master** ведомого контроллера появится **1** – **ПЛК2** видит, что сосед – ведущий контроллер.

   ![Работа Master Sel (ПЛК1) (2)](https://docs.owen.ru/book_img/1935/139886.png)

   *Работа MasterSel (ПЛК1)*

   ![Работа Master Sel (ПЛК2) (2)](https://docs.owen.ru/book_img/1935/139885.png)

   *Работа MasterSel (ПЛК2)*

   Входы **master****1** и **master****2** блока <b>*MasterSel*</b> отвечают за ручную смену ролей контроллеров. На них можно завести сигналы с внешних кнопок или с панели оператора и т.п.

   Для того чтобы передать роль ведущего от **ПЛК1** к **ПЛК2**, следует подать **1** на вход **master****2**.

   ![Работа Master Sel (ПЛК1) передача роли ведущего контроллера](https://docs.owen.ru/book_img/1935/139884.png)

   *Работа MasterSel (ПЛК1): передача роли ведущего контроллера*

   **ПЛК2** станет ведущим:

   ![Работа Master Sel (ПЛК2) получение роли ведущего контроллера](https://docs.owen.ru/book_img/1935/139883.png)

   *Работа MasterSel (ПЛК2): получение роли ведущего контроллера*

Условия автоматической смены ролей прописаны в [разделе](#topic-95959) и в справке среды на блок <b>*MasterSel*</b>.

> [!NOTE]
> **Примечание.** Блок <b>*MasterSel*</b> является составным, поэтому подробно логику его работы можно посмотреть на внутренних страницах. Для этого следует открыть библиотеку <b>*paSync*</b> в представлении <b>*Дерево*</b>.

Выход **L****\_****Master** блока <b>*MasterSel*</b> можно вывести на внешние сигнальные лампы, панель оператора, а также на разрешающие входы протоколов обмена данными.

В следующем примере рассматривается организация обмена с модулем линейки **Мх210**. В данном примере используется модуль **МК210-311** (схема подключения представлена на [рисунке](#img1)).

Для обмена данными с модулем следует:

1. Настроить обмен с модулем по **Modbus** **TCP**.

   Подробно настройка обмена по протоколу **Modbus** в среде Полигон рассмотрена в документе [Обмен по протоколу Modbus. Библиотека paModbus](https://owen.ru/product/polygon/documentation).

2. Завести на вход **enbl** сигнал **L****\_****Master**.

   ![Настройка обмена с модулем МК210-311](https://docs.owen.ru/book_img/1935/139882.png)

   *Настройка обмена с модулем МК210-311*

При данной настройке модуль **МК210-311** будет опрашивать тот контроллер, который в данный момент является ведущим.

> [!NOTE]
> **Примечание.** Пользователь может также настроить обмен с двумя одинаковыми наборами модулей в кольце, используя программный и/или внешний аппаратный решатель (арбитр) для определения достоверного сигнала – реализация резервирования корзины модулей **Мх210**.

<a id="topic-95964"></a>

### Пример реализации резервирования ПЛК с индивидуальными Мх210

Далее рассмотрен пример реализации резервированной пары контроллеров с индивидуальными корзинами модулей серии [Mx210](https://owen.ru/catalog/moduli_vvoda_vivoda/features=83).

> [!NOTE]
> **Примечание.** Режимы работы сетевых интерфейсов контроллера можно настроить в web-интерфейсе конфигурации (см. [Руководство по эксплуатации](https://owen.ru/product/plk210_polygon/documentation)).

В данном примере для организации двух линий связи между контроллерами использованы интерфейсы **P2** и **REDU**. Интерфейс **P1** выделен для обмена с модулями **Мх210**, а интерфейс **P3** – для подключения отладчиком среды **Полигон**.

<a id="topic-95964--img1"></a>

![Структурная схема примера2 нов](https://docs.owen.ru/book_img/1935/139901.png)

*Структурная схема примера*

<a id="topic-95964--t1"></a>

**Настройки интерфейсов контроллеров**

| Контроллер | Интерфейс P1<br>Ethernet 1 | Интерфейс P2<br>Ethernet 2 | Интерфейс P3<br>Ethernet 3 | Интерфейс REDU<br>Ethernet 4 |
| --- | --- | --- | --- | --- |
| ПЛК1 | 192.168.0.12/16 | 192.168.1.12/24 | DHCP-клиент | 192.168.10.12/24 |
| ПЛК2 | 192.168.0.14/16 | 192.168.1.14/24 | DHCP-клиент | 192.168.10.14/24 |

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

1. Добавить в проект два **OPC** **UA**-сервера – блоки <b>*OpcUAServer*</b> из библиотеки <b>*paOpcUA*</b>.

2. Настроить **OPC** **UA**-серверы в соответствии с [таблицей](#topic-95964--t1) с помощью SQL-запросов к свойствам модуля – <b>*Пользовательское свойство 00*</b> (**P****2**) и <b>*Пользовательское свойство 01*</b> (**REDU**). Примеры SQL-запросов приведены в [разделе](#topic-95960).

   ![Настройка OPC UA-серверов установка локальных IP адресов (2)](https://docs.owen.ru/book_img/1935/139900.png)

   *Настройка OPC UA-серверов: установка локальных IP адресов*

3. Добавить в проект два блока <i>**SyncMan**</i> (**OPC UA**-клиенты).

4. Настроить блоки <b>*SyncMan*</b> в соответствии с [таблицей](#topic-95964--t1) с помощью SQL-запросов к свойствам модуля: для локальных адресов также использовать <b>*Пользовательское свойство 00*</b> и <b>*Пользовательское свойство 01*</b>, для IP адресов соседнего контроллера задать <b>*Пользовательское свойство 03*</b> и <b>*Пользовательское свойство 04*</b>. В данном примере входы **fnum** **=** <b></b>**0**.

   ![Настройка Sync Man установка IP адресов (2)](https://docs.owen.ru/book_img/1935/139899.png)

   *Настройка SyncMan: установка IP адресов*

5. Согласовать номера портов, выделяемых для обмена между **OPC** **UA**-серверами и клиентами контроллеров.

   ![Свойства модуля ПЛК1 (2)](https://docs.owen.ru/book_img/1935/139898.png)

   *Свойства модуля ПЛК1*

   ![Свойства модуля ПЛК2 (2)](https://docs.owen.ru/book_img/1935/139897.png)

   *Свойства модуля ПЛК2*

6. Загрузить проекты в контроллеры.

   ![Успешный обмен OPC UA-серверы (ПЛК1) (2)](https://docs.owen.ru/book_img/1935/139896.png)

   *Успешный обмен: OPC UA-серверы (ПЛК1)*

   ![Успешный обмен OPC UA-клиенты Sync Man (ПЛК2) (2)](https://docs.owen.ru/book_img/1935/139895.png)

   *Успешный обмен: OPC UA-клиенты SyncMan (ПЛК2)*

   ![Успешный обмен OPC UA-серверы (ПЛК2) (2)](https://docs.owen.ru/book_img/1935/139894.png)

   *Успешный обмен: OPC UA-серверы (ПЛК2)*

   ![Успешный обмен OPC UA-клиенты Sync Man (ПЛК1) (2)](https://docs.owen.ru/book_img/1935/139893.png)

   *Успешный обмен: OPC UA-клиенты SyncMan (ПЛК1)*

Убедившись, что настройка обмена произведена успешно, можно приступить к настройке блока выбора текущих ролей контроллеров [MasterSel](#topic-95959). Для этого следует:

1. Добавить блок <b>*MasterSel*</b> в проект.

   Выход **L****\_****Master** определяет роль контроллера: **L****\_****Master** **= 0** – контроллер ведомый, **L****\_****Master** **= 1** – контроллер ведущий.

2. Назначить сигнал с выхода **L_Master** глобальной константой, так как его можно использовать в проекте много раз. Для этого в свойствах выхода **L****\_****Master** следует добавить свойства <b>*Полный алиас*</b> и <b>*Глобальная константа*</b>.

3. Можно сразу задать вход блока **ready (готовность) = 1** или вывести другие сигналы из программы.

   ![Настройка Master Sel](https://docs.owen.ru/book_img/1935/139891.png)

   *Настройка MasterSel*

4. Провести скрытую связь между выходом **L****\_****Master** и входами **sync** блоков <b>*SyncMan*</b> через блок логического НЕ – <b>*NOT*</b> из библиотеки <b>*paCore*</b>, раздел <b>*Логические*</b>, так как синхронизацию следует включать на ведомом контроллере, когда **L****\_****Master** **= 0**.

   Для того, чтобы провести скрытую связь, нужно нажать ПКМ на вход и выбрать в контекстном меню <b>*Задать константу*</b>.

   ![Соединение Master Sel с Sync Man](https://docs.owen.ru/book_img/1935/139890.png)

   *Соединение MasterSel с SyncMan*

5. Запустить программу на первом контроллере. Он станет **ведущим** по истечении времени инициализации **tinit**. На выход **L****\_****pila** выводится диагностический сигнал контроллера. Выход **conn****\_****fault** **= 1**, так как программа на втором контроллере еще не включена.

   ![Работа Master Sel (ПЛК1)](https://docs.owen.ru/book_img/1935/139889.png)

   *Работа MasterSel (ПЛК1)*

   Установить **me****1 = 1** – данный контроллер имеет признак **ПЛК1**, он будет становиться ведущим при неопределенных условиях. На данный вход можно вывести сигнал с внешней кнопки или с панели оператора и т.п.

   > **Примечание.** На входе **me1** можно задать константу при помощи SQL-запроса к пользовательскому свойству модуля и таким образом определить, какой ПЛК является главным. Примеры запросов к свойствам модуля см. в [разделе](#topic-95960).

   ![Работа Master Sel (ПЛК1) задание признака ПЛК1](https://docs.owen.ru/book_img/1935/139888.png)

   *Работа MasterSel (ПЛК1): задание признака ПЛК1*

   Запустить программу на втором контроллере. Он станет **ведомым** по истечении времени инициализации **tinit**, так как он имеет признак **ПЛК2**, а соседний контроллер имеет признак **ПЛК1**.

   ![Работа Master Sel (ПЛК2)](https://docs.owen.ru/book_img/1935/139887.png)

   *Работа MasterSel (ПЛК2)*

   На выходах **R****\_****pila****\_1** и **R****\_****pila****\_2** блока **MasterSel** у обоих контроллеров отобразится диагностический сигнал от соседнего контроллера. На выходе **R****\_****ready** появится **1** – оба контроллера видят, что сосед готов.

   На выходе **R****\_****Master** ведомого контроллера появится **1** – **ПЛК2** видит, что сосед – ведущий контроллер.

![Работа Master Sel (ПЛК1) (2)](https://docs.owen.ru/book_img/1935/139886.png)

*Работа MasterSel (ПЛК1)*

![Работа Master Sel (ПЛК2) (2)](https://docs.owen.ru/book_img/1935/139885.png)

*Работа MasterSel (ПЛК2)*

Входы **master****1** и **master****2** блока <b>*MasterSel*</b> отвечают за ручную смену ролей контроллеров. На них можно вывести сигналы с внешних кнопок или с панели оператора и т.п.

Для того, чтобы передать роль ведущего от **ПЛК1** к **ПЛК2**, следует подать **1** на вход **master2**.

![Работа Master Sel (ПЛК1) передача роли ведущего контроллера](https://docs.owen.ru/book_img/1935/139884.png)

*Работа MasterSel (ПЛК1): передача роли ведущего контроллера*

**ПЛК2** станет ведущим:

![Работа Master Sel (ПЛК2) получение роли ведущего контроллера](https://docs.owen.ru/book_img/1935/139883.png)

*Работа MasterSel (ПЛК2): получение роли ведущего контроллера*

Условия автоматической смены ролей прописаны в [разделе](#topic-95959) и в справке среды на блок <b>*MasterSel*</b>.

> [!NOTE]
> **Примечание.** Блок <b>*MasterSel*</b> является составным, поэтому подробно логику его работы можно посмотреть на внутренних страницах. Для этого следует открыть библиотеку <b>*paSync*</b> в представлении <b>*Дерево*</b>.

Выход **L****\_****Master** блока <b>*MasterSel*</b> можно вывести на внешние сигнальные лампы, панель оператора и т.д.

Далее нужно организовать обмен данными с модулями линейки **Мх210**. В данном примере используются модули **МК210-311** (схема подключения на [рисунке](#topic-95964--img1)).

Для настройки TCP/IP-сервера в соответствии с [таблицей](#topic-95964--t1) следует использовать SQL-запрос к свойству модуля <b>*Пользовательское свойство 02*</b> (**P****1**).

Настроить обмен с модулями по **Modbus** **TCP**.

Подробно настройка обмена по протоколу **Modbus** в среде Полигон рассмотрена в документе [Обмен по протоколу Modbus. Библиотека paModbus](https://owen.ru/product/polygon/documentation).

![Настройка обмена с модулем МК210-311 (2)](https://docs.owen.ru/book_img/1935/139892.png)

*Настройка обмена с модулем МК210-311*

При данной настройке каждый контроллер будет опрашивать свой модуль **МК210-311**.

> [!NOTE]
> **Примечание.** Пользователь может также настроить обмен с дублированными модулями в корзине, используя программный и/или внешний аппаратный решатель (арбитр) для определения достоверного сигнала – реализация резервирования корзины модулей **Мх210**.
