---
title: "Без названия"
status: действует
canonical: "https://bukva.ai/docs/bez-nazvaniya-4937"
---

## Без названия

# Документ 47893


<a id="p100001"></a>Утвержден и введен в действие
Приказом Федерального агентства
по техническому регулированию
и метрологии
от 13 августа 2026 г. N 962-ст

<a id="p100002"></a>**НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ**

<a id="p100003"></a>**ЦИФРОВАЯ ПРОМЫШЛЕННОСТЬ**

<a id="p100004"></a>**УНИФИЦИРОВАННАЯ АРХИТЕКТУРА OPC**

<a id="p100005"></a>**ЧАСТЬ 14**

<a id="p100006"></a>АРХИТЕКТУРА ОБМЕНА ДАННЫМИ "ИЗДАТЕЛЬ-ПОДПИСЧИК" (PubSub)

<a id="p100007"></a>Digital industry. OPC Unified Architecture.
Part 14. PubSub

<a id="p100008"></a>**(IEC 62541-14:2026, NEQ)**

<a id="p100009"></a>**ГОСТ Р 72820-2026**

<a id="p100010"></a>**ОКС 25.040.40**
35.100.05

<a id="p100011"></a>Дата введения
1 декабря 2026 года


### <a id="p100012"></a>Предисловие


<a id="p100013"></a>1 РАЗРАБОТАН Ассоциацией "Цифровые инновации в машиностроении" (АЦИМ) и Федеральным государственным бюджетным учреждением "Российский институт стандартизации" (ФГБУ "Институт стандартизации")
<a id="p100014"></a>2 ВНЕСЕН Техническим комитетом по стандартизации ТК 306 "Измерения, управление и автоматизация в промышленных процессах"
<a id="p100015"></a>3 УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Приказом Федерального агентства по техническому регулированию и метрологии от 13 августа 2026 г. N 962-ст
<a id="p100016"></a>4 Настоящий стандарт разработан с учетом основных нормативных положений международного стандарта МЭК 62541-14:2026 "Унифицированная архитектура OPC. Часть 14. PubSub" (IEC 62541-14:2026 "OPC Unified Architecture - Part 14: PubSub", NEQ)
<a id="p100017"></a>**5 ВВЕДЕН ВПЕРВЫЕ**

<a id="p100018"></a>Правила применения настоящего стандарта установлены в статье 26 Федерального закона от 29 июня 2015 г. N 162-ФЗ "О стандартизации в Российской Федерации". Информация об изменениях к настоящему стандарту публикуется в ежегодном (по состоянию на 1 января текущего года) информационном указателе "Национальные стандарты", а официальный текст изменений и поправок - в ежемесячном информационном указателе "Национальные стандарты". В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ближайшем выпуске ежемесячного информационного указателя "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет (www.rst.gov.ru)


### <a id="p100019"></a>Введение


<a id="p100020"></a>Система стандартов в области цифровой промышленности имеет важное значение для управления процессами цифровой трансформации и создания умных (интеллектуальных) производств, основанных на интеграции и интероперабельности различных автоматизированных систем управления, технологического оборудования, промышленных роботов, средств оснащения, контроллеров и датчиков.
<a id="p100021"></a>В настоящем стандарте определены концепции обмена сообщениями, параметры связи, сопоставления, модель службы ключей безопасности и конфигурации PubSub применительно к унифицированной архитектуре OPC.
<a id="p100022"></a>Настоящий стандарт является четырнадцатой частью серии стандартов "Цифровая промышленность. Унифицированная архитектура OPC".


### <a id="p100023"></a>1 Область применения


<a id="p100024"></a>Настоящий стандарт определяет модель взаимодействия OPC UA с шаблоном проектирования обмена сообщениями PubSub для распространения данных и информации о событиях для заинтересованных подписчиков внутри сети устройств, а также в облачных сервисах. Настоящий стандарт определяет основные понятия и включает:
- <a id="p100025"></a>общее введение в концепции PubSub;
- <a id="p100026"></a>определение параметров конфигурации PubSub;
- <a id="p100027"></a>сопоставление концепций и параметров конфигурации PubSub с сообщениями и транспортными протоколами;
- <a id="p100028"></a>модель конфигурации PubSub.
<a id="p100029"></a>Настоящий стандарт необходимо использовать совместно с другими стандартами серии "Цифровая промышленность. Унифицированная архитектура OPC".


### <a id="p100030"></a>2 Нормативные ссылки


<a id="p100031"></a>В настоящем стандарте использованы нормативные ссылки на следующие стандарты:
<a id="p100032"></a>ГОСТ Р 71807 Цифровая промышленность. Унифицированная архитектура OPC. Часть 2. Модель безопасности
<a id="p100033"></a>ГОСТ Р 71808 Цифровая промышленность. Унифицированная архитектура OPC. Часть 3. Модель адресного пространства
<a id="p100034"></a>ГОСТ Р 71809 Цифровая промышленность. Унифицированная архитектура OPC. Часть 4. Сервисы
<a id="p100035"></a>ГОСТ Р 71810 Цифровая промышленность. Унифицированная архитектура OPC. Часть 5. Информационная модель
<a id="p100036"></a>ГОСТ Р 71811 Цифровая промышленность. Унифицированная архитектура OPC. Часть 6. Сопоставления
<a id="p100037"></a>ГОСТ Р 72214 Цифровая промышленность. Унифицированная архитектура OPC. Часть 7. Профили
<a id="p100038"></a>*Примечание* - При пользовании настоящим стандартом целесообразно проверить действие ссылочных стандартов в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет или по ежегодному информационному указателю "Национальные стандарты", который опубликован по состоянию на 1 января текущего года, и по выпускам ежемесячного информационного указателя "Национальные стандарты" за текущий год. Если заменен ссылочный стандарт, на который дана недатированная ссылка, то рекомендуется использовать действующую версию этого стандарта с учетом всех внесенных в данную версию изменений. Если заменен ссылочный стандарт, на который дана датированная ссылка, то рекомендуется использовать версию этого стандарта с указанным выше годом утверждения (принятия). Если после утверждения настоящего стандарта в ссылочный стандарт, на который дана датированная ссылка, внесено изменение, затрагивающее положение, на которое дана ссылка, то это положение рекомендуется применять без учета данного изменения. Если ссылочный стандарт отменен без замены, то положение, в котором дана ссылка на него, рекомендуется применять в части, не затрагивающей эту ссылку.


### <a id="p100039"></a>3 Термины, определения и сокращения



#### <a id="p100040"></a>3.1 Термины и определения

<a id="p100041"></a>В настоящем стандарте применены следующие термины с соответствующими определениями:
<a id="p100042"></a>3.1.1 класс набора данных (data set class): Шаблон, объявляющий содержимое набора данных.
<a id="p100043"></a>*Примечание* - Класс набора данных применяют для типизации наборов данных для использования несколькими издателями и для фильтрации по подписчикам.

<a id="p100044"></a>3.1.2 метаданные набора данных (data set meta data): Данные, описывающие содержание и семантику набора данных.
<a id="p100045"></a>3.1.3 считыватель набора данных (data set reader): Сущность, получающая сообщения набора данных от промежуточного программного обеспечения, ориентированного на сообщения.
<a id="p100046"></a>*Примечание* - Считыватель набора данных - это компонент, который извлекает сообщение набора данных из сетевого сообщения, полученного от промежуточного программного обеспечения, ориентированного на сообщения, и декодирует сообщение набора данных в набор данных для дальнейшей обработки на подписчике.

<a id="p100047"></a>3.1.4 модуль записи набора данных (data set writer): Сущность, создающая сообщения набора данных из наборов данных и публикующая их через промежуточное программное обеспечение, ориентированное на сообщения.
<a id="p100048"></a>*Примечание* - Модуль записи набора данных кодирует набор данных в сообщение набора данных и включает сообщение набора данных в сетевое сообщение для публикации через промежуточное программное обеспечение, ориентированное на сообщения.

<a id="p100049"></a>3.1.5 опубликованный набор данных (published data set): Конфигурация данных приложения для публикации в виде набора данных.
<a id="p100050"></a>*Примечание* - Опубликованный набор данных может представлять собой список отслеживаемых переменных или выборку событий.

<a id="p100051"></a>3.1.6 группа безопасности (security group): Группировка параметров безопасности и ключей безопасности, используемых для доступа к сообщениям от издателя.
<a id="p100052"></a>*Примечание* - Группа безопасности - это абстракция, представляющая параметры безопасности и ключи безопасности, которые могут использоваться для доступа к сообщениям от издателя. Группа безопасности идентифицируется уникальным идентификатором, называемым идентификатором группы безопасности. Идентификатор группы безопасности уникален в рамках службы ключей безопасности.

<a id="p100053"></a>3.1.7 подписанный набор данных (subscribed data set): Конфигурация для отправки полученных наборов данных.
<a id="p100054"></a>*Примечание* - Подписанный набор данных может представлять собой сопоставление полей набора данных с переменными в адресном пространстве подписчика.


#### <a id="p100055"></a>3.2 Сокращения

<a id="p100056"></a>В настоящем стандарте применены следующие сокращения:
<a id="p100057"></a>AMQP - протокол расширенной очереди сообщений;
<a id="p100058"></a>AS - служба авторизации;
<a id="p100059"></a>CTL - список доверенных сертификатов;
<a id="p100060"></a>HMI - человеко-машинный интерфейс;
<a id="p100061"></a>IGMP - протокол управления групповой передачей в Интернете;
<a id="p100062"></a>MIME - многоцелевые расширения интернет-почты;
<a id="p100063"></a>MOM - связующее программное обеспечение, ориентированное на обработку сообщений (Message Oriented Middlewar);
<a id="p100064"></a>MQTT - MQ Telemetry Transport;
<a id="p100065"></a>MTU - максимальный блок передачи;
<a id="p100066"></a>OPC - открытая коммуникационная платформа программных технологий, обеспечивающих единый интерфейс для управления объектами автоматизации и технологическими процессами (Open Platform Communications);
<a id="p100067"></a>PCP - точка кода приоритета;
<a id="p100068"></a>PubSub - асинхронный шаблон обмена сообщениями, который отделяет отправителей (издателей) от получателей (подписчиков);
<a id="p100069"></a>QoS - качество обслуживания;
<a id="p100070"></a>SKS - служба ключей безопасности;
<a id="p100071"></a>UA - унифицированная архитектура (Unified Architecture);
<a id="p100072"></a>UADP - протокол дейтаграмм UA;
<a id="p100073"></a>UDP - протокол пользовательских дейтаграмм;
<a id="p100074"></a>URI - унифицированный идентификатор ресурса;
<a id="p100075"></a>URL - универсальный указатель ресурса;
<a id="p100076"></a>VID - идентификатор VLAN.


### <a id="p100077"></a>4 Обзор



#### <a id="p100078"></a>4.1 Области применения

<a id="p100079"></a>В PubSub участвующие приложения OPC UA, выполняющие роли издателей и подписчиков, разделены. Количество подписчиков, получающих данные от издателя, не влияет на издателя. Это делает PubSub подходящим для приложений, где требуются независимость от местоположения и/или масштабируемость.
<a id="p100080"></a>Ниже приведены некоторые примеры использования PubSub:
- <a id="p100081"></a>настраиваемая одноранговая связь между контроллерами и между контроллерами и HMI. Узлы не связаны напрямую и даже не должны знать о существовании друг друга. Обмен данными часто требует фиксированного временного окна; это может быть соединение точка-точка или распространение данных многим получателям;
- <a id="p100082"></a>асинхронные рабочие процессы. Например, приложение для обработки заказов может разместить заказ в очереди сообщений или в корпоративной сервисной шине. Оттуда он может быть обработан одним или несколькими работниками;
- <a id="p100083"></a>ведение журналов в несколько систем. Например, датчики или исполнительные механизмы могут записывать журналы в систему мониторинга, HMI, архивное приложение для последующих запросов и так далее;
- <a id="p100084"></a>серверы OPC UA, представляющие сервисы или устройства, могут передавать данные в приложения, размещенные в облаке. Например, серверы бэкенда, аналитика больших данных для оптимизации системы и предиктивного обслуживания.

#### <a id="p100085"></a>4.2 Уровни абстракции PubSub

<a id="p100086"></a>PubSub разработан с учетом гибкости и не привязан к конкретной системе обмена сообщениями. Все компоненты и действия сначала абстрактно описаны в разделе 5 и не являются спецификацией для реализации. Конкретные параметры связи указаны в разделе 6. Конкретные отображения транспортных протоколов и сообщений указаны в разделе 7.
<a id="p100087"></a>Благодаря этим уровням абстракции PubSub может использоваться для передачи различных типов информации по сетям с различными характеристиками, что иллюстрируется двумя примерами:
- <a id="p100088"></a>PubSub с транспортным протоколом UDP и сообщениями в двоичном коде может хорошо подходить для производственных сред, где требуется частая передача небольших объемов данных. Он также позволяет осуществлять обмен данными в конфигурациях "один к одному" и "один ко многим";
- <a id="p100089"></a>использование установленных стандартных протоколов обмена сообщениями (например, AMQP или MQTT) с кодированием данных в формате JSON поддерживает интеграцию с облачными сервисами и позволяет легко обрабатывать информацию в современных системах потоковой и пакетной аналитики.

#### <a id="p100090"></a>4.3 Разделение с помощью промежуточного программного обеспечения

<a id="p100091"></a>В PubSub участвующие приложения OPC UA могут выполнять роли издателя (Publisher) и подписчика (Subscriber). Издатели являются источниками данных, а подписчики потребляют эти данные.
<a id="p100092"></a>Взаимодействие в PubSub основано на сообщениях. Издатели отправляют сообщения в промежуточное программное обеспечение, ориентированное на сообщения (MOM), не зная о наличии каких-либо подписчиков. Аналогично подписчики выражают интерес к определенным типам данных и обрабатывают сообщения, содержащие эти данные, не зная о наличии каких-либо издателей.
<a id="p100093"></a>Рисунок 1 иллюстрирует, что издатели и подписчики взаимодействуют только с промежуточным программным обеспечением, ориентированным на сообщения, которое обеспечивает средства для пересылки данных одному или нескольким получателям.



<a id="p100095"></a>Рисунок 1 - Обзор модели PubSub (Издатель-подписчик)

<a id="p100096"></a>Промежуточное программное обеспечение, ориентированное на сообщения, представляет собой программную или аппаратную инфраструктуру, которая поддерживает отправку и получение сообщений между распределенными системами. Реализация этого распределения зависит от используемого промежуточного программного обеспечения.
<a id="p100097"></a>Для охвата большого числа сценариев использования OPC UA PubSub поддерживает два существенно различных варианта промежуточного программного обеспечения, ориентированного на сообщения:
<a id="p100098"></a>Существуют две формы реализации:
- <a id="p100099"></a>без брокера: в этой модели сетевой инфраструктурой выступает система обмена сообщениями, ориентированная на сообщения (MOM), которая способна маршрутизировать сообщения на основе дейтаграмм. Подписчики и издатели используют дейтаграммные протоколы, такие как UDP;
- <a id="p100100"></a>с брокером: здесь ключевым компонентом MOM является брокер сообщений. Подписчики и издатели используют стандартные протоколы обмена сообщениями, такие как AMQP или MQTT, для взаимодействия с брокером. Все сообщения публикуются в определенные очереди (например, темы, узлы), которые предоставляет брокер, и подписчики могут прослушивать эти очереди. Брокер может выполнять преобразование сообщений из протокола издателя в протокол подписчика.

#### <a id="p100101"></a>4.4 Взаимодействие моделей

<a id="p100102"></a>Модели PubSub и клиент-сервер основаны на информационной модели OPC UA. Благодаря этому PubSub легко интегрируется с серверами и клиентами OPC UA. Как правило, издателем является сервер OPC UA (владелец информации), а подписчиком - клиент OPC UA. Информационная модель PubSub для конфигурации способствует настройке издателей и подписчиков с использованием модели клиент-сервер OPC UA.
<a id="p100103"></a>Тем не менее для связи PubSub не требуется такая зависимость ролей. Клиенты OPC UA могут выступать в роли издателей, а серверы OPC UA - в роли подписчиков. Фактически для участия в коммуникации PubSub издателям или подписчикам не обязательно быть сервером или клиентом OPC UA.


### <a id="p100104"></a>5 Концепции PubSub



#### <a id="p100105"></a>5.1 Общие положения

<a id="p100106"></a>Настоящий раздел описывает общие концепции OPC UA PubSub. Набор данных (DataSet) составляет полезную нагрузку сообщений, предоставляемых издателем и потребляемых подписчиком. Набор данных описан в 5.2. Отображение на сообщения описано в 5.3. Участвующие сущности, такие как издатель и подписчик, описаны в 5.4.
<a id="p100107"></a>Модель связи PubSub поддерживает множество других сценариев; например, издатель может отправлять набор данных нескольким промежуточным системам обработки сообщений (MOM), а подписчик может получать сообщения от нескольких издателей.
<a id="p100108"></a>Абстрактные параметры связи описаны в разделе 6.
<a id="p100109"></a>Отображение модели на конкретные протоколы сообщений и транспортные протоколы определено в разделе 7.
<a id="p100110"></a>Информационная модель OPC UA для конфигурации PubSub в разделе 9 определяет стандартные объекты в адресном пространстве OPC UA, используемые для создания, изменения и предоставления конфигурации OPC UA PubSub.
<a id="p100111"></a>Рисунок 2 иллюстрирует поток сообщений от издателя к одному или нескольким подписчикам. Издатели и подписчики слабо связаны. Их основная связь - это общее понимание конкретных типов данных (наборов данных), характеристики публикации сообщений, включающих эти данные, и промежуточная система обработки сообщений.



<a id="p100113"></a>Рисунок 2 - Сущности издателя и подписчика

<a id="p100114"></a>Сообщения на рисунке 2 представляют собой сетевые сообщения. Каждое сетевое сообщение (NetworkMessages) включает информацию заголовка (например, идентификационные данные и данные безопасности) и одно или несколько сообщений наборов данных (DataSetMessages) (полезную нагрузку). Сообщения наборов данных могут быть подписаны и зашифрованы в соответствии с настроенной безопасностью сообщений. SKS отвечает за распределение ключей безопасности, необходимых для безопасности сообщений.
<a id="p100115"></a>Каждое сообщение набора данных создается из набора данных. Компонент издателя, называемый DataSetWriter, генерирует непрерывную последовательность сообщений наборов данных. Синтаксис и семантика наборов данных описываются метаданными набора данных (DataSetMetaData). Выбор информации для набора данных в издателе и параметры получения данных называются опубликованным набором данных (PublishedDataSet). Набор данных, метаданные набора данных и опубликованный набор данных подробно описаны в 5.2.
<a id="p100116"></a>*Примечание* - Каталог PubSub является необязательной сущностью, которая позволяет издателям рекламировать свои опубликованные наборы данных.


#### <a id="p100117"></a>5.2 Набор данных


##### <a id="p100118"></a>5.2.1 Общие сведения

<a id="p100119"></a>Набор данных представляется как список пар "имя-значение", представляющих событие или набор значений переменных.
<a id="p100120"></a>Набор данных создается из события или из выборки значений переменных. Конфигурация этого сборщика прикладных данных называется опубликованным набором данных. Поля набора данных могут быть определены для представления любой информации, например они могут быть внутренними переменными издателя, событиями от издателя или собранными издателем.
<a id="p100121"></a>Метаданные набора данных, описанные в 5.2.3, определяют структуру и содержимое набора данных.
<a id="p100122"></a>Для публикации набор данных будет закодирован в сообщение набора данных. Одно или несколько сообщений набора данных объединяют для формирования полезной нагрузки сетевого сообщения.
<a id="p100123"></a>На рисунке 3 показано использование наборов данных для публикации.



<a id="p100125"></a>Рисунок 3 - Набор данных в процессе публикации

<a id="p100126"></a>Опубликованный набор данных похож на элемент мониторинга событий либо на список элементов мониторинга данных в модели подписки клиент-сервер. Подобно элементу мониторинга событий опубликованный набор данных может выбирать список полей событий. Подобно элементам мониторинга данных опубликованный набор данных может содержать список переменных.
<a id="p100127"></a>Набор данных не определяет механизм кодирования, защиты и транспортировки. Запись набора данных обрабатывает создание сообщения набора данных для набора данных. Запись набора данных содержит настройки для кодирования и транспортировки сообщения набора данных. Большинство этих настроек зависят от выбранного промежуточного программного обеспечения, ориентированного на сообщения.
<a id="p100128"></a>Конфигурация наборов данных и способ получения данных для публикации могут быть настроены с использованием модели конфигурации PubSub, определенной в 8.2, или с помощью инструментов конфигурации, специфичных для поставщика.

##### <a id="p100129"></a>5.2.2 Класс набора данных

<a id="p100130"></a>Наборы данных могут быть индивидуальными для издателя или могут быть производными от класса набора данных. Такой класс набора данных действует как шаблон, объявляющий содержимое набора данных. Класс набора данных идентифицируется глобально уникальным идентификатором - идентификатором класса набора данных.
<a id="p100131"></a>Метаданные набора данных идентичны для всех опубликованных наборов данных, которые настроены на основе этого класса набора данных. Идентификатор класса набора данных должен находиться в соответствующем поле метаданных набора данных.
<a id="p100132"></a>Когда все сообщения набора данных сетевого сообщения создают из наборов данных, являющихся экземплярами одного и того же класса набора данных, идентификатор класса набора данных этого класса указывают в заголовке сетевого сообщения.

##### <a id="p100133"></a>5.2.3 Метаданные набора данных

<a id="p100134"></a>Метаданные набора данных описывают содержимое и семантику набора данных. Описание структуры включает общие атрибуты набора данных (например, имя и версию) и набор полей с их именем и типом данных. Порядок полей в метаданных набора данных должен соответствовать порядку значений в опубликованных сообщениях набора данных.
<a id="p100135"></a>*Пример* описания (упрощенный, на псевдоязыке):
<a id="p100136"></a>Имя: "Измерение температуры датчиком"
<a id="p100137"></a>Поля:
1) <a id="p100138"></a>Имя = DeviceName, Тип = Строка
2) <a id="p100139"></a>Имя = Temperature, Тип = Число с плавающей точкой, Единица = Градусы Цельсия, Диапазон = {1,100}
<a id="p100140"></a>Подписчики используют метаданные набора данных для декодирования значений сообщения набора данных в набор данных. Подписчики могут использовать имя и тип данных для дальнейшей обработки или отображения опубликованных данных.
<a id="p100141"></a>Каждое сообщение набора данных также включает версию метаданных набора данных, которым оно соответствует. Это позволяет подписчикам проверить, имеют ли они соответствующие метаданные набора данных.
<a id="p100142"></a>Для метаданных набора данных допускается специфичность для одного опубликованного набора данных или идентичность для всех опубликованных наборов данных, которые настроены на основе класса набора данных (см. 5.2.2).
<a id="p100143"></a>Существует несколько вариантов получения подписчиками исходных метаданных набора данных:
- <a id="p100144"></a>подписчик является OPC UA клиентом и может получить необходимую информацию о конфигурации из модели конфигурации PubSub, предоставляемой издателем, или с сервера конфигурации;
- <a id="p100145"></a>подписчик поддерживает методы конфигурации OPC UA, определенные в модели конфигурации PubSub;
- <a id="p100146"></a>подписчик получает метаданные набора данных в виде сетевого сообщения от издателя. Это может потребовать от подписчика возможности запросить это сетевое сообщение у издателя;
- <a id="p100147"></a>подписчик настроен с использованием специфичных для продукта средств конфигурации.
<a id="p100148"></a>Существует несколько способов обмена метаданными набора данных (DataSetMetaData) между издателем и подписчиком при изменении конфигурации:
- <a id="p100149"></a>метаданные набора данных отправляются в виде сетевого сообщения (NetworkMessage) от издателя подписчику до отправки сообщений набора данных (DataSetMessages) с измененным содержимым. Используемое промежуточное программное обеспечение (middleware) с ориентацией на сообщения должно обеспечивать надежную доставку сообщения. Сопоставление для middleware с ориентацией на сообщения определяет способ запроса подписчиком метаданных набора данных. Подписчик переходит в состояние ошибки, если он не получил новые метаданные набора данных, соответствующие версии конфигурации (ConfigurationVersion) полученного сообщения набора данных;
- <a id="p100150"></a>подписчик автоматически обновляется с помощью методов конфигурации OPC UA, определенных в модели конфигурации PubSub, когда набор данных у издателя обновляется;
- <a id="p100151"></a>подписчик является клиентом OPC UA и может получить обновление от издателя или сервера конфигурации через информацию, предоставляемую моделью конфигурации PubSub;
- <a id="p100152"></a>подписчик обновляется с помощью средств конфигурации, специфичных для продукта, когда набор данных у издателя изменяется.

#### <a id="p100153"></a>5.3 Сообщения


##### <a id="p100154"></a>5.3.1 Общие положения

<a id="p100155"></a>Термин "сообщение" в мире обмена сообщениями используется с различными значениями. Иногда он относится только к полезной нагрузке (прикладным данным), а иногда - к сетевому пакету, который также включает данные, специфичные для протокола, безопасности или кодирования. Чтобы избежать путаницы, в данном документе формально определяется, что термин "сообщение набора данных" (DataSetMessage) означает прикладные данные (полезную нагрузку), предоставляемые издателем, а термин "сетевое сообщение" (NetworkMessage) означает сообщение, переданное и полученное от конкретной middleware с ориентацией на сообщения. Сообщения набора данных встраиваются в сетевые сообщения. Рисунок 4 иллюстрирует взаимосвязь этих типов сообщений.



<a id="p100157"></a>Рисунок 4 - Уровни сообщений OPC UA PubSub

<a id="p100158"></a>Заголовки и определения, специфичные для транспортного протокола, описаны в 7.3. В 5.3.2, 5.3.3 и 5.3.4 содержится абстрактное определение DataSetMessage и NetworkMessage. Конкретная структура зависит от отображения сообщений и описана в 7.2.

##### <a id="p100159"></a>5.3.2 Поле DataSetMessage

<a id="p100160"></a>Поле DataSetMessage представляет собой поле DataSet в составе DataSetMessage. Поле DataSet содержит фактическое значение, а также дополнительную информацию о значении, такую как статус и временная метка.
<a id="p100161"></a>Поле DataSet может быть представлено в DataSetMessage как DataValue, Variant или RawData. Представление зависит от DataSetFieldContentMask, определенного в 6.2.
<a id="p100162"></a>Представление в виде DataValue используется, если значение, статус и временная метка включены в DataSetMessage.
<a id="p100163"></a>Представление в виде Variant используется, если в DataSetMessage должно быть включено значение или статус "плохо".
<a id="p100164"></a>Представление в виде RawData является наиболее эффективным форматом и используется, если достаточно общего статуса и временной метки для каждого DataSet.

##### <a id="p100165"></a>5.3.3 DataSetMessage

<a id="p100166"></a>Сообщение набора данных (DataSetMessage) создается из DataSet. Он состоит из заголовка и закодированных полей DataSet.
<a id="p100167"></a>В зависимости от настроенного DataSetMessageContentMask, DataSetMessage может существовать в различных формах и с разной степенью детализации. DataSetMessages не содержат никакой информации о сборе данных или источнике данных в Publisher.
<a id="p100168"></a>Дополнительная информация заголовка включает:
<a id="p100169"></a>DataSetWriterId идентифицирует DataSetWriter и косвенно PublishedDataSet.
<a id="p100170"></a>Номер последовательности: число, которое увеличивается для каждого сообщения набора данных. Может использоваться для проверки порядка и обнаружения пропущенных сообщений.
<a id="p100171"></a>Временная метка: метка времени, описывающая, когда были получены данные в этом сообщении набора данных.
<a id="p100172"></a>Версия: информация о версии конфигурации метаданных набора данных.
<a id="p100173"></a>Статус: информация о статусе данных в этом сообщении набора данных.
<a id="p100174"></a>Поддержание активности: когда сообщения набора данных не отправляются в течение настроенного периода времени, отправляется сообщение набора данных для поддержания активности, чтобы сигнализировать подписчикам, что издатель все еще активен.
<a id="p100175"></a>Некоторые кодировки различают сообщения набора данных ключевого кадра и сообщения набора данных дельта-кадра. Сообщение набора данных ключевого кадра включает значения для всех полей набора данных. Сообщение набора данных дельта-кадра содержит только подмножество, которое изменилось с момента предыдущего сообщения набора данных. Сообщение набора данных ключевого кадра отправляется после настроенного количества сообщений набора данных.

##### <a id="p100176"></a>5.3.4 Сетевое сообщение

<a id="p100177"></a>Сетевое сообщение является контейнером для сообщений набора данных и включает информацию, общую для сообщений набора данных. Эта информация состоит из:
<a id="p100178"></a>идентификатора издателя: идентифицирует издателя;
<a id="p100179"></a>данных безопасности: доступны только для кодировок, поддерживающих безопасность сообщений. Соответствующая информация указана в сопоставлении сообщений;
<a id="p100180"></a>продвигаемых полей: выбранные поля из набора данных, также отправляемые в заголовке;
<a id="p100181"></a>полезной нагрузки: одно или несколько сообщений набора данных. Полезная нагрузка, состоящая из сообщений набора данных, будет зашифрована в соответствии с настроенной безопасностью сообщений. Отдельные поля сообщения набора данных могут быть помечены как "продвигаемые поля". Такие поля предназначены для фильтрации или маршрутизации и поэтому никогда не шифруются. От формата сетевого сообщения и используемого протокола зависит, как и где вставляются значения характеристик продвигаемых полей. Для обеспечения эффективности фильтрации заголовок сетевого сообщения не шифруется.

##### <a id="p100182"></a>5.3.5 Безопасность сообщений

<a id="p100183"></a>Безопасность сообщений в PubSub касается целостности и конфиденциальности полезной нагрузки опубликованного сообщения. Основные концепции безопасности OPC UA определены в ГОСТ Р 71807. Уровень безопасности может быть следующим:
- <a id="p100184"></a>без безопасности;
- <a id="p100185"></a>подписание, но без шифрования;
- <a id="p100186"></a>подписание и шифрование.
<a id="p100187"></a>Безопасность сообщений является сквозной (от издателя к подписчику) и требует общего знания криптографических ключей, необходимых для подписания и шифрования на стороне издателя, а также для проверки подписи и расшифровки на стороне подписчика.
<a id="p100188"></a>Ключи, используемые для безопасности сообщений, управляются в контексте группы безопасности (SecurityGroup). Основные концепции группы безопасности описаны в 5.3.7.
<a id="p100189"></a>Данный стандарт определяет общую структуру распределения криптографических ключей. Эта структура представлена в 5.4.3.
<a id="p100190"></a>Все параметры, относящиеся к безопасности сообщений, описаны в 6.2. Эти параметры не зависят от безопасности транспортного уровня брокера.
<a id="p100191"></a>Безопасность сообщений для PubSub не зависит от сопоставления транспортных протоколов и полностью определяется OPC UA.

##### <a id="p100192"></a>5.3.6 Безопасность транспорта

<a id="p100193"></a>Безопасность транспорта зависит от конкретного протокола передачи данных. При использовании промежуточного ПО на основе брокера конфиденциальность и целостность обеспечивается с помощью транспортной безопасности между издателями и брокером, а также между подписчиками и брокером. Безопасность на уровне брокера дополнительно требует, чтобы все издатели и подписчики имели учетные данные, предоставляющие им доступ к ресурсу брокера.
<a id="p100194"></a>Транспортную безопасность допускается обеспечивать как пошаговую, с некоторым риском атак типа "человек посередине". Она также требует доверия к брокеру, поскольку брокер может читать сообщения. Сочетание транспортной безопасности с безопасностью сообщений снижает этот риск.

##### <a id="p100195"></a>5.3.7 Группа безопасности (SecurityGroup)

<a id="p100196"></a>SecurityGroup - это абстракция, представляющая настройки безопасности сообщений и ключи безопасности для подмножества сетевых сообщений, которыми обмениваются издатели и подписчики. Ключи безопасности используются для шифрования и дешифрования сетевых сообщений, а также для создания и проверки подписей на сетевом сообщении.
<a id="p100197"></a>SKS управляет SecurityGroups и поддерживает соответствие между ролями и их разрешениями на доступ к SecurityGroup. Это соответствие определяет, имеет ли издатель или подписчик доступ к ключам безопасности SecurityGroup. SKS более подробно описана в 5.4.3.
<a id="p100198"></a>SecurityGroup идентифицируется уникальным идентификатором под названием SecurityGroupId. Он уникален в пределах SKS. Издателю для его PublishedDataSets необходимо знать SecurityGroupId. Для подписчиков SecurityGroupId распространяется в виде метаданных вместе с DataSetMetaData. Метаданные для SecurityGroupId включают EndpointDescription ответственной SKS. Издатели и подписчики используют EndpointDescription для доступа к SKS и SecurityGroupId для получения ключей безопасности для SecurityGroup.

#### <a id="p100199"></a>5.4 Сущности


##### <a id="p100200"></a>5.4.1 Издатель


###### <a id="p100201"></a>5.4.1.1 Общая информация

<a id="p100202"></a>Издатель - это сущность PubSub, которая отправляет сетевые сообщения в промежуточное программное обеспечение, ориентированное на сообщения. Он представляет собой определенный источник информации, например управляющее устройство, производственный процесс, метеостанцию или фондовую биржу.
<a id="p100203"></a>Издатель представляет собой сервер OPC UA. Однако для абстрактных концепций PubSub - это произвольная сущность, и не следует предполагать, что это отдельный или даже конкретный сетевой узел (IP-адрес или MAC-адрес) или конкретное приложение. На рисунке 5 показан издатель с процессами сбора данных, кодирования и отправки сообщений.



<a id="p100205"></a>Рисунок 5 - Сведения об издателе

<a id="p100206"></a>Один издатель может поддерживать несколько опубликованных наборов данных (PublishedDataSets) и несколько средств записи наборов данных (DataSetWriters) для одной или нескольких систем обмена сообщениями (Message Oriented Middleware). Средство записи наборов данных является логическим компонентом издателя. Дополнительная информация о процессе записи наборов данных приведена в 5.4.1.2.
<a id="p100207"></a>Если издатель является OPC UA сервером, он может предоставлять конфигурацию издателя в своем адресном пространстве. Эта информация создается с помощью инструментов конфигурации, специфичных для продукта, или с помощью методов, определенных в OPC UA. Модель информации OPC UA для конфигурации PubSub указана в разделе 9.

###### <a id="p100208"></a>5.4.1.2 Отправка сообщений

<a id="p100209"></a>Рисунок 6 иллюстрирует процесс внутри издателя при создании и отправке сообщений, а также параметры, необходимые для его выполнения. Такие компоненты, как сбор наборов данных или средство записи наборов данных, следует рассматривать как абстрактные. Они могут не существовать в каждом издателе как отдельные сущности. Однако для генерации сообщений OPC UA PubSub должны существовать сопоставимые процессы.



<a id="p100211"></a>Рисунок 6 - Последовательность отправки сообщений издателем

<a id="p100212"></a>Процесс отправки управляется различными параметрами для разных логических шагов. Параметры определяют, например, когда и как часто запускать последовательность отправки, а также кодирование и безопасность сообщений. Параметры связи PubSub определены в разделе 6.
<a id="p100213"></a>Первым шагом является сбор данных (набор данных), предназначенных для публикации. Конфигурация такого сбора называется PublishedDataSet. PublishedDataSet также определяет DataSetMetaData. Сбор является общим термином для различных вариантов, таких как мониторинг переменных в адресном пространстве сервера OPC UA, обработка событий OPC UA или, например, чтение данных из сетевых пакетов. В итоге процесс сбора формирует значения для отдельных полей набора данных.
<a id="p100214"></a>На следующем шаге DataSetWriter берет набор данных и создает DataSetMessage. DataSetMessages от DataSetWriters в одной WriterGroup могут быть объединены в одно NetworkMessage. Создание DataSetMessage управляется следующими параметрами:
- <a id="p100215"></a>DataSetFieldContentMask определяет, какие атрибуты значения должны быть закодированы;
- <a id="p100216"></a>DataSetMessageContentMask определяет, какие поля заголовка должны быть закодированы;
- <a id="p100217"></a>KeyFrameCount определяет, будет ли создан ключевой кадр или инкрементный кадр DataSetMessage.
<a id="p100218"></a>Полученный DataSetMessage передается на следующий шаг вместе с DataSetWriterId, DataSetClassId, ConfigurationVersion DataSetMetaData и списком значений, соответствующих настроенным распространяемым полям.
<a id="p100219"></a>Далее следует создание NetworkMessage. Для этого используются данные, полученные на предыдущем шаге, вместе с PublisherId, определенным для WriterGroup. Структура этого сообщения зависит от протокола. Если SecurityMode требует обеспечения безопасности сообщений, SecurityGroupId используется для получения SecurityPolicy и ключей безопасности из SKS (см. 5.4.3). Эта информация используется для шифрования и/или подписи NetworkMessage в соответствии с требованиями SecurityMode.
<a id="p100220"></a>Завершающим этапом является доставка NetworkMessage в Message Oriented Middleware через настроенный адрес.

##### <a id="p100221"></a>5.4.2 Подписчик


###### <a id="p100222"></a>5.4.2.1 Общие сведения

<a id="p100223"></a>Подписчики являются потребителями NetworkMessage из Message Oriented Middleware. Ими могут быть OPC UA клиенты, OPC UA серверы или приложения, которые не являются ни клиентами, ни серверами, но понимают структуру OPC UA PubSub сообщений. Рисунок 7 иллюстрирует подписчика с фильтрацией, декодированием и диспетчеризацией NetworkMessage.



<a id="p100225"></a>Рисунок 7 - Детали подписчика

<a id="p100226"></a>Для определения того, на какие DataSetMessage и в каком Message Oriented Middleware осуществлять подписку, подписчик должен быть настроен и/или использовать механизмы обнаружения. Подписчики должны быть готовы принимать сообщения, которые они не понимают или которые не имеют к ним отношения. Каждое NetworkMessage содержит в заголовке нешифрованные данные для идентификации и фильтрации соответствующих издателей, DataSetMessage, DataSetClass или другого релевантного содержимого сообщения (см. 5.3).
<a id="p100227"></a>Если NetworkMessage подписано или подписано и зашифровано, подписчику потребуются соответствующие ключи безопасности (см. 5.3.5) для проверки подписи и расшифровки соответствующих DataSetMessage. После того как DataSetMessage выбрано как релевантное, оно будет передано соответствующему DataSetReader для декодирования в DataSet. Дополнительная информация об этом процессе чтения DataSet приведена в 5.4.2.2. Полученный DataSet затем далее обрабатывается или диспетчеризуется в подписчике.
<a id="p100228"></a>Если подписчик является OPC UA сервером, он может предоставлять конфигурацию считывателя в своем AddressSpace. Эта информация может быть создана с помощью инструментов конфигурации, специфичных для продукта, или с помощью определенной OPC UA модели конфигурации. Информационная модель OPC UA для конфигурации PubSub указана в разделе 9.

###### <a id="p100229"></a>5.4.2.2 Прием сообщений

<a id="p100230"></a>На рисунке 8 показан процесс, происходящий внутри подписчика при получении, декодировании и интерпретации сообщений, а также модель параметров, необходимая для его выполнения. Что касается издателя, то компоненты следует рассматривать как абстрактные.



<a id="p100232"></a>Рисунок 8 - Последовательность приема сообщений подписчиком

<a id="p100233"></a>Подписчику необходимо выбрать требуемое промежуточное программное обеспечение, ориентированное на сообщения, и установить соединение с ним, используя предоставленный адрес. Такое соединение может быть просто адресом многоадресной рассылки при использовании OPC UA UDP или соединением с брокером сообщений при использовании MQTT или AMQP. После подписки подписчик начнет прослушивание. Последовательность начинается с получения NetworkMessage. Подписчику допускается настраивать фильтры (например, PublisherId, DataSetWriterId или DataSetClassId), чтобы отбрасывать все сообщения, не соответствующие фильтру.
<a id="p100234"></a>После принятия NetworkMessage он расшифровывается и декодируется. Параметры безопасности такие же, как и для издателя.
<a id="p100235"></a>Каждое интересующее DataSetMessage передается DataSetReader. Здесь DataSetMetaData используется для декодирования содержимого DataSetMessage в DataSet. DataSetMetaData, в частности, предоставляет полный синтаксис полей, включая имя, тип данных и другие соответствующие свойства, такие как инженерные единицы. Информация о версии, существующая как в DataSetMessage, так и в DataSetMetaData, позволяет подписчику обнаруживать изменения версии. В случае серьезных изменений подписчику необходимо получить обновленный DataSetMetaData.
<a id="p100236"></a>Любая дальнейшая обработка зависит от конкретного приложения. Например, дополнительный этап диспетчеризации может сопоставить полученные значения с узлами в пространстве адресов OPC UA подписчика. Конфигурация для такой диспетчеризации называется SubscribedDataSet.

##### <a id="p100237"></a>5.4.3 Служба ключей безопасности


###### <a id="p100238"></a>5.4.3.1 Общие положения

<a id="p100239"></a>SKS предоставляет ключи для обеспечения безопасности сообщений, которые могут использоваться издателем для подписи и шифрования сетевых сообщений, а также подписчиком для проверки подписи сетевых сообщений и их расшифровки.
<a id="p100240"></a>SKS отвечает за управление ключами, используемыми для публикации или потребления сетевых сообщений PubSub. Отдельные ключи связаны с каждой группой безопасности (SecurityGroupId) в системе.
<a id="p100241"></a>Метод GetSecurityKeys, предоставляемый SKS, должен вызываться для получения необходимого ключевого материала для определенной группы безопасности. Метод GetSecurityKeys может возвращать более одного ключа. В этом случае следующий ключ может быть использован, когда текущий ключ устареет, без необходимости вызывать GetSecurityKeys для каждого необходимого ключа.
<a id="p100242"></a>Метод SetSecurityKeys обычно используется централизованной SKS для передачи ключей безопасности для группы безопасности издателю или подписчику. Метод предоставляется издателями или подписчиками, которые не имеют функциональности клиента OPC UA.

##### <a id="p100243"></a>5.4.4 Промежуточное программное обеспечение, ориентированное на сообщения


###### <a id="p100244"></a>5.4.4.1 Общие положения

<a id="p100245"></a>Промежуточное программное обеспечение, ориентированное на сообщения, представляет собой любую инфраструктуру, поддерживающую отправку и получение сетевых сообщений между распределенными приложениями. OPC UA не определяет промежуточное программное обеспечение, ориентированное на сообщения, а использует протоколы, которые позволяют подключаться, отправлять и получать данные. Сопоставления транспортных протоколов для PubSub описаны в 7.3. В настоящем стандарте описаны два общих типа промежуточного программного обеспечения, ориентированного на сообщения, для охвата большого числа сценариев использования. Эти два типа, безброкерное и брокерное промежуточное программное обеспечение, описаны в 5.4.4.2 и 5.4.5.3.

###### <a id="p100246"></a>5.4.4.2 Безброкерное промежуточное программное обеспечение


###### <a id="p100247"></a>5.4.4.2.1 Общие сведения

<a id="p100248"></a>В этом варианте OPC UA PubSub полагается на сетевую инфраструктуру для доставки сетевых сообщений одному или нескольким получателям. Для этой цели обычно используются сетевые устройства, такие как сетевые маршрутизаторы, коммутаторы или мосты.
<a id="p100249"></a>Один из примеров - коммутируемая сеть и использование UDP с одноадресными или многоадресными сообщениями.
<a id="p100250"></a>SKS представляет собой сервер, предоставляющий метод GetSecurityKeys. Токен доступа используется для определения того, разрешен ли вызывающему приложению доступ к ключам. Одним из способов сделать это может быть проверка разрешений, назначенных объекту SecurityGroup, идентифицированному аргументами метода GetSecurityKeys. Издатели и подписчики могут запрашивать ключи, если предоставленный ими токен доступа сопоставлен ролям, которым предоставлено разрешение на просмотр объекта SecurityGroup.

##### <a id="p100251"></a>5.4.5 Посредничество на основе сообщений


###### <a id="p100252"></a>5.4.5.1 Общие положения

<a id="p100253"></a>Посредничество на основе сообщений представляет собой любую инфраструктуру, поддерживающую отправку и получение сетевых сообщений между распределенными приложениями. OPC UA не определяет посредничество на основе сообщений, а использует протоколы, позволяющие устанавливать соединения, отправлять и получать данные. Сопоставления транспортных протоколов для PubSub описаны в 7.3. В данном документе описаны два общих типа посредничества на основе сообщений для охвата большого числа сценариев использования.

###### <a id="p100254"></a>5.4.5.2 Посредничество без брокера


###### <a id="p100255"></a>5.4.5.2.1 Общие положения

<a id="p100256"></a>При использовании этого варианта OPC UA PubSub полагается на сетевую инфраструктуру для доставки сетевых сообщений одному или нескольким получателям. Для этой цели обычно используются сетевые устройства, такие как сетевые маршрутизаторы, коммутаторы или мосты. Одним из примеров является коммутируемая сеть и использование UDP с одноадресными или многоадресными сообщениями.

###### <a id="p100257"></a>5.4.5.3 Промежуточное программное обеспечение на основе брокера


###### <a id="p100258"></a>5.4.5.3.1 Общие положения

<a id="p100259"></a>Ни одно приложение не взаимодействует напрямую с другими приложениями. Все взаимодействие проходит через брокера. Брокер маршрутизирует сетевые сообщения к нужным приложениям на основе бизнес-критериев, а не на основе физической топологии (IP-адреса, имена хостов).
<a id="p100260"></a>Преимущества этой модели (частично зависящие от используемого брокера и его конфигурации) включают:
- <a id="p100261"></a>издатель и подписчик не должны быть напрямую адресуемыми. Они могут находиться где угодно, если у них есть доступ к брокеру;
- <a id="p100262"></a>рассылка может быть реализована для очень большого списка подписчиков, нескольких сетей или даже цепочек брокеров или масштабируемых брокеров;
- <a id="p100263"></a>время жизни издателя и подписчика не обязательно должно совпадать. Приложение-издатель может отправлять сетевые сообщения брокеру и завершать работу. Сетевые сообщения будут доступны для приложения-подписчика позже.
<a id="p100264"></a>Издатель и подписчик могут использовать разные протоколы обмена сообщениями для связи с брокером.
<a id="p100265"></a>Кроме того, модель брокера в некоторой степени устойчива к сбоям приложений. Таким образом, если приложение содержит ошибки и склонно к сбоям, NetworkMessages, которые уже находятся в брокере, будут сохранены, даже если приложение выйдет из строя.


### <a id="p100266"></a>6 Параметры связи PubSub



#### <a id="p100267"></a>6.1 Обзор

<a id="p100268"></a>PubSub определяет различные параметры конфигурации для различных компонентов PubSub. Они определяют поведение издателя и подписчика. Параметры сгруппированы по компонентам и разделены на категории: "общие", "отображение сообщений" и "отображение транспортного протокола". Общие параметры определены в 6.2. Параметры для различных отображений сообщений определены в 6.3. Параметры для различных отображений транспортных протоколов определены в 6.4. Применение параметров связи для конкретных отображений сообщений и транспортных протоколов определено в разделе 7. Конфигурация этих параметров может выполняться через модель информации OPC UA для конфигурации PubSub, определенную в разделе 9, или через механизмы, специфичные для поставщика.
<a id="p100269"></a>Группировки параметров в разделе 6 определяют параметры, а также структуры, используемые для представления параметров этих группировок. Эти структуры используются в модели конфигурации PubSub, описанной в разделе 9, но они также могут использоваться для автономной конфигурации или механизмов конфигурации, специфичных для поставщика.

#### <a id="p100270"></a>6.2 Общие параметры конфигурации


##### <a id="p100271"></a>6.2.1 Конечный автомат состояния PubSubState

<a id="p100272"></a>PubSubState используется для отображения и управления работой компонента PubSub. Это перечисление возможных состояний. Значения перечисления описаны в таблице 1.

<a id="p100273"></a>Таблица 1

<a id="p100274"></a>Значения состояния PubSubState (издатель-подписчик)


| <a id="p100275"></a>Значения | <a id="p100276"></a>Описание |
| --- | --- |
| <a id="p100277"></a>Disabled_0 | <a id="p100278"></a>Компонент издатель-подписчик настроен, но в настоящее время отключен |
| <a id="p100279"></a>Paused_1 | <a id="p100280"></a>Компонент издатель-подписчик включен, но в настоящее время приостановлен родительским компонентом. Родительский компонент имеет статус Disabled_0 или Paused 1 |
| <a id="p100281"></a>Operational_2 | <a id="p100282"></a>Компонент издатель-подписчик работает |
| <a id="p100283"></a>Error_3 | <a id="p100284"></a>Компонент издатель-подписчик находится в состоянии ошибки |


<a id="p100285"></a>Таблица 2 формально описывает переходы этого конечного автомата.

<a id="p100286"></a>Таблица 2

<a id="p100287"></a>Конечный автомат PubSubState


| <a id="p100288"></a>Источник состояния | <a id="p100289"></a>Целевое состояние | <a id="p100290"></a>Описание триггера |
| --- | --- | --- |
| <a id="p100291"></a>Disabled_0 | <a id="p100292"></a>Paused_1 | <a id="p100293"></a>Компонент был успешно включен, но родительский компонент находится в состоянии Disabled_0 или Paused_1 |
| <a id="p100294"></a>Disabled_0 | <a id="p100295"></a>Operational_2 | <a id="p100296"></a>Компонент был успешно включен |
| <a id="p100297"></a>Paused_1 | <a id="p100298"></a>Disabled_0 | <a id="p100299"></a>Компонент был успешно отключен |
| <a id="p100300"></a>Paused_1 | <a id="p100301"></a>Operational_2 | <a id="p100302"></a>Состояние родительского компонента изменилось на Operational_2 |
| <a id="p100303"></a>Operational_2 | <a id="p100304"></a>Disabled_0 | <a id="p100305"></a>Компонент был успешно отключен |
| <a id="p100306"></a>Operational_2 | <a id="p100307"></a>Paused_1 | <a id="p100308"></a>Состояние родительского компонента изменилось на Disabled_0 или Paused_1 |
| <a id="p100309"></a>Operational_2 | <a id="p100310"></a>Error_3 | <a id="p100311"></a>Существует отложенная ситуация ошибки для связанного компонента издатель/подписчик |
| <a id="p100312"></a>Error_3 | <a id="p100313"></a>Disabled_0 | <a id="p100314"></a>Компонент был успешно отключен |
| <a id="p100315"></a>Error_3 | <a id="p100316"></a>Paused_1 | <a id="p100317"></a>Состояние родительского компонента изменилось на Disabled_0 или Paused_1 |
| <a id="p100318"></a>Error_3 | <a id="p100319"></a>Operational_2 | <a id="p100320"></a>Ситуация с ошибкой для связанного компонента издатель/подписчик была устранена |



##### <a id="p100321"></a>6.2.2 Параметры опубликованного набора данных


###### <a id="p100322"></a>6.2.2.1 Метаданные набора данных


###### <a id="p100323"></a>6.2.2.1.1 Общие сведения

<a id="p100324"></a>Метаданные набора данных описывают содержимое и семантику набора данных. Порядок полей в метаданных набора данных должен соответствовать порядку полей набора данных при их включении в опубликованные сообщения набора данных. Тип метаданных набора данных (DataSetMetaDataType) определен в 6.2.2.1.2.

###### <a id="p100325"></a>6.2.2.1.2 Тип метаданных набора данных (DataSetMetaDataType)

<a id="p100326"></a>Данный тип структуры является подтипом DataTypeSchemaHeader и используется для предоставления метаданных для набора данных. Тип DataSetMetaDataType формально определен в таблице 3.
<a id="p100327"></a>DataTypeSchemaHeader предоставляет определения типов данных OPC UA, используемые в DataSetMetaData.

<a id="p100328"></a>Таблица 3

<a id="p100329"></a>Структура набора данных типа метаданных
(DataSetMetaDataType)


| <a id="p100330"></a>Название | <a id="p100331"></a>Тип | <a id="p100332"></a>Описание |
| --- | --- | --- |
| <a id="p100333"></a>Структура набора данных типа метаданных | <a id="p100334"></a>Структура |  |
| <a id="p100335"></a>Имя | <a id="p100336"></a>Строка | <a id="p100337"></a>Название набора данных |
| <a id="p100338"></a>Описание | <a id="p100339"></a>Локализованный текст | <a id="p100340"></a><a id="p100341"></a>Описания набора данных.<br>Значением по умолчанию является нулевой локализованный текст |
| <a id="p100342"></a>Поля | <a id="p100343"></a>Данные метаполя | <a id="p100344"></a>Метаданные для полей в наборе данных |
| <a id="p100345"></a>Идентификатор класса наборов данных | <a id="p100346"></a>Гид | <a id="p100347"></a><a id="p100348"></a>Это поле содержит глобальный уникальный идентификатор класса набора данных, если набор данных основан на классе набора данных. В этом случае это поле должно совпадать с идентификатором класса набора данных конкретной конфигурации набора данных.<br>Если наборы данных не созданы на основе класса, это поле имеет нулевое значение |
| <a id="p100349"></a>Версия конфигурации | <a id="p100350"></a>Тип данных версии конфигурации | <a id="p100351"></a>Версия конфигурации для текущей конфигурации набора данных |



###### <a id="p100352"></a>6.2.2.2 DataSetClassId

<a id="p100353"></a>Метаданные набора данных (DataSetMetaData) могут быть специфичны для одного издателя и одного выбора информации либо универсальны, например определены стандартизирующей организацией или оператором установки как класс набора данных (DataSetClass). Наборы данных, соответствующие такому классу набора данных, идентифицируются с помощью идентификатора класса набора данных (DataSetClassId).
<a id="p100354"></a>DataSetClassId является глобально уникальным идентификатором (Guid) класса набора данных. Он включается в DataSetMetaData. Маска содержимого сетевого сообщения (NetworkMessageContentMask) контролирует доступность DataSetClassId в сетевом сообщении.

###### <a id="p100355"></a>6.2.2.3 ExtensionFields

<a id="p100356"></a>Параметр ExtensionFields позволяет настраивать поля со значениями, которые будут включены в набор данных, когда существующее адресное пространство издателя не предоставляет необходимую информацию. ExtensionFields представлены в виде массива структур KeyValuePair.

###### <a id="p100357"></a>6.2.2.4 PublishedDataSetDataType

<a id="p100358"></a>Параметр Structure DataType представляет параметры опубликованного набора данных (PublishedDataSet).

###### <a id="p100359"></a>6.2.2.5 PublishedDataSetSourceDataType

<a id="p100360"></a>Параметр PublishedDataSetSourceDataType является абстрактным базовым типом без полей для определения источника опубликованного набора данных.

###### <a id="p100361"></a>6.2.2.6 Опубликованные элементы данных

<a id="p100362"></a>Параметр PublishedData определяет содержимое набора данных, созданного из значений переменных, и следовательно, содержимое сообщения набора данных, отправляемого средством записи наборов данных (DataSetWriter). Источники полей набора данных определяются через массив PublishedVariableDataType. Индекс в массиве играет важную роль для подписчиков и инструментов конфигурации. Он используется как идентификатор для ссылки на значение в сообщениях наборов данных, получаемых подписчиками. Индекс может изменяться после изменений конфигурации. Об изменениях сигнализирует версия конфигурации набора данных (ConfigurationVersion), и приложения, работающие с индексом, должны всегда проверять версию конфигурации перед его использованием.
<a id="p100363"></a>Если запись в PublishedData ссылается на одно из полей расширения (ExtensionFields), substituteValue должно содержать QualifiedName записи поля расширения. Все остальные поля этого элемента массива PublishedVariableDataType должны быть пустыми.

###### <a id="p100364"></a>6.2.2.7 Опубликованные события


###### <a id="p100365"></a>6.2.2.7.1 EventNotifier

<a id="p100366"></a>Параметр EventNotifier определяет NodeId объекта в дереве оповещателей событий сервера OPC UA, из которого собираются события.

###### <a id="p100367"></a>6.2.2.7.2 SelectedFields

<a id="p100368"></a>Параметр SelectedFields определяет выбор полей событий, содержащихся в наборе данных (DataSet), сгенерированном для события и отправленном через DataSetWriter. Тип данных SimpleAttributeOperand определен в ГОСТ Р 71809. Тип данных выбранного поля события в EventType определяет тип данных поля набора данных. Поля событий могут быть пустыми, или значение поля может быть StatusCode. Кодирование сообщений наборов данных на основе событий должно поддерживать эти случаи. Поля расширения (ExtensionFields), определенные для экземпляра PublishedEventsType, могут быть включены в SelectedFields путем указания NodeId PublishedEventsType в качестве typeId в SimpleAttributeOperand и BrowseName поля расширения в browsePath SimpleAttributeOperand.
<a id="p100369"></a>Индекс в списке записей SelectedFields играет важную роль для подписчиков. Он используется как идентификатор для ссылки на поле события в сообщениях наборов данных, получаемых подписчиками. Индекс может изменяться после изменений конфигурации. Изменения указываются с помощью ConfigurationVersion, и приложения; работающие с индексом, всегда должны проверять ConfigurationVersion перед использованием индекса.
<a id="p100370"></a>Если изменение SelectedFields добавляет дополнительные поля, должен быть обновлен MinorVersion ConfigurationVersion. Если изменение SelectedFields удаляет поля, должен быть обновлен MajorVersion ConfigurationVersion.

###### <a id="p100371"></a>6.2.2.7.3 Filter

<a id="p100372"></a>Параметр Filter определяет фильтр, применяемый к событиям. Он позволяет сократить количество наборов данных, генерируемых из событий, с помощью фильтра. Тип данных ContentFilter определен в ГОСТ Р 71809.

###### <a id="p100373"></a>6.2.2.7.4 PublishedEventsDataType

<a id="p100374"></a>Этот тип данных структуры используется для представления параметров, специфичных для опубликованных событий. Он является подтипом PublishedDataSetSourceDataType.

##### <a id="p100375"></a>6.2.3 Параметры DataSetWriter


###### <a id="p100376"></a>6.2.3.1 DataSetWriterId

<a id="p100377"></a>DataSetWriterId с типом данных UInt16 определяет уникальный идентификатор DataSetWriter для PublishedDataSet. Он используется для выбора DataSetMessages для PublishedDataSet на стороне подписчика. Он должен быть уникальным для всех DataSetWriter в пределах одного PublisherId. Все значения, кроме 0, являются допустимыми DataSetWriterId. Значение 0 определено как нулевое значение.

###### <a id="p100378"></a>6.2.3.2 DataSetFieldContentMask

<a id="p100379"></a>Поле DataSet состоит из значения и связанной с ним метаинформации. В большинстве случаев значение сопровождается информацией о статусе и временной меткой. Этот тип данных определяет флаги для включения информации, связанной с полем DataSet, такой как статус и временная метка, в дополнение к значению в DataSetMessage.
<a id="p100380"></a>DataSetFieldContentMask формально определен в таблице 4.

<a id="p100381"></a>Таблица 4

<a id="p100382"></a>Значения маски содержимого полей набора данных


<table>
<colgroup><col width="56%"><col width="22%"><col width="22%"></colgroup>
<tr><td><a id="p100383"></a>Значение</td><td><a id="p100384"></a>Номер бита</td><td><a id="p100385"></a>Описание</td></tr>
<tr><td><a id="p100386"></a>Тип данных опубликованных событий</td><td><a id="p100387"></a>Структура</td><td></td></tr>
<tr><td colspan="3"><a id="p100388"></a><a id="p100389"></a><a id="p100390"></a><a id="p100391"></a>Поля набора данных могут быть представлены в виде исходных данных, вариантов или значений данных, как описано в 5.3.2.<br>Если ни один из флагов не установлен, поля представляются в виде вариантов.<br>Если установлен флаг необработанных данных, поля представляются в виде исходных данных, а все остальные биты игнорируются.<br>Если установлен один из битов с 0 по 4, поля представляются в виде значений данных</td></tr>
<tr><td><a id="p100392"></a>Код состояния</td><td><a id="p100393"></a>0</td><td></td></tr>
<tr><td><a id="p100394"></a>Временная метка источника</td><td><a id="p100395"></a>1</td><td></td></tr>
<tr><td><a id="p100396"></a>Временная метка сервера</td><td><a id="p100397"></a>2</td><td></td></tr>
<tr><td><a id="p100398"></a>Пикосекунды источника</td><td><a id="p100399"></a>3</td><td></td></tr>
<tr><td><a id="p100400"></a>Пикосекунды сервера</td><td><a id="p100401"></a>4</td><td></td></tr>
<tr><td><a id="p100402"></a>Необработанные данные</td><td><a id="p100403"></a>5</td><td></td></tr>
</table>


<a id="p100404"></a>Представление DataSetFieldContentMask в адресном пространстве определено в таблице 5.

<a id="p100405"></a>Таблица 5

<a id="p100406"></a>Определение маски содержимого поля набора данных


<table>
<colgroup><col width="25%"><col width="25%"><col width="25%"><col width="25%"></colgroup>
<tr><td><a id="p100407"></a>Атрибуты</td><td colspan="3"><a id="p100408"></a>Значение</td></tr>
<tr><td><a id="p100409"></a>Поисковое имя</td><td colspan="3"><a id="p100410"></a>Тип данных источника набора опубликованных данных</td></tr>
<tr><td><a id="p100411"></a>Является абстрактным</td><td colspan="3"><a id="p100412"></a>Ложь</td></tr>
<tr><td><a id="p100413"></a>Ссылки</td><td><a id="p100414"></a>Класс узла</td><td><a id="p100415"></a>Поисковое имя</td><td><a id="p100416"></a>Тип данных</td></tr>
<tr><td colspan="4"><a id="p100417"></a>Подтип UInt32, определенный в ГОСТ Р 71810</td></tr>
<tr><td><a id="p100418"></a>Наличие свойства</td><td><a id="p100419"></a>Переменная</td><td><a id="p100420"></a>Значения набора опций</td><td><a id="p100421"></a>Локализованный текст</td></tr>
</table>



##### <a id="p100422"></a>6.2.4 Общие параметры группы PubSub


###### <a id="p100423"></a>6.2.4.1 Общие сведения

<a id="p100424"></a>Параметры группы PubSub совместно используются группами WriterGroup и ReaderGroup. Данные параметры связаны с безопасностью сетевых сообщений PubSub. Введение в безопасность PubSub представлено в 5.4.3, а определение службы ключей безопасности PubSub в разделе 8.

###### <a id="p100425"></a>6.2.4.2 SecurityMode

<a id="p100426"></a>SecurityMode указывает уровень безопасности, применяемый к сетевым сообщениям, публикуемым группой WriterGroup или получаемым группой ReaderGroup. Тип данных MessageSecurityMode определен в ГОСТ Р 71809.

###### <a id="p100427"></a>6.2.4.3 SecurityGroupId

<a id="p100428"></a>SecurityGroupId с типом данных String является идентификатором группы безопасности в SKS. Он уникален в пределах SKS. Параметр имеет значение 0, если SecurityMode равен NONE_1.
<a id="p100429"></a>Если SecurityMode не равен NONE_1, SecurityGroupId идентифицирует группу безопасности. Группа безопасности определяет политику безопасности и ключи безопасности, используемые для безопасности сетевых сообщений. PubSubGroup определяет SecurityMode для сетевых сообщений, отправляемых группой.

###### <a id="p100430"></a>6.2.4.4 SecurityKeyServices

<a id="p100431"></a>SecurityKeyServices представляет собой массив типа данных EndpointDescription и определяет один или несколько SKS, которые управляют ключами безопасности для группы безопасности, назначенной PubSubGroup. Тип данных EndpointDescription определен в ГОСТ Р 71809. Параметр имеет значение 0, если SecurityMode равен NONE_1.
<a id="p100432"></a>Каждый элемент массива представляет собой конечную точку SKS, которая может предоставить ключи безопасности для SecurityGroupId. Существует несколько конечных точек, поскольку SKS может поддерживать несколько транспортных профилей и/или иметь несколько избыточных экземпляров. UserTokenPolicies в каждой конечной точке.

###### <a id="p100433"></a>6.2.4.5 MaxNetworkMessageSize

<a id="p100434"></a>Параметр MaxNetworkMessageSize типа UInt32 указывает максимальный размер в байтах для NetworkMessage, создаваемых WriterGroup. Он относится к размеру полного NetworkMessage, включая заполнение и подпись, без каких-либо дополнительных заголовков, добавляемых отображением транспортного протокола. Если размер NetworkMessage превышает MaxNetworkMessageSize, поведение зависит от отображения сообщения.
<a id="p100435"></a>Параметр GroupProperties представляет собой массив типа KeyValuePair, который задает дополнительные свойства для настроенной группы. Тип KeyValuePair определен в ГОСТ Р 71810 и состоит из QualifiedName и значения типа BaseDataType.
<a id="p100436"></a>Сопоставление имени и значения с конкретной функциональностью может быть определено отображениями транспортных протоколов или расширениями, специфичными для поставщика.

##### <a id="p100437"></a>6.2.5 Параметры группы записи (WriterGroup)


###### <a id="p100438"></a>6.2.5.1 Идентификатор группы записи (WriterGroupId)

<a id="p100439"></a>WriterGroupId имеет тип данных UInt16 и служит идентификатором группы записи. Он должен быть уникальным для каждого PublisherId среди всех групп записи. Допустимы все значения, кроме 0. Значение 0 определено как нулевое значение.

###### <a id="p100440"></a>6.2.5.2 Интервал публикации (PublishingInterval)

<a id="p100441"></a>PublishingInterval с типом данных Duration определяет интервал в миллисекундах для публикации сетевых сообщений (NetworkMessages) и встроенных сообщений наборов данных (DataSetMessages).
<a id="p100442"></a>В случае наборов данных, основанных на событиях, это может привести к созданию от нуля до множества DataSetMessages для одного опубликованного набора данных (PublishedDataSet) в течение одного PublishingInterval. Все события, произошедшие между двумя PublishingIntervals, должны буферизоваться до отправки следующего NetworkMessage. Если количество событий превышает возможности буферизации DataSetWriter, в буфер вставляется событие типа EventQueueOverflowEventType.
<a id="p100443"></a>Тип данных Duration является подтипом Double и позволяет настраивать интервалы меньше миллисекунды.

###### <a id="p100444"></a>6.2.5.3 Время поддержания активности (KeepAliveTime)

<a id="p100445"></a>KeepAliveTime с типом данных Duration определяет время в миллисекундах, по истечении которого издатель отправляет сообщение поддержания активности (DataSetMessage) в случае, если ни один DataSetWriter не отправил никаких сообщений за этот период. Минимальное значение должно быть равно PublishingInterval.

###### <a id="p100446"></a>6.2.5.4 Приоритет (Priority)

<a id="p100447"></a>Priority с типом данных Byte определяет относительный приоритет группы записи по отношению ко всем другим группам записи во всех соединениях публикации/подписки (PubSubConnections) издателя.
<a id="p100448"></a>Если требуется обработать более одной группы записи, число приоритета определяет порядок обработки. Наивысший приоритет обрабатывается первым.
<a id="p100449"></a>Наименьший приоритет равен нулю, а наибольший - 255.

###### <a id="p100450"></a>6.2.5.5 Идентификаторы локали (LocaleIds)

<a id="p100451"></a>LocaleIds с типом данных LocaleId определяет список идентификаторов локали в порядке приоритета для локализованных строк всех DataSetWriters в группе записи. Первый LocaleId в списке имеет наивысший приоритет.
<a id="p100452"></a>Если издатель отправляет локализованную строку, он должен отправить перевод с наивысшим приоритетом, который у него есть. Если у него нет перевода для какой-либо из локалей, указанных в этом списке, он должен отправить имеющееся у него строковое значение и включить LocaleId вместе со строкой. Если идентификатор локали не настроен, издатель должен использовать любой имеющийся у него. Дополнительную информацию об LocaleId см. в ГОСТ Р 71808.

##### <a id="p100453"></a>6.2.6 HeaderLayoutUri

<a id="p100454"></a>HeaderLayoutUri, имеющий тип данных String, определяет выбор заранее определенной конфигурации для подмножества параметров связи PubSub. Затронутое подмножество определяется структурой заголовка.
<a id="p100455"></a>Значение 0 для String означает отсутствие выбранной структуры. Если выбран макет, все затронутые параметры будут установлены в значения, определенные для этого макета.

##### <a id="p100456"></a>6.2.7 Параметры группы чтения (ReaderGroup)


###### <a id="p100457"></a>6.2.7.1 Общие сведения

<a id="p100458"></a>Группа чтения (ReaderGroup) не добавляет параметров к общим параметрам группы публикации (PubSubGroup). Группа чтения используется для группировки списка читателей наборов данных (DataSetReaders). Она не является симметричной группе записи (WriterGroup) и не связана с конкретным сетевым сообщением (NetworkMessage). Настройки фильтрации, связанные с сетевыми сообщениями, находятся в читателях наборов данных.

###### <a id="p100459"></a>6.2.7.2 Структуры группы чтения


###### <a id="p100460"></a>6.2.7.2.1 ReaderGroupDataType

<a id="p100461"></a>Этот тип данных структуры используется для представления параметров конфигурации групп чтения.

###### <a id="p100462"></a>6.2.7.2.2 ReaderGroupTransportDataType

<a id="p100463"></a>Эта структура данных является абстрактным базовым типом для параметров ReaderGroup, специфичных для конкретного транспортного отображения. Абстрактный тип данных не определяет полей. В адресном пространстве структура ReaderGroupTransportDataType представлена в соответствии с таблицей 6.

<a id="p100464"></a>Таблица 6

<a id="p100465"></a>Определение типа данных переноса группы средств чтения


<table>
<colgroup><col width="25%"><col width="25%"><col width="25%"><col width="25%"></colgroup>
<tr><td><a id="p100466"></a>Атрибуты</td><td colspan="3"><a id="p100467"></a>Значение</td></tr>
<tr><td><a id="p100468"></a>Поисковое имя</td><td colspan="3"><a id="p100469"></a>Тип данных переноса группы средств чтения</td></tr>
<tr><td><a id="p100470"></a>Является абстрактным</td><td colspan="3"><a id="p100471"></a>Истина</td></tr>
<tr><td><a id="p100472"></a>Ссылки</td><td><a id="p100473"></a>Класс узла</td><td><a id="p100474"></a>Поисковое имя</td><td><a id="p100475"></a>Является абстрактным</td></tr>
<tr><td colspan="4"><a id="p100476"></a>Подтип структуры, определенный в ГОСТ Р 71810</td></tr>
</table>



###### <a id="p100477"></a>6.2.7.2.3 ReaderGroupMessageDataType

<a id="p100478"></a>Данные поля представляют формализованный вид базового типа данных структуры, предназначенных для характеристики параметров группы считывателей, специфичных для сопоставления сообщений. Представление структуры ReaderGroupMessageDataType в адресном пространстве определено в таблице 7.

<a id="p100479"></a>Таблица 7

<a id="p100480"></a>Структура данных сообщения группы средств чтения


<table>
<colgroup><col width="25%"><col width="25%"><col width="25%"><col width="25%"></colgroup>
<tr><td><a id="p100481"></a>Атрибуты</td><td colspan="3"><a id="p100482"></a>Значение</td></tr>
<tr><td><a id="p100483"></a>Поисковое имя</td><td colspan="3"><a id="p100484"></a>Тип данных сообщения группы средств чтения</td></tr>
<tr><td><a id="p100485"></a>Является абстрактным</td><td colspan="3"><a id="p100486"></a>Истина</td></tr>
<tr><td><a id="p100487"></a>Ссылки</td><td><a id="p100488"></a>Класс узла</td><td><a id="p100489"></a>Поисковое имя</td><td><a id="p100490"></a>Является абстрактным</td></tr>
<tr><td colspan="4"><a id="p100491"></a>Подтип структуры, определенный в ГОСТ Р 71810</td></tr>
</table>



##### <a id="p100492"></a>6.2.8 Параметры DataSetReader


###### <a id="p100493"></a>6.2.8.1 PublisherId

<a id="p100494"></a>Параметр PublisherId определяет издателя, от которого будут приниматься NetworkMessages. Если значение 0, параметр игнорируется, и все полученные NetworkMessages проходят фильтр PublisherId. Допустимыми типами данных являются: UInteger и String.

###### <a id="p100495"></a>6.2.8.2 WriterGroupId

<a id="p100496"></a>Параметр WriterGroupId с типом данных UInt16 определяет идентификатор соответствующей группы источников данных (WriterGroup).
<a id="p100497"></a>Значение по умолчанию 0 определено как нулевое значение и означает, что параметр должен быть проигнорирован.

###### <a id="p100498"></a>6.2.8.3 DataSetWriterId

<a id="p100499"></a>Параметр DataSetWriterId с типом данных UInt16 определяет набор данных (DataSet), выбранный в издателе для DataSetReader.
<a id="p100500"></a>Если значение равно 0 (null), параметр игнорируется, и все полученные DataSetMessages проходят фильтр DataSetWriterId.

###### <a id="p100501"></a>6.2.8.4 DataSetMetaData

<a id="p100502"></a>Параметр DataSetMetaData предоставляет информацию, необходимую для декодирования DataSetMessages от издателя. Если DataSetMetaData изменяется у издателя и изменяется MajorVersion, DataSetReader нуждается в обновлении DataSetMetaData для дальнейшей работы. Если обновление не может быть получено в течение MessageReceiveTimeout, состояние DataSetReader должно измениться на Error_3.

###### <a id="p100503"></a>6.2.8.5 DataSetFieldContentMask

<a id="p100504"></a>Параметр DataSetFieldContentMask с типом данных DataSetFieldContentMask указывает поля DataValue, включенные в DataSetMessages.

###### <a id="p100505"></a>6.2.8.6 MessageReceiveTimeout

<a id="p100506"></a>Параметр MessageReceiveTimeout - это максимально допустимое время между двумя DataSetMessages. Если в течение этого периода не получено ни одного DataSetMessage, состояние DataSetReader должно измениться на Error_3 до получения следующего DataSetMessage.
<a id="p100507"></a>DataSetMessages могут быть данными или сообщениями поддержания активности (keep alive).
<a id="p100508"></a>Параметр MessageReceiveTimeout связан с параметрами на стороне издателя: PublishingInterval, KeepAliveTime и KeyFrameCount.

###### <a id="p100509"></a>6.2.8.7 KeyFrameCount

<a id="p100510"></a>KeyFrameCount с типом данных UInt32 является множителем PublishingInterval, который определяет максимальное количество истечений PublishingInterval перед получением сообщения ключевого кадра со всеми значениями полей.
<a id="p100511"></a>Для наборов данных, предоставляющих циклические обновления, значение должно быть больше или равно 1. Для нециклических наборов данных, таких как PublishedEvents, предоставляющих наборы данных на основе событий, значение должно быть 0.

###### <a id="p100512"></a>6.2.8.8 HeaderLayoutUri

<a id="p100513"></a>HeaderLayoutUri с типом данных String определяет выбор четко определенной конфигурации для подмножества параметров связи PubSub. Затронутое подмножество определяется макетом заголовка.
<a id="p100514"></a>Пустая строка (null String) определяется как отсутствие выбранного макета. Если макет выбран, все затронутые параметры должны быть установлены в значения, определенные для этого макета.

###### <a id="p100515"></a>6.2.8.9 DataSetReaderProperties

<a id="p100516"></a>Параметр DataSetReaderProperties представляет собой массив типа KeyValuePair, который определяет дополнительные свойства для настроенного DataSetReader. Тип данных KeyValuePair определен в ГОСТ Р 71810 и состоит из QualifiedName и значения типа BaseDataType.
<a id="p100517"></a>Сопоставление имени и значения с конкретной функциональностью может быть определено в соответствии с протоколами транспортного уровня.

###### <a id="p100518"></a>6.2.8.10 DataSetReader Structure

<a id="p100519"></a>Тип данных структуры SetReaderDataType используется для представления параметров DataSetReader.
<a id="p100520"></a>DataSetReaderTransportDataType является абстрактным базовым типом структуры, предназначенным для параметров DataSetReader, специфичных для транспорта.

##### <a id="p100521"></a>6.2.9 Параметры SubscribedDataSet


###### <a id="p100522"></a>6.2.9.1 SubscribedDataSetDataType

<a id="p100523"></a>Данный базовый тип структуры, представленный формализованно, предназначен для параметров SubscribedDataSet. SubscribedDataSetDataType формально показан в таблице 8.

<a id="p100524"></a>Таблица 8

<a id="p100525"></a>Структура типа данных набора данных подписок


| <a id="p100526"></a>Название | <a id="p100527"></a>Тип | <a id="p100528"></a>Описание |
| --- | --- | --- |
| <a id="p100529"></a>Тип данных набора данных подписок | <a id="p100530"></a>Структура |  |



###### <a id="p100531"></a>6.2.9.2 TargetVariables


###### <a id="p100532"></a>6.2.9.2.1 Общие сведения

<a id="p100533"></a>Опция SubscribedDataSet под названием TargetVariables определяет список соответствий между полученными полями DataSet и целевыми переменными в AddressSpace подписчика.

###### <a id="p100534"></a>6.2.9.2.2 TargetVariablesDataType

<a id="p100535"></a>Этот тип структуры данных используется для представления параметров, специфичных для TargetVariables.

###### <a id="p100536"></a>6.2.9.2.3 FieldTargetDataType

<a id="p100537"></a>FieldTargetDataType является типом данных, используемым для предоставления метаданных для связи между полем в DataSetMessage и целевой переменной в DataSetReader.

###### <a id="p100538"></a>6.2.9.3 Зеркало подписки на набор данных


###### <a id="p100539"></a>6.2.9.3.1 Имя базового узла

<a id="p100540"></a>Этот параметр типа String определяет BrowseName и DisplayName базового узла для переменных, представляющих поля подписки на набор данных.

###### <a id="p100541"></a>6.2.9.3.2 Разрешения ролей

<a id="p100542"></a>Этот параметр типа RolePermissionType определяет значение атрибута разрешения ролей, которое будет установлено для базового узла. Это значение также используется как разрешения ролей для всех переменных зеркала набора данных.

###### <a id="p100543"></a>6.2.9.3.3 Тип данных зеркала подписки на набор данных

<a id="p100544"></a>Этот структурный тип данных используется для представления специфических параметров зеркала подписки на набор данных.

##### <a id="p100545"></a>6.2.10 PubSubConfigurationDataType

<a id="p100546"></a>PubSubConfigurationDataType является структурированным типом данных, используемым для представления конфигурации PubSub приложения OPC UA. PubSubConfigurationDataType формально определен в таблице 9.

<a id="p100547"></a>Таблица 9

<a id="p100548"></a>Структура типа данных конфигурации издатель-подписчик


| <a id="p100549"></a>Название | <a id="p100550"></a>Тип | <a id="p100551"></a>Описание |
| --- | --- | --- |
| <a id="p100552"></a>Тип данных конфигурации издатель-подписчик | <a id="p100553"></a>Структура |  |
| <a id="p100554"></a>Наборы опубликованных данных | <a id="p100555"></a>Тип данных набора опубликованных данных | <a id="p100556"></a>Опубликованные наборы данных, содержащиеся в конфигурации |
| <a id="p100557"></a>Соединения | <a id="p100558"></a>Тип данных соединения издатель/подписчик | <a id="p100559"></a>Соединения издатель-подписчик, содержащиеся в конфигурации. Соединение включает группы средств записи и группы средств чтения |
| <a id="p100560"></a>Включенный | <a id="p100561"></a>Булево | <a id="p100562"></a>Включенное состояние конфигурации издатель-подписчик |



#### <a id="p100563"></a>6.3 Параметры конфигурации отображения сообщений


##### <a id="p100564"></a>6.3.1 Сопоставление сообщений UADP


###### <a id="p100565"></a>6.3.1.1 Запись NetworkMessage UADP


###### <a id="p100566"></a>6.3.1.1.1 Взаимосвязь параметров времени

<a id="p100567"></a>PublishingInterval, SamplingOffset, PublishingOffset и временная метка в заголовке NetworkMessage должны использовать одну и ту же временную базу.
<a id="p100568"></a>Если базовая сеть предоставляет синхронизированные глобальные часы, эти часы должны использоваться в качестве временной базы для Publisher и Subscriber.
<a id="p100569"></a>Начало PublishingInterval должно быть кратно PublishingInterval относительно начала временной базы. Опорное время начала PublishingInterval можно рассчитать по следующей формуле:
<a id="p100570"></a>Начало периодического выполнения = текущее время + PublishingInterval - (текущее время/PublishingInterval)
<a id="p100571"></a>Текущее время - это количество наносекунд с начала эпохи, используемой эталонными часами.
<a id="p100572"></a>PublishingInterval - это продолжительность в наносекундах.
<a id="p100573"></a>Начало периодического выполнения - это количество наносекунд с начала эпохи, которое является следующим возможным началом PublishingInterval.

###### <a id="p100574"></a>6.3.1.1.2 GroupVersion

<a id="p100575"></a>GroupVersion с типом данных VersionTime отражает время последнего изменения структуры содержимого NetworkMessages, публикуемых WriterGroup. Тип данных VersionTime определен в ГОСТ Р 71809. GroupVersion изменяется при модификации одного из следующих параметров:
- <a id="p100576"></a>NetworkMessageContentMask данной WriterGroup;
- <a id="p100577"></a>сдвиг любого DataSetWriter в данной WriterGroup;
- <a id="p100578"></a>MinorVersion набора данных любого DataSetWriter в данной WriterGroup;
- <a id="p100579"></a>DataSetFieldContentMask любого DataSetWriter в данной WriterGroup;
- <a id="p100580"></a>DataSetMessageContentMask любого DataSetWriter в данной WriterGroup;
- <a id="p100581"></a>DataSetWriterId любого DataSetWriter в данной WriterGroup.
<a id="p100582"></a>GroupVersion действителен для всех NetworkMessages, полученных из данной WriterGroup.

###### <a id="p100583"></a>6.3.1.1.3 DataSetOrdering

<a id="p100584"></a>DataSetOrdering определяет порядок DataSetMessages в NetworkMessages.
<a id="p100585"></a>DataSetOrderingType - это перечисление, которое указывает возможные варианты порядка DataSetMessages внутри NetworkMessages.
<a id="p100586"></a>Если для параметра DataSetOrdering установлено значение Undefined_0, допускается любой порядок расположения наборов данных (DataSets) и их распределение по сетевым сообщениям (NetworkMessages). Порядок и распределение могут даже меняться между каждым интервалом публикации (PublishingInterval).
<a id="p100587"></a>Если DataSetOrdering установлен в AscendingWriterId_1, издатель должен заполнять каждое сетевое сообщение наборами данных в порядке возрастания идентификаторов записей наборов данных (DataSetWriterIds), при условии, что суммарный размер наборов данных не превысит максимальный размер сетевого сообщения (MaxNetworkMessageSize).

###### <a id="p100588"></a>6.3.1.1.4 NetworkMessageContentMask

<a id="p100589"></a>Параметр NetworkMessageContentMask определяет необязательные поля заголовка, которые должны быть включены в сетевые сообщения, создаваемые группой записей (WriterGroup). Типом данных для отображения сетевых сообщений UADP (UADP NetworkMessage mapping) является UadpNetworkMessageContentMask. Тип данных UadpNetworkMessageContentMask формально определен в таблице 10.

<a id="p100590"></a>Таблица 10

<a id="p100591"></a>Значения маски содержимого сетевого сообщения UADP


| <a id="p100592"></a>Значение | <a id="p100593"></a>Номер бита | <a id="p100594"></a>Описание |
| --- | --- | --- |
| <a id="p100595"></a>Идентификатор издателя | <a id="p100596"></a>0 | <a id="p100597"></a>Идентификатор издателя включен в сетевые сообщения |
| <a id="p100598"></a>Заголовок группы | <a id="p100599"></a>1 | <a id="p100600"></a>Заголовок группы включен в сетевые сообщения |
| <a id="p100601"></a>Идентификатор группы средств записи | <a id="p100602"></a>2 | <a id="p100603"></a><a id="p100604"></a>Поле идентификатора группы средств записи включено в заголовок группы.<br>Флаг действителен только в том случае, если установлен бит 1 |
| <a id="p100605"></a>Версия группы | <a id="p100606"></a>3 | <a id="p100607"></a><a id="p100608"></a>Поле версии группы средств записи включено в заголовок группы.<br>Флаг действителен только в том случае, если установлен бит 1 |
| <a id="p100609"></a>Номер сетевого сообщения | <a id="p100610"></a>4 | <a id="p100611"></a><a id="p100612"></a>Поле номера сетевого сообщения включено в заголовок группы. Это поле является обязательным, если для передачи всех наборов данных группы требуется более одного сетевого сообщения.<br>Флаг действителен только в том случае, если установлен бит 1 |
| <a id="p100613"></a>Порядковый номер | <a id="p100614"></a>5 | <a id="p100615"></a><a id="p100616"></a>Поле порядкового номера включено в заголовок группы.<br>Флаг действителен только в том случае, если установлен бит 1 |
| <a id="p100617"></a>Заголовок полезной нагрузки | <a id="p100618"></a>6 | <a id="p100619"></a>Заголовок полезной нагрузки включен в сетевые сообщения |
| <a id="p100620"></a>Временная отметка | <a id="p100621"></a>7 | <a id="p100622"></a>Временная метка отправителя включена в сетевые сообщения |
| <a id="p100623"></a>Пикосекунды | <a id="p100624"></a>8 | <a id="p100625"></a>Часть временной метки, относящаяся к отправке в пикосекундах, включена в сетевые сообщения |
| <a id="p100626"></a>Идентификатор класса набора данных | <a id="p100627"></a>9 | <a id="p100628"></a>Идентификатор класса набора данных включен в сетевые сообщения |
| <a id="p100629"></a>Продвинутые поля | <a id="p100630"></a>10 | <a id="p100631"></a>Продвинутые поля включены в сетевые сообщения |



###### <a id="p100632"></a>6.3.1.1.5 Смещение выборки (SamplingOffset)

<a id="p100633"></a>Параметр SamplingOffset с типом данных Duration определяет время в миллисекундах для смещения создания NetworkMessage в цикле PublishingInterval.
<a id="p100634"></a>Любое отрицательное значение указывает на то, что необязательный параметр не настроен. В этом случае издатель должен рассчитать время до PublishingOffset, необходимое для своевременного создания NetworkMessage для отправки в PublishingOffset. Тип данных Duration является подтипом Double и позволяет настраивать интервалы с длительностью меньше миллисекунды.

###### <a id="p100635"></a>6.3.1.2 Запись сообщений наборов данных UADP


###### <a id="p100636"></a>6.3.1.2.1 Общие сведения

<a id="p100637"></a>Конфигурация записей наборов данных в группе записей может привести к фиксированной структуре сетевого сообщения, где все наборы данных имеют статичное положение между сетевыми сообщениями. В этом случае параметры NetworkMessageNumber и DataSetOffset предоставляют информацию о статичном положении сообщения набора данных в сетевом сообщении, на которое могут полагаться подписчики.
<a id="p100638"></a>Если значение одного из двух параметров равно 0, статичное положение не гарантируется.

###### <a id="p100639"></a>6.3.1.2.2 Маска содержимого сообщения набора данных

<a id="p100640"></a>Маска содержимого сообщения набора данных определяет флаги для содержимого заголовка сообщения набора данных. Флаги, специфичные для сопоставления сообщений UADP, определяются типом данных UadpDataSetMessageContentMask.

###### <a id="p100641"></a>6.3.1.2.3 ConfiguredSize

<a id="p100642"></a>Параметр ConfiguredSize с типом данных UInt16 определяет фиксированный размер в байтах, который DataSetMessage использует внутри NetworkMessage. Значение по умолчанию равно 0 и указывает на динамическую длину.
<a id="p100643"></a>Если DataSetMessage окажется меньше по размеру (например, из-за текущих закодированных значений), он будет дополнен байтами со значением ноль. В случае, если он окажется больше, издатель должен установить бит 0 DataSetFlags1 в false, чтобы указать, что DataSetMessage не действителен.

###### <a id="p100644"></a>6.3.1.2.4 NetworkMessageNumber

<a id="p100645"></a>Параметр NetworkMessageNumber с типом данных UInt16 является применимым только для чтения, устанавливаемого издателем в случае фиксированной структуры NetworkMessage. Значение по умолчанию равно 0 и указывает, что позиция DataSetMessage в NetworkMessage не фиксирована.

###### <a id="p100646"></a>6.3.1.3 Декодер сообщений набора данных UADP


###### <a id="p100647"></a>6.3.1.3.1 Версия группы

<a id="p100648"></a>Параметр "Версия группы" с типом данных "Время версии" определяет ожидаемое значение в поле "Версия группы" заголовка сетевого сообщения. Значение по умолчанию 0 определяется как нулевое значение и означает, что данный параметр должен игнорироваться.

###### <a id="p100649"></a>6.3.1.3.2 Номер сетевого сообщения

<a id="p100650"></a>Параметр "Номер сетевого сообщения" с типом данных UInt16 представляет собой номер сетевого сообщения в пределах интервала публикации, в котором публикуется данное сообщение набора данных. Значение по умолчанию 0 определяется как нулевое значение и означает, что данный параметр должен игнорироваться.

###### <a id="p100651"></a>6.3.1.3.3 Смещение набора данных

<a id="p100652"></a>Параметр "Смещение набора данных" с типом данных UInt16 определяет смещение сообщения набора данных внутри соответствующего сетевого сообщения. Значение по умолчанию 0 определяется как нулевое значение и означает, что данный параметр должен игнорироваться.

###### <a id="p100653"></a>6.3.1.3.4 Идентификатор класса набора данных

<a id="p100654"></a>Параметр "Идентификатор класса набора данных" с типом данных Guid определяет фильтр, связанный с классом набора данных. Если значение равно 0, фильтр "Идентификатор класса набора данных" не применяется.

###### <a id="p100655"></a>6.3.1.3.5 Маска содержимого сетевого сообщения

<a id="p100656"></a>Маска содержимого сетевого сообщения с типом данных UadpNetworkMessageContentMask указывает на необязательные поля заголовка, включенные в полученные сетевые сообщения.

###### <a id="p100657"></a>6.3.1.3.6 Маска содержимого сообщения набора данных

<a id="p100658"></a>Маска содержимого сообщения набора данных с типом данных UadpDataSetMessageContentMask указывает на необязательные поля заголовка, включенные в сообщения набора данных.

###### <a id="p100659"></a>6.3.1.3.7 Интервал публикации

<a id="p100660"></a>Интервал публикации с типом данных Duration указывает на частоту отправки издателем сетевых сообщений, связанных с набором данных.

###### <a id="p100661"></a>6.3.1.3.8 Смещение приема

<a id="p100662"></a>Смещение приема с типом данных Duration определяет время в миллисекундах для смещения в цикле интервала публикации для ожидаемого времени приема сетевого сообщения для набора данных из сети.

###### <a id="p100663"></a>6.3.1.3.9 ProcessingOffset

<a id="p100664"></a>Параметр ProcessingOffset с типом данных Duration определяет время в миллисекундах, на которое необходимо сместить обработку полученного набора данных приложением в подписчике относительно цикла PublishingInterval.

##### <a id="p100665"></a>6.3.2 Сопоставление JSON-сообщений


###### <a id="p100666"></a>6.3.2.1 Запись JSON-сетевых сообщений

<a id="p100667"></a>Параметр NetworkMessageContentMask определяет необязательные поля заголовка, которые должны быть включены в NetworkMessages, создаваемые WriterGroup. Тип данных для сопоставления JSON NetworkMessage - JsonNetworkMessageContentMask. Тип данных JsonNetworkMessageContentMask формально определен в таблице 11.

<a id="p100668"></a>Таблица 11

<a id="p100669"></a>Значения маски содержимого сетевого сообщения Json


| <a id="p100670"></a>Значение | <a id="p100671"></a>Номер бита | <a id="p100672"></a>Описание |
| --- | --- | --- |
| <a id="p100673"></a>Заголовок сетевого сообщения | <a id="p100674"></a>0 | <a id="p100675"></a><a id="p100676"></a>Заголовок сетевого сообщения JSON включен в сетевые сообщения.<br>Если этот бит имеет значение "ложь", биты с 2 по 4 должны быть равны 0 |
| <a id="p100677"></a>Заголовок сообщения набора данных | <a id="p100678"></a>1 | <a id="p100679"></a><a id="p100680"></a>Заголовок сообщения набора данных JSON включается в каждое сообщение набора данных.<br>Если этот бит имеет значение "ложь", то маска содержимого сообщения набора данных для записывающих устройств набора данных игнорируется |
| <a id="p100681"></a>Сообщение единичного набора данных | <a id="p100682"></a>2 | <a id="p100683"></a>Каждое сетевое сообщение JSON содержит только одно сообщение набора данных |
| <a id="p100684"></a>Идентификатор издателя | <a id="p100685"></a>3 | <a id="p100686"></a>Идентификатор издателя включен в сетевые сообщения |
| <a id="p100687"></a>Идентификатор класса набора данных | <a id="p100688"></a>4 | <a id="p100689"></a>Идентификатор класса набора данных включен в сетевые сообщения |
| <a id="p100690"></a>Ответ | <a id="p100691"></a>5 | <a id="p100692"></a>Ответ включен в сетевые сообщения |



###### <a id="p100693"></a>6.3.2.2 Запись JSON-сообщений наборов данных

<a id="p100694"></a>DataSetMessageContentMask определяет флаги для содержимого заголовка DataSetMessage. Флаги, специфичные для сопоставления JSON-сообщений, определяются типом данных JsonDataSetMessageContentMask. Тип данных JsonDataSetMessageContentMask формально определен в таблице 12.

<a id="p100695"></a>Таблица 12

<a id="p100696"></a>Значения маски содержимого сообщения набора данных JSON


| <a id="p100697"></a>Значение | <a id="p100698"></a>Номер бита | <a id="p100699"></a>Описание |
| --- | --- | --- |
| <a id="p100700"></a>Идентификатор средств записи набора данных | <a id="p100701"></a>0 | <a id="p100702"></a>Если этот флаг установлен, в заголовок сообщения набора данных должен быть включен идентификатор средств записи набора данных |
| <a id="p100703"></a>Версия метаданных | <a id="p100704"></a>1 | <a id="p100705"></a>Если этот флаг установлен, версия конфигурации включается в заголовок сообщения набора данных |
| <a id="p100706"></a>Порядковый номер | <a id="p100707"></a>2 | <a id="p100708"></a>Если этот флаг установлен, порядковый номер сообщения набора данных включается в заголовок сообщения набора данных |
| <a id="p100709"></a>Временная метка | <a id="p100710"></a>3 | <a id="p100711"></a>Если этот флаг установлен, в заголовок сообщения набора данных должна быть включена метка времени |
| <a id="p100712"></a>Состояние | <a id="p100713"></a>4 | <a id="p100714"></a>Если этот флаг установлен, общее состояние включается в заголовок сообщения набора данных |



###### <a id="p100715"></a>6.3.2.3 Читатель JSON DataSetMessage


###### <a id="p100716"></a>6.3.2.3.1 NetworkMessageContentMask

<a id="p100717"></a>NetworkMessageContentMask с типом данных JsonNetworkMessageContentMask указывает на необязательные поля заголовка, включенные в полученные NetworkMessages.

###### <a id="p100718"></a>6.3.2.3.2 DataSetMessageContentMask

<a id="p100719"></a>DataSetMessageContentMask с типом данных JsonDataSetMessageContentMask указывает на необязательные поля заголовка, включенные в DataSetMessages.

#### <a id="p100720"></a>6.4 Параметры конфигурации отображения транспортного протокола


##### <a id="p100721"></a>6.4.1 Транспортный протокол дейтаграмм


###### <a id="p100722"></a>6.4.1.1 Datagram PubSubConnection

<a id="p100723"></a>Параметр DiscoveryAddress содержит информацию о сетевом адресе, используемую для сообщений запроса и ответа обнаружения.

###### <a id="p100724"></a>6.4.1.2 Datagram WriterGroup


###### <a id="p100725"></a>6.4.1.2.1 MessageRepeatCount

<a id="p100726"></a>Параметр MessageRepeatCount с типом данных Byte определяет, сколько раз повторяется каждое NetworkMessage. Значение по умолчанию равно 0, что отключает повторение.

###### <a id="p100727"></a>6.4.1.2.2 Задержка повтора сообщения

<a id="p100728"></a>Параметр MessageRepeatDelay, имеющий тип данных Duration, определяет временной интервал между повторами NetworkMessage в миллисекундах. Этот параметр игнорируется, если параметр MessageRepeatCount установлен в 0.

##### <a id="p100729"></a>6.4.2 Транспортный протокол брокера


###### <a id="p100730"></a>6.4.2.1 Broker PubSubConnection


###### <a id="p100731"></a>6.4.2.1.1 ResourceUri

<a id="p100732"></a>Параметр ResourceUri, имеющий тип данных String, позволяет транспортной реализации найти настроенный ключ из соответствующего экземпляра KeyCredentialConfigurationType, определенного в [1], для использования при аутентификации доступа к брокеру на уровне соединения или для очередей, настроенных ниже соединения.
<a id="p100733"></a>Если значение равно 0, по умолчанию предполагается отсутствие аутентификации или анонимная аутентификация, если только параметры аутентификации не предоставлены в подчиненной группе записи (WriterGroup) или DataSetWriter для аутентификации доступа к отдельным очередям.

###### <a id="p100734"></a>6.4.2.1.2 AuthenticationProfileUri

<a id="p100735"></a>Параметр AuthenticationProfileUri, имеющий тип данных String, позволяет выбрать протокол аутентификации, используемый транспортной реализацией. Он сопоставляется со свойством ProfileUri в экземпляре KeyCredentialConfigurationType, выбранном с помощью строк ResourceUri и AuthenticationProfileUri.
<a id="p100736"></a>Этот параметр является необязательным. Если настроено несколько ProfileUri, описывающих протокол, который следует использовать для аутентификации, и это значение равно 0, транспорт выберет один из них. Если транспорт не может найти подходящий механизм аутентификации в массиве ProfileUri, транспорт устанавливает состояние PubSubConnection в Error_3.

###### <a id="p100737"></a>6.4.2.2 Группа записи брокера


###### <a id="p100738"></a>6.4.2.2.1 QueueName

<a id="p100739"></a>Параметр QueueName с типом данных String указывает очередь в брокере, которая получает NetworkMessages, отправленные издателем. Это может быть имя очереди или темы, определенной в брокере.

###### <a id="p100740"></a>6.4.2.2.2 ResourceUri

<a id="p100741"></a>Свойство ResourceUri с типом данных String позволяет транспортной реализации найти настроенный ключ из соответствующего экземпляра KeyCredentialConfigurationType, определенного в [1], для использования при аутентификации доступа к указанной очереди. Если эта строка не равна 0, она переопределяет ResourceUri настроек аутентификации PubSubConnection.

###### <a id="p100742"></a>6.4.2.2.3 AuthenticationProfileUri

<a id="p100743"></a>Параметр AuthenticationProfileUri с типом данных String позволяет выбрать протокол аутентификации, используемый транспортной реализацией для аутентификации доступа к указанной очереди. Если эта строка не равна 0, она переопределяет AuthenticationProfileUri настроек транспорта PubSubConnection.

###### <a id="p100744"></a>6.4.2.2.4 RequestedDeliveryGuarantee

<a id="p100745"></a>Параметр RequestedDeliveryGuarantee с типом данных BrokerTransportQualityOfService определяет гарантии доставки, которые применяются ко всем NetworkMessages, публикуемым WriterGroup, если иное не указано в настройках транспорта DataSetWriter.

###### <a id="p100746"></a>6.4.2.3 Broker DataSetWriter


###### <a id="p100747"></a>6.4.2.3.1 QueueName

<a id="p100748"></a>Параметр QueueName с типом данных String указывает очередь в брокере, которая получает NetworkMessages, отправляемые Publisher для DataSetWriter. Это может быть имя очереди или темы, определенной в брокере. Этот параметр действителен только в том случае, если NetworkMessages из WriterGroup содержат только одно DataSetMessage.
<a id="p100749"></a>Если эта строка не пуста, она переопределяет QueueName из настроек транспорта WriterGroup.

###### <a id="p100750"></a>6.4.2.3.2 ResourceUri

<a id="p100751"></a>Свойство ResourceUri типа данных String позволяет реализации транспорта находить настроенный ключ из соответствующего экземпляра KeyCredentialConfigurationType, определенного в [1], для аутентификации доступа к указанной очереди.
<a id="p100752"></a>Если эта строка не пуста, она переопределяет ResourceUri из настроек аутентификации WriterGroup.

###### <a id="p100753"></a>6.4.2.3.3 AuthenticationProfileUri

<a id="p100754"></a>Параметр AuthenticationProfileUri типа String позволяет выбрать протокол аутентификации, используемый реализацией транспорта для подтверждения доступа к указанной очереди. Если это значение типа String не равно 0, оно переопределяет AuthenticationProfileUri из настроек транспорта WriterGroup.

###### <a id="p100755"></a>6.4.2.3.4 MetaDataQueueName

<a id="p100756"></a>Для сопоставлений сообщений, таких как UADP, Subscriber нуждается в доступе к DataSetMetaData для обработки полученных DataSetMessages. Publisher может предоставить DataSetMetaData через выделенную очередь. Параметр MetaDataQueueName типа String указывает очередь Брокера, которая принимает сообщения с DataSetMetaData, отправленные Publisher для данного DataSetWriter. Это может быть имя очереди или темы, определенной в брокере.

###### <a id="p100757"></a>6.4.2.3.5 MetaDataUpdateTime

<a id="p100758"></a>Указывает интервал в миллисекундах типа Duration, с которым Publisher должен отправлять DataSetMetaData в MetaDataQueueName. Значение 0 или любое отрицательное значение интерпретируется как бесконечный интервал. Транспорт брокера должен публиковать все сообщения с временем истечения, равным или превышающим это значение. Если время обновления бесконечно, транспорт брокера должен попытаться договориться о сохранении сообщений, если это возможно. В этом случае DataSetMetaData отправляется, только если изменилась ConfigurationVersion соответствующей DataSetMetaData, и DataSetWriters должны попытаться договориться о гарантиях доставки AtLeastOnce_2 или ExactlyOnce_4 с брокером для любых отправленных DataSetMetaData, чтобы обеспечить доступность метаданных для читателей. Настройки DataSetWriterProperties также применяются к DataSetMetaData, отправленным в очередь, указанную параметром MetaDataQueueName.

###### <a id="p100759"></a>6.4.2.4 Broker DataSetReader


###### <a id="p100760"></a>6.4.2.4.1 QueueName

<a id="p100761"></a>Параметр QueueName типа String указывает очередь в брокере, где DataSetReader может получать NetworkMessages с интересующим набором данных, отправленным издателем. Это может быть имя очереди или темы, определенной в брокере. Этот параметр действителен только в том случае, если NetworkMessages из WriterGroup содержат только одно DataSetMessage.

###### <a id="p100762"></a>6.4.2.4.2 ResourceUri

<a id="p100763"></a>Свойство ResourceUri типа String позволяет транспортной реализации найти настроенный ключ из соответствующего экземпляра KeyCredentialConfigurationType, определенного в [1], для аутентификации доступа к указанной очереди.
<a id="p100764"></a>Если эта строка не равна 0, она переопределяет ResourceUri настроек аутентификации PubSubConnection.

###### <a id="p100765"></a>6.4.2.4.3 AuthenticationProfileUri

<a id="p100766"></a>Параметр AuthenticationProfileUri типа String позволяет выбрать протокол аутентификации, используемый транспортной реализацией для аутентификации доступа к указанной очереди.

###### <a id="p100767"></a>6.4.2.4.4 RequestedDeliveryGuarantee

<a id="p100768"></a>Параметр RequestedDeliveryGuarantee типа BrokerTransportQualityOfService указывает гарантии доставки, которые DataSetReader согласовывает с брокером для всех получаемых сообщений.

###### <a id="p100769"></a>6.4.2.4.5 MetaDataQueueName

<a id="p100770"></a>Параметр MetaDataQueueName типа String указывает очередь брокера, которая предоставляет сообщения с DataSetMetaData, отправленные издателем для интересующего набора данных. Это может быть имя очереди или темы, определенной в брокере.


### <a id="p100771"></a>7 Сопоставления PubSub



#### <a id="p100772"></a>7.1 Общие сведения

<a id="p100773"></a>Раздел 7 определяет соответствие между концепциями PubSub, описанными в разделе 5, и параметрами конфигурации PubSub, определенными в разделе 6, конкретным сопоставлениям сообщений и транспортных протоколов, которые могут быть использованы для их реализации.
<a id="p100774"></a>Сопоставления DataSetMessage, сопоставления NetworkMessage и сопоставления транспортных протоколов объединяются для создания транспортных профилей, определенных в ГОСТ Р 72214. Все приложения PubSub должны реализовывать как минимум один транспортный профиль.

#### <a id="p100775"></a>7.2 Сопоставление сообщений


##### <a id="p100776"></a>7.2.1 Общие положения

<a id="p100777"></a>Сопоставления сообщений определяют конкретную структуру и кодирование для NetworkMessages. Такая структура представляет полезную нагрузку для сопоставлений транспортных протоколов, таких как UDP, MQTT или AMQP. Различные сопоставления определены для различных сценариев использования.

##### <a id="p100778"></a>7.2.2 Сопоставление сообщений UADP


###### <a id="p100779"></a>7.2.2.1 Общие положения

<a id="p100780"></a>Сопоставление сообщений UADP использует оптимизированное UA Binary кодирование и обеспечивает безопасность сообщений для OPC UA PubSub. Доступные сопоставления протоколов определены в 7.3.
<a id="p100781"></a>Сопоставление сообщений UADP определяет различные необязательные поля заголовка, вариации настроек полей и различные типы сообщений и кодировки данных.
<a id="p100782"></a>Издатель должен поддерживать все вариации, которые он допускает через конфигурацию. Требуемый набор функций определяется профилями в ГОСТ Р 72214.
<a id="p100783"></a>Подписчик должен быть способен обрабатывать все возможные NetworkMessages и должен быть способен пропускать информацию, которая не представляет интереса для подписчика. Подписчик может не поддерживать все политики безопасности. Возможности, связанные с обработкой различных кодировок DataSet, определены в ГОСТ Р 72214.

###### <a id="p100784"></a>7.2.2.2 NetworkMessage

<a id="p100785"></a>При использовании безопасности полезная нагрузка и поле Padding шифруются, после чего все NetworkMessage подписывается, если активны подписание и шифрование. NetworkMessage должно быть подписано без шифрования, если активно только подписание.

###### <a id="p100786"></a>7.2.2.3 DataSetMessage

<a id="p100787"></a>Различные типы DataSetMessage могут быть объединены в одном NetworkMessage.

##### <a id="p100788"></a>7.2.3 Сопоставление сообщений JSON


###### <a id="p100789"></a>7.2.3.1 Общие положения

<a id="p100790"></a>JSON - это формат, использующий удобочитаемый текст. Он определен в [2].
<a id="p100791"></a>Сопоставление сообщений на основе JSON позволяет приложениям OPC UA взаимодействовать с веб- и корпоративным программным обеспечением, использующим этот формат.

###### <a id="p100792"></a>7.2.3.2 NetworkMessage

<a id="p100793"></a>Каждое JSON NetworkMessage содержит одно или несколько JSON DataSetMessages. Все поля с определенным конкретным типом данных кодируются с использованием обратимого кодирования данных OPC UA JSON, определенного в ГОСТ Р 71811.
<a id="p100794"></a>Поля в JSON NetworkMessage управляются маской содержимого NetworkMessageContentMask сопоставления JSON NetworkMessage.
<a id="p100795"></a>Если бит NetworkMessageHeader в NetworkMessageContentMask не установлен, NetworkMessage представляет собой содержимое поля Messages (например, JSON-массив DataSetMessages).
<a id="p100796"></a>Если бит DataSetMessageHeader в NetworkMessageContentMask не установлен, содержимое поля Messages представляет собой массив содержимого из поля Payload для каждого DataSetMessage.
<a id="p100797"></a>Если установлен бит SingleDataSetMessage в NetworkMessageContentMask, содержимое поля Messages представляет собой JSON-объект, содержащий один DataSetMessage.
<a id="p100798"></a>Если биты NetworkMessageHeader и DataSetMessageHeader не установлены, а бит SingleDataSetMessage установлен, NetworkMessage представляет собой JSON-объект, содержащий набор пар имя/значение, определенных для одного DataSet.
<a id="p100799"></a>Если размер закодированного в JSON NetworkMessage превышает лимиты брокера, сообщение отбрасывается, и сообщается событие PubSubTransportLimitsExceeded Event.

###### <a id="p100800"></a>7.2.3.3 DataSetMessage

<a id="p100801"></a>DataSetMessage создается DataSetWriter и содержит список пар имя/значение, которые определяются PublishedDataSet, связанным с DataSetWriter. Содержимое DataSetMessage формально описывается объектом DataSetMetaData. DataSetWriters могут периодически отправлять сообщения поддержания связи (keep-alive), которые являются DataSetMessages без поля Payload.
<a id="p100802"></a>Все поля с конкретным типом данных кодируются с использованием обратимого кодирования данных OPC UA JSON, определенного в ГОСТ Р 71811.
<a id="p100803"></a>Поля в DataSetMessage определяются с помощью DataSetFieldContentMask в параметрах DataSetWriter.
<a id="p100804"></a>DataSetFieldContentMask определяет формат значений полей в Payload в соответствии со следующими правилами:
- <a id="p100805"></a>если DataSetFieldContentMask приводит к представлению RawData, значение поля представляет собой Variant, закодированный с использованием необратимого кодирования данных OPC UA JSON, определенного в ГОСТ Р 71811;
- <a id="p100806"></a>если DataSetFieldContentMask приводит к представлению DataValue, значение поля представляет собой DataValue, закодированный с использованием необратимого кодирования данных OPC UA JSON, определенного в ГОСТ Р 71811;
- <a id="p100807"></a>если DataSetFieldContentMask приводит к представлению Variant, значение поля кодируется как Variant, закодированный с использованием обратимого кодирования данных OPC UA JSON, определенного в ГОСТ Р 71811.
<a id="p100808"></a>7.2.3.4 Когда DataSetMetaData набора данных изменяется, DataSetWriter может быть настроен на публикацию обновленного значения через механизм, определенный отображением транспортного протокола.
<a id="p100809"></a>Поля DataSetWriterId и Version в DataSetMessage используются для сопоставления DataSetMessage с DataSetMetaData.
<a id="p100810"></a>DataSetMetaData представляет собой JSON-объект с полями, с конкретным типом данных, которые кодируются с использованием обратимого кодирования данных OPC UA JSON, определенного в ГОСТ Р 71811.

#### <a id="p100811"></a>7.3 Сопоставление транспортных протоколов


##### <a id="p100812"></a>7.3.1 Общие положения

<a id="p100813"></a>Подраздел 7.3 перечисляет стандартные протоколы, выбранные для данного документа, и их возможные комбинации с отображениями сообщений.

##### <a id="p100814"></a>7.3.2 OPC UA UDP

<a id="p100815"></a>OPC UA UDP - это простой протокол на основе UDP, используемый для передачи сетевых сообщений UADP.
<a id="p100816"></a>Синтаксис URL транспортного протокола UDP, используемого в параметре Address, определенном в 6.2.6.3, имеет следующий вид: opc.udp://<хост>[:<порт>].
<a id="p100817"></a>Хост - это IP-адрес либо зарегистрированное имя, такое как имя хоста или доменное имя. IP-адреса могут быть адресами одноадресной, многоадресной или широковещательной рассылки. Это назначение для UDP-датаграммы.
<a id="p100818"></a>Зарегистрированный IANA порт OPC UA для UDP-связи - 4840. Это порт по умолчанию и рекомендуемый порт для широковещательной, многоадресной и одноадресной связи. Могут использоваться альтернативные порты.
<a id="p100819"></a>Для OPC UA UDP рекомендуется ограничить MaxNetworkMessageSize плюс дополнительные заголовки размером MTU. Количество кадров, используемых для сетевого сообщения UADP, влияет на вероятность потери сетевых сообщений UADP.
<a id="p100820"></a>Для OPC UA UDP MaxNetworkMessageSize плюс дополнительные заголовки должны быть ограничены 65 535 байтами.
<a id="p100821"></a>Рекомендуется использовать коммутаторы с поддержкой IGMP для ограничения распространения трафика многоадресной рассылки только заинтересованным участникам. Приложения OPC UA должны отправлять отчет о членстве IGMP.
<a id="p100822"></a>Существует три версии IGMP:
- <a id="p100823"></a>IGMP V1 определен [3];
- <a id="p100824"></a>IGMP V2 определен в [4];
- <a id="p100825"></a>IGMP V3 определен в [5].
<a id="p100826"></a>В [4] и [5] обсуждаются сообщения обнаружения.

###### <a id="p100827"></a>7.3.2.1 Общие положения

<a id="p100828"></a>Отображение сообщений JSON определяет только одно необязательное сообщение обнаружения для обмена DataSetMetaData. Основная цель - обмен дополнительной информацией.
<a id="p100829"></a>Наборы данных содержат свойства полей набора данных.

###### <a id="p100830"></a>7.3.2.2 Метаданные набора данных

<a id="p100831"></a>Метаданные набора данных описывают содержимое набора данных, публикуемого средством записи наборов данных. Более конкретно они определяют имена и типы данных значений, которые должны присутствовать в полезной нагрузке сообщения набора данных.
<a id="p100832"></a>В документах [4] и [5] обсуждаются требования к хостам и маршрутизаторам для взаимодействия со старыми версиями IGMP. Поскольку устройства OPC UA активно используют IP-мультикаст для UDP-транспорта, последовательное использование IGMP устройствами OPC UA имеет решающее значение для создания хорошо функционирующих сетей приложений OPC UA. Устройства OPC UA отправляют сообщение Membership Report (V1, V2 или V3, в зависимости от ситуации) при открытии UDP-соединения, по которому они будут получать сетевые сообщения в режиме мультикаста.

##### <a id="p100833"></a>7.3.3 OPC UA Ethernet

<a id="p100834"></a>OPC UA Ethernet - это простой протокол на основе Ethernet, использующий EtherType B62C, который применяется для транспортировки сетевых сообщений UADP в качестве полезной нагрузки кадра Ethernet II без заголовков IP или UDP.
<a id="p100835"></a>Синтаксис URL протокола транспортировки Ethernet, используемого в параметре Address, имеет следующий вид:
- <a id="p100836"></a>opc.eth://[:[.PC]]. Хост представляет собой MAC-адрес;
- <a id="p100837"></a>IP-адрес или зарегистрированное имя, такое как имя хоста.
<a id="p100838"></a>Формат MAC-адреса состоит из шести групп шестнадцатеричных цифр, разделенных дефисами (например, 01-23-45-67-89-ab). Система также может принимать имена хостов и/или IP-адреса, если она предоставляет средства для их разрешения в MAC-адрес (например, DNS и Reverse-ARP). VID - это идентификатор VLAN в виде числа. PCP - это точка кода приоритета в виде одноразрядного числа.
<a id="p100839"></a>Для OPC UA Ethernet максимальный размер сетевого сообщения плюс дополнительные заголовки должны быть ограничены размером кадра Ethernet в 1522 байта. Зарегистрированный IANA EtherType OPC UA для связи UADP - 0xB62C.

##### <a id="p100840"></a>7.3.4 AMQP


###### <a id="p100841"></a>7.3.4.1 Общие сведения

<a id="p100842"></a>Advanced Message Queuing Protocol (AMQP) - это открытый стандартный протокол прикладного уровня для промежуточного программного обеспечения, ориентированного на сообщения. AMQP часто используется с брокером, который ретранслирует сообщения между приложениями, не имеющими возможности общаться напрямую.
<a id="p100843"></a>Издатели отправляют сообщения AMQP в конечные точки AMQP. Подписчики прослушивают конечные точки AMQP на предмет входящих сообщений. Если задействован брокер, он может сохранять сообщения, чтобы они могли быть доставлены, даже если подписчик не в сети.
<a id="p100844"></a>Брокеры также могут разрешать отправку сообщений нескольким подписчикам.
<a id="p100845"></a>Протокол AMQP определяет двоичное кодирование для всех сообщений, состоящих из заголовка и тела. Заголовок позволяет приложениям вставлять дополнительную информацию в виде пар имя-значение, которые сериализуются с использованием двоичного кодирования AMQP. Тело представляет собой непрозрачный двоичный блок, который может содержать любые данные, сериализованные с использованием кодировки, выбранной приложением.
<a id="p100846"></a>Определены два возможных варианта отображения сообщений для тела сообщения AMQP: отображение сообщений UADP и отображение сообщений JSON.
<a id="p100847"></a>Брокеры AMQP имеют ограничение на максимальный размер сообщения. Механизм обработки сетевых сообщений, превышающих лимиты брокера, зависит от кодировки.
<a id="p100848"></a>Безопасность в AMQP в первую очередь обеспечивается за счет TLS-соединения между издателем или подписчиком и брокером AMQP; однако это требует доверия к брокеру AMQP. По этой причине может потребоваться обеспечение безопасности сквозного канала. Приложения, требующие сквозной безопасности с AMQP, должны использовать сетевые сообщения UADP и двоичное кодирование сообщений. Тела сообщений, закодированные в формате JSON, полагаются на механизмы безопасности, предоставляемые AMQP и брокером AMQP.

##### <a id="p100849"></a>7.3.5 MQTT


###### <a id="p100850"></a>7.3.5.1 Общие сведения

<a id="p100851"></a>Протокол MQTT (Message Queue Telemetry Transport) - это открытый стандарт прикладного уровня для систем обмена сообщениями. MQTT часто используется с брокером, который пересылает сообщения между приложениями, не имеющими возможности прямого взаимодействия.
<a id="p100852"></a>Издатели отправляют сообщения MQTT брокерам MQTT. Подписчики подписываются на брокеры MQTT для получения сообщений. Брокер может сохранять сообщения, чтобы они могли быть доставлены, даже если подписчик не в сети. Брокеры также могут разрешать отправку сообщений нескольким подписчикам.
<a id="p100853"></a>Протокол MQTT определяет двоичный протокол, используемый для отправки и получения сообщений из тем и в темы. Тело сообщения представляет собой непрозрачный двоичный блок, который может содержать любые данные, сериализованные с использованием кодировки, выбранной приложением.
<a id="p100854"></a>Определены две возможные кодировки для тела сообщения: двоично закодированное DataSetMessage, описанное в 7.2.2, и DataSetMessage, закодированное в формате JSON, описанное в 7.2.3.
<a id="p100855"></a>MQTT не предоставляет механизма для указания кодировки сообщения MQTT, что означает, что подписчики должны быть предварительно настроены с информацией об ожидаемой кодировке. Издатели должны публиковать NetworkMessages только с использованием одной кодировки в уникальное имя темы MQTT.
<a id="p100856"></a>Безопасность в MQTT в основном обеспечивается соединением TLS между издателем или подписчиком и сервером MQTT; однако это требует доверия к серверу MQTT. По этой причине может потребоваться обеспечение сквозной безопасности. Приложения, требующие сквозной безопасности с MQTT, должны использовать NetworkMessages в формате UADP и двоичную кодировку сообщений, определенные в 7.2.2. Тела сообщений, закодированные в формате JSON, должны полагаться на механизмы безопасности, предоставляемые MQTT и сервером MQTT.


### <a id="p100857"></a>8 Модель службы ключей безопасности PubSub



#### <a id="p100858"></a>8.1 Обзор

<a id="p100859"></a>Раздел 8 описывает информационную модель OPC UA для службы ключей безопасности (SKS). Функциональность и поведение SKS описаны в 5.4.3. Он определяет структуру распространения криптографических ключей, используемых для безопасности сообщений.
<a id="p100860"></a>SKS может быть сетевой службой, используемой для управления ключами для всех издателей и подписчиков, или может быть частью издателя для управления ключами для NetworkMessages, отправляемых этим издателем.

#### <a id="p100861"></a>8.2 Объект публикации и подписки (PublishSubscribe)

<a id="p100862"></a>Для обеспечения совместимости между издателями, подписчиками, SKS и инструментами конфигурации все объекты, связанные с PubSub, должны быть доступны через объект под названием PublishSubscribe, который имеет тип PubSubKeyServiceType или его подтип. Этот объект должен быть компонентом объекта Server.

#### <a id="p100863"></a>8.3 Тип службы ключей PubSub (PubSubKeySer)

<a id="p100864"></a>Тип объекта PubSubKeyServiceType является конкретным и может использоваться напрямую.
<a id="p100865"></a>Папка SecurityGroups организует объекты, представляющие конфигурацию SecurityGroup.

#### <a id="p100866"></a>8.4 Метод получения ключей безопасности (GetSecurityKeys)

<a id="p100867"></a>Этот метод используется для получения ключей безопасности для SecurityGroup. Он необходим для доступа к ключам безопасности PubSubGroup, где SecurityGroup управляет ключами безопасности для PubSubGroups.
<a id="p100868"></a>Объект MessageSecurity объекта PubSubGroup содержит SecurityGroupId, который должен быть передан этому методу для доступа к ключам для PubSubGroup. Особую важность имеет фактор возможности PubSubGroups использовать один и тот же SecurityGroupId.
<a id="p100869"></a>Разрешение объекта SecurityGroupType для SecurityGroupId контролирует доступ к ключам безопасности для SecurityGroupId. Если пользователь, вызывающий этот метод, не имеет разрешения на вызов, установленного для соответствующего объекта SecurityGroupType, сервер должен вернуть Bad_UserAccessDenied для этого метода. SecurityGroupType определен в 8.6. Для этого метода требуется шифрование. Метод должен вернуть Bad_SecurityModeInsufficient, если связь не зашифрована.
<a id="p100870"></a>Информация, необходимая для доступа к серверу, реализующему метод GetSecurityKeys для SecurityGroup, также содержится в объекте MessageSecurity объекта PubSubGroup.
<a id="p100871"></a>Метод GetSecurityKeys может быть реализован издателем или центральным SKS. В обоих случаях для вызова метода GetSecurityKeys используются известные NodeIds объекта PublishSubscribe и соответствующего метода GetSecurityKeys.
<a id="p100872"></a>Если издатель реализует метод GetSecurityKeys и соответствующее управление SecurityGroup, ключи становятся недействительными сразу после удаления SecurityGroup или отзыва ключей для SecurityGroup.
<a id="p100873"></a>Если центральный SKS реализует метод GetSecurityKeys и соответствующее управление SecurityGroup, ключи перестают быть действительными после удаления SecurityGroup или отзыва ключей для SecurityGroup. Подписчики должны быть готовы к тому, что издатели используют недействительные ключи до тех пор, пока они не вызовут метод GetSecurityKeys. Издатели, использующие центральный SKS, должны вызывать GetSecurityKeys с периодом, равным половине KeyLifetime.

#### <a id="p100874"></a>8.5 Метод получения группы безопасности (GetSecurityGroup)

<a id="p100875"></a>Этот метод обеспечивает прямой поиск NodeId объекта типа SecurityGroupType по SecurityGroupId. Он используется инструментом администрирования безопасности для получения объекта SecurityGroup с целью настройки разрешений доступа к ключам.
<a id="p100876"></a>SecurityGroupId является идентификатором SecurityGroup в издателях, подписчиках и на ключевом сервере. Этот метод возвращает NodeId соответствующего узла объекта SecurityGroup, предоставляющего параметры конфигурации и диагностики для SecurityGroup.

#### <a id="p100877"></a>8.6 Тип группы безопасности методом (SecurityGroupType)

<a id="p100878"></a>Разрешение объектов SecurityGroupType контролирует доступ к ключам безопасности для SecurityGroup через метод GetSecurityKeys. Метод GetSecurityKeys определен в 8.4.
<a id="p100879"></a>Идентификатор SecurityGroup, используемый в методах обмена ключами GetSecurityKeys и SetSecurityKeys типа PubSubGroupType. Свойство KeyLifetime определяет время жизни ключа в миллисекундах. Свойство SecurityPolicyUri является идентификатором SecurityPolicy.
<a id="p100880"></a>SecurityPolicies определяют набор алгоритмов и длин ключей, используемых для защиты сообщений, которыми обмениваются в контексте SecurityGroup. SecurityPolicies определены в ГОСТ Р 72214. Свойство MaxFutureKeyCount определяет максимальное количество будущих ключей, возвращаемых методом GetSecurityKeys. Свойство MaxPastKeyCount определяет максимальное количество исторических ключей, хранящихся SKS. Исторические ключи необходимы для того, чтобы подписчики могли запрашивать ключи для более старых сетевых сообщений.

#### <a id="p100881"></a>8.7 Тип папки группы безопасности методом (SecurityGroupFolderType)

<a id="p100882"></a>ObjectType SecurityGroupFolderType является строго определенным типом и может использоваться напрямую. Экземпляры SecurityGroupFolderType могут содержать объекты SecurityGroup или другие экземпляры SecurityGroupFolderType. Допускается их использование для построения дерева объектов папок при организации сконфигурированных SecurityGroups.
<a id="p100883"></a>Объекты SecurityGroup добавляются как компоненты к экземпляру SecurityGroupFolderType. Объект SecurityGroup ссылается только из одной папки. Если папка удаляется, все ссылающиеся на нее объекты SecurityGroup удаляются вместе с папкой.

#### <a id="p100884"></a>8.8 Метод добавления группы безопасности (AddSecurityGroup)

<a id="p100885"></a>Этот метод используется для добавления объекта типа SecurityGroupType в объект SecurityGroupFolderType. Клиент должен иметь разрешение на изменение конфигурации для функциональности PubSub при вызове этого метода на сервере.

#### <a id="p100886"></a>8.9 Метод удаления группы безопасности (RemoveSecurityGroup)

<a id="p100887"></a>Этот метод используется для удаления объекта типа SecurityGroupType из объекта SecurityGroupFolderType. Клиент должен иметь разрешение на изменение конфигурации для функциональности PubSub и для удаляемой SecurityGroup при вызове этого метода на сервере. См. 8.4 для подробностей о времени жизни ключей, ранее выданных для этой SecurityGroup.


### <a id="p100888"></a>9 Модель конфигурации PubSub



#### <a id="p100889"></a>9.1 Общая модель конфигурации


##### <a id="p100890"></a>9.1.1 Общие сведения

<a id="p100891"></a>Экземпляр типа PublishSubscribeType с именем PublishSubscribe представляет собой корневой объект для всех объектов, связанных с PubSub. Он управляет списком объектов PubSubConnectionType и объектами PublishedDataSetType через папку PublishedDataSets.
<a id="p100892"></a>На стороне издателя PublishedDataSet представляет информацию для публикации, а DataSetWriter - настройки транспорта для создания DataSetMessages для доставки через Message Oriented Middleware (MOM, промежуточное программное обеспечение, ориентированное на сообщения).
<a id="p100893"></a>На стороне подписчика DataSetReader представляет настройки транспорта для получения DataSetMessages из Message Oriented Middleware, а SubscribedDataSet - информацию для отправки полученных DataSets подписчику.
<a id="p100894"></a>Конфигурация может быть выполнена с помощью методов или специализированных инструментов конфигурации. DataSetFolderType можно использовать для организации объектов PublishedDataSetType в дерево папок.
<a id="p100895"></a>PublishedDataSetType представляет выбор и конфигурацию переменных или событий. Уведомление о событии или снимок переменных составляют DataSet. DataSet - это содержимое DataSetMessage, созданного DataSetWriter.
<a id="p100896"></a>Примерами конкретных PublishedDataSetTypes являются PublishedEventsType и PublishedDataItemsType. Экземпляр PublishedDataSetType имеет список DataSetWriters, используемых для создания DataSetMessages, отправляемых через Message Oriented Middleware. DataSetMetaData описывает содержимое DataSet.
<a id="p100897"></a>Экземпляры PubSubConnectionType представляют настройки, связанные с Message Oriented Middleware. Соединение управляет списком объектов WriterGroupType и параметрами, специфичными для отображения транспортного протокола.
<a id="p100898"></a>Объекты типа WriterGroupType содержат объекты DataSetWriter, которые имеют общие настройки, такие как конфигурация безопасности, кодирование или время отправки NetworkMessages. Группа управляет списком объектов DataSetWriterType, которые определяют полезную нагрузку NetworkMessages, созданных на основе настроек группы.
<a id="p100899"></a>DataSetWriter представляют собой конфигурацию, необходимую для создания DataSetMessage, содержащихся в качестве полезной нагрузки в NetworkMessages.
<a id="p100900"></a>DataSetReader представляют собой конфигурацию, необходимую для приема и обработки DataSetMessage на стороне подписчика.
<a id="p100901"></a>NetworkMessages передаются через транспортные протоколы, такие как AMQP, MQTT или OPC UA UDP. Другие транспортные протоколы могут быть добавлены как подтипы без изменения базовой модели.
<a id="p100902"></a>Определение ObjectTypes, связанных с PubSub, не предписывает, как создаются или настраиваются экземпляры, или насколько динамичной может быть конфигурация. Издатель может иметь предопределенное количество PublishedDataSets и DataSetWriters, для которых можно настроить только параметры, специфичные для протокола. Если издатель допускает динамическое создание объектов, таких как DataSets и DataSetWriters, это может быть сделано с помощью специализированных инструментов конфигурации или стандартизированных методов конфигурации, описанных в этом документе.

##### <a id="p100903"></a>9.1.2 Поведение при конфигурации

<a id="p100904"></a>Издатели и подписчики могут быть сконфигурированы с помощью специализированных инструментов поставщика или с помощью методов и параметров конфигурации. Это позволяет стандартному инструменту конфигурации OPC UA Client настраивать OPC UA Server, который является издателем и/или подписчиком.
<a id="p100905"></a>Параметры конфигурации отображаются как переменные конфигурируемых объектов. Методы для создания объектов имеют входные аргументы для обязательных переменных. Необязательные переменные не включаются во входные аргументы методов создания объектов. Необязательные переменные создаются со значением по умолчанию, если они поддерживаются для объекта или требуются для текущей конфигурации. Значение по умолчанию может быть изменено путем записи в переменную после создания.
<a id="p100906"></a>Новосозданные объекты должны иметь статус Disabled_0, если они созданы с использованием стандартных методов.
<a id="p100907"></a>Переменные, которые могут быть сконфигурированы, должны иметь флаг CurrentWrite, установленный в атрибуте AccessLevel. UserAccessLevel может быть ограничен в зависимости от прав пользователя OPC UA Client.
<a id="p100908"></a>Изменения конфигурации должны применяться пакетом для предотвращения несогласованности между различными параметрами конфигурации. Механизм применения изменений в пакетной операции заключается в разрешении изменений только тогда, когда связанный объект имеет статус "Отключен" (Disabled_0) и в применении новых настроек конфигурации при изменении статуса на "Рабочий" (Operational_2). Следовательно, операции записи в параметры конфигурации должны отклоняться с ошибкой "Недопустимое состояние" (Bad_InvalidState), если статус не "Отключен" (Disabled_0).
<a id="p100909"></a>Изменения в конфигурациях PublishedDataSet должны отклоняться с ошибкой "Недопустимое состояние" (Bad_InvalidState), если не все связанные DataSetWriters имеют статус "Отключен" (Disabled_0).

##### <a id="p100910"></a>9.1.3 Типы для объекта PublishSubscribe

<a id="p100911"></a>Объект PublishSubscribe является корневым узлом для всех объектов конфигурации, связанных с PubSub. Он является экземпляром PublishSubscribeType и компонентом объекта Server.
<a id="p100912"></a>Тип PublishSubscribe содержит точку входа для конфигурации PublishedDataSet и точку входа для соединений PubSub. Кроме того, он предоставляет методы для управления соединениями.

##### <a id="p100913"></a>9.1.4 Модель опубликованных DataSet

<a id="p100914"></a>Экземпляры DataSetFolderType используются для организации объектов PublishedDataSetType в дерево DataSetFolders. Конфигурация может быть выполнена с помощью методов или с помощью специфичных для продукта инструментов конфигурации.
<a id="p100915"></a>PublishedDataSetType определяет информацию, необходимую подписчику для понимания и декодирования DataSetMessages, полученных от издателя для DataSet, и для обнаружения изменений семантики и метаданных DataSet.
<a id="p100916"></a>Типы, производные от PublishedDataSetType, определяют источник информации для набора данных (DataSet) в адресном пространстве сервера OPC UA, например переменные или события.

##### <a id="p100917"></a>9.1.5 Модель соединения

<a id="p100918"></a>Объект PubSubConnectionType является конкретным типом для объектов, определяющих соединения PubSub. Соединение PubSub представляет собой комбинацию выбора протокола, настроек протокола и информации об адресации.
<a id="p100919"></a>Настройки, специфичные для сопоставления протокола транспорта ConnectionTransportType, предоставляются в объекте TransportSettings. Если сопоставление протокола транспорта определяет специфические параметры, TransportSettings должен присутствовать.
<a id="p100920"></a>Настроенные объекты WriterGroup и ReaderGroup добавляются как компоненты к экземпляру PubSubConnectionType. Объекты PubSubGroup могут быть настроены с помощью инструментов конфигурации, специфичных для продукта, или добавлены и удалены через методы OPC UA AddWriterGroup, AddReaderGroup и RemoveGroup.
<a id="p100921"></a>Объект Status предоставляет текущий операционный статус соединения. PubSubStatusType. Машина состояний для статуса и связь с другими объектами PubSub, такими как PublishSubscribe, PubSubGroup, DataSetWriter и DataSetReader.
<a id="p100922"></a>Объект Diagnostics предоставляет текущую диагностическую информацию для объектов PubSubConnectionType, PubSubDiagnosticsConnectionType.

##### <a id="p100923"></a>9.1.6 Модель группы

<a id="p100924"></a>ObjectType является абстрактным базовым типом для объектов, представляющих коммуникационные группы для PubSub соединений.
<a id="p100925"></a>Если SecurityMode не NONE_1, свойство должно предоставлять SecurityGroupId. Значение свойства равно 0 или свойство отсутствует, если SecurityMode равен NONE_1.
<a id="p100926"></a>Если SecurityMode не NONE_1, свойство должно предоставлять список служб ключей безопасности для SecurityGroupId.
<a id="p100927"></a>Объект статуса предоставляет текущее оперативное состояние группы. Тип PubSubStatusType определен в 9.1.10. Диаграмма состояний для статуса и его связь с другими объектами PubSub, такими как PubSubConnection, DataSetWriter и DataSetReader, определены в 6.2.1.

##### <a id="p100928"></a>9.1.7 Модель DataSetWriter


###### <a id="p100929"></a>9.1.7.1 DataSetWriterType

<a id="p100930"></a>Экземпляр этой ObjectType представляет собой конфигурацию для DataSetWriter.
<a id="p100931"></a>Параметры, специфичные для сопоставления транспортного протокола, представлены в необязательном объекте TransportSettings. DataSetWriterTransportType определен в 9.1.7.2. Объект должен присутствовать, если сопоставление транспортного протокола определяет специфические параметры.
<a id="p100932"></a>Параметры, специфичные для сопоставления сообщений, представлены в необязательном объекте MessageSettings. DataSetWriterMessageType определен в 9.1.7.3. Объект должен присутствовать, если сопоставление сообщений определяет специфические параметры.
<a id="p100933"></a>Объект Status предоставляет текущий операционный статус DataSetWriter. PubSubStatusType определен в 9.1.10. Конечный автомат для статуса и связь с другими объектами PubSub, такими как PubSubConnection и PubSubGroup, определены в 6.2.1.
<a id="p100934"></a>Объект Diagnostics предоставляет текущую диагностическую информацию для объекта DataSetWriterType. PubSubDiagnosticsDataSetWriterType.

###### <a id="p100935"></a>9.1.7.2 DataSetWriterTransportType

<a id="p100936"></a>ObjectType является абстрактным базовым типом для объектов, определяющих специфичные для протокола транспортные настройки сообщений DataSet.

###### <a id="p100937"></a>9.1.7.3 DataSetWriterMessageType

<a id="p100938"></a>ObjectType является абстрактным базовым типом для объектов, представляющих специфичные для отображения сообщений настройки для DataSetWriter.

##### <a id="p100939"></a>9.1.8 Модель DataSetReader


###### <a id="p100940"></a>9.1.8.1 DataSetReaderType

<a id="p100941"></a>Этот ObjectType определяет поведение приема сообщений DataSet и декодирование в DataSets. Тип SubscribedDataSetType, определенный в 9.1.9.1, описывает обработку полученного DataSet в Subscriber.
<a id="p100942"></a>Свойства PublisherId, WriterGroupId, DataSetWriterId и DataSetClassId определяют фильтры для полученных NetworkMessages. Если значение свойства установлено, оно используется в качестве фильтра, и все сообщения, не соответствующие фильтру, отбрасываются.
<a id="p100943"></a>Если DataSetReader получает обновленный DataSetMetaData, DataSetReader должен обновить свойство DataSetMetaData.
<a id="p100944"></a>Специфичные для отображения транспортного протокола настройки предоставляются в необязательном объекте TransportSettings. Тип DataSetWriterTransportType определен в 9.1.8.2. Объект должен присутствовать, если отображение транспортного протокола определяет конкретные параметры.
<a id="p100945"></a>Специфичные для отображения сообщений настройки предоставляются в необязательном объекте MessageSettings. Тип DataSetWriterMessageType определен в 9.1.8.3.
<a id="p100946"></a>Объект должен присутствовать, если сопоставление сообщений определяет конкретные параметры.
<a id="p100947"></a>Объект Status предоставляет текущее операционное состояние DataSetReader. Тип PubSubStatusType определен в 9.1.10. Машина состояний для статуса и ее связь с другими объектами PubSub, такими как PubSubConnection и PubSubGroup, определены в 6.2.1.
<a id="p100948"></a>Объект Diagnostics предоставляет текущую диагностическую информацию для объекта типа DataSetReaderType. Тип PubSubDiagnosticsDataSetReaderType определен в 9.1.11.12.
<a id="p100949"></a>Объект SubscribedDataSet содержит метаданные для подписанного набора данных (DataSet) и информацию для обработки сообщений набора данных (DataSetMessage). Тип SubscribedDataSetType определен в 9.1.9.1.

###### <a id="p100950"></a>9.1.8.2 DataSetReaderTransportType

<a id="p100951"></a>Этот тип объекта является абстрактным базовым типом для объектов, определяющих параметры транспортного протокола для DataSetReaders.

###### <a id="p100952"></a>9.1.8.3 DataSetReaderMessageType

<a id="p100953"></a>Этот тип объекта является абстрактным базовым типом для объектов, представляющих специфичные для сопоставления сообщений настройки для DataSetReaders.

###### <a id="p100954"></a>9.1.8.4 Метод CreateTargetVariables

<a id="p100955"></a>Этот метод используется для первоначальной установки SubscribedDataSet в тип TargetVariablesType и для создания списка целевых переменных (Target Variables) типа SubscribedDataSetType.
<a id="p100956"></a>Клиент должен иметь разрешение на изменение конфигурации функциональности PubSub при вызове этого метода на сервере.
<a id="p100957"></a>ConfigurationVersion. Версия конфигурации набора данных. Версия конфигурации, предоставленная через CreateTargetVariables, должна совпадать с текущей версией конфигурации в свойстве DataSetMetaData. Если они не совпадают, должен быть возвращен результат Bad_InvalidState.
<a id="p100958"></a>TargetVariablesToAdd - список целевых переменных, в которые будут записываться поля набора данных. Тип данных FieldTargetDataType определен в разделе 6.2.9. Успешно добавленные цели добавляются в свойство TargetVariables.

###### <a id="p100959"></a>9.1.8.5 CreateDataSetMirror

<a id="p100960"></a>Метод CreateDataSetMirror используется для установки SubscribedDataSet в тип SubscribedDataSetMirrorType, который представляет поля набора данных в виде переменных в адресном пространстве подписчика. Этот метод создает объект ниже SubscribedDataSet, а под этим объектом создает узел переменной для каждого поля в DataSetMetaData.
<a id="p100961"></a>Переменная, представляющая поле набора данных, должна быть создана по следующим правилам:
- <a id="p100962"></a>TypeDefinition - BaseDataVariableType или его подтип;
- <a id="p100963"></a>ссылка от родительского узла к переменной имеет тип HasComponent;
- <a id="p100964"></a>начальный AccessLevel переменных - CurrentRead;
- <a id="p100965"></a>RolePermissions наследуются от родительского узла;
- <a id="p100966"></a>остальные значения атрибутов берутся из FieldMetaData;
- <a id="p100967"></a>свойства в FieldMetaData создаются как свойства переменной;
- <a id="p100968"></a>типы данных создаются в подписчике из DataSetMetaData, если они еще не существуют. NamespaceUri созданных типов данных должен совпадать с пространством имен, содержащимся в DataSetMetaData.
<a id="p100969"></a>Клиент должен иметь разрешение на изменение конфигурации для функциональности PubSub при вызове этого метода на сервере.
<a id="p100970"></a>RolePermissions. Значение атрибута RolePermissions, которое будет установлено для родительского узла. Это значение используется как RolePermissions для всех переменных зеркала набора данных.
<a id="p100971"></a>ParentNodeId NodeId созданного родительского узла.

##### <a id="p100972"></a>9.1.9 Модель подписки на набор данных


###### <a id="p100973"></a>9.1.9.1 SubscribedDataSetType

<a id="p100974"></a>Этот тип объекта определяет метаданные для подписки на набор данных и информацию для обработки сообщений набора данных.

###### <a id="p100975"></a>9.1.9.2 TargetVariablesType

<a id="p100976"></a>Этот тип объекта определяет метаданные для подписки на набор данных и информацию для обработки сообщений набора данных.

###### <a id="p100977"></a>9.1.9.3 Метод AddTargetVariables

<a id="p100978"></a>Этот метод используется для добавления целевых переменных к существующему списку целевых переменных объекта типа TargetVariablesType. Клиент должен иметь разрешение на изменение конфигурации функциональности PubSub при вызове этого метода на сервере.

###### <a id="p100979"></a>9.1.9.4 Метод RemoveTargetVariables

<a id="p100980"></a>Этот метод используется для удаления записей из списка целевых переменных объекта TargetVariablesType.
<a id="p100981"></a>Клиент должен иметь право изменять конфигурацию функциональности PubSub при вызове этого метода на сервере.

###### <a id="p100982"></a>9.1.9.5 SubscribedDataSetMirrorType

<a id="p100983"></a>Этот тип объекта определяет информацию для обработки DataSetMessages в виде зеркальных переменных. Для каждого поля набора данных создается зеркальная переменная в адресном пространстве подписчика. Объект этого типа должен содержать объект с ParentNodeName, переданным методу CreateDataSetMirror, используемому для перевода SubscribedDataSet в режим зеркалирования.

##### <a id="p100984"></a>9.1.10 Объект состояния PubSub


###### <a id="p100985"></a>9.1.10.1 PubSubStatusType

<a id="p100986"></a>Этот тип объекта используется для указания и изменения состояния объекта PubSub, такого как PubSubConnection, DataSetWriter или DataSetReader.
<a id="p100987"></a>Переменная State предоставляет текущее рабочее состояние объекта PubSub. Значение по умолчанию - Disabled_0. Перечисление PubSubState и соответствующая конечная машина определены в 6.2.1. Состояние может быть изменено с помощью специфичных для продукта инструментов конфигурации или с помощью методов Enable и Disable.

###### <a id="p100988"></a>9.1.10.2 Enable

<a id="p100989"></a>Метод Enable используется для включения сконфигурированного объекта PubSub. Соответствующая конечная машина и переходы, инициируемые успешным вызовом этого метода, определены в 6.2.1.
<a id="p100990"></a>Сервер должен отклонять вызовы метода Enable, если текущее состояние не Disabled_0.
<a id="p100991"></a>Клиент должен иметь право изменять конфигурацию функциональности PubSub при вызове этого метода на сервере.

###### <a id="p100992"></a>9.1.10.3 Disable

<a id="p100993"></a>Метод Disable используется для отключения объекта PubSub. Связанная конечная машина и переходы, инициируемые успешным вызовом этого метода, определены в 6.2.1. Сервер должен отклонять вызовы метода Disable, если текущее состояние - Disabled_0.

###### <a id="p100994"></a>9.1.10.4 Объект состояния

<a id="p100995"></a>Типы объектов PubSub, требующие объекта состояния, добавляют компонент с именем просмотра Status.

##### <a id="p100996"></a>9.1.11 Объекты диагностики PubSub


###### <a id="p100997"></a>9.1.11.1 Общие сведения

<a id="p100998"></a>Следующие типы используются для предоставления диагностической информации в информационной модели PubSub. Каждый уровень иерархии PubSub должен содержать свой собственный элемент диагностики в стандартизированном формате.

###### <a id="p100999"></a>9.1.11.2 PubSubDiagnosticsType

<a id="p101000"></a>PubSubDiagnosticsType является базовым типом для объектов диагностики.
<a id="p101001"></a>Переменная DiagnosticsLevel конфигурирует текущий уровень диагностики, используемый для объекта.
<a id="p101002"></a>Переменная TotalInformation предоставляет сумму всех счетчиков в счетчиках диагностики объекта с классификацией Information_0.
<a id="p101003"></a>Переменная TotalError предоставляет сумму всех счетчиков в счетчиках диагностики объекта с классификацией Error_1.
<a id="p101004"></a>Переменная SubError указывает, показывает ли какой-либо объект статистики следующего уровня объектов PubSub значение > 0 в TotalError.
<a id="p101005"></a>Объект Counters содержит все счетчики диагностики для объекта диагностики.
<a id="p101006"></a>Объект LiveValues содержит все текущие значения объекта диагностики. Если не указано иное, переменные текущих значений используют тип переменной BaseDataVariableType.
<a id="p101007"></a>Узлы в объектах Counters и LiveValues могут быть активны.
<a id="p101008"></a>Свойство TimeFirstChange содержит серверное время, когда значение счетчика изменилось с 0 на 1. Если значение счетчика равно 0, то значение равно null.

###### <a id="p101009"></a>9.1.11.3 PubSubDiagnosticsCounterClassification

<a id="p101010"></a>PubSubDiagnosticsCounterClassification - перечисление, определяющее возможные классификации диагностических счетчиков. Семантика этого диагностического счетчика PubSubDiagnosticsCounterClassification указывает на ожидаемые события, которые не считаются ошибками.

###### <a id="p101011"></a>9.1.11.4 PubSubDiagnosticsRootType

<a id="p101012"></a>PubSubDiagnosticsRootType определяет диагностическую информацию для объекта PublishSubscribe.
<a id="p101013"></a>Объект LiveValues содержит все текущие значения диагностического объекта. Если не указано иное, переменные текущих значений используют VariableType BaseDataVariableType.

###### <a id="p101014"></a>9.1.11.5 PubSubDiagnosticsConnectionType

<a id="p101015"></a>PubSubDiagnosticsConnectionType определяет диагностическую информацию для объекта
<a id="p101016"></a>Объект LiveValues содержит все текущие значения диагностического объекта. Если не указано иное, переменные текущих значений используют VariableType BaseDataVariableType.

###### <a id="p101017"></a>9.1.11.6 PubSubDiagnosticsWriterGroupType

<a id="p101018"></a>PubSubDiagnosticsWriterGroupType определяет диагностическую информацию для объекта WriterGroupType.
<a id="p101019"></a>Объект Counters содержит все диагностические счетчики для диагностического объекта.
<a id="p101020"></a>Объект LiveValues содержит все текущие значения диагностического объекта. Если не указано иное, переменные текущих значений используют тип переменной BaseDataVariableType.

###### <a id="p101021"></a>9.1.11.7 PubSubDiagnosticsReaderGroupType

<a id="p101022"></a>Тип PubSubDiagnosticsReaderGroupType определяет диагностическую информацию для объекта ReaderGroupType.
<a id="p101023"></a>Объект Counters содержит все диагностические счетчики для диагностического объекта.
<a id="p101024"></a>Объект LiveValues содержит все текущие значения диагностического объекта. Если не указано иное, переменные текущих значений используют тип переменной BaseDataVariableType.

###### <a id="p101025"></a>9.1.11.8 PubSubDiagnosticsDataSetWriterType

<a id="p101026"></a>Тип PubSubDiagnosticsDataSetWriterType определяет диагностическую информацию для объекта PubSubDataSetWriterType.
<a id="p101027"></a>Объект Counters содержит все диагностические счетчики для диагностического объекта.
<a id="p101028"></a>Объект LiveValues содержит все текущие значения диагностического объекта. Если не указано иное, переменные текущих значений используют тип переменной BaseDataVariableType.

###### <a id="p101029"></a>9.1.11.9 PubSubDiagnosticsDataSetReaderType

<a id="p101030"></a>Тип PubSubDiagnosticsDataSetReaderType определяет диагностическую информацию для объекта PubSubDataSetReaderType.
<a id="p101031"></a>Объект Counters содержит все диагностические счетчики для диагностического объекта.
<a id="p101032"></a>Объект LiveValues содержит все текущие значения диагностического объекта. Если не указано иное, переменные текущих значений используют тип переменной BaseDataVariableType.

##### <a id="p101033"></a>9.1.12 События статуса PubSub


###### <a id="p101034"></a>9.1.12.1 Тип события PubSubStatusEventType

<a id="p101035"></a>Этот тип события является базовым для событий, указывающих на ошибку или изменение статуса, связанное с объектом PubSubConnectionType, PubSubGroupType, DataSetWriterType или DataSetReaderType.
<a id="p101036"></a>Данный тип события наследует все свойства типа события SystemEventType. Их семантика определена в ГОСТ Р 71810.
<a id="p101037"></a>SourceNode - NodeId объекта PubSubConnectionType, PubSubGroupType, DataSetWriterType или DataSetReaderType, связанного с событием SourceName - BrowseName узла SourceNode.
<a id="p101038"></a>Свойство ConnectionId - NodeId объекта PubSubConnectionType, связанного с источником события статуса.
<a id="p101039"></a>Свойство GroupId - NodeId объекта PubSubGroupType, связанного с источником события статуса. GroupId имеет значение 0, если источником события является PubSubConnection.
<a id="p101040"></a>Свойство State - текущее состояние объекта PubSubStatus, связанного с источником события статуса.

###### <a id="p101041"></a>9.1.12.2 Тип события PubSubTransportLimitsExceedEventType

<a id="p101042"></a>Данный тип события указывает на то, что сетевое сообщение не могло быть опубликовано, поскольку оно превышает транспортные ограничения.
<a id="p101043"></a>Данный тип события наследует все свойства типа события PubSubStatusEventType.
<a id="p101044"></a>Свойство Actual содержит размер в байтах фактического NetworkMessage.
<a id="p101045"></a>Свойство Maximum содержит максимальный размер NetworkMessages в байтах, разрешенный транспортом.

###### <a id="p101046"></a>9.1.12.3 PubSubCommunicationFailureEventType

<a id="p101047"></a>Данный тип события указывает на то, что NetworkMessage не удалось опубликовать из-за сбоя связи. Тип события PubSubCommunicationFailureEventType наследует все свойства типа события PubSubStatusEventType.
<a id="p101048"></a>Поле Message, унаследованное от BaseEventType, содержит локализованное описание ошибки.
<a id="p101049"></a>Свойство Error содержит StatusCode, связанный с ошибкой.






## <a id="p101050"></a>БИБЛИОГРАФИЯ



| <a id="p101051"></a>[1] | <a id="p101052"></a>МЭК 62541-12 | <a id="p101053"></a>Унифицированная архитектура OPC. Часть 12. Обнаружение и глобальные службы (OPC unified architecture - Part 12: Discovery and global services) |
| --- | --- | --- |
| <a id="p101054"></a>[2] | <a id="p101055"></a>IETF RFC 7159 | <a id="p101056"></a>Формат обмена данными Java Script Object Notation (JSON) [The JavaScript Object Notation (JSON) Data Interchange Format] |
| <a id="p101057"></a>[3] | <a id="p101058"></a>IETF RFC 1112 | <a id="p101059"></a>Расширения хоста для многоадресной рассылки по IP [Host Extensions for IP Multicasting] |
| <a id="p101060"></a>[4] | <a id="p101061"></a>IETF RFC 2236 | <a id="p101062"></a>Протокол управления интернет-группами, версия 2 [Internet Group Management Protocol, Version 2] |
| <a id="p101063"></a>[5] | <a id="p101064"></a>IETF RFC 3376 | <a id="p101065"></a>Протокол управления интернет-группами, версия 3 [Internet Group Management Protocol, Version 3] |







<table>
<colgroup><col width="50%"><col width="50%"></colgroup>
<tr><td><a id="p101066"></a>УДК 004.03:006.354</td><td><a id="p101067"></a><a id="p101068"></a>ОКС 25.040.40<br>35.100.05</td></tr>
<tr><td colspan="2"><a id="p101069"></a>Ключевые слова: цифровая промышленность, унифицированная архитектура открытой платформы взаимодействия, обмен сообщениями PubSub, термины и определения</td></tr>
</table>




<a id="p101070"></a>

---



## Иллюстрации

![](https://i.bukva.ai/gNvR4mKF/img_0.jpg)

![](https://i.bukva.ai/gNvR4mKF/img_1.jpg)

![](https://i.bukva.ai/gNvR4mKF/img_2.jpg)

![](https://i.bukva.ai/gNvR4mKF/img_3.jpg)

![](https://i.bukva.ai/gNvR4mKF/img_4.jpg)

![](https://i.bukva.ai/gNvR4mKF/img_5.jpg)

![](https://i.bukva.ai/gNvR4mKF/img_6.jpg)

![](https://i.bukva.ai/gNvR4mKF/img_7.jpg)
