Modbus-RTU プロトコルアダプタ - AWS IoT Greengrass

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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) のためにマージする必要があります。この設定は、このコンポーネントがレスポンスを公開するトピックを指定します。

    Legacy subscription router v2.1.x
    { "subscriptions": { "aws-greengrass-modbus": { "id": "aws-greengrass-modbus", "source": "component:aws.greengrass.Modbus", "subject": "modbus/adapter/response", "target": "cloud" } } }
    Legacy subscription router v2.0.x
    { "subscriptions": { "aws-greengrass-modbus": { "id": "aws-greengrass-modbus", "source": "arn:aws:lambda:region:aws:function:aws-greengrass-modbus:version", "subject": "modbus/adapter/response", "target": "cloud" } } }
    • 置換 region を、使用する AWS リージョン で使用します。

    • 置換 version このコンポーネントが実行する Lambda 関数のバージョン。Lambda 関数のバージョンを確認するには、デプロイするこのコンポーネントのバージョンの recipe を確認する必要があります。AWS IoT Greengrass コンソールで、このコンポーネントの詳細ページを開き、[Lambda function] (Lambda 関数) の key-value ペアを見つけます。このキー値のペアには、Lambda 関数の名前とバージョンが含まれます。

    重要

    このコンポーネントをデプロイするたびに、レガシーサブスクリプションルーターの Lambda 関数のバージョンを更新する必要があります。これにより、デプロイするコンポーネントバージョンに正しい Lambda 関数のバージョンが使用されることが保証されます。

    詳細については、「デプロイの作成」を参照してください。

  • Modbus-RTU プロトコルアダプタは、 での実行がサポートされていますVPC。

依存関係

コンポーネントをデプロイすると、 はその依存関係の互換性のあるバージョン AWS IoT Greengrass もデプロイします。つまり、コンポーネントを正常にデプロイするには、コンポーネントとその依存関係のすべての要件を満たす必要があります。このセクションでは、このコンポーネントのリリースされたバージョンの依存関係と、各依存関係に対するコンポーネントのバージョンを定義するセマンティックバージョン制約をリスト表示しています。コンポーネントの各バージョンの依存関係は、AWS IoT Greengrass コンソールでも確認できます。コンポーネントの詳細ページで [Dependencies] (依存関係) リストを確認します。

2.1.9

次の表に、このコンポーネントのバージョン 2.1.9 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.14.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.1.8

次の表に、このコンポーネントのバージョン 2.1.8 に関する依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.13.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.1.7

次の表に、このコンポーネントのバージョン 2.1.7 に関する依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.12.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.1.6

次の表に、このコンポーネントのバージョン 2.1.6 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.11.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.1.4 and 2.1.5

次の表に、このコンポーネントのバージョン 2.1.4 および 2.1.5 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.10.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.1.3

次の表に、このコンポーネントのバージョン 2.1.3 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.9.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.1.2

次の表に、このコンポーネントのバージョン 2.1.2 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.8.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.1.1

次の表に、このコンポーネントのバージョン 2.1.1 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.7.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.0.8 and 2.1.0

次の表に、このコンポーネントのバージョン 2.0.8 および 2.1.0 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.6.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.0.7

次の表に、このコンポーネントのバージョン 2.0.7 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.5.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.0.6

次の表に、このコンポーネントのバージョン 2.0.6 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.4.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.0.5

次の表に、このコンポーネントのバージョン 2.0.5 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.3.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.0.4

次の表に、このコンポーネントのバージョン 2.0.4 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.0 <2.2.0 ハード
Lambda ランチャー ^2.0.0 ハード
Lambda ランタイム ^2.0.0 ソフト
トークン交換サービス ^2.0.0 ハード
2.0.3

次の表に、このコンポーネントのバージョン 2.0.3 の依存関係を示します。

依存関係 互換性のあるバージョン 依存関係タイプ
Greengrass nucleus >=2.0.3 <2.1.0 ハード
Lambda ランチャー >=1.0.0 ハード
Lambda ランタイム >=1.0.0 ソフト
トークン交換サービス >=1.0.0 ハード

コンポーネントの依存関係の詳細については、「コンポーネント recipe のリファレンス」を参照してください。

構成

このコンポーネントには、コンポーネントのデプロイ時にカスタマイズできる次の設定パラメータが用意されています。

注記

このコンポーネントのデフォルト設定には、Lambda 関数のパラメータが含まれます。デバイスにこのコンポーネントを設定するには、次のパラメータのみを編集することをお勧めします。

v2.1.x
lambdaParams

このコンポーネントの Lambda 関数のパラメータを含むオブジェクト。このオブジェクトには、次の情報が含まれます。

EnvironmentVariables

Lambda 関数のパラメータを含むオブジェクト。このオブジェクトには、次の情報が含まれます。

ModbusLocalPort

/dev/ttyS2 など、コアデバイスの物理 Modbus シリアルポートへの絶対パス。

コンテナ内でこのコンポーネントを実行するには、コンポーネントがアクセスできるシステムデバイス (containerParams.devices 内) として、このパスを定義する必要があります。このコンポーネントは、デフォルトでコンテナ内で実行されます。

注記

このコンポーネントには、デバイスへの読み取り/書き込みアクセス権限が必要です。

ModbusBaudRate

(オプション) ローカル Modbus TCP デバイスとのシリアル通信のボーレートを指定する文字列値。

デフォルト: 9600

ModbusByteSize

(オプション) ローカル Modbus TCP デバイスとのシリアル通信でバイトのサイズを指定する文字列値。5678 ビットのいずれかを選択します。

デフォルト: 8

ModbusParity

(オプション) ローカル Modbus TCP デバイスとのシリアル通信でデータの整合性を検証するために使用するパリティモード。

  • E - 偶数のパリティでデータの整合性を検証します。

  • O - 奇数のパリティでデータの整合性を検証します。

  • N - データの整合性を検証しません。

デフォルト: N

ModbusStopBits

(オプション) ローカル Modbus TCP デバイスとのシリアル通信におけるバイトの終了を示すビット数を指定する文字列値。

デフォルト: 1

containerMode

(オプション) このコンポーネントのコンテナ化モード。次のオプションから選択します。

  • GreengrassContainer – コンポーネントは、 AWS IoT Greengrass コンテナ内の分離されたランタイム環境で実行されます。

    このオプションを指定した場合、コンテナに Modbus デバイスへのアクセスを許可するため、システムデバイス (containerParams.devices 内) を指定する必要があります。

  • NoContainer - コンポーネントは、分離されたランタイム環境では実行されません。

デフォルト: GreengrassContainer

containerParams

(オプション) このコンポーネントのコンテナパラメータを含むオブジェクト。containerModeGreengrassContainer を指定した場合、コンポーネントはこれらのパラメータを使用します。

このオブジェクトには、次の情報が含まれます。

memorySize

(オプション) コンポーネントに割り当てるメモリ量 (KB 単位)。

デフォルトは 512 MB (525,312 KB) です。

devices

(オプション) コンテナ内でコンポーネントがアクセスできるシステムデバイスを指定するオブジェクトです。

重要

コンテナ内でこのコンポーネントを実行するには、ModbusLocalPort 環境変数で設定するシステムデバイスを指定する必要があります。

このオブジェクトには、次の情報が含まれます。

0 - これは文字列としての配列インデックスです。

次の情報が含まれるオブジェクト。

path

コアデバイスのシステムデバイスへのパス。これは、ModbusLocalPort に設定する値と同じであることが必要です。

permission

(オプション) コンテナからシステムデバイスにアクセスする許可。この値は rw である必要があり、コンポーネントにシステムデバイスへの読み取り/書き込みアクセス権限があることを指定します。

デフォルト: rw

addGroupOwner

(オプション) コンポーネントを実行するシステムグループを、システムデバイスの所有者として追加する有無。

デフォルト: true

pubsubTopics

(オプション) コンポーネントがメッセージを受信するためにサブスクライブするトピックを含むオブジェクト。各トピックと、コンポーネントが からMQTTトピックをサブスクライブするか、ローカルのパブリッシュ/サブスクライブトピック AWS IoT Core をサブスクライブするかを指定できます。

このオブジェクトには、次の情報が含まれます。

0 - これは文字列としての配列インデックスです。

次の情報が含まれるオブジェクト。

type

(オプション) このコンポーネントがメッセージをサブスクライブするために使用するパブリッシュ/サブスクライブメッセージングのタイプ。次のオプションから選択します。

  • PUB_SUB - ローカルのパブリッシュ/サブスクライブメッセージをサブスクライブします。このオプションを選択した場合、トピックにMQTTワイルドカードを含めることはできません。このオプションを指定したときに、カスタムコンポーネントからメッセージを送信する方法の詳細については、「ローカルメッセージをパブリッシュ/サブスクライブする」を参照してください。

  • IOT_CORE – メッセージをサブスクライブします AWS IoT Core MQTT。このオプションを選択すると、トピックにMQTTワイルドカードを含めることができます。このオプションを指定したときに、カスタムコンポーネントからメッセージを送信する方法の詳細については、「メッセージの発行/サブスクライブ AWS IoT Core MQTT 」を参照してください。

デフォルト: PUB_SUB

topic

(オプション) コンポーネントがメッセージを受信するためにサブスクライブするトピック。IotCore に を指定する場合はtype、このトピックでMQTTワイルドカード (+ および #) を使用できます。

例: 設定マージの更新 (コンテナモード)
{ "lambdaExecutionParameters": { "EnvironmentVariables": { "ModbusLocalPort": "/dev/ttyS2" } }, "containerMode": "GreengrassContainer", "containerParams": { "devices": { "0": { "path": "/dev/ttyS2", "permission": "rw", "addGroupOwner": true } } } }
例: 設定マージの更新 (コンテナモードなし)
{ "lambdaExecutionParameters": { "EnvironmentVariables": { "ModbusLocalPort": "/dev/ttyS2" } }, "containerMode": "NoContainer" }
v2.0.x
lambdaParams

このコンポーネントの Lambda 関数のパラメータを含むオブジェクト。このオブジェクトには、次の情報が含まれます。

EnvironmentVariables

Lambda 関数のパラメータを含むオブジェクト。このオブジェクトには、次の情報が含まれます。

ModbusLocalPort

/dev/ttyS2 など、コアデバイスの物理 Modbus シリアルポートへの絶対パス。

コンテナ内でこのコンポーネントを実行するには、コンポーネントがアクセスできるシステムデバイス (containerParams.devices 内) として、このパスを定義する必要があります。このコンポーネントは、デフォルトでコンテナ内で実行されます。

注記

このコンポーネントには、デバイスへの読み取り/書き込みアクセス権限が必要です。

containerMode

(オプション) このコンポーネントのコンテナ化モード。次のオプションから選択します。

  • GreengrassContainer – コンポーネントは、 AWS IoT Greengrass コンテナ内の分離されたランタイム環境で実行されます。

    このオプションを指定した場合、コンテナに Modbus デバイスへのアクセスを許可するため、システムデバイス (containerParams.devices 内) を指定する必要があります。

  • NoContainer - コンポーネントは、分離されたランタイム環境では実行されません。

デフォルト: GreengrassContainer

containerParams

(オプション) このコンポーネントのコンテナパラメータを含むオブジェクト。containerModeGreengrassContainer を指定した場合、コンポーネントはこれらのパラメータを使用します。

このオブジェクトには、次の情報が含まれます。

memorySize

(オプション) コンポーネントに割り当てるメモリ量 (KB 単位)。

デフォルトは 512 MB (525,312 KB) です。

devices

(オプション) コンテナ内でコンポーネントがアクセスできるシステムデバイスを指定するオブジェクトです。

重要

コンテナ内でこのコンポーネントを実行するには、ModbusLocalPort 環境変数で設定するシステムデバイスを指定する必要があります。

このオブジェクトには、次の情報が含まれます。

0 - これは文字列としての配列インデックスです。

次の情報が含まれるオブジェクト。

path

コアデバイスのシステムデバイスへのパス。これは、ModbusLocalPort に設定する値と同じであることが必要です。

permission

(オプション) コンテナからシステムデバイスにアクセスする許可。この値は rw である必要があり、コンポーネントにシステムデバイスへの読み取り/書き込みアクセス権限があることを指定します。

デフォルト: rw

addGroupOwner

(オプション) コンポーネントを実行するシステムグループを、システムデバイスの所有者として追加する有無。

デフォルト: true

pubsubTopics

(オプション) コンポーネントがメッセージを受信するためにサブスクライブするトピックを含むオブジェクト。各トピックと、コンポーネントが からMQTTトピックをサブスクライブするか、ローカルのパブリッシュ/サブスクライブトピック AWS IoT Core をサブスクライブするかを指定できます。

このオブジェクトには、次の情報が含まれます。

0 - これは文字列としての配列インデックスです。

次の情報が含まれるオブジェクト。

type

(オプション) このコンポーネントがメッセージをサブスクライブするために使用するパブリッシュ/サブスクライブメッセージングのタイプ。次のオプションから選択します。

  • PUB_SUB - ローカルのパブリッシュ/サブスクライブメッセージをサブスクライブします。このオプションを選択した場合、トピックにMQTTワイルドカードを含めることはできません。このオプションを指定したときに、カスタムコンポーネントからメッセージを送信する方法の詳細については、「ローカルメッセージをパブリッシュ/サブスクライブする」を参照してください。

  • IOT_CORE – メッセージをサブスクライブします AWS IoT Core MQTT。このオプションを選択すると、トピックにMQTTワイルドカードを含めることができます。このオプションを指定したときに、カスタムコンポーネントからメッセージを送信する方法の詳細については、「メッセージの発行/サブスクライブ AWS IoT Core MQTT 」を参照してください。

デフォルト: PUB_SUB

topic

(オプション) コンポーネントがメッセージを受信するためにサブスクライブするトピック。IotCore に を指定する場合はtype、このトピックでMQTTワイルドカード (+ および #) を使用できます。

例: 設定マージの更新 (コンテナモード)
{ "lambdaExecutionParameters": { "EnvironmentVariables": { "ModbusLocalPort": "/dev/ttyS2" } }, "containerMode": "GreengrassContainer", "containerParams": { "devices": { "0": { "path": "/dev/ttyS2", "permission": "rw", "addGroupOwner": true } } } }
例: 設定マージの更新 (コンテナモードなし)
{ "lambdaExecutionParameters": { "EnvironmentVariables": { "ModbusLocalPort": "/dev/ttyS2" } }, "containerMode": "NoContainer" }

入力データ

このコンポーネントは、次のトピックで Modbus RTUリクエストパラメータを受け入れ、Modbus RTUリクエストをデバイスに送信します。デフォルトで、このコンポーネントはローカルのパブリッシュ/サブスクライブメッセージにサブスクライブします。カスタムコンポーネントからこのコンポーネントにメッセージをパブリッシュする方法の詳細については、「ローカルメッセージをパブリッシュ/サブスクライブする」を参照してください。

デフォルトトピック (ローカルパブリッシュ/サブスクライブ): modbus/adapter/request

メッセージは、次のプロパティを受付けます。入力メッセージは JSON形式である必要があります。

request

送信する Modbus RTUリクエストのパラメータ。

リクエストメッセージの形状は、それが表す Modbus RTUリクエストのタイプによって異なります。次のプロパティはすべての要求に必要です。

タイプ: 次の情報が含まれる object

operation

実行するオペレーションの名前。例えば、Modbus RTU デバイスで を指定すると、 が Modbus デバイスの コイルを読みReadCoilsRequest取ることができます。サポートされているオペレーションの詳細については、「Modbus RTUリクエストとレスポンス」を参照してください。

タイプ: string

device

リクエストのターゲットデバイス。

この値は、0247 の間の整数である必要があります。

タイプ: 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デバイスからのレスポンス。statusNo 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" }
注記

応答には、コンポーネントが読み取るレジスタが含まれます。

リクエスト書式が有効で、リクエストが正常に完了していない場合、例外が発生している可能性があります。この場合、レスポンスには以下の情報が含まれています。

  • statusException に設定されています。

  • 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 リクエストの検証チェックを実行します。例えば、無効な書式や不足しているフィールドがないかどうかを確認します。検証に失敗すると、コネクタはリクエストを送信しません。代わりに、以下の情報を含むレスポンスを返します。

  • statusNo 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" }

ローカルログファイル

このコンポーネントは次のログファイルを使用します。

/greengrass/v2/logs/aws.greengrass.Modbus.log
このコンポーネントのログを確認するには
  • コアデバイスに次のコマンドを実行して、このコンポーネントのログファイルをリアルタイムに確認します。を AWS IoT Greengrass ルートフォルダへのパス/greengrass/v2に置き換えます。

    sudo tail -f /greengrass/v2/logs/aws.greengrass.Modbus.log

ライセンス

このコンポーネントには、次のサードパーティーソフトウェア/ライセンス品が含まれています。

このコンポーネントは、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

バグ修正と機能向上
  • ReadDiscreteInput オペレーションに関する問題を修正しました。

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

新機能
  • Modbus RTU デバイスとのシリアル通信を設定するために指定できる ModbusBaudRate ModbusByteSizeModbusParity、、、および ModbusStopBitsオプションを追加します。

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

当初のバージョン