Библиотека paSync

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

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

Для добавления библиотеки paSync в проект следует:

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

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

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

    Graphic
    Добавление библиотеки
  4. В окне появится файл библиотеки с расширением .ll2. Следует выбрать его и нажать Открыть.

    Graphic
    Добавление библиотеки

Добавленная библиотека отобразится в окне Проекты.

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

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

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

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

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

Примечание
Если блоки библиотеки paSync находятся внутри составных блоков, то допускается до 7 вложенностей.
Назначение входов и выходов SyncMan
ЭлементОписание
Входы
enb

Разрешение на работу блока

sync

Синхронизация:

0 – выключена;

1 – включена

Примечание

На данный вход можно подать инвертированный сигнал с выхода L_Master блока MasterSel или пользовательского блока, реализующего алгоритм определения ведущего контроллера.

wait

Таймаут ожидания ответа от сервера, мс (константный)

lip

Локальный IP адрес (константный)

lprt

Локальный порт (константный)

sdr

Сетевой стек, для ПЛК ОВЕН "/" (константный)

rip

IP адрес сервера (константный)

rprt

Порт сервера (константный)

usr

Логин для доступа к серверу (константный)

psw

Пароль для доступа к серверу (константный)

prio

Приоритет дополнительного потока (константный), в котором выполняется синхронизация. Обычно элемент задают выше других фоновых потоков, чтобы обеспечить максимальную скорость синхронизации:

0 – отключает создание дополнительного потока (обмен идет в текущем фоновом потоке);

1…47 – приоритет потока

Примечание

Максимально возможное значение приоритета для конкретной ОС контроллера можно определить с помощью блока ThreadMan из библиотеки paCore, раздел Системные.

rst

Сброс максимальных значений временных счетчиков: выходов mwrk и mscan

fnum

Максимальное количество подмененных во время отладки входов/выходов, которое можно синхронизировать:

0 – отключает синхронизацию подмененных значений

m_rbufs

Вход для подключения блоков типа BufSupEx (циклический)

Выходы
sts

Статус работы:

0 – нет обмена;

1 – обмен;

2 – в резерве;

>2 – переходное состояние

svld

Синхронизация работает

sst

Статус сервера в соответствии со спецификацией OPC UA (см. Part 5 – 12.6 ServerState)

ssl

Дополнительный статус сервера ServiceLevel в соответствии со спецификацией OPC UA (см. Part 4 – 6.6.2.4.2 ServiceLevel)

sid

ID подписки

ssn

Номер уведомления подписки

rcnt

Количество принятых пакетов

wcnt

Количество отправленных пакетов

prio

Приоритет дополнительного потока (0 – отключен)

dsz

Количество синхронизируемых данных (входов и выходов блоков *_sync и добавленных в раздел SyncMan)

wrk

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

mwrk

Максимальное время работы одного цикла потока синхронизации, мс

scan

Текущее время получения всех изменившихся данных (входов и выходов) от соседнего контроллера, мс

mscan

Максимальное время получения всех изменившихся данных (входов и выходов) от соседнего контроллера, мс

diag

Диагностический счетчик (используется для контроля получения всех данных и расчета времени)

fnumo

Количество синхронизируемых подмененных во время отладки входов/выходов

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

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

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

  1. Если у входа есть свойство ID источника/приемника, то он читается из сервера всегда при наличии связи. Такие данные используются для двустороннего обмена между ведущим и ведомым независимо от текущей роли контроллера.

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

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

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

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

Назначение входов и выходов MasterSel
ЭлементОписание
Входы
me1

Признак ПЛК1 (me1 = 1 у ПЛК1). Под ПЛК1 подразумевается тот контроллер, который должен становиться ведущим при неопределенных условиях (восстановление связи между двумя работающими контроллерами)

ready

Внешнее условие готовности контроллера (разрешение стать основным)

init

Запуск таймера на инициализацию

master1

Команда ПЛК1 стать ведущим (внутри выделяется фронт с 0 на 1)

master2

Команда ПЛК2 стать ведущим (внутри выделяется фронт с 0 на 1)

tpila

Таймер залипания пилы, мс

trecon

Таймер восстановления связи, мс

tinit

Таймер на инициализацию, мс

Выходы
L_Master

Признак ведущего:

0 – данный контроллер ведомый;

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 (вход me1 = 1);

  • При потере связи с соседним ПЛК (conn_fault = 0).

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

  • Если он ведущий и не готов (L_Master = 1 и L_ready = 0), а соседний – готов (R_ready = 1)

  • Если он получает команду на смену мастера (master1 или master2). Тогда другой контроллер станет ведущим, если он готов, или оба контроллера не готовы;

  • После восстановления связи между контроллерами, когда оба ведущие, и этот ПЛК – ПЛК2 (вход me1 = 0).

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

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

  • Есть внешнее условие готовности, заводимое на вход ready;

  • Инициализация связи завершена.

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

  • Если не происходит обновления значений пилообразных сигналов ни по одной линии за заданное время (вход tpila), то фиксируется потеря связи между ПЛК (выход conn_fault = 1);

  • Наличие связи фиксируется (выход conn_fault = 0) с задержкой времени (вход trecon) после того, когда снова начинают изменяться значения передаваемых пилообразных сигналов;

  • Текущие значения пилообразного сигнала выдаются на выходы: L_pila и R_pila_1, R_pila_2, соответственно, собственный сигнал и сигналы от соседнего контроллера по двум линиям связи.

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

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

Примечание
Блок MasterSel является составным, поэтому подробно логику его работы можно посмотреть на внутренних страницах. Для этого следует открыть библиотеку paSync в представлении Дерево.
Graphic
Определение ведущего (MasterSel)

Пример работы с блоком приведен в разделе.