翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 デバイスで を指定すると、 が Modbus デバイスの コイルを読み
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ネットワークが動作していない場合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 |
当初のバージョン |