Modbus-RTU プロトコルアダプタ
Modbus-RTU プロトコル アダプタ コンポーネント aws.greengrass.Modbus
は、ローカル Modbus RTU デバイスからの情報をポーリングします。
このコンポーネントでローカル Modbus RTU デバイスから情報を要求するには、このコンポーネントがサブスクライブするトピックにメッセージをパブリッシュします。メッセージで、デバイスに送信する Modbus RTU 要求を指定します。次に、このコンポーネントは、 Modbus RTU 要求の結果を含むレスポンスをパブリッシュします。
注記
このコンポーネントは、AWS IoT Greengrass V1で Modbus RTU プロトコル アダプタ コネクタと同様の機能を提供します。詳細については、「AWS IoT Greengrass V1 デベロッパーガイド」の「Modbus RTU プロトコールアダプタコネクタ」を参照してください。
バージョン
このコンポーネントには、次のバージョンがあります。
-
2.1.x
-
2.0.x
タイプ
このコンポーネントは Lambda コンポーネントです (aws.greengrass.lambda
)。Greengrass nucleus は、Lambda ランチャーコンポーネントを使用してこのコンポーネントの Lambda 関数を実行します。
詳細については、「コンポーネントタイプ」を参照してください。
オペレーティングシステム
このコンポーネントは、Linux コアデバイスにのみインストールできます。
要件
このコンポーネントには次の要件があります。
-
コアデバイスは、Lambda 関数を実行するための要件を満たしている必要があります。コアデバイスが、コンテナ化された Lambda 関数を実行させる場合、そのデバイスは要件を満たす必要があります。詳細については、「Lambda 関数の要件」を参照してください。
-
Python
バージョン 3.7 がコアデバイスにインストールされ、PATH 環境変数に追加されています。 -
AWS IoT Greengrass コアデバイスと Modbus デバイスの間の物理的な接続。コアデバイスは、USB ポートなど、シリアルポートを介して Modbus RTU ネットワークに物理的に接続する必要があります。
-
このコンポーネントから出力データを受信するには、このコンポーネントをデプロイするときに、次の設定更新プログラムをレガシーサブスクリプションルーターのコンポーネント (
aws.greengrass.LegacySubscriptionRouter
) のためにマージする必要があります。この設定は、このコンポーネントがレスポンスを公開するトピックを指定します。詳細については、「デプロイの作成」を参照してください。
-
Modbus-RTU プロトコルアダプタは、VPC での実行がサポートされています。
依存関係
コンポーネントをデプロイするとき、AWS IoT Greengrass はそれと互換性のあるバージョンの依存関係もデプロイします。つまり、コンポーネントを正常にデプロイするには、コンポーネントとその依存関係のすべての要件を満たす必要があります。このセクションでは、このコンポーネントのリリースされたバージョンの依存関係と、各依存関係に対するコンポーネントのバージョンを定義するセマンティックバージョン制約をリスト表示しています。コンポーネントの各バージョンの依存関係は、AWS IoT Greengrass コンソール
コンポーネントの依存関係の詳細については、「コンポーネント recipe のリファレンス」を参照してください。
構成
このコンポーネントには、コンポーネントのデプロイ時にカスタマイズできる次の設定パラメータが用意されています。
注記
このコンポーネントのデフォルト設定には、Lambda 関数のパラメータが含まれます。デバイスにこのコンポーネントを設定するには、次のパラメータのみを編集することをお勧めします。
入力データ
このコンポーネントは、次のトピックの Modbus RTU 要求パラメータを受入れて、Modbus RTU 要求をデバイスに送信します。デフォルトで、このコンポーネントはローカルのパブリッシュ/サブスクライブメッセージにサブスクライブします。カスタムコンポーネントからこのコンポーネントにメッセージをパブリッシュする方法の詳細については、「ローカルメッセージをパブリッシュ/サブスクライブする」を参照してください。
デフォルトトピック (ローカルパブリッシュ/サブスクライブ): modbus/adapter/request
メッセージは、次のプロパティを受付けます。入力メッセージは JSON 形式である必要があります。
request
-
送信する Modbus RTU リクエストのパラメータ。
リクエストメッセージの形は、示す Modbus RTU 要求のタイプによって異なります。次のプロパティはすべての要求に必要です。
タイプ: 次の情報が含まれる
object
。operation
-
実行するオペレーションの名前。例えば、Modbus RTU デバイスのコイルを読み取るため、
ReadCoilsRequest
を指定します。サポートされているオペレーションの詳細については、「Modbus RTU のリクエストとレスポンス」を参照してください。タイプ:
string
device
-
リクエストのターゲットデバイス。
この値は、
0
と247
の間の整数である必要があります。タイプ:
integer
リクエストに含まれるその他のパラメータはオペレーションによって異なります。このコンポーネントは、ユーザーに代わって巡回冗長検査 (CRC)
に対応して、データリクエストを検証します。 注記
リクエストに
address
プロパティが含まれる場合、その値を整数として指定する必要があります。例えば、"address": 1
と指定します。 id
-
リクエストの任意の ID。このプロパティを使用して、入力リクエストを出力レスポンスにマッピングします。このプロパティを指定するとき、コンポーネントはこの値に対してレスポンスオブジェクトの
id
プロパティを設定します。タイプ:
string
例 入力例: コイルの読み取りリクエスト
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "MyRequest" }
出力データ
このコンポーネントは、デフォルトで次の MQTT トピックに出力データとしてレスポンスを公開します。このトピックは、[legacy subscription router component] (レガシーサブスクリプションルーターコンポーネント) の設定で subject
として指定する必要があります。カスタムコンポーネントでこのトピックに関するメッセージへサブスクライブする方法の詳細については、「AWS IoT Core MQTT メッセージをパブリッシュ/サブスクライブする」を参照してください。
デフォルトトピック (AWS IoT Core MQTT): modbus/adapter/response
レスポンスメッセージの形状は、リクエストオペレーションとレスポンスステータスによって異なります。例については、「リクエストとレスポンスの例」を参照してください。
レスポンスごとに、以下のプロパティが含まれます。
response
-
Modbus RTU デバイスからの応答。
タイプ: 次の情報が含まれる
object
。status
-
リクエストのステータス。ステータスは、次のいずれかの値になります。
-
Success
- リクエストは有効で、コンポーネントはリクエストを Modbus RTU ネットワークに送信し、Modbus RTU ネットワークがレスポンスを返しました。 -
Exception
- リクエストは有効で、コンポーネントはリクエストを Modbus RTU ネットワークに送信し、Modbus RTU ネットワークが例外を返しました。詳細については、「レスポンスステータス: 例外」を参照してください。 -
No Response
– リクエストは無効で、コンポーネントが要求を Modbus RTU ネットワークに送信される前にエラーを検出しました。詳細については、「レスポンスステータス: No Response」を参照してください。
-
operation
-
コンポーネントが要求した操作。
device
-
コンポーネントが要求を送信したデバイス。
payload
-
Modbus RTU デバイスからの応答。
status
がNo Response
の場合、このオブジェクトはエラー (例えば、[Input/Output] No Response received from the remote unit
) の説明を含むerror
プロパティのみが含まれています。
id
-
どのレスポンスがどのリクエストに対応しているか識別するために使用できるリクエストの ID。
注記
書き込みオペレーションのレスポンスはリクエストのエコーのみです。書き込みレスポンスに有意な情報を含みませんが、要求が正常に処理されたか、失敗したか確認するため、レスポンスのステータスを確認することをお勧めします。
例 出力例: 成功
{ "response" : { "status" : "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "MyRequest" }
例 出力例: 失敗
{ "response" : { "status" : "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id" : "MyRequest" }
その他の例については、「リクエストとレスポンスの例」を参照してください。
Modbus RTU のリクエストとレスポンス
このコネクタは、Modbus RTU のリクエストパラメータを入力データとして受け取り、レスポンスを出力データとして発行します。
以下の一般的なオペレーションがサポートされています。
リクエストのオペレーション名 | レスポンスの関数コード |
---|---|
ReadCoilsRequest | 01 |
ReadDiscreteInputsRequest | 02 |
ReadHoldingRegistersRequest | 03 |
ReadInputRegistersRequest | 04 |
WriteSingleCoilRequest | 05 |
WriteSingleRegisterRequest | 06 |
WriteMultipleCoilsRequest | 15 |
WriteMultipleRegistersRequest | 16 |
MaskWriteRegisterRequest | 22 |
ReadWriteMultipleRegistersRequest | 23 |
以下に示しているのは、サポートされているオペレーションのリクエストとレスポンスの例です。
- コイルの読み取り
-
リクエストの例:
{ "request": { "operation": "ReadCoilsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
レスポンスの例:
{ "response": { "status": "success", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 1, "bits": [1] } }, "id" : "TestRequest" }
- 個別入力の読み取り
-
リクエストの例:
{ "request": { "operation": "ReadDiscreteInputsRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
レスポンスの例:
{ "response": { "status": "success", "device": 1, "operation": "ReadDiscreteInputsRequest", "payload": { "function_code": 2, "bits": [1] } }, "id" : "TestRequest" }
- 保持レジスタの読み取り
-
リクエストの例:
{ "request": { "operation": "ReadHoldingRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
レスポンスの例:
{ "response": { "status": "success", "device": 1, "operation": "ReadHoldingRegistersRequest", "payload": { "function_code": 3, "registers": [20,30] } }, "id" : "TestRequest" }
- 入力レジスタの読み取り
-
リクエストの例:
{ "request": { "operation": "ReadInputRegistersRequest", "device": 1, "address": 1, "count": 1 }, "id": "TestRequest" }
- 単一コイルの書き込み
-
リクエストの例:
{ "request": { "operation": "WriteSingleCoilRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
レスポンスの例:
{ "response": { "status": "success", "device": 1, "operation": "WriteSingleCoilRequest", "payload": { "function_code": 5, "address": 1, "value": true } }, "id" : "TestRequest" }
- 単一レジスタの書き込み
-
リクエストの例:
{ "request": { "operation": "WriteSingleRegisterRequest", "device": 1, "address": 1, "value": 1 }, "id": "TestRequest" }
- 複数コイルの書き込み
-
リクエストの例:
{ "request": { "operation": "WriteMultipleCoilsRequest", "device": 1, "address": 1, "values": [1,0,0,1] }, "id": "TestRequest" }
レスポンスの例:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleCoilsRequest", "payload": { "function_code": 15, "address": 1, "count": 4 } }, "id" : "TestRequest" }
- 複数レジスタの書き込み
-
リクエストの例:
{ "request": { "operation": "WriteMultipleRegistersRequest", "device": 1, "address": 1, "values": [20,30,10] }, "id": "TestRequest" }
レスポンスの例:
{ "response": { "status": "success", "device": 1, "operation": "WriteMultipleRegistersRequest", "payload": { "function_code": 23, "address": 1, "count": 3 } }, "id" : "TestRequest" }
- 書き込みレジスタのマスク
-
リクエストの例:
{ "request": { "operation": "MaskWriteRegisterRequest", "device": 1, "address": 1, "and_mask": 175, "or_mask": 1 }, "id": "TestRequest" }
レスポンスの例:
{ "response": { "status": "success", "device": 1, "operation": "MaskWriteRegisterRequest", "payload": { "function_code": 22, "and_mask": 0, "or_mask": 8 } }, "id" : "TestRequest" }
- 複数レジスタの読み書き
-
リクエストの例:
{ "request": { "operation": "ReadWriteMultipleRegistersRequest", "device": 1, "read_address": 1, "read_count": 2, "write_address": 3, "write_registers": [20,30,40] }, "id": "TestRequest" }
レスポンスの例:
{ "response": { "status": "success", "device": 1, "operation": "ReadWriteMultipleRegistersRequest", "payload": { "function_code": 23, "registers": [10,20,10,20] } }, "id" : "TestRequest" }
注記
応答には、コンポーネントが読み取るレジスタが含まれます。
リクエスト書式が有効で、リクエストが正常に完了していない場合、例外が発生している可能性があります。この場合、レスポンスには以下の情報が含まれています。
-
status
はException
に設定されています。 -
function_code
がリクエストの関数コード + 128 に等しい。 -
exception_code
に例外コードが含まれている。詳細については、Modbus 例外コードを参照してください。
例:
{ "response": { "status": "fail", "error_message": "Internal Error", "error": "Exception", "device": 1, "operation": "ReadCoilsRequest", "payload": { "function_code": 129, "exception_code": 2 } }, "id": "TestRequest" }
このコネクタは Modbus リクエストの検証チェックを実行します。例えば、無効な書式や不足しているフィールドがないかどうかを確認します。検証に失敗すると、コネクタはリクエストを送信しません。代わりに、以下の情報を含むレスポンスを返します。
-
status
はNo Response
に設定されています。 -
error
にはエラーの理由が含まれています。 -
error_message
にはエラーメッセージが含まれています。
例:
{ "response": { "status": "fail", "error_message": "Invalid address field. Expected <type 'int'>, got <type 'str'>", "error": "No Response", "device": 1, "operation": "ReadCoilsRequest", "payload": { "error": "Invalid address field. Expected Expected <type 'int'>, got <type 'str'>" } }, "id": "TestRequest" }
リクエストのターゲットデバイスが存在しない場合、または Modbus RTU ネットワークが機能していない場合、No Response 形式を使用する ModbusIOException
が返されます。
{ "response": { "status": "fail", "error_message": "[Input/Output] No Response received from the remote unit", "error": "No Response", "device": 1, "operation": "ReadCoilsRequest", "payload": { "error": "[Input/Output] No Response received from the remote unit" } }, "id": "TestRequest" }
ローカルログファイル
このコンポーネントは次のログファイルを使用します。
/logs/aws.greengrass.Modbus.log
/greengrass/v2
このコンポーネントのログを確認するには
-
コアデバイスに次のコマンドを実行して、このコンポーネントのログファイルをリアルタイムに確認します。
を AWS IoT Greengrass ルートフォルダへのパスに置き換えます。/greengrass/v2
sudo tail -f
/logs/aws.greengrass.Modbus.log/greengrass/v2
ライセンス
このコンポーネントには、次のサードパーティーソフトウェア/ライセンス品が含まれています。
このコンポーネントは、Greengrass Core ソフトウェアライセンス契約
変更ログ
次の表は、コンポーネントの各バージョンにおける変更を示します。
バージョン |
変更 |
---|---|
2.1.9 |
Greengrass nucleus バージョン 2.13.0 のリリース用にバージョンが更新されました。 |
2.1.8 |
Greengrass nucleus バージョン 2.12.0 のリリース用にバージョンが更新されました。 |
2.1.7 |
Greengrass nucleus バージョン 2.11.0 のリリース用にバージョンが更新されました。 |
2.1.6 |
Greengrass nucleus バージョン 2.10.0 のリリース用にバージョンが更新されました。 |
2.1.5 |
|
2.1.4 |
Greengrass nucleus バージョン 2.9.0 のリリース用にバージョンが更新されました。 |
2.1.3 |
Greengrass nucleus バージョン 2.8.0 のリリース用にバージョンが更新されました。 |
2.1.2 |
Greengrass nucleus バージョン 2.7.0 のリリース用にバージョンが更新されました。 |
2.1.1 |
Greengrass nucleus バージョン 2.6.0 のリリース用にバージョンが更新されました。 |
2.1.0 |
|
2.0.8 |
Greengrass nucleus バージョン 2.5.0 のリリース用にバージョンが更新されました。 |
2.0.7 |
Greengrass nucleus バージョン 2.4.0 のリリース用にバージョンが更新されました。 |
2.0.6 |
Greengrass nucleus バージョン 2.3.0 のリリース用にバージョンが更新されました。 |
2.0.5 |
Greengrass nucleus バージョン 2.2.0 のリリース用にバージョンが更新されました。 |
2.0.4 |
Greengrass nucleus バージョン 2.1.0 のリリース用にバージョンが更新されました。 |
2.0.3 |
当初のバージョン |