

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Modbus-RTU 通訊協定轉接器
<a name="modbus-rtu-protocol-adapter-component"></a>

Modbus-RTU 通訊協定轉接器元件 (`aws.greengrass.Modbus`) 會從本機 Modbus RTU 裝置輪詢資訊。

若要向具有此元件的本機 Modbus RTU 裝置請求資訊，請將訊息發佈至此元件訂閱的主題。在訊息中，指定要傳送至裝置的 Modbus RTU 請求。然後，此元件會發佈包含 Modbus RTU 請求結果的回應。

**注意**  
此元件提供與 Modbus RTU 通訊協定轉接器連接器 in AWS IoT Greengrass V1 類似的功能。如需詳細資訊，請參閱《*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)
+ [Configuration](#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 核](greengrass-nucleus-component.md)會使用 Lambda [啟動器元件執行此元件的 Lambda](lambda-launcher-component.md) 函數。

<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>安裝在核心裝置上並新增至 PATH 環境變數的 [Python](https://www.python.org/) 3.7 版。
+  AWS IoT Greengrass 核心裝置與 Modbus 裝置之間的實體連線。核心裝置必須透過序列連接埠實際連接到 Modbus RTU 網路，例如 USB 連接埠。
+ <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>
  + 以您使用 AWS 區域 的 取代*區域*。
  + ** 以此元件執行的 Lambda 函數版本取代 版本。若要尋找 Lambda 函數版本，您必須檢視要部署之此元件版本的配方。在 [AWS IoT Greengrass 主控台](https://console.aws.amazon.com//greengrass)中開啟此元件的詳細資訊頁面，並尋找 **Lambda 函數**鍵/值對。此鍵/值對包含 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)中檢視每個版本元件的相依性。在元件詳細資訊頁面上，尋找**相依性**清單。

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

下表列出此元件 2.1.11 版的相依性。


| 相依性 | 相容版本 | 相依性類型 | 
| --- | --- | --- | 
| [Greengrass 核](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 核](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 核](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 核](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 核](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 核](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 核](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 核](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 核](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 核](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 核](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 核](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 核](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 核](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 核](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 核](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  | 硬式 | 

------

如需元件相依性的詳細資訊，請參閱[元件配方參考](component-recipe-reference.md#recipe-reference-component-dependencies)。

## Configuration
<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>
核心裝置上實體 Modbus 序列連接埠的絕對路徑，例如 `/dev/ttyS2`。  
若要在容器中執行此元件，您必須將此路徑定義為元件可存取的系統裝置 （在 中`containerParams.devices`)。根據預設，此元件會在容器中執行。  
此元件必須具有裝置的讀取/寫入存取權。  
`ModbusBaudRate`  
（選用） 字串值，指定與本機 Modbus TCP 裝置進行序列通訊的傳輸速率。  
預設：`9600`  
`ModbusByteSize`  
（選用） 字串值，指定與本機 Modbus TCP 裝置進行序列通訊的位元組大小。選擇 `5`、`7`、 `6`或 `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 容器內的隔離執行時間環境中執行。

  如果您指定此選項，則必須指定系統裝置 （在 中`containerParams.devices`)，讓容器存取 Modbus 裝置。
+ `NoContainer` – 元件不會在隔離的執行時間環境中執行。
預設：`GreengrassContainer`

`containerParams`  <a name="modbus-rtu-protocol-adapter-configuration-containerparams"></a>
<a name="connector-component-container-params-description"></a>（選用） 包含此元件容器參數的物件。如果您`GreengrassContainer`為 指定 ，元件會使用這些參數`containerMode`。  
此物件包含下列資訊：    
`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`  
（選用） 元件訂閱接收訊息的主題。如果您`IotCore`為 指定 `type`，則可以在本主題中使用 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>
核心裝置上實體 Modbus 序列連接埠的絕對路徑，例如 `/dev/ttyS2`。  
若要在容器中執行此元件，您必須將此路徑定義為元件可存取的系統裝置 （在 中`containerParams.devices`)。根據預設，此元件會在容器中執行。  
此元件必須具有裝置的讀取/寫入存取權。

`containerMode`  <a name="modbus-rtu-protocol-adapter-configuration-containermode"></a>
（選用） 此元件的容器化模式。您可以從以下選項中選擇：  
+ `GreengrassContainer` – 元件會在 AWS IoT Greengrass 容器內的隔離執行時間環境中執行。

  如果您指定此選項，則必須指定系統裝置 （在 中`containerParams.devices`)，讓容器存取 Modbus 裝置。
+ `NoContainer` – 元件不會在隔離的執行時間環境中執行。
預設：`GreengrassContainer`

`containerParams`  <a name="modbus-rtu-protocol-adapter-configuration-containerparams"></a>
<a name="connector-component-container-params-description"></a>（選用） 包含此元件容器參數的物件。如果您`GreengrassContainer`為 指定 ，元件會使用這些參數`containerMode`。  
此物件包含下列資訊：    
`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`  
（選用） 元件訂閱接收訊息的主題。如果您`IotCore`為 指定 `type`，則可以在本主題中使用 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`  
要執行的操作名稱。例如，指定 `ReadCoilsRequest` 讀取 Modbus RTU 裝置上的線圈。如需支援操作的詳細資訊，請參閱 [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.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 網路之前攔截到錯誤。如需詳細資訊，請參閱[回應狀態：沒有回應](#modbus-rtu-protocol-adapter-component-response-noresponse)。  
`operation`  
元件請求的操作。  
`device`  
元件傳送請求的裝置。  
`payload`  
Modbus RTU 裝置的回應。如果 `status`是 `No Response`，則此物件僅包含描述錯誤的 `error` 屬性 （例如 `[Input/Output] No Response received from the remote unit`)。

`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"
}
```

### 回應狀態：沒有回應
<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 網路沒有作用，您可能會收到 `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
```

**檢視此元件的日誌**
+ 在核心裝置上執行下列命令，以即時檢視此元件的日誌檔案。`/greengrass/v2` 將 取代為 AWS IoT Greengrass 根資料夾的路徑。

  ```
  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 核心軟體授權合約](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/zh_tw/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/zh_tw/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  |  初始版本。  | 