Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
OPC UA (унифицированная архитектура OPC) — это стандарт, разработанный фондом OPC, чтобы обеспечить обмен данными между промышленными компонентами на границе и облаком. Соединитель для OPC UA может передавать сообщения с серверов OPC UA в брокер MQTT и отправлять контрольные сообщения на серверы OPC UA. OPC UA предоставляет согласованный, безопасный и документированные стандарты на основе широко используемых форматов данных. Промышленные компоненты могут реализовать стандарт OPC UA для обеспечения универсального обмена данными.
Используя возможность записи OPC UA, промышленные разработчики и инженеры операций могут использовать соединитель для OPC UA для выполнения контроля в режиме реального времени на границе путем записи значений непосредственно в узлы OPC UA. Эта возможность позволяет немедленно обновлять конфигурации, триггеры для автоматизации и динамические корректировки процессов, не используя обходные пути в облако.
Возможность записи полезна в сценариях, когда задержка, автономия или локальное принятие решений имеет решающее значение, например в производственных линиях, прогнозном обслуживании или в циклах управления на основе искусственного интеллекта.
Соединитель для OPC UA является необязательной частью Операции Интернета вещей Azure. Соединитель для OPC UA подключается к серверам OPC UA, чтобы получить данные, опубликованные в разделах брокера MQTT, и записывать данные на основе значений из подписки на раздел брокера MQTT. Соединитель для OPC UA позволяет рабочей среде OPC UA входить в локальные рабочие нагрузки, работающие в кластере Kubernetes, а также в облачные рабочие нагрузки.
Подсказка
Если вы не включили соединитель для OPC UA при развертывании Операции Интернета вещей Azure, вы можете добавить его в существующий экземпляр через портал Azure. Инструкции см. в разделе Управление компонентами с помощью портала Azure.
Соединитель для OPC UA — это клиентское приложение, которое выполняется в качестве сервисной посреднической службы в Операции Интернета вещей Azure. Соединитель для OPC UA подключается к серверам OPC UA, позволяет просматривать адресное пространство сервера, отслеживать изменения данных и события в подключенных ресурсах и записывать данные на узлы в адресном пространстве сервера. Операционные команды и разработчики используют соединитель для OPC UA, чтобы упростить задачу подключения активов OPC UA к их промышленному решению на границе.
Возможности
В рамках Операции Интернета вещей Azure соединитель для OPC UA является собственным приложением Kubernetes, которое:
- Подключает существующие серверы OPC UA и ресурсы к собственному кластеру Kubernetes на границе.
- Публикует сообщения в кодировке JSON с серверов OPC UA в формате OPC UA PubSub, используя полезные данные JSON. Используя этот стандартный формат для обмена данными, вы можете снизить риск будущих проблем совместимости.
- Может синхронизировать свойства узла OPC UA с распределенным хранилищем состояний.
- Записывает значения непосредственно в узлы подключенного сервера OPC UA на основе подписок MQTT.
- Подключается к службам с поддержкой Azure Arc в облаке.
Другие функции
Соединитель для OPC UA поддерживает следующие функции в рамках Операции Интернета вещей Azure:
| Функция | Поддерживается | Примечания. |
|---|---|---|
| Проверка подлинности имени пользователя и пароля | Да | |
| Сертификаты клиента X.509 | Да | |
| Анонимный доступ | Да | Для тестирования |
| Список доверенных сертификатов | Да | Для безопасных зашифрованных подключений OPC UA |
| Интеграция OpenTelemetry | Да | |
| Автоматическое повторное подключение | Да | Повторное подключение к серверам OPC UA после сбоев |
| Несколько подключений к серверу | Да | Настройка с помощью CR Kubernetes device |
| Формат OPC UA PubSub | Да | Изменения значения данных в кодировке JSON |
| Заголовки CloudEvents | Да | Заголовки сообщений в качестве свойств пользователя MQTT |
| События OPC UA | Да | Предопределенные поля событий |
| Сжатие полезной нагрузки | Да | Поддержка gzip и brotli |
| Разрешение динамических узлов | Да | Использование TranslateBrowsePathToNodeId службы |
| Синхронизация хранилища состояний | Да | Синхронизация свойств узла OPC UA с распределенным хранилищем состояний |
| Режим общей конечной точки | Да | Несколько объектов совместно используют один сеанс OPC UA |
| Создание ключевых кадров | Да | Позволяет подчиненным службам быстрее восстанавливать состояние |
Принцип работы
Чтобы считывать данные с подключенного сервера OPC UA, коннектор для приложения OPC UA:
- Считывает связанную конфигурацию устройства ресурса, чтобы определить конечную точку сервера OPC UA и параметры безопасности, используемые для подключения.
- Читает настроенный интервал публикации ресурса, чтобы определить, как часто соединитель публикует данные в тему брокера MQTT.
- Читает настроенные точки данных и события актива, чтобы определить, какие значения с сервера OPC UA следует опубликовать в брокере MQTT.
- Создает сеанс на сервер OPC UA для каждого настроенного ресурса.
- Создает отдельную подписку в сеансе для каждой 1000 точек данных.
- Создает отдельную подписку для каждого события, определенного в ресурсе.
- Публикует сообщения в брокере MQTT на основе интервала публикации. Соединитель реализует логику повторных попыток для идентификации подключений к конечным точкам, которые не отвечают после указанного количества запросов на поддержание активности. Например, в вашей среде может быть неответственный конечный пункт, когда сервер OPC UA прекращает отвечать из-за сбоя питания.
Чтобы записать значения в узел на подключенном сервере OPC UA, используйте соединитель OPC UA.
Считывает связанную конфигурацию устройства ресурса, чтобы определить конечную точку сервера OPC UA и параметры безопасности, используемые для подключения.
Считывает конфигурацию ресурса, чтобы определить, в какие узлы осуществлять запись на сервере OPC UA.
Подписывается на топик MQTT, содержащий запросы на запись актива. Имя раздела находится в формате
{Namespace}/asset-operations/{AssetId}/builtin/{DatasetName}/, где{Namespace}— это пространство имен для экземпляра Операции Интернета вещей Azure,{AssetId}— уникальный идентификатор ресурса, а{DatasetName}— это имя набора данных, содержащего узлы для записи.Создает временный сеанс с сервером OPC UA с помощью конфигурации устройства.
Проверяет полезную нагрузку, чтобы подтвердить наличие всех данных в целевом наборе данных.
Записывает значения на сервер OPC UA и публикует успешный или неудачный ответ брокера MQTT. Измененное значение публикуется в стандартном разделе сообщения, связанном с набором данных.
Чтобы создать запрос на запись, опубликуйте сообщение JSON в разделе MQTT с помощью семантики запроса и ответа MQTT версии 5. Укажите имя набора данных и значения, которые необходимо записать в плейлоад. Каждое сообщение MQTT включает метаданные, определяющие системный и пользовательский уровни свойств, такие как SourceId, ProtocolVersion и CorrelationData, обеспечивающие трассировку и соответствие.
Чтобы синхронизировать свойства узла OPC UA с распределенным хранилищем состояний, коннектор для OPC UA:
- Следует ссылке
HasPropertyна все узлы переменных, которые используются в качестве точек данных в любом наборе данных для всех ресурсов, использующих одну и ту же конечную точку входящего трафика OPC UA. - Добавляет свойства в распределенное хранилище состояний под идентификатором:
{AioNamespace}.{AssetName}.{DatasetName}.{DataPointName}.{PropertyName} - Автоматически подписывается на
ModelChangeсобытие сервера OPC UA и перезаполняет все свойства после возникновенияModelChangeсобытия.
Чтобы настроить это поведение, выберите "Синхронизировать свойства в хранилище состояний" при настройке входящей конечной точки OPC UA в веб-интерфейсе операционного опыта:
Вы также можете выполнить принудительную синхронизацию всех свойств, вызвав RPC MQTT по теме azure-iot-operation/asset-operations/{AssetName}/builtin/syncProperties. Полезная нагрузка {} заставляет синхронизацию без наблюдения событий ModelChange. Полезная нагрузка {"observeModelChanges": true} вынуждает синхронизацию, которая отслеживает события ModelChange.
Режим общей конечной точки
По умолчанию каждый ресурс, который подключается к серверу OPC UA, открывает собственный независимый сеанс OPC UA. Это поведение по умолчанию называется выделенным режимом.
При установке флага sharedtrue на входящую конечную точку устройства, коннектор устанавливает один сеанс OPC UA для этой конечной точки и повторно использует его на всех устройствах, ссылающихся на данную конечную точку. Это поведение называется общим режимом.
Dedicated mode (default) Shared mode
───────────────────────── ─────────────────────────
Asset A → Session A Asset A ─┐
Asset B → Session B Asset B ──┼─→ Session (shared)
Asset C → Session C Asset C ─┘
(3 sessions to the server) (1 session to the server)
Когда следует использовать общий режим
Используйте общий режим, когда:
- Сервер OPC UA применяет низкий предел сеанса, например PLC, который разрешает только несколько одновременных подключений.
- У вас есть много активов, указывающих на один и тот же сервер, и вы хотите свести к минимуму нагрузку на соединение.
- Вы хотите уменьшить потребление ресурсов (память, TCP-подключения, лицензирование) на сервере OPC UA.
Флаг shared не зависит от метода проверки подлинности. Один общий сеанс использует любой метод проверки подлинности, настроенный в конечной точке. Общий формат телеметрии, структура темы и схема сообщений идентичны независимо от режима сеанса.
Вы можете смешивать общие и выделенные ресурсы на одном устройстве. Создайте отдельные конечные точки, например my-opcua-endpoint-shared и my-opcua-endpoint-dedicatedкаждый с собственным shared флагом. Ресурсы ссылаются на определенную конечную точку по имени deviceRef.endpointName.
Ограничения и компромиссы
| Аспект | Выделенный режим | Общий режим |
|---|---|---|
| Сеансы сервера | Один на ресурс | Один на конечную точку |
| Влияние ограничения сеанса сервера | High | Low |
| Изоляция между ресурсами | Полный (у каждого актива своя сессия) | Нет (все активы используют один сеанс) |
| Влияние отключения сеанса | Переподключается только затронутый ресурс | Все ресурсы в конечной точке затронуты |
| Обновление сертификата | Каждый актив повторно подключается независимо | Воссоздается один общий сеанс; все активы на конечной точке временно прерваны. |
Это важно
При отключении общего сеанса OPC UA из-за сбоя сети, перезапуска сервера или смены сертификатов все ресурсы, ссылающиеся на конечную точку, временно теряют данные телеметрии, пока сеанс не будет восстановлен.
Жизненный цикл общей конечной точки
- При создании или обновлении ресурса устройства соединитель считывает
sharedфлаг. - Если
sharedравноtrue, соединитель открывает один сеанс OPC UA перед подключением любого актива. Конечная точка переходит в состояниеShared. - Когда ресурс подключается, его запись
ConnectedAssetссылается на существующий сеанс, и второй сеанс не открывается. - При удалении ресурса сеанс OPC UA остается открытым для других ресурсов. Удаляются только подписки удаленного ресурса.
- При удалении или обновлении устройства общий сеанс отключается, а все связанные ресурсы будут повторно возвращены.
Если вы измените shared с true на false на работающем устройстве, разъем отключает общий сеанс и заново ставит в очередь все затронутые активы. Затем каждый актив устанавливает собственный выделенный сеанс. Ожидается краткое прерывание телеметрии.
Состояния работоспособности для общих конечных точек
- Отчет о состоянии работоспособности InboundEndpoint показывает
AvailableилиUnavailableдля единого общего сеанса. - Каждое состояние работоспособности ресурса также отображает
AvailableилиUnavailable. Так как все ресурсы используют один и тот же сеанс, прерывание сеанса помечает все связанные ресурсыUnavailableодновременно.
Смена сертификатов для общих конечных точек
Когда сертификат приложения соединителя обновляется, он повторно создаёт безопасный канал общего сеанса. Все ресурсы в конечной точке прерываются кратко, а затем автоматически восстанавливаются без необходимости повторного подключения.
Сведения о настройке общей конечной точки см. в статье "Настройка общей конечной точки".
Соединитель для формата сообщения OPC UA
Коннектор OPC UA публикует сообщения с серверов OPC UA в брокер MQTT в формате JSON. Каждое сообщение содержит полезные данные и коллекцию свойств, которые входят в раздел свойств пользователя MQTT. Полезная нагрузка содержит сообщения с сервера OPC UA, а свойства предоставляют метаданные.
Полезная нагрузка
Полезная нагрузка сообщения OPC UA — это объект JSON, содержащий сообщения с сервера OPC UA. В следующем примере показана полезная нагрузка сообщения от тестового термостата, используемого в быстром начале. Используйте следующую команду, чтобы подписаться на сообщения в azure-iot-operations/data разделе:
mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/#" -v --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
Выходные данные предыдущей команды выглядят следующим образом:
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:17.1858435Z","Value":4558},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:17.1858869Z","Value":4558}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:18.1838125Z","Value":4559},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:18.1838523Z","Value":4559}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:19.1834363Z","Value":4560},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:19.1834879Z","Value":4560}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:20.1861251Z","Value":4561},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:20.1861709Z","Value":4561}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:21.1856798Z","Value":4562},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:21.1857211Z","Value":4562}}
Пример нагрузки записи
Ниже приведен минимальный пример записи простого значения с плавающей запятой в узел.
{
"SetPoint": 50
}
Свойства пользователя
Соединитель для OPC UA формирует заголовки опубликованных сообщений на основе спецификации CloudEvents для OPC UA. Соединитель преобразует заголовки из сообщения OPC UA в свойства пользователя в сообщении, которое публикуется в брокере MQTT. В следующем примере показаны атрибуты сообщения из примера объекта-термостата, используемого в быстрых примерах. Используйте следующую команду, чтобы подписаться на сообщения в azure-iot-operations/data разделе:
mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/#" -V mqttv5 -F %P --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
Выходные данные предыдущей команды выглядят следующим образом:
uuid:0000aaaa-11bb-cccc-dd22-eeeeee333333 externalAssetId:0000aaaa-11bb-cccc-dd22-eeeeee333333 serverToConnectorMilliseconds:0.3153 id:1111bbbb-22cc-dddd-ee33-ffffff444444 specversion:1.0 type:ua-keyframe source:urn:OpcPlc:opcplc-000000 time:2024-08-05T14:19:08.8738457Z datacontenttype:application/json subject:0000aaaa-11bb-cccc-dd22-eeeeee333333 sequence:9768 traceparent:00-4eb4313536bc006c918e936686921cfc-4ee795f6fdd5fae7-01 recordedtime:2024-08-05 14:19:08.874 +00:00
uuid:0000aaaa-11bb-cccc-dd22-eeeeee333333 externalAssetId:0000aaaa-11bb-cccc-dd22-eeeeee333333 serverToConnectorMilliseconds:0.3561 id:1111bbbb-22cc-dddd-ee33-ffffff444444 specversion:1.0 type:ua-keyframe source:urn:OpcPlc:opcplc-000000 time:2024-08-05T14:19:09.8746396Z datacontenttype:application/json subject:0000aaaa-11bb-cccc-dd22-eeeeee333333 sequence:9769 traceparent:00-388697f77c2dcb5e9b30589c0a4cef6e-de9351186ff5833e-01 recordedtime:2024-08-05 14:19:09.875 +00:00
uuid:0000aaaa-11bb-cccc-dd22-eeeeee333333 externalAssetId:0000aaaa-11bb-cccc-dd22-eeeeee333333 serverToConnectorMilliseconds:0.3423 id:1111bbbb-22cc-dddd-ee33-ffffff444444 specversion:1.0 type:ua-keyframe source:urn:OpcPlc:opcplc-000000 time:2024-08-05T14:19:10.8754860Z datacontenttype:application/json subject:0000aaaa-11bb-cccc-dd22-eeeeee333333 sequence:9770 traceparent:00-7c65a93fa7668bbe0cdfd051168c88ac-ab86b83fb1b7944f-01 recordedtime:2024-08-05 14:19:10.875 +00:00
uuid:0000aaaa-11bb-cccc-dd22-eeeeee333333 externalAssetId:0000aaaa-11bb-cccc-dd22-eeeeee333333 serverToConnectorMilliseconds:0.3277 id:1111bbbb-22cc-dddd-ee33-ffffff444444 specversion:1.0 type:ua-keyframe source:urn:OpcPlc:opcplc-000000 time:2024-08-05T14:19:11.8765569Z datacontenttype:application/json subject:0000aaaa-11bb-cccc-dd22-eeeeee333333 sequence:9771 traceparent:00-5851e56a6f358ab5e1af1d798f7580a1-bf6dfbda8196cba0-01 recordedtime:2024-08-05 14:19:11.877 +00:00
Поле темы содержит имя ресурса, к которому относится сообщение. Поле последовательности содержит порядковый номер сообщения.
Замечание
Для ресурсов, создаваемых в веб-интерфейсе пользователя для операций, свойство 'Тема' для всех сообщений, отправляемых ресурсом, имеет значение externalAssetId. В этом случае subject свойство содержит GUID, а не понятное имя ресурса.
Динамическое разрешение узлов с помощью путей просмотра
При настройке точек данных OPC UA или событий в ресурсе обычно добавляется идентификатор узла сервера OPC UA в поле источника данных . Этот подход предполагает, что идентификаторы узлов стабильны во время перезапусков и развертываний сервера. Однако некоторые серверы OPC UA динамически создают идентификаторы узлов во время выполнения или по запросу. Эти динамические идентификаторы узлов нельзя сохранять в конфигурации ресурса, так как они могут меняться с течением времени.
Для решения этого сценария соединитель может обрабатывать динамические узлы во время выполнения с помощью службы OPC UA TranslateBrowsePathToNodeId. Эта служба определяет идентификатор целевого узла из начального объекта и относительного пути просмотра. При настройке значения начального экземпляра в наборе данных или конфигурации событий для каждой точки данных или события требуется допустимый относительный путь обзора в свойстве источника данных . Коннектор преобразует относительный путь навигации в конкретный идентификатор узла во время выполнения.
Замечание
Если вы не предоставляете значение начального экземпляра , соединитель использует свойство источника данных в качестве идентификатора фиксированного узла.
Примеры значений начального экземпляра :
i=2555nsu=http://microsoft.com/Opc/OpcPlc/;s=FastUInt1nsu=http://microsoft.com/Opc/OpcPlc/Boiler;i=5ns=10;s=System.Pump1ns=1;b=M/RbKBsRVkePCePcx24oRA==
Примеры относительных путей обзора для использования в поле источника данных :
/1:SYSTEM/1:PUMP/1:P1/2:Block&.Output/3:Truck.0:NodeVersion<!HasChild>Truck<1:ConnectedTo>1:Boiler/
Дополнительные сведения о синтаксисе пути относительного обзора см. в статье OPC Foundation, часть 4 A.2.
Относительные пути обзора должны использовать числовые индексы пространства имен OPC UA. В настоящее время нет поддержки названий пространств имён в строковом формате.
Это важно
Индексы пространства имен могут изменяться на сервере. Если индексы пространства имен изменяются, необходимо перенастроить их в определении ресурса.
Основные кадры для точек данных OPC UA
Используйте параметр счетчика ключевых кадров , чтобы контролировать частоту отправки ключевого кадра соединителем для OPC UA. По умолчанию, когда соединитель отправляет сообщение, он включает только точки данных, значения которых изменились с момента последнего сообщения. Ключевой кадр — это сообщение, содержащее значения для всех точек данных в наборе данных, независимо от того, изменились ли они с момента последнего сообщения.
Если потребитель пропускает сообщения (из-за перезапуска, повторного подключения или сетевых проблем), он не может надежно восстановить текущее состояние, пока не получит ключевой кадр со всеми значениями точек данных. Ключевые кадры позволяют пользователям быстрее восстанавливать состояние, но они увеличивают размеры сообщений.
Дополнительные сведения о ключевых кадрах см. в разделе OPC UA часть 14 — PubSub.
Поведение счетчика ключевых кадров
| Ценность | Поведение |
|---|---|
-1 |
Значение по умолчанию (не задано) |
0 |
Отключите ключевые кадры |
1 |
Каждый кадр является ключевым кадром |
>1 |
Выдача ключевого кадра каждые n кадров |
Интервал ключевого кадра составляет приблизительно: KeyFrameCount * PublishingIntervalMs
Рассмотрим пример.
| КоличествоКлючевыхКадров | ПериодПубликацииMs | Результат |
|---|---|---|
-1 |
1000 | Поведение соединителя по умолчанию |
0 |
1000 | Ключевых кадров нет |
1 |
1000 | Ключевой кадр каждые одну секунду |
10 |
500 | Ключевой кадр каждые пять секунд |
Для параметра счетчика ключевых кадров выберите:
- Большие значения (30–60): снижение пропускной способности, более медленное восстановление
- Меньшие значения (5–10): быстрое восстановление для часто подключающихся потребителей
- Ноль: только если потребители не требуют моментальных снимков
Дополнительные сведения о настройке ключевых кадров см. в статье "Добавление набора данных в ресурс".
Замечание
Изменение интервала публикации влияет на эффективный интервал ключевого кадра. Обновления конфигурации могут требовать сверки или перезагрузки pod.
Как это связано с Операции Интернета вещей Azure?
Соединитель для ONVIF является частью Операции Интернета вещей Azure. Соединитель развертывается в кластере Kubernetes с поддержкой Arc на пограничном сервере в рамках развертывания Операции Интернета вещей Azure. Соединитель взаимодействует с другими элементами Операции Интернета вещей Azure, такими как: