次の方法で共有


OPC UA 用コネクタとは

OPC UA (OPC Unified Architecture) は、エッジ上の産業コンポーネント間、およびクラウドとのデータ交換を可能にするために OPC Foundation によって開発された標準です。 OPC UA サーバーから MQTT ブローカーにメッセージをルーティングし、OPC UA サーバーに制御メッセージを送信できます。 OPC UA は、広く使用されているデータ形式に基づいて、一貫性のある安全で文書化された標準を提供します。 産業用コンポーネントは、OPC UA 標準を実装して、ユニバーサル データ交換を可能にします。

OPC UA 書き込み機能 (プレビュー) を使用すると、産業開発者や運用エンジニアは OPC UA 用コネクタを使用して、OPC UA ノードに値を直接書き込むことでエッジでリアルタイム制御を実行できます。 この機能により、クラウドへのラウンド トリップに依存することなく、構成、自動化のトリガー、動的なプロセス調整を即時に更新できます。

書き込み機能は、製造ライン、予測メンテナンス、AI 駆動制御ループなど、待機時間、自律性、またはローカルの意思決定が重要なシナリオで役立ちます。

OPC UA 用コネクタは、Azure IoT Operations の一部です。 OPC UA のコネクタは、OPC UA サーバーに接続して、MQTT ブローカーのトピックに発行するデータを取得し、MQTT ブローカー トピック サブスクリプションの値に基づいてデータを書き込みます。 産業用 OPC UA 環境で OPC UA 用コネクタを使うと、Kubernetes クラスター上で実行されているローカル ワークロードやクラウド ワークロードへのデータのイングレスを行うことができます。

OPC UA 用コネクタは、Azure IoT Operations でミドルウェア サービスとして実行されるクライアント アプリケーションです。 OPC UA 用コネクタは OPC UA サーバーに接続し、サーバー アドレス空間の参照、接続された資産のデータ変更とイベントの監視、サーバー アドレス空間内のノードへのデータの書き込みを行うことができます。 運用チームと開発者は、OPC UA 用コネクタを使って、OPC UA 資産をエッジで産業用ソリューションに接続するタスクを効率化します。

能力

Azure IoT Operations の一部である OPC UA 用コネクタは、次のことを行うネイティブ Kubernetes アプリケーションです。

  • 既存の OPC UA サーバーと資産をエッジ上のネイティブ Kubernetes クラスターに接続する。
  • JSON ペイロードを使用して、OPC UA サーバーから JSON でエンコードされたメッセージを OPC UA PubSub 形式で発行します。 このデータ交換のための標準形式を使用することで、将来の互換性の問題のリスクを軽減できます。
  • MQTT サブスクリプションに基づいて、接続されている OPC UA サーバー内のノードに値を直接書き込みます。
  • クラウド内の Azure Arc 対応サービスに接続する。

その他の機能

OPC UA 用コネクタは、Azure IoT Operations の一部として以下の機能をサポートします。

  • Kubernetes AssetEndpointProfile カスタム リソース (CR) を使用して構成された複数の OPC UA サーバーへの同時接続。
  • JSON エンコードを使用した OPC UA PubSub 形式での OPC UA データ値の変更の発行。
  • MQTT メッセージのユーザー プロパティとしてメッセージ ヘッダーを発行します。 OPC UA 用コネクタによって発行されるメッセージのヘッダーは、OPC UA の CloudEvents 仕様に基づいています。
  • 定義済みのイベント フィールドを使用した OPC UA イベントの発行。
  • Kubernetes Asset CR を使用した資産定義
  • gzip および brotli を含むペイロード圧縮。
  • OPC UA サーバーへの自動再接続。
  • 統合された OpenTelemetry 互換の監視。
  • OPC UA 転送の暗号化。
  • 匿名認証とユーザー名とパスワードに基づく認可。
  • Azure REST API と操作エクスペリエンス Web UI を使って構成できる AssetEndpointProfileAsset の CR。

動作方法

接続された OPC UA サーバーからデータを読み取るために、OPC UA アプリケーションのコネクタは次の手順を実行します。

  1. 資産に関連付けられているデバイス構成を読み取り、OPC UA サーバー エンドポイントと、接続に使用するセキュリティ設定を決定します。
  2. 資産の構成済みの発行間隔を読み取り、コネクタが MQTT ブローカー トピックにデータを発行する頻度を決定します。
  3. 資産の構成済みのデータ ポイントとイベントを読み取り、MQTT ブローカーに発行する OPC UA サーバーの値を決定します。
  4. 構成された資産ごとに OPC UA サーバーへのセッションを作成します。
  5. 1,000 個のデータ ポイントごとにセッションに個別のサブスクリプションを作成します。
  6. 資産内で定義されたイベントごとに個別のサブスクリプションを作成します。
  7. 発行間隔に基づいて MQTT ブローカーにメッセージを発行します。 コネクタは、指定された数のキープアライブ要求の後に応答しないエンドポイントへの接続を識別するための再試行ロジックを実装します。 たとえば、OPC UA サーバーが停電のために応答を停止している際には、環境内に応答しないエンドポイントが存在する可能性があります。

接続された OPC UA サーバー内のノードに値を書き込むには、OPC UA 用のコネクタを次に示します。

  1. 資産に関連付けられているデバイス構成を読み取り、OPC UA サーバー エンドポイントと、接続に使用するセキュリティ設定を決定します。

  2. 資産構成を読み取り、OPC UA サーバーで書き込むノードを決定します。

  3. 資産の書き込み要求を含む MQTT トピックをサブスクライブします。 トピック名の形式は {Namespace}/asset-operations/{AssetId}/{DatasetName}/ で、 {Namespace} は Azure IoT Operations インスタンスの名前空間、 {AssetId} は資産の一意識別子、 {DatasetName} は書き込むノードを含むデータセットの名前です。

  4. デバイス構成を使用して、OPC UA サーバーとの一時的なセッションを作成します。

  5. ペイロードをチェックして、すべてのデータ ポイントがターゲット データセットに存在することを確認します。

  6. OPC UA サーバーに値を書き込み、成功または失敗の応答を MQTT ブローカーに発行します。 変更された値は、データセットに関連付けられている標準テレメトリ トピックに発行されます。

書き込み要求を生成するには、MQTT v5 要求/応答セマンティクスを使用して JSON メッセージを MQTT トピックに発行します。 ペイロードに書き込むデータセット名と値を指定します。 各 MQTT メッセージには、 SourceIdProtocolVersionCorrelationData などのシステム レベルのプロパティとユーザー定義のプロパティを定義するメタデータが含まれており、追跡性と準拠を確保します。

プレビュー期間中、書き込み操作は、データセットで明示的に定義されているデータ ポイントに限定されます。

OPC UA 用コネクタのメッセージ形式

OPC UA のコネクタは、OPC UA サーバーから MQTT ブローカーに JSON としてメッセージを発行します。 各メッセージには、ペイロードと、MQTT ユーザー プロパティ セクションに含まれるプロパティのコレクションがあります。 ペイロードには OPC UA サーバーからのメッセージが含まれており、プロパティはメタデータを提供します。

ペイロード

OPC UA メッセージのペイロードは、OPC UA サーバーからのメッセージを含む JSON オブジェクトです。 次の例は、クイックスタートで使用されるサンプルのアセットであるサーモスタットからのメッセージのペイロードを示しています。 次のコマンドを実行して、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}}

書き込みペイロードの例

単純な float 値をノードに書き込む最小限の例を次に示します。

{ 
   "SetPoint": 50
}

ユーザー プロパティ

OPC UA 用コネクタによって発行されるメッセージのヘッダーは、OPC UA の CloudEvents 仕様に基づいています。 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

件名フィールドには、メッセージが関連付けられているアセットの名前が含まれています。 シーケンス フィールドには、メッセージのシーケンス番号が含まれています。

操作エクスペリエンス Web UI で作成された資産の場合、資産によって送信されるすべてのメッセージの subject プロパティは、 externalAssetId 値に設定されます。 この場合、 subject プロパティには、フレンドリ アセット名ではなく GUID が含まれます。

Azure IoT Operations とどのように関連していますか?

ONVIF 用コネクタは、Azure IoT Operations の一部です。 このコネクタは、Azure IoT Operations デプロイの一部としてエッジ上の Arc 対応 Kubernetes クラスターにデプロイされます。 このコネクタは、次のようなその他の Azure IoT Operations 構成要素と対話します。

次のステップ