---
title: "Руководство пользователя Библиотека paOpcUa"
product: "Полигон"
document_number: "№ 1-RU-134175-1.2"
version: "1.2"
language: "ru"
source: "https://docs.owen.ru/product/poligon/doc/1206"
pdf: "https://docs.owen.ru/download/pdf/J9Z4P.rp_biblioteka+paopcua_1-ru-134175-1.2.pdf"
generated: "2026-10-14"
---

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

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

- [Используемые термины и сокращения](#topic-94831)
- [Введение](#topic-94832)
- [Базовые сведения о технологии OPC](#topic-94833)
- [Библиотека paOpcUA](#topic-94834)
  - [OPC UA-сервер (OpcUAServer)](#topic-94835)
  - [OPC UA-сервер, таймерная часть (OpcUAServerTimer)](#topic-94836)
  - [OPC UA-клиент (OpcUAClient)](#topic-94837)
  - [Управление блоками BufSup (UABufSups)](#topic-94838)
- [OPC UA-сервер](#topic-94839)
  - [Адресация данных](#topic-94840)
  - [Сбор данных для подписок в Фоне и в Таймере](#topic-94841)
  - [Авторизация](#topic-94842)
  - [Ограничение подключений к серверу](#topic-94843)
  - [Свойства входов/выходов данных, влияющих на обмен с клиентом](#topic-94844)
- [OPC UA-клиент](#topic-94845)
  - [Конфигурирование данных](#topic-94846)
  - [Режимы работы клиента](#topic-94847)
  - [Свойства входов/выходов данных, влияющих на обмен с сервером](#topic-94848)
- [Запись уставок с использованием OPC UA (BufSupEx)](#topic-94849)
  - [Запись уставок OPC UA-сервера с удаленного клиента](#topic-94850)
  - [Синхронизация записи уставок между контроллерами](#topic-94851)
- [Настройка обмена с использованием технологии OPC](#topic-94852)
  - [OPC UA-сервер. Пример подключения к MasterSCADA 4D](#topic-94853)
  - [OPC UA-клиент. Пример подключения к OPC UA-серверу ПЛК210](#topic-94854)
- [Поддержка сервисов по спецификации OPC UA](#topic-94855)

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

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

**ПК** – персональный компьютер.

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

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

**URI (Uniform Resource Identifier)** – имя и адрес ресурса в сети.

**OPC UA (Open Platform Communications, Unified Architecture)** – промышленный протокол. Спецификация OPC UA разработана организацией OPC Foundation.

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

## Введение

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

Настройка обмена по протоколу **OPC** **UA** в среде **Полигон** осуществляется с помощью функциональных блоков из библиотеки <b>*paOpcUA*</b>.

Примеры в документе актуальны для версии среды **Полигон** – **1994** и для версии библиотеки **paOpcUA** – **922** и выше.

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

## Базовые сведения о технологии OPC

**OPC** (от англ. **Open Platform Communications**) – это набор программных технологий, которые предоставляют единый интерфейс для управления различными устройствами и обмена данными. Спецификации стандарта OPC были разработаны организацией OPC Foundation, которую создали в 1994 году ведущие производители средств промышленной автоматизации. Целью создания OPC было предоставить инженерам универсальный интерфейс для управления различными устройствами.

После стандартизации OPC-клиента и OPC-сервера на уровне программной архитектуры разработчики стандарта избавились от необходимости поддерживать сотни драйверов для различных устройств. Таким образом, технология ОРС позволяет поддерживать связь приборов с различными SCADA-системами.

Технология OPC включает несколько стандартов, которые описывают набор функций определенного назначения.**OPC UA (Unified Architecture)** — последняя по времени выпуска спецификация, которая основана не на технологии Microsoft COM, что предоставляет кроссплатформенную совместимость.

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

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

<b>*paOpcUA*</b> – библиотека, обеспечивающая обмен по протоколу OPC UA в режиме сервера и/или клиента.

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

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

Особенности реализации протокола OPC UA в **Полигон** приведены в [Приложении Поддержка сервисов по спецификации OPC UA.](#topic-94855)

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

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

   ![opcua-baz-01](https://docs.owen.ru/book_img/1906/134095.png)

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

2. Нажать кнопку <b>*Открыть*</b> и перейти в папку с файлами библиотеки, которую необходимо добавить. Затем в выпадающем списке выбрать тип файла <b>*Библиотека Полигон 2 (\*.*</b><b>*ll*</b><b>*2)*</b>.

   ![opcua-baz-02](https://docs.owen.ru/book_img/1906/134094.png)

   *Добавление библиотеки paOpcUA в проект*

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

   ![opcua-baz-03](https://docs.owen.ru/book_img/1906/134093.png)

   *Добавление библиотеки paOpcUA в проект*

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

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

### OPC UA-сервер (OpcUAServer)

Блок <b>*OpcUAServer*</b> обеспечивает реализацию сервера по протоколу **OPC** **UA**. Присутствие данного блока в проекте обязательно, так как <b>*Отладчик*</b> подключается к контроллеру как OPC UA-клиент.

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

На входы блока **ip** – IP-адрес контроллера и **prt** – локальный порт контроллера рекомендуется подавать SQL-запросы к соответствующим свойствам текущего модуля.

Запрос 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>
```

При добавлении циклических входов **cip** к OPC UA-серверу смогут подключаться только клиенты с указанным IP-адресом (в т. ч. <b>*Отладчик*</b>).

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

**Входы**

| Элемент | Описание |
| --- | --- |
| ip | Локальный IP адрес (константный) |
| prt | Локальный порт (константный) |
| sdr | Сетевой стек, для ПЛК ОВЕН **"/"** (константный) |
| st | Статус сервера в соответствии со спецификацией OPC UA (см. [Part 5 – 12.6 ServerState](https://reference.opcfoundation.org/Core/Part5/v105/docs/12.6)) |
| sl | Дополнительный статус сервера ServiceLevel в соответствии со спецификацией OPC UA (см. [Part 4 – 6.6.2.4.2 ServiceLevel](https://reference.opcfoundation.org/Core/Part4/v105/docs/6.6.2.4.2)):<br>**255** – ведущий<br>**199** – ведомый |
| max | Максимально разрешенное количество соединений (константный) |
| cip | IP разрешенного подключения (циклический и константный) |
| cpr | Приоритет подключения (циклический и константный) |

**Выходы**

| Элемент | Описание |
| --- | --- |
| st | Текущий статус сервера в соответствии со спецификацией OPC UA (см. [Part 5 – 12.6 ServerState](https://reference.opcfoundation.org/Core/Part5/v105/docs/12.6)) |
| cn | Количество активных соединений (сумма **cnDbg**, **cnPA**, **cnOth**) |
| cnDbg | Количество соединений с <b>*Отладчиком*</b> среды разработки |
| cnPA | Количество соединений с клиентами [OpcUAClient](#topic-94837) |
| cnOth | Количество соединений с другими клиентами |
| cst | Статус соединения с разрешенным клиентом (циклический) |

![opcua-baz-04](https://docs.owen.ru/book_img/1906/134092.png)

<i>OPC UA-сервер (OpcUA**Server)**</i>

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

### OPC UA-сервер, таймерная часть (OpcUAServerTimer)

Блок <b>*OpcUAServerTimer*</b> обеспечивает возможность сбора данных для подписок OPC UA-сервера в таймере. Для этого необходимо добавить блок в место работы <b>*Таймер*</b> с минимальным размером таймерного промежутка. Данный блок можно разместить только в <b>*Таймере*</b>.

Блок <b>*OpcUAServerTimer*</b> должен встречаться в проекте только один раз независимо от того, сколько [OPC UA-серверов](#topic-94835) добавлено в проект. После этого можно настраивать параметры сбора данных в подписке с дискретностью таймерного цикла. В частности, это можно использовать для отладки программы в представлении <b>*График*</b>. Надо учитывать, что при инициализации подписки клиентом OPC UA с дискретизацией, кратной таймерному промежутку, в контроллере выделяется память для хранения очереди накапливаемых значений.

Назначение входов/выходов:

![opcua-baz-05](https://docs.owen.ru/book_img/1906/134091.png)

*OPC UA сервер, таймерная часть (OpcUAServerTimer)*

**enb** – разрешение на работу блока;

**subsN** – количество подписок, обрабатываемых в таймере;

**dpsN** – количество данных

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

### OPC UA-клиент (OpcUAClient)

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

На входы блока **lip** – IP-адрес контроллера и **lprt** – локальный порт контроллера рекомендуется подавать SQL-запросы к соответствующим свойствам текущего модуля.

Запрос 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>
```

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

**Входы**

| Элемент | Описание |
| --- | --- |
| enb | Разрешение на работу блока:<br>**0** – выключен;<br>**1** – включен;<br>**2** – в резерве |
| wait | Таймаут ожидания ответа от сервера, мс (константный) |
| lip | Локальный IP-адрес (константный) |
| lprt | Локальный порт (константный) |
| sdr | Сетевой стек, для ПЛК ОВЕН **"/"** (константный) |
| rip | IP адрес сервера (константный) |
| rprt | Порт сервера (константный) |
| usr | Логин для доступа к серверу (константный) |
| psw | Пароль для доступа к серверу (константный) |
| pbl | Интервал работы подписки в мс (PublishingInterval) – периодичность работы подписки внутри сервера. Если **pbl** **=** **0**, то сервер обрабатывает подписку каждый фоновый цикл (константный) |
| lfc | Время жизни подписки в циклах (LifetimeCount) (константный) |
| kac | Максимальное значение keep-alive счетчика в циклах (MaxKeepAliveCount) (константный) |
| wcon | Отправлять значения выходов при установке соединения |
| routs | Читать выходы |
| cfg | Дополнительная конфигурация работы<br>**Примечание.** Начиная с версии **901** библиотеки <b>*paOpcUA*</b> в блоке <b>*OpcUAClient*</b> отключен разрыв соединения в случае отсутствия некоторых данных в сервере. Для возвращения старого поведения следует установить бит **0** на входе **cfg** в **1**. |
| buf | Подключение блоков <b>*BufSupEx*</b> из библиотеки paCore (циклический) |

**Выходы**

| Элемент | Описание |
| --- | --- |
| sts | Статус работы:<br>**0** – нет обмена;<br>**1** – обмен данными;<br>**2** – в резерве, соединение установлено, значения выходов **sst** и **ssl** актуальные, обмена данными нет;<br>**3** – в процессе установки соединения;<br>**4** – в процессе разрыва соединения;<br>**5** – сервер вернул ошибку (более подробную информацию программа печатает в консоль);<br>**6** – внутренняя ошибка, перезапуск соединения;<br>**–1** – системная ошибка, невозможно выделить локальный сокет для установки соединения;<br>**–2** – системная ошибка, невозможно использовать локальный порт для установки соединения |
| 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)):<br>**255** – ведущий;<br>**199** – ведомый |
| sid | ID подписки |
| ssn | Номер уведомления подписки |
| rcnt | Количество принятых пакетов |
| wcnt | Количество отправленных пакетов |

![OPC UA клиент (Opc UAClient) нов](https://docs.owen.ru/book_img/1906/140138.png)

*OPC UA клиент (OpcUAClient)*

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

### Управление блоками BufSup (UABufSups)

Блок <b>*UABufSups*</b> предназначен для подключения блоков <b>*BufSupEx*</b> из библиотеки <b>*paCore*</b> и записи/чтения данных. Для записи данного в файл <b>*BufSupEx*</b> клиенту необходимо записать значение во вход или выход **dan**. Прочитать текущее значение параметра из файла клиент может с выхода **dan**. Данный блок можно разместить только в <b>*Фоне*</b>.

Назначение входов/выходов:

![opcua-baz-07](https://docs.owen.ru/book_img/1906/134089.png)

*Управление блоками BufSup (UABufSups)*

**enb** – разрешение на работу блока;

**buf** – вход для подключения блоков <b>*BufSupEx*</b> из библиотеки paCore (циклический);

**itr** – выход для подключения блоков <b>*BufSupEx*</b>;

**cnt** – записано

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

## OPC UA-сервер

Каждый ПЛК, программируемый в **Полигон**, является OPC UA-сервером, так как <b>*Отладчик*</b> подключается к контроллеру как OPC UA-клиент.

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

При настройке блока [OpcUAServer](#topic-94835) удобно использовать некоторые свойства модуля. Для этого можно использовать технологию SQL-запросов. Такие запросы автоматически добавляются на входы **ip** и **prt** при создании модуля из шаблона <b>*Модуль с отладчиком для контроллера*</b>. Это позволяет изменять 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>
```

![opcua-block-01](https://docs.owen.ru/book_img/1906/134088.png)

*Преднастроенный OPC UA-сервер*

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

### Адресация данных

С точки зрения OPC UA-клиента исполняемая программа выглядит как дерево, в котором модуль представлен так же, как в представлении <b>*Дерево*</b> в среде разработки (за исключением страниц, они не отображаются как отдельные объекты).

![opcua-block-02](https://docs.owen.ru/book_img/1906/134087.png)

*Дерево проекта*

![opcua-block-03](https://docs.owen.ru/book_img/1906/134086.png)

*Дерево проекта при чтении OPC UA-клиентом (UaExpert)*

Узлы дерева представлены двумя типами:

- для модуля, места работы, программы, раздела и функционального блока <b>*NodeClass = Object*</b>

  ;

- для входов, выходов и их свойств <b>*NodeClass = Variable*</b>.

Отношение между основными узлами (<b>*Reference*</b>) имеет тип <b>*HasComponent*</b>. Отношение между входом/выходом и его свойством имеет тип <b>*HasProperty*</b>.

Тип адреса используется числовой (<b>*NodeId.IdentifierType = Numeric*</b>) и имеет два параметра:

- <a id="ns"></a>

  <b>*ns*</b> (NamespaceIndex);

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

  <b>*i*</b> (Identifier).

Для модуля, места работы, программы, раздела и функционального блока <b>*i*</b> равен индексу – свойство компонента <b>*Индекс*</b>.

Для модуля, места работы, программы, раздела и функционального блока <b>*ns*</b> равен **0****x****8000** (**32768** в десятичной системе счисления).

![opcua-block-04](https://docs.owen.ru/book_img/1906/134105.png)

*Индекс блока в программе*

![opcua-block-05](https://docs.owen.ru/book_img/1906/134104.png)

*NodeId блока при чтении OPC UA-клиентом (UaExpert)*

Для входов: <b>*i*</b> равен свойству <b>*Индекс блока*</b>, <b>*ns*</b> равен свойству <b>*Порядок*</b>.

![opcua-block-06](https://docs.owen.ru/book_img/1906/134103.png)

*Свойства входа в программе*

![opcua-block-07](https://docs.owen.ru/book_img/1906/134102.png)

*Свойства входа при чтении OPC UA-клиентом (UaExpert)*

Для выходов: <b>*i*</b> равен свойству <b>*Индекс блока*</b>, <b>*ns*</b> равен свойству <b>*Порядок*</b> при побитовом сложении с **0x8000**.

![opcua-block-08](https://docs.owen.ru/book_img/1906/134101.png)

*Свойства выхода в программе*

![opcua-block-09](https://docs.owen.ru/book_img/1906/134100.png)

*Свойства выхода при чтении OPC UA-клиентом (UaExpert)*

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

### Сбор данных для подписок в Фоне и в Таймере

Сбор данных для подписок OPC UA-сервера производится в фоновом потоке. Для того, чтобы собирать данные подписок в таймерном прерывании, необходимо добавить добавить блок [OpcUaServerTimer](#topic-94836) на любую страницу места работы <b>*Таймер*</b>.

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

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

![opcua-block-10-1](https://docs.owen.ru/book_img/1906/134099.png)

*Пример работы графика в фоне*

![opcua-block-10-2](https://docs.owen.ru/book_img/1906/134098.png)

*Пример работы графика в таймере*

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

> [!NOTE]
> **Примечание.** Если сбор данных в таймере используется только для целей отладки, перед вводом ПЛК в работу блок <b>*OpcUAServerTimer*</b> рекомендуется отключать (вход **enb** = 0), чтобы не нагружать место работы <b>*Таймер*</b>.

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

### Авторизация

В **Полигон** поддерживается два вида авторизации для доступа к OPC UA-серверу: анонимный доступ и доступ по логину и паролю.

Все блоки [OpcUAServer](#topic-94835), добавленные в модуль, обеспечивают по умолчанию доступ ко всем входам/выходам проекта в том случае, если клиент использует для авторизации имя пользователя <b>*admin*</b> (свойство модуля <b>*Пароль*</b> <b>*admin*</b>). Этот способ соединения также использует и отладчик среды разработки.

![opcua-block-11](https://docs.owen.ru/book_img/1906/134097.png)

*Пароль admin*

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

Анонимный доступ по умолчанию предоставляет доступ только к диагностической информации: дате трансляции, идентификатору модуля, ПК, с которого транслировалась программа, пользователь ПК, версия проекта.

![opcua-block-12](https://docs.owen.ru/book_img/1906/134096.png)

*Чтение OPC UA-клиентом (UaExpert) с анонимным доступом*

Помимо пользователя <b>*admin*</b> в среде есть возможность подключения еще 7 пользователями – <b>*user*</b><b>*1*</b>, …, <b>*user*</b><b>*7*</b>. Пароль для <b>*user*</b><b>*1*</b>, …, <b>*user*</b><b>*7*</b> устанавливается свойствами модуля <b>*Пароль*</b> <b>*user*</b><b>*1*</b>, …, <b>*Пароль*</b> <b>*user*</b><b>*7*</b>. По умолчанию для пользователей <b>*user*</b><b>*1*</b>, …,<b>*user*</b><b>*7*</b> также доступна только диагностическая информация.

![opcua-block-13](https://docs.owen.ru/book_img/1906/134125.png)

*Пароль user1*

Для того, чтобы разрешить анонимный доступ или доступ пользователями **user1**, …, **user7** к частям проекта, следует добавить узлам проекта свойство **Разрешить доступ**.

Для разрешения анонимного доступа необходимо установить <b>*Разрешить доступ =*</b> <b>*user*</b><b>*0*</b> для пользователей <b>*user*</b><b>*1*</b>, …,<b>*user*</b><b>*7*</b> – <b>*Разрешить доступ =*</b> <b>*user*</b><b>*1*</b>, …,<b>*user*</b><b>*7*</b>.

Свойство <b>*Разрешить доступ*</b> можно добавить для разделов и программ.

> [!WARNING]
> **Внимание.** Чтобы разрешить в программе доступ к входам/выходам блоков, все узлы дерева проекта, находящиеся выше данной программы, также должны иметь такое же свойство **Разрешить доступ**.

![opcua-block-14](https://docs.owen.ru/book_img/1906/134124.png)

*Свойство Разрешить доступ = user1*

![opcua-block-15](https://docs.owen.ru/book_img/1906/134123.png)

*Чтение OPC UA-клиентом (UaExpert) с user1*

Все указанные выше пароли вступают в силу только после трансляции модуля.

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

### Ограничение подключений к серверу

По умолчанию к блоку [OpcUAServer](#topic-94835) возможно подключение клиентами с любыми IP адресами при условии отсутствия ограничения межсетевым экраном.

В блоке <b>*OpcUAServer*</b> также есть возможность ограничить доступ – для этого необходимо создать у блока дополнительные группы входов <b>*m*</b><b>*\_*</b><b>*allowed*</b><b>*\_*</b><b>*clients*</b>, по одной на каждый разрешенный IP-адрес.

Входы **cip** позволяют ограничить подключения только определенными IP-адресами. Входы **cpr** задают разные приоритеты для адресов.

![opcua-block-16](https://docs.owen.ru/book_img/1906/134122.png)

*OpcUAServer с разрешенным IP-адресом*

При использовании **cip** и **cpr** OPC UA-сервер не будет принимать подключений ни с каких IP-адресов, кроме заданных.

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

### Свойства входов/выходов данных, влияющих на обмен с клиентом

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

Свойство <b>*Зона нечувствительности*</b> (prop_deadzone) позволяет задать абсолютную зону нечувствительности на стороне сервера. Если значение изменилось больше, чем величина зоны нечувствительности, то оно передается клиенту.

Если задать **Зона нечувствительности** = **0**, значение будет передаваться при изменении.

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

При соединении с клиентом [OpcUAClient](#topic-94837) свойство **Зона нечувствительности** следует задавать на стороне клиента. Заданная на стороне сервера зона нечувствительности игнорируется.

Свойство <b>*Интервал принудительной отправки*</b> (в мс) (prop_reftime) позволяет организовать принудительную отправку данного в подписке независимо от изменения значения и настроек зоны нечувствительности. Заданный интервал отсчитывается от момента последней отправки значения. При использовании в качестве клиента <b>*OpcUAClient*</b> данный параметр можно (и желательно) задавать на стороне клиента, при использовании других клиентов – только на стороне сервера.

> [!WARNING]
> **Внимание.** Для корректной работы данных свойств входов/выходов необходимо добавить их в любой раздел внутри модуля и установить свойство модуля <b>*Трансляция: включить свойства входов/выходов*</b> = <b>*Только из разделов*</b>.

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

## OPC UA-клиент

Один блок [OpcUAClient](#topic-94837) соответствует одной подписке в OPC UA-сервере (Subscription в спецификации OPC UA). Кроме этого, клиент позволяет записывать данные в сервер.

Входы **lip**, **lprt**, **sdr**, **rip**, **rprt**, **usr** и **psw** задают настройки сетевого соединения с сервером.

Входы **pbl**, **lfc** и **kac** задают параметры подписки согласно спецификации OPC UA.

Входы **wcon**, **routs** определяют работу с выходами, добавленными у клиента.

При настройке блока <b>*OpcUAClient*</b> удобно использовать некоторые свойства модуля. Для этого можно использовать технологию 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_prXop WHERE indx=:module AND type="prop_0"</sql>
```

(обычно используется на входах **rip** и **rprt**).

![opcua-baz-06](https://docs.owen.ru/book_img/1906/134090.png)

*OPC UA клиент (OpcUAClient)*

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

### Конфигурирование данных

Клиент читает и пишет данные (входы и выходы других функциональных блоков), добавленные внутрь раздела <b>*Данные*</b>.

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

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

Чтобы назначить данному адрес входа/выхода сервера, необходимо перетащить его со страницы с нажатым **Ctrl** на выход/вход в разделе <b>*Данные*</b> и в выпадающем меню выбрать команду <b>*Назначить источником*</b>.

Также можно перетащить вход/выход из дерева сервера на нужный выход/вход в разделе <b>*Данные*</b>.

После этого среда автоматически добавит в свойства данного из раздела свойство <b>*ID*</b> <b>*источника/приемника*</b>, равное адресу назначенного входа/выхода сервера. Первое значение свойства не участвует в адресации, второе значение свойства определяет [Id](#id) адреса входа/выхода сервера, третье – [ns.](#ns)

При подключении <b>*OpcUAClient*</b> к стороннему OPC UA-серверу свойство <b>*ID*</b> <b>*источника/приемника*</b> требуется добавлять и задавать вручную. При этом сервер должен поддерживать идентификаторы числового типа (Numeric).

![opcua-client-02](https://docs.owen.ru/book_img/1906/134121.png)

*Свойство ID источника/приемника*

<a id="co_d"></a>

Входы и выходы блоков сервера можно назначать источниками как для входов, так и для выходов клиента из раздела <b>*Данные*</b>.

Входы, добавленные в раздел <b>*Данные*</b>, клиент регистрирует в сервере для чтения через подписку (MonitoredItem по спецификации OPC UA).

Выходы, добавленные в раздел <b>*Данные*</b>, клиент записывает при помощи сервисов записи в OPC UA-сервер. Их поведение определяется входами **wcon** и **routs** блока <b>*OpcUAClient*</b> и свойством <b>*Зона нечувствительности*</b>. Если клиент осуществляет запись в выходы блоков сервера, то соответствующие блоки сервера выключаются. Это может быть полезно, например, при отладке проекта с использованием внешней программы-модели.

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

### Режимы работы клиента

Значение на входе **enb** определяет режим работы клиента [OpcUAClient](#topic-94837):

- **0** – соединение с сервером разорвано, обмена нет;
- **1** – соединение с сервером установлено, обмен работает;
- **2** (в резерве) – соединение с сервером установлено, обмена нет. В этом режиме клиент читает от сервера [OpcUAServer](#topic-94835) только значения статусов (выходы **sst** и **ssl**), такой вариант можно использовать для выбора одного из нескольких серверов с наибольшим **ssl**.

Режим **2** можно использовать для подключения к резервированным серверам.

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

### Свойства входов/выходов данных, влияющих на обмен с сервером

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

Свойство <b>*Зона нечувствительности*</b> (prop_deadzone) позволяет задать абсолютную зону нечувствительности. Если значение в сервере изменилось больше, чем величина зоны нечувствительности, то оно передается клиенту.

Если задать <b>*Зона нечувствительности*</b> = **0** (или при отсутствии свойства), значение будет передаваться при изменении.

Свойство <b>*Период опроса*</b> (мс) (prop_sinter) задает период опроса (samplingInterval), если данное необходимо собирать в таймерном потоке.

Значение **0** (или отсутствие свойства) означает опрос каждый цикл работы подписки в фоне.

Значения **>0** должны быть кратны таймерному промежутку. Если значение не кратно, то оно принудительно «округляется» вниз. Тогда значение анализируется в каждом таймерном цикле и добавляется в очередь, если проходит проверку на зону нечувствительности. Для такой работы в проекте обязательно должен быть добавлен блок [OpcUAServerTimer](#topic-94836).

Свойство <b>*Размер очереди*</b> (prop_qsize) задает размер очереди (queueSize) данного в подписке. Применяется для сбора данных в таймере (см. свойство <b>*Период опроса*</b>).

Свойство <b>*Интервал принудительной отправки (мс)*</b> (prop_reftime) позволяет организовать принудительную отправку данного в подписке независимо от изменения значения и настроек зоны нечувствительности. Заданный интервал отсчитывается от момента последней отправки значения. Это нестандартная функция, поэтому работает, только если в качестве сервера выступает блок [OpcUAServer](#topic-94835).

Свойство I<b>*D источника/приемника*</b> (prop_srcid) - идентификатор объекта данных, который необходимо читать из сервера и записывать во вход раздела <b>*Данные*</b>. Это свойство добавляется автоматически при выполнении команды <b>*Назначить источником*</b>. Если свойство не добавлено, то клиент читает из сервера значение такого же входа (данный случай используется для синхронизации данных между дублированными модулями, подробнее см. документацию [Синхронизация проектов и реализация резервирования. Библиотека paSync](https://owen.ru/product/polygon/documentation)).

Выходы, добавленные в раздел <b>*Данные*</b>, клиент записывает в сервер. Периодичность записи зависит от значения свойства <b>*Зона нечувствительности*</b> у выхода:

- Свойство отсутствует – запись производится каждый цикл работы клиента;
- **0** – запись производится при любом изменении значения;
- **>0** – запись производится, если значение изменилось больше, чем размер зоны нечувствительности.

> [!WARNING]
> **Внимание.** Для корректной работы данных свойств входов/выходов необходимо добавить их в любой раздел внутри модуля и установить свойство модуля <b>*Трансляция: включить свойства входов/выходов*</b> = <b>*Только из разделов*</b>.

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

## Запись уставок с использованием OPC UA (BufSupEx)

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

### Запись уставок OPC UA-сервера с удаленного клиента

Для записи уставок в блоки <b>*BufSupEx*</b> из библиотеки <b>*paCore*</b> с удаленного OPC UA-клиента используется блок [UABufSups](#topic-94838).

Блоки <b>*BufSupEx*</b> в проекте контроллера-сервера подключаются выходами **pkt** к входам **buf** блока <b>*UABufSups*</b>.

Вход **inter** блока <b>*BufSupEx*</b> можно при необходимости подключить к другому блоку протокола (например, к блокам <b>*Modbus*</b> <b>*Slave*</b>).

![opcua-write-01](https://docs.owen.ru/book_img/1906/134120.png)

*Запись уставок с OPC UA-клиента*

При отключении блока <b>*UABufSups*</b> (или при его отсутствии) для записи уставки с OPC UA-клиента потребуется подать импульс на входы **czap**.

Параметры на диске сохраняются в бинарных файлах с расширениями **.da1** и **.da2**.

> [!WARNING]
> **Внимание.** При изменении числа входов блока <b>*BufSupEx*</b> файлы на диске перезаписываются.

Подробнее о возможностях и работе блока <b>*BufSupEx*</b> в документации [Архивирование и сохранение уставок](https://owen.ru/product/polygon/documentation).

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

### Синхронизация записи уставок между контроллерами

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

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

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

![opcua-write-02](https://docs.owen.ru/book_img/1906/134119.png)

*Дублированные программы*

Блоки <b>*BufSupEx*</b> в данной программе следует соединить выходами **pkt** с входами **buf** блока [OpcUAClient](#topic-94837).

Входы <b>*OpcUAClient*</b>, отвечающие за настройку обмена (IP-адреса и порты) следует задавать с помощью SQL-запросов к соответствующим свойствам модулей. Для задания параметров «соседнего» контроллера рекомендуется использовать пользовательские свойства. Примеры SQL-запросов к свойствам модуля приведены в [разделе](#topic-94845).

![opcua-write-03](https://docs.owen.ru/book_img/1906/134118.png)

*Подключение BufSupEx к OpcUAClient*

После запуска программ на обоих контроллерах один из них следует назначить «ведущим» – отключить <b>*OpcUAClient*</b> (**enb** = 0), а второй «ведомым» – включить <b>*OpcUAClient*</b> (**enb** = 1).

Теперь при изменении уставок ведущего контроллера изменения будут дублироваться в ведомый посредством чтения их OPC UA-клиентом.

При попытке изменить уставки ведомого контроллера изменения в ведущем контроллере не применятся.

![opcua-write-04](https://docs.owen.ru/book_img/1906/134117.png)

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

![opcua-write-05](https://docs.owen.ru/book_img/1906/134116.png)

*Ведомый контроллер*

Параметры на диске сохраняются в бинарных файлах с расширениями **.da1** и **.da2**.

> [!WARNING]
> **Внимание.** При изменении числа входов блока <b>*BufSupEx*</b> файлы на диске перезаписываются.

Подробнее о возможностях и работе блока <b>*BufSupEx*</b> в документации [Архивирование и сохранение уставок](https://owen.ru/product/polygon/documentation).

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

## Настройка обмена с использованием технологии OPC

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

### OPC UA-сервер. Пример подключения к MasterSCADA 4D

В данном примере будет рассмотрено подключение к OPC UA-серверу ПЛК210 клиентом [MasterSCADA 4D](https://owen.ru/product/masterscada_4d) (версия 1.3.2.32723).

Для настройки обмена следует:

1. Добавить в проект блок [OpcUAServer](#topic-94835), настроить его входы.

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

   ![opcua-setup-01](https://docs.owen.ru/book_img/1906/134135.png)

   *Дерево проекта*

   На входы блока **ip** – IP-адрес контроллера и **prt** – локальный порт контроллера поданы SQL-запросы к соответствующим свойствам текущего модуля.

   Запрос 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>
   ```

   ![opcua-setup-02](https://docs.owen.ru/book_img/1906/134134.png)

   *Блок OPC UA-сервера*

   В данной конфигурации OPC UA-клиент будет видеть все входы/выходы блоков в проекте. Для удобства выбора переменных для обмена можно создать <b>*Раздел*</b> и добавить в него необходимые входы/выходы блоков в проекте.

   Для этого необходимо создать в модуле <b>*Раздел*</b> с именем *Данные* *OPC* *UA**-сервер* (или любым другим).

   ![opcua-setup-03](https://docs.owen.ru/book_img/1906/134133.png)

   *Дерево проекта*

2. Добавить в раздел необходимые входы/выходы блоков в проекте. Для этого необходимо выделить интересующий вход/выход блока, с нажатым **Ctrl** перенести данный вход/выход в созданный раздел **ДанныеOPC UA-сервер**, и в появившемся меню выбрать <b>*Добавить*</b>.

   ![opcua-setup-04](https://docs.owen.ru/book_img/1906/134132.png)

   *Раздел Данные OPC UA-сервер*

3. Транслировать модуль и запустить программу на ПЛК. Перейти к настройке OPC UA-клиента MasterSCADA 4D.

4. Создать новый пустой проект MasterSCADA 4D.

5. В узле <b>*Система*</b> добавить узел <b>*АРМ*</b>.

   ![opcua-setup-05](https://docs.owen.ru/book_img/1906/134131.png)

   *Узел АРМ*

6. В созданном узле <b>*АРМ1*</b> добавить протокол <b>*OPC*</b> <b>*UA*</b>.

   ![opcua-setup-06](https://docs.owen.ru/book_img/1906/134130.png)

   *Узел АРМ, протокол OPC UA*

7. В свойствах <b>*OPC*</b> <b>*UA*</b> задать адрес <b>*URI*</b> OPC UA-сервера в соответствии с блоком [OpcUAServer](#topic-94835), <b>*Имя пользователя*</b> и <b>*Пароль*</b> в соответствии со свойствами модуля (в примере модуль *example**\_**opc**\_**ua*).

   ![opcua-setup-07](https://docs.owen.ru/book_img/1906/134129.png)

   *Свойства OPC UA*

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

   ![opcua-setup-08](https://docs.owen.ru/book_img/1906/134128.png)

   *Окно OPC UA, выбор переменных*

   ![opcua-setup-09](https://docs.owen.ru/book_img/1906/134127.png)

   *Узел OPC UA*

9. Подключить узел <b>*АРМ1*</b>, наблюдать корректный обмен данными.

   ![opcua-setup-10](https://docs.owen.ru/book_img/1906/134126.png)

   *Изменение данных в программе ПЛК*

   ![opcua-setup-11](https://docs.owen.ru/book_img/1906/134145.png)

   *Чтение данных OPC UA-клиентом*

   ![opcua-setup-12](https://docs.owen.ru/book_img/1906/134144.png)

   *Запись данных OPC UA-клиентом*

   ![opcua-setup-13](https://docs.owen.ru/book_img/1906/134143.png)

   *Изменение данных в программе ПЛК*

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

### OPC UA-клиент. Пример подключения к OPC UA-серверу ПЛК210

В данном примере будет рассмотрено подключение ПЛК210 в качестве клиента к OPC UA-серверу на ПЛК210. В качестве OPC UA-сервера использован сервер, настроенный в [предыдущем примере](#topic-94853).

Для настройки обмена в качестве OPC UA-клиента следует:

1. Добавить в проект блок [OpcUAClient](#topic-94837), настроить его входы.

   ![opcua-setup-14](https://docs.owen.ru/book_img/1906/134142.png)

   *Дерево проекта*

   На вход блока **lip** – локальный IP-адрес контроллера подан SQL-запрос к соответствующему свойству текущего модуля.

   Запрос IP-адреса (prop_ip):

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

   Внутри блока <b>*OpcUAClient*</b> автоматически добавляется раздел <b>*Данные*</b>.

   ![opcua-setup-15](https://docs.owen.ru/book_img/1906/134141.png)

   *Блок OPC UA-клиента*

2. У OPC UA-сервера из [предыдущего примера](#topic-94853) три входа и два выхода, что в разделе <b>*Данные*</b> клиента будет соответствовать трем выходам и двум входам (входы/выходы сервера [можно связывать также с входами/выходами клиента в разделе Данные](#co_d)).

   Чтобы отображать/изменять данные в модуле клиента, можно создать на любой странице проекта терминальные блоки:

   ![opcua-setup-16](https://docs.owen.ru/book_img/1906/134140.png)

   *Терминальные блоки*

3. Добавить входы/выходы созданных терминальных блоков в раздел <b>*Данные*</b>. Для этого, зажав **Ctrl**, перетащить вход/выход в раздел <b>*Данные*</b> и в выпадающем меню выбрать <b>*Добавить*</b>.

   ![opcua-setup-17](https://docs.owen.ru/book_img/1906/134139.png)

   *Раздел Данные*

4. Для того, чтобы привязать данные OPC UA-сервера к созданным входам/выходам раздела <b>*Данные*</b>, следует назначить их источниками. Для этого следует открыть страницу модуля сервера с интересующими входами/выходами, зажав **Ctrl**, перетащить вход/выход к выходу/входу в разделе <b>*Данные*</b>, в выпадающем меню выбрать <b>*Назначить источником*</b>.

   То же самое можно сделать, перетаскивая вход/выход сервера из дерева проекта без зажатого **Ctrl**.

   В данной конфигурации клиент будет записывать данные входов сервера циклически. Чтобы записывать данные по изменению, следует выполнить действия из [пп. 5 - 6](#p5).

   ![opcua-setup-18](https://docs.owen.ru/book_img/1906/134138.png)

   *Раздел Данные*

5. <a id="p5"></a>

   Добавить выходам раздела <b>*Данные*</b> свойство <b>*Зона нечувствительности*</b>, равное **0**.

   Если свойство <b>*Зона нечувствительности*</b> имеет значение **0**, то значение на выход передается по изменению. Если свойство имеет значение больше 0, то значение на выход передается при преодолении данной зоны нечувствительности.

   ![opcua-setup-19](https://docs.owen.ru/book_img/1906/134137.png)

   *Зона нечувствительности*

6. В свойствах модуля добавить свойство <b>*Трансляция: включить свойства входов/выходов*</b>, равное <b>*Только из разделов*</b>.

   ![opcua-setup-20](https://docs.owen.ru/book_img/1906/134136.png)

   *Свойства модуля OPC UA-клиента*

7. Транслировать модуль OPC UA-клиента и запустить программу на обоих ПЛК.

8. Подключиться <b>*Отладчиком*</b> к обоим модулям, наблюдать корректный обмен данными.

   ![opcua-setup-21](https://docs.owen.ru/book_img/1906/134165.png)

   *Изменение данных в программе ПЛК-сервера*

   ![opcua-setup-22](https://docs.owen.ru/book_img/1906/134164.png)

   *Чтение данных ПЛК-клиентом*

   ![opcua-setup-23](https://docs.owen.ru/book_img/1906/134163.png)

   *Запись данных ПЛК-клиентом*

   ![opcua-setup-24](https://docs.owen.ru/book_img/1906/134162.png)

   *Изменение данных в программе ПЛК-сервера после записи ПЛК-клиентом*

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

## Поддержка сервисов по спецификации OPC UA

**Поддержка сервисов по спецификации OPC UA**

**Discovery Service Set**

| Service Set/Service | Service Set/Service | Поддержка | Комментарии |
| --- | --- | --- | --- |
| FindServers | FindServers | Да |   |
| GetEndpoints | GetEndpoints | Да |   |

**Session Service Set**

| Service Set/Service | Service Set/Service | Поддержка | Комментарии |
| --- | --- | --- | --- |
| CreateSession | CreateSession | Да |   |
| ActivateSession | ActivateSession | Да | В качестве UserIdentityToken поддерживаются только: AnonymousIdentityToken (анонимный доступ) и UserNameIdentityToken (доступ с логином и паролем) |
| CloseSession | CloseSession | Да |   |
| Cancel | Cancel | Нет |   |
| NodeManagement Service Set | NodeManagement Service Set | Нет |   |

**View Service Set**

| Service Set/Service | Service Set/Service | Поддержка | Комментарии |
| --- | --- | --- | --- |
| Browse | Browse | Да | В качестве displayName используется свойство: <b>*Полный алиас*</b>, или <b>*Комментарии*</b>, если <b>*Полный алиас*</b> пустой, или <b>*Имя*</b>, если <b>*Комментарии*</b> и <b>*Полный алиас*</b> пустые.<br>В качестве BrowseName используется индекс узла в шестнадцатеричном формате |
| BrowseNext | BrowseNext | Да |   |
| TranslateBrowsePathsToNodeIds | TranslateBrowsePathsToNodeIds | Да | Внутри RelativePath игнорируются поля referenceTypeId, isInverse и includeSubtypes. В качестве targetName используется свойство: <b>*Полный алиас*</b>, или <b>*Комментарии*</b>, если <b>*Полный алиас*</b> пустой, или <b>*Имя*</b>, если <b>*Комментарии*</b> и <b>*Полный алиас*</b> пустые |
| RegisterNodes | RegisterNodes | Да | Ничего не делает |
| UnregisterNodes | UnregisterNodes | Да | Ничего не делает |
| Query Service Set | Query Service Set | Нет |   |

**Attribute Service Set**

| Service Set/Service | Service Set/Service | Поддержка | Комментарии |
| --- | --- | --- | --- |
| Read | Read | Да | Параметр maxAge игнорируется, сервер всегда возвращает текущее значение |
| HistoryRead | HistoryRead | Нет |   |
| Write | Write | Да | Поддерживается запись только значений (атрибут Value). Запись отдельных элементов массива не поддерживается |
| HistoryUpdate | HistoryUpdate | Нет |   |

**Method Service Set**

| Service Set/Service | Service Set/Service | Поддержка | Комментарии |
| --- | --- | --- | --- |
| Call | Call | Да |   |

**MonitoredItem Service Set**

| Service Set/Service | Service Set/Service | Поддержка | Комментарии |
| --- | --- | --- | --- |
| CreateMonitoredItems | CreateMonitoredItems | Да | Из фильтров поддерживается только DataChangeFilter, и только с абсолютной зоной нечувствительности |
| ModifyMonitoredItems | ModifyMonitoredItems | Да |   |
| SetMonitoringMode | SetMonitoringMode | Да |   |
| SetTriggering | SetTriggering | Нет |   |
| DeleteMonitoredItems | DeleteMonitoredItems | Да |   |

**Subscription Service Set**

| Service Set/Service | Service Set/Service | Поддержка | Комментарии |
| --- | --- | --- | --- |
| CreateSubscription | CreateSubscription | Да |   |
| ModifySubscription | ModifySubscription | Да |   |
| SetPublishingMode | SetPublishingMode | Да |   |
| Publish | Publish | Да |   |
| Republish | Republish | Да | Размер очереди равен 10 |
| TransferSubscriptions | TransferSubscriptions | Да |   |
| DeleteSubscriptions | DeleteSubscriptions | Да |   |
