

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

# Modbus-RTU プロトコルアダプタ
<a name="modbus-rtu-protocol-adapter-component"></a>

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 プロトコールアダプタコネクタ](https://docs.aws.amazon.com/greengrass/latest/developerguide/modbus-protocol-adapter-connector.html)」を参照してください。

**Topics**
+ [バージョン](#modbus-rtu-protocol-adapter-component-versions)
+ [タイプ](#modbus-rtu-protocol-adapter-component-type)
+ [オペレーティングシステム](#modbus-rtu-protocol-adapter-component-os-support)
+ [要件](#modbus-rtu-protocol-adapter-component-requirements)
+ [依存関係](#modbus-rtu-protocol-adapter-component-dependencies)
+ [構成](#modbus-rtu-protocol-adapter-component-configuration)
+ [入力データ](#modbus-rtu-protocol-adapter-component-input-data)
+ [出力データ](#modbus-rtu-protocol-adapter-component-output-data)
+ [Modbus RTU のリクエストとレスポンス](#modbus-rtu-protocol-adapter-component-requests-responses)
+ [ローカルログファイル](#modbus-rtu-protocol-adapter-component-log-file)
+ [ライセンス](#modbus-rtu-protocol-adapter-component-licenses)
+ [変更ログ](#modbus-rtu-protocol-adapter-component-changelog)

## バージョン
<a name="modbus-rtu-protocol-adapter-component-versions"></a>

このコンポーネントには、次のバージョンがあります。
+ 2.1.x
+ 2.0.x

## タイプ
<a name="modbus-rtu-protocol-adapter-component-type"></a>

<a name="public-component-type-lambda"></a>この<a name="public-component-type-lambda-phrase"></a>コンポーネントは Lambda コンポーネントです (`aws.greengrass.lambda`)。[Greengrass nucleus](greengrass-nucleus-component.md) は、[Lambda ランチャーコンポーネント](lambda-launcher-component.md)を使用してこのコンポーネントの Lambda 関数を実行します。

<a name="public-component-type-more-information"></a>詳細については、「[コンポーネントタイプ](develop-greengrass-components.md#component-types)」を参照してください。

## オペレーティングシステム
<a name="modbus-rtu-protocol-adapter-component-os-support"></a>

このコンポーネントは、Linux コアデバイスにのみインストールできます。

## 要件
<a name="modbus-rtu-protocol-adapter-component-requirements"></a>

このコンポーネントには次の要件があります。
+ <a name="core-device-lambda-function-requirements"></a>コアデバイスは、Lambda 関数を実行するための要件を満たしている必要があります。コアデバイスが、コンテナ化された Lambda 関数を実行させる場合、そのデバイスは要件を満たす必要があります。詳細については、「[Lambda 関数の要件](setting-up.md#greengrass-v2-lambda-requirements)」を参照してください。
+ <a name="public-component-python3-requirement"></a>[Python](https://www.python.org/) バージョン 3.7 がコアデバイスにインストールされ、PATH 環境変数に追加されています。
+  AWS IoT Greengrass コアデバイスと Modbus デバイス間の物理的な接続。コアデバイスは、USB ポートなど、シリアルポートを介して Modbus RTU ネットワークに物理的に接続する必要があります。
+ <a name="connector-component-legacy-subscription-router-dependency"></a>このコンポーネントから出力データを受信するには、このコンポーネントをデプロイするときに、次の設定更新プログラムを[レガシーサブスクリプションルーターのコンポーネント](legacy-subscription-router-component.md) (`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"
      }
    }
  }
  ```<a name="connector-component-legacy-subscription-router-dependency-replace"></a>
  + *region* AWS リージョン を、使用する に置き換えます。
  + *バージョン*を、このコンポーネントが実行する Lambda 関数のバージョンに置き換えます。Lambda 関数のバージョンを確認するには、デプロイするこのコンポーネントのバージョンの recipe を確認する必要があります。[AWS IoT Greengrass コンソール](https://console.aws.amazon.com//greengrass)で、このコンポーネントの詳細ページを開き、**[Lambda function]** (Lambda 関数) の key-value ペアを見つけます。このキー値のペアには、Lambda 関数の名前とバージョンが含まれます。

**重要**  <a name="connector-component-legacy-subscription-router-dependency-note"></a>
このコンポーネントをデプロイするたびに、レガシーサブスクリプションルーターの Lambda 関数のバージョンを更新する必要があります。これにより、デプロイするコンポーネントバージョンに正しい Lambda 関数のバージョンが使用されることが保証されます。

------

  <a name="connector-component-create-deployments"></a>詳細については、「[デプロイの作成](create-deployments.md)」を参照してください。
+ Modbus-RTU プロトコルアダプタは、VPC での実行がサポートされています。

## 依存関係
<a name="modbus-rtu-protocol-adapter-component-dependencies"></a>

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

------
#### [ 2.1.11 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.16.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.1.10 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.15.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.1.9 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.14.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.1.8 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.13.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.1.7 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.12.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.1.6 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.11.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.1.4 and 2.1.5 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.10.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.1.3 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.9.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.1.2 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.8.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.1.1 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.7.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.0.8 and 2.1.0 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.6.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.0.7 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.5.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.0.6 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.4.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.0.5 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.3.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.0.4 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.0 <2.2.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | ^2.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | ^2.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | ^2.0.0  | ハード | 

------
#### [ 2.0.3 ]

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


| 依存関係 | 互換性のあるバージョン | 依存関係タイプ | 
| --- | --- | --- | 
| [Greengrass nucleus](greengrass-nucleus-component.md) | >=2.0.3 <2.1.0  | ハード | 
| [Lambda ランチャー](lambda-launcher-component.md) | >=1.0.0  | ハード | 
| [Lambda ランタイム](lambda-runtimes-component.md) | >=1.0.0  | ソフト | 
| [トークン交換サービス](token-exchange-service-component.md) | >=1.0.0  | ハード | 

------

コンポーネントの依存関係の詳細については、「[コンポーネント recipe のリファレンス](component-recipe-reference.md#recipe-reference-component-dependencies)」を参照してください。

## 構成
<a name="modbus-rtu-protocol-adapter-component-configuration"></a>

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

**注記**  <a name="connector-component-lambda-parameters"></a>
このコンポーネントのデフォルト設定には、Lambda 関数のパラメータが含まれます。デバイスにこのコンポーネントを設定するには、次のパラメータのみを編集することをお勧めします。

------
#### [ v2.1.x ]

`lambdaParams`  
このコンポーネントの Lambda 関数のパラメータを含むオブジェクト。このオブジェクトには、次の情報が含まれます。    
`EnvironmentVariables`  
Lambda 関数のパラメータを含むオブジェクト。このオブジェクトには、次の情報が含まれます。    
`ModbusLocalPort`  <a name="modbus-rtu-protocol-adapter-configuration-modbuslocalport"></a>
`/dev/ttyS2` など、コアデバイスの物理 Modbus シリアルポートへの絶対パス。  
コンテナ内でこのコンポーネントを実行するには、コンポーネントがアクセスできるシステムデバイス (`containerParams.devices` 内) として、このパスを定義する必要があります。このコンポーネントは、デフォルトでコンテナ内で実行されます。  
このコンポーネントには、デバイスへの読み取り/書き込みアクセス権限が必要です。  
`ModbusBaudRate`  
(オプション) ローカル Modbus TCP デバイスとのシリアル通信におけるボーレートを指定する文字列値。  
デフォルト: `9600`  
`ModbusByteSize`  
(オプション) ローカル Modbus TCP デバイスとのシリアル通信におけるバイトサイズを指定する文字列値。`5`、`6`、`7`、`8` ビットのいずれかを選択します。  
デフォルト: `8`  
`ModbusParity`  
(オプション) ローカル Modbus TCP デバイスとのシリアル通信におけるデータの整合性を検証するために使用するパリティモード。  
+ `E` - 偶数のパリティでデータの整合性を検証します。
+ `O` - 奇数のパリティでデータの整合性を検証します。
+ `N` - データの整合性を検証しません。
デフォルト: `N`  
`ModbusStopBits`  
(オプション) ローカル Modbus TCP デバイスとのシリアル通信におけるバイトの終わりを示すビット数を指定する文字列値。  
デフォルト: `1`

`containerMode`  <a name="modbus-rtu-protocol-adapter-configuration-containermode"></a>
(オプション) このコンポーネントのコンテナ化モード。次のオプションから選択します。  
+ `GreengrassContainer` – コンポーネントは、 AWS IoT Greengrass コンテナ内の分離されたランタイム環境で実行されます。

  このオプションを指定した場合、コンテナに Modbus デバイスへのアクセスを許可するため、システムデバイス (`containerParams.devices` 内) を指定する必要があります。
+ `NoContainer` - コンポーネントは、分離されたランタイム環境では実行されません。
デフォルト: `GreengrassContainer`

`containerParams`  <a name="modbus-rtu-protocol-adapter-configuration-containerparams"></a>
<a name="connector-component-container-params-description"></a>(オプション) このコンポーネントのコンテナパラメータを含むオブジェクト。`containerMode` の `GreengrassContainer` を指定した場合、コンポーネントはこれらのパラメータを使用します。  
このオブジェクトには、次の情報が含まれます。    
`memorySize`  
<a name="connector-component-container-params-memory-size-description"></a>(オプション) コンポーネントに割り当てるメモリ量 (KB 単位)。  
デフォルトは 512 MB (525,312 KB) です。  
`devices`  
(オプション) コンテナ内でコンポーネントがアクセスできるシステムデバイスを指定するオブジェクトです。  
コンテナ内でこのコンポーネントを実行するには、`ModbusLocalPort` 環境変数で設定するシステムデバイスを指定する必要があります。
このオブジェクトには、次の情報が含まれます。    
`0` - これは文字列としての配列インデックスです。  
次の情報が含まれるオブジェクト。    
`path`  
コアデバイスのシステムデバイスへのパス。これは、`ModbusLocalPort` に設定する値と同じであることが必要です。  
`permission`  
(オプション) コンテナからシステムデバイスにアクセスする許可。この値は `rw` である必要があり、コンポーネントにシステムデバイスへの読み取り/書き込みアクセス権限があることを指定します。  
デフォルト: `rw`  
`addGroupOwner`  
(オプション) コンポーネントを実行するシステムグループを、システムデバイスの所有者として追加する有無。  
デフォルト: `true`

`pubsubTopics`  <a name="connector-component-pubsub-topics-parameter"></a>
(オプション) コンポーネントがメッセージを受信するためにサブスクライブするトピックを含むオブジェクト。各トピックと、コンポーネントが から MQTT トピックをサブスクライブするか、ローカルのパブリッシュ/サブスクライブトピックをサブスクライブ AWS IoT Core するかを指定できます。  
このオブジェクトには、次の情報が含まれます。    
`0` - これは文字列としての配列インデックスです。  
次の情報が含まれるオブジェクト。    
`type`  
(オプション) このコンポーネントがメッセージをサブスクライブするために使用するパブリッシュ/サブスクライブメッセージングのタイプ。次のオプションから選択します。  
+ `PUB_SUB` - ローカルのパブリッシュ/サブスクライブメッセージをサブスクライブします。このオプションを選択した場合、トピックに MQTT ワイルドカードを含めることはできません。このオプションを指定したときに、カスタムコンポーネントからメッセージを送信する方法の詳細については、「[ローカルメッセージをパブリッシュ/サブスクライブする](ipc-publish-subscribe.md)」を参照してください。
+ `IOT_CORE` – AWS IoT Core MQTT メッセージをサブスクライブします。このオプションを選択した場合、トピックに MQTT ワイルドカードを含めることができます。このオプションを指定したときに、カスタムコンポーネントからメッセージを送信する方法の詳細については、「[AWS IoT Core MQTT メッセージを発行/サブスクライブする](ipc-iot-core-mqtt.md)」を参照してください。
デフォルト: `PUB_SUB`  
`topic`  
(オプション) コンポーネントがメッセージを受信するためにサブスクライブするトピック。`type` の `IotCore` を指定した場合、このトピックで MQTT ワイルドカード (`+` および `#`) を使用できます。

**Example 例: 設定マージの更新 (コンテナモード)**  <a name="modbus-rtu-protocol-adapter-configuration-example-container-mode"></a>

```
{
  "lambdaExecutionParameters": {
    "EnvironmentVariables": {
      "ModbusLocalPort": "/dev/ttyS2"
    }
  },
  "containerMode": "GreengrassContainer",
  "containerParams": {
    "devices": {
      "0": {
        "path": "/dev/ttyS2",
        "permission": "rw",
        "addGroupOwner": true
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (コンテナモードなし)**  <a name="modbus-rtu-protocol-adapter-configuration-example-no-container-mode"></a>

```
{
  "lambdaExecutionParameters": {
    "EnvironmentVariables": {
      "ModbusLocalPort": "/dev/ttyS2"
    }
  },
  "containerMode": "NoContainer"
}
```

------
#### [ v2.0.x ]

`lambdaParams`  
このコンポーネントの Lambda 関数のパラメータを含むオブジェクト。このオブジェクトには、次の情報が含まれます。    
`EnvironmentVariables`  
Lambda 関数のパラメータを含むオブジェクト。このオブジェクトには、次の情報が含まれます。    
`ModbusLocalPort`  <a name="modbus-rtu-protocol-adapter-configuration-modbuslocalport"></a>
`/dev/ttyS2` など、コアデバイスの物理 Modbus シリアルポートへの絶対パス。  
コンテナ内でこのコンポーネントを実行するには、コンポーネントがアクセスできるシステムデバイス (`containerParams.devices` 内) として、このパスを定義する必要があります。このコンポーネントは、デフォルトでコンテナ内で実行されます。  
このコンポーネントには、デバイスへの読み取り/書き込みアクセス権限が必要です。

`containerMode`  <a name="modbus-rtu-protocol-adapter-configuration-containermode"></a>
(オプション) このコンポーネントのコンテナ化モード。次のオプションから選択します。  
+ `GreengrassContainer` – コンポーネントは、 AWS IoT Greengrass コンテナ内の分離されたランタイム環境で実行されます。

  このオプションを指定した場合、コンテナに Modbus デバイスへのアクセスを許可するため、システムデバイス (`containerParams.devices` 内) を指定する必要があります。
+ `NoContainer` - コンポーネントは、分離されたランタイム環境では実行されません。
デフォルト: `GreengrassContainer`

`containerParams`  <a name="modbus-rtu-protocol-adapter-configuration-containerparams"></a>
<a name="connector-component-container-params-description"></a>(オプション) このコンポーネントのコンテナパラメータを含むオブジェクト。`containerMode` の `GreengrassContainer` を指定した場合、コンポーネントはこれらのパラメータを使用します。  
このオブジェクトには、次の情報が含まれます。    
`memorySize`  
<a name="connector-component-container-params-memory-size-description"></a>(オプション) コンポーネントに割り当てるメモリ量 (KB 単位)。  
デフォルトは 512 MB (525,312 KB) です。  
`devices`  
(オプション) コンテナ内でコンポーネントがアクセスできるシステムデバイスを指定するオブジェクトです。  
コンテナ内でこのコンポーネントを実行するには、`ModbusLocalPort` 環境変数で設定するシステムデバイスを指定する必要があります。
このオブジェクトには、次の情報が含まれます。    
`0` - これは文字列としての配列インデックスです。  
次の情報が含まれるオブジェクト。    
`path`  
コアデバイスのシステムデバイスへのパス。これは、`ModbusLocalPort` に設定する値と同じであることが必要です。  
`permission`  
(オプション) コンテナからシステムデバイスにアクセスする許可。この値は `rw` である必要があり、コンポーネントにシステムデバイスへの読み取り/書き込みアクセス権限があることを指定します。  
デフォルト: `rw`  
`addGroupOwner`  
(オプション) コンポーネントを実行するシステムグループを、システムデバイスの所有者として追加する有無。  
デフォルト: `true`

`pubsubTopics`  <a name="connector-component-pubsub-topics-parameter"></a>
(オプション) コンポーネントがメッセージを受信するためにサブスクライブするトピックを含むオブジェクト。各トピックと、コンポーネントが から MQTT トピックをサブスクライブするか、ローカルのパブリッシュ/サブスクライブトピックをサブスクライブ AWS IoT Core するかを指定できます。  
このオブジェクトには、次の情報が含まれます。    
`0` - これは文字列としての配列インデックスです。  
次の情報が含まれるオブジェクト。    
`type`  
(オプション) このコンポーネントがメッセージをサブスクライブするために使用するパブリッシュ/サブスクライブメッセージングのタイプ。次のオプションから選択します。  
+ `PUB_SUB` - ローカルのパブリッシュ/サブスクライブメッセージをサブスクライブします。このオプションを選択した場合、トピックに MQTT ワイルドカードを含めることはできません。このオプションを指定したときに、カスタムコンポーネントからメッセージを送信する方法の詳細については、「[ローカルメッセージをパブリッシュ/サブスクライブする](ipc-publish-subscribe.md)」を参照してください。
+ `IOT_CORE` – AWS IoT Core MQTT メッセージをサブスクライブします。このオプションを選択した場合、トピックに MQTT ワイルドカードを含めることができます。このオプションを指定したときに、カスタムコンポーネントからメッセージを送信する方法の詳細については、「[AWS IoT Core MQTT メッセージを発行/サブスクライブする](ipc-iot-core-mqtt.md)」を参照してください。
デフォルト: `PUB_SUB`  
`topic`  
(オプション) コンポーネントがメッセージを受信するためにサブスクライブするトピック。`type` の `IotCore` を指定した場合、このトピックで MQTT ワイルドカード (`+` および `#`) を使用できます。

**Example 例: 設定マージの更新 (コンテナモード)**  <a name="modbus-rtu-protocol-adapter-configuration-example-container-mode"></a>

```
{
  "lambdaExecutionParameters": {
    "EnvironmentVariables": {
      "ModbusLocalPort": "/dev/ttyS2"
    }
  },
  "containerMode": "GreengrassContainer",
  "containerParams": {
    "devices": {
      "0": {
        "path": "/dev/ttyS2",
        "permission": "rw",
        "addGroupOwner": true
      }
    }
  }
}
```

**Example 例: 設定マージの更新 (コンテナモードなし)**  <a name="modbus-rtu-protocol-adapter-configuration-example-no-container-mode"></a>

```
{
  "lambdaExecutionParameters": {
    "EnvironmentVariables": {
      "ModbusLocalPort": "/dev/ttyS2"
    }
  },
  "containerMode": "NoContainer"
}
```

------

## 入力データ
<a name="modbus-rtu-protocol-adapter-component-input-data"></a>

このコンポーネントは、次のトピックの Modbus RTU 要求パラメータを受入れて、Modbus RTU 要求をデバイスに送信します。<a name="connector-component-local-publish"></a>デフォルトで、このコンポーネントはローカルのパブリッシュ/サブスクライブメッセージにサブスクライブします。カスタムコンポーネントからこのコンポーネントにメッセージをパブリッシュする方法の詳細については、「[ローカルメッセージをパブリッシュ/サブスクライブする](ipc-publish-subscribe.md)」を参照してください。

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

<a name="connector-component-input-properties"></a>メッセージは、次のプロパティを受付けます。入力メッセージは JSON 形式である必要があります。

`request`  
送信する Modbus RTU リクエストのパラメータ。  
リクエストメッセージの形は、示す Modbus RTU 要求のタイプによって異なります。次のプロパティはすべての要求に必要です。  
タイプ: 次の情報が含まれる `object`。    
`operation`  
実行するオペレーションの名前。例えば、Modbus RTU デバイスのコイルを読み取るため、`ReadCoilsRequest` を指定します。サポートされているオペレーションの詳細については、「[Modbus RTU のリクエストとレスポンス](#modbus-rtu-protocol-adapter-component-requests-responses)」を参照してください。  
型: `string`  
`device`  
リクエストのターゲットデバイス。  
この値は、`0` と `247` の間の整数である必要があります。  
型: `integer`
リクエストに含まれるその他のパラメータはオペレーションによって異なります。このコンポーネントは、ユーザーに代わって[巡回冗長検査 (CRC)](https://en.wikipedia.org/wiki/Cyclic_redundancy_check) に対応して、データリクエストを検証します。  
リクエストに `address` プロパティが含まれる場合、その値を整数として指定する必要があります。例えば、`"address": 1`。

`id`  <a name="connector-component-input-property-id"></a>
リクエストの任意の ID。このプロパティを使用して、入力リクエストを出力レスポンスにマッピングします。このプロパティを指定するとき、コンポーネントはこの値に対してレスポンスオブジェクトの `id` プロパティを設定します。  
型: `string`

**Example 入力例: コイルの読み取りリクエスト**  

```
{
  "request": {
    "operation": "ReadCoilsRequest",
    "device": 1,
    "address": 1,
    "count": 1
  },
  "id": "MyRequest"
}
```

## 出力データ
<a name="modbus-rtu-protocol-adapter-component-output-data"></a>

 <a name="connector-component-output-data"></a>このコンポーネントは、デフォルトで次の MQTT トピックに出力データとしてレスポンスを公開します。このトピックは、[[legacy subscription router component]](legacy-subscription-router-component.md) (レガシーサブスクリプションルーターコンポーネント) の設定で `subject` として指定する必要があります。カスタムコンポーネントでこのトピックに関するメッセージへサブスクライブする方法の詳細については、「[AWS IoT Core MQTT メッセージを発行/サブスクライブする](ipc-iot-core-mqtt.md)」を参照してください。

**デフォルトトピック (AWS IoT Core MQTT):** `modbus/adapter/response`

レスポンスメッセージの形状は、リクエストオペレーションとレスポンスステータスによって異なります。例については「[リクエストとレスポンスの例](#modbus-rtu-protocol-adapter-component-examples)」を参照してください。

レスポンスごとに、以下のプロパティが含まれます。

`response`  
Modbus RTU デバイスからの応答。  
タイプ: 次の情報が含まれる `object`。    
`status`  
リクエストのステータス。ステータスは、次のいずれかの値になります。  
+ `Success` - リクエストは有効で、コンポーネントはリクエストを Modbus RTU ネットワークに送信し、Modbus RTU ネットワークがレスポンスを返しました。
+ `Exception` - リクエストは有効で、コンポーネントはリクエストを Modbus RTU ネットワークに送信し、Modbus RTU ネットワークが例外を返しました。詳細については、「[レスポンスステータス: 例外](#modbus-rtu-protocol-adapter-component-response-exception)」を参照してください。
+ `No Response` – リクエストは無効で、コンポーネントが要求を Modbus RTU ネットワークに送信される前にエラーを検出しました。詳細については、「[レスポンスステータス: No Response](#modbus-rtu-protocol-adapter-component-response-noresponse)」を参照してください。  
`operation`  
コンポーネントが要求した操作。  
`device`  
コンポーネントが要求を送信したデバイス。  
`payload`  
Modbus RTU デバイスからの応答。`status` が `No Response` の場合、このオブジェクトはエラー (例えば、`[Input/Output] No Response received from the remote unit`) の説明を含む `error` プロパティのみが含まれています。

`id`  
どのレスポンスがどのリクエストに対応しているか識別するために使用できるリクエストの ID。

**注記**  
書き込みオペレーションのレスポンスはリクエストのエコーのみです。書き込みレスポンスに有意な情報を含みませんが、要求が正常に処理されたか、失敗したか確認するため、レスポンスのステータスを確認することをお勧めします。

**Example 出力例: 成功**  

```
{
  "response" : {
    "status" : "success",
    "device": 1,
    "operation": "ReadCoilsRequest",
    "payload": {
      "function_code": 1,
      "bits": [1]
    }
  },
  "id" : "MyRequest"
}
```

**Example 出力例: 失敗**  

```
{
  "response" : {
    "status" : "fail",
    "error_message": "Internal Error",
    "error": "Exception",
    "device": 1,
    "operation": "ReadCoilsRequest",
    "payload": {
      "function_code": 129,
      "exception_code": 2
    }
  },
  "id" : "MyRequest"
}
```

その他の例については、「[リクエストとレスポンスの例](#modbus-rtu-protocol-adapter-component-examples)」を参照してください。

## Modbus RTU のリクエストとレスポンス
<a name="modbus-rtu-protocol-adapter-component-requests-responses"></a>

このコネクタは、Modbus RTU のリクエストパラメータを[入力データ](#modbus-rtu-protocol-adapter-component-input-data)として受け取り、レスポンスを[出力データ](#modbus-rtu-protocol-adapter-component-output-data)として発行します。

以下の一般的なオペレーションがサポートされています。


| リクエストのオペレーション名 | レスポンスの関数コード | 
| --- | --- | 
| ReadCoilsRequest | 01 | 
| ReadDiscreteInputsRequest | 02 | 
| ReadHoldingRegistersRequest | 03 | 
| ReadInputRegistersRequest | 04 | 
| WriteSingleCoilRequest | 05 | 
| WriteSingleRegisterRequest | 06 | 
| WriteMultipleCoilsRequest | 15 | 
| WriteMultipleRegistersRequest | 16 | 
| MaskWriteRegisterRequest | 22 | 
| ReadWriteMultipleRegistersRequest | 23 | 

### リクエストとレスポンスの例
<a name="modbus-rtu-protocol-adapter-component-examples"></a>

以下に示しているのは、サポートされているオペレーションのリクエストとレスポンスの例です。

コイルの読み取り  
**リクエストの例:**  

```
{
  "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"
}
```
応答には、コンポーネントが読み取るレジスタが含まれます。

### レスポンスステータス: 例外
<a name="modbus-rtu-protocol-adapter-component-response-exception"></a>

リクエスト書式が有効で、リクエストが正常に完了していない場合、例外が発生している可能性があります。この場合、レスポンスには以下の情報が含まれています。
+ `status` は `Exception` に設定されています。
+ `function_code` がリクエストの関数コード \$1 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"
}
```

### レスポンスステータス: No Response
<a name="modbus-rtu-protocol-adapter-component-response-noresponse"></a>

このコネクタは 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"
}
```

## ローカルログファイル
<a name="modbus-rtu-protocol-adapter-component-log-file"></a>

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

```
/greengrass/v2/logs/aws.greengrass.Modbus.log
```

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

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

## ライセンス
<a name="modbus-rtu-protocol-adapter-component-licenses"></a>

このコンポーネントには、次のサードパーティーソフトウェア/ライセンス品が含まれています。
+ [pymodbus](https://github.com/riptideio/pymodbus/blob/master/README.rst)/BSD ライセンス
+ [pyserial](https://github.com/pyserial/pyserial)/BSD ライセンス

<a name="component-core-software-license"></a>このコンポーネントは、[Greengrass Core ソフトウェアライセンス契約](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)に従ってリリースされています。

## 変更ログ
<a name="modbus-rtu-protocol-adapter-component-changelog"></a>

次の表は、コンポーネントの各バージョンにおける変更を示します。


|  **バージョン**  |  **変更**  | 
| --- | --- | 
|  2.1.11  | Greengrass nucleus バージョン 2.15.0 リリース用にバージョンが更新されました。 | 
|  2.1.10  | Greengrass nucleus バージョン 2.14.0 リリース用にバージョンが更新されました。 | 
|  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  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/modbus-rtu-protocol-adapter-component.html) | 
|  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  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/modbus-rtu-protocol-adapter-component.html)  | 
|  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  |  当初のバージョン  | 