はじめに
前回の Azure IoT Edge の紹介に引き続き、Azure IoT Edge の Modbusモジュールの紹介になります。
Azure IoT Edge の内部は、様々なモジュールで構成されています。
モジュールは、Pub/Sub メッセージングモデルで構成されており、各モジュールは Broker を介してメッセージのやり取りを行い処理するため、他のモジュールに直接影響しない(依存しない)作りになっています。
Pub/Sub メッセージングモデル
- Publisher メッセージを送信する
- Subscriber メッセージを受信する
- Broker publisher から送信されたメッセージを適切な subscriber に送信
これにより、システムに合わせて適切なモジュールを組み込み、組み換えることで、様々なデバイスとの通信を可能にします。
Modbus モジュール動作確認
今回は、Modbus モジュールを利用した Device to Cloud(D2C) と、Cloud to Device(C2D)のデータやり取り動作についてまとめます。
今回利用した主なモジュールは、以下の通りです。
Device to Cloud(D2C)
Modbus 対応デバイスの情報を、クラウド上の Azure IoT Hub へ送信する場合の順序を以下に記します。
- device 情報の取得
modbus_read モジュールが、指定した Modbus の情報を取得します。
modbus_read モジュールが起点となり、指定したインターバル間隔で Modbus の情報を取得します。
- Publish
device 情報と Modbus の Mac アドレスを Broker へ Publish します。
- デバイス識別子変換
Modbus の Mac アドレスを Azure IoT Hub で管理されているデバイス識別子に変換します。
元の device 情報メッセージに変換した情報を付与し、新しいメッセージとして Broker へ発行します。
- Subscribe
iothub モジュールがデバイス識別子を含んだメッセージを受け取ります。
- Azure IoT Hub へデータ送信
受け取ったメッセージを Azure IoT Hub へ送信します。
Azure IoT Hub への送信プロトコルは、MQTT, AMQP, HTTP の中から選択することが可能です。
Cloud to Device(C2D)
クラウド上の Azure IoT Hub から、Modbus 対応デバイスを制御するためのメッセージを送信する場合の順序を以下に記します。
- device 制御命令
Azure IoT Hub へ、device 制御命令のメッセージを送信します。
- iothub モジュールへ
iothub モジュールへ device 制御命令のメッセージが渡りますが、設定している接続プロトコルによって情報の渡し方が異なります。
-
MQTT / AMQP の場合
Azure IoT Hub が起点となって、iothub モジュールへメッセージを送信しているように見えますが、この通信経路は先に iothub モジュール側から Azure IoT Hub に対して確立したコネクションを利用します。WEB サービスに携わっている方であれば、Websoket による双方向通信と同等のものが iothub モジュールと Azure IoT Hub 間で確立していると言った方がイメージ付きやすいかもしれません。
-
HTTPの場合
iothub モジュールが起点となり、Azure IoT Hub へ定期的にポーリングを行うことで、メッセージを取得します。
メッセージのポーリングは25分間隔で行われます。
(頻繁に device 制御を行う必要の無い場合は、HTTP でも対応できると思われます。)
- Publish
取得した device 制御命令を、Broker へ Publish します。
- デバイス識別子変換
送り先となる Modbus の Mac アドレスに変換し、元の device 制御命令と合わせ、新しいメッセージとして Broker へ発行します。
- Subscribe
modbus_read モジュールが Mac アドレス情報を含んだメッセージを受け取ります。
Azure IoT Hub への送信プロトコルは、MQTT, AMQP, HTTP の中から選択することが可能です。
- device 制御
受け取った device 制御命令のメッセージを解釈し、device へ適切な命令を実行します。
以上、Azure IoT Edge の Modbus モジュールの動作についての紹介でした。
次回予告