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" } } }
    • リージョンを使用する AWS リージョン に置き換えます。

    • バージョンを、このコンポーネントが実行する 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

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

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

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

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

type

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

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

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

デフォルト: PUB_SUB

topic

(オプション) コンポーネントがメッセージを受信するためにサブスクライブするトピック。typeIotCore を指定した場合、このトピックで 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

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

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

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

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

type

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

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

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

デフォルト: PUB_SUB

topic

(オプション) コンポーネントがメッセージを受信するためにサブスクライブするトピック。typeIotCore を指定した場合、このトピックで 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 デバイスのコイルを読み取るため、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 ネットワークが機能していない場合、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" }

ローカルログファイル

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

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

    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 デバイスとのシリアル通信を設定するために指定できる ModbusBaudRateModbusByteSizeModbusParityModbusStopBits オプションを追加します。

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

当初のバージョン