# Inovance Modbus TCP

Inovance Modbus TCP 是一种基于以太网的 Modbus 协议版本，它使用 TCP/IP 协议进行通信。

Neuron 的 Inovance Modbus TCP 插件适配汇川 PLC 点位。

## 添加插件

在 **配置 -> 南向设备**，点击**添加设备**来创建设备节点，输入插件名称，插件类型选择 **Inovance Modbus TCP** 启用插件。

| <div style="width:100pt">插件</div> | 说明                                                    |
| -------------------- | ------------------------------------------------------- |
| **Inovance Modbus TCP** | Modbus TCP 协议实现，适配汇川 PLC 点位。|

## 设备配置

点击插件卡片或插件列，进入**设备配置**页。配置 Neuron 与设备建立连接所需的参数，下表为插件相关的配置项。

| <div style="width:100pt">字段</div> | 说明                                                    |
| -------------------- | ------------------------------------------------------- |
| **4 字节字节序**   | 32 位数据类型字节序，ABCD 对应 1234。 |
| **8 字节字节序**   | 64 位数据类型字节序，每个数字代表一字节。 |
| **指令发送间隔** | 发送每条读写指令之间的等待时间。 |
| **PLC IP 地址** | TCP 连接时，设备的 IP 地址。|
| **PLC 端口号** | TCP 连接时，设备的端口号。|
| **连接超时时间** | 等待设备返回指令响应的时间。 |
| **校验报文头** | 选择是否对报文头进行校验。选择校验后，遇到报文头错误时 neuron 与设备会重新连接。 |

## 设置组和点位

完成插件的添加和配置后，要建立设备与 Neuron 之间的通信，首先为南向驱动程序添加组和点位。

完成设备配置后，在**南向设备**页，点击设备卡片/设备列进入**组列表**页。点击**创建**来创建组，设定组名称以及采集间隔。完成组的创建后，点击组名称进入**点位列表**页，添加需要采集的设备点位，包括点位地址，点位属性，数据类型等。

公共配置项部分可参考[连接南向设备](../south-devices.md)，本页将介绍支持的数据类型和地址格式部分。

### 数据类型

* BIT
* INT8
* UINT8
* INT16
* UINT16
* INT32
* UINT32
* INT64
* UINT64
* FLOAT
* DOUBLE
* STRING
* BYTES

### 地址格式

> ADDRESS\[.BIT][#ENDIAN]\[.LEN\[H]\[L]\[D]\[E]]\[.BYTES]

::: tip
由于使用 TCP/IP 协议进行通信，通过 IP 地址及端口号搜索设备，报文无需特别指定站点号，Neuron 默认站点号为 1 。
:::

#### **ADDRESS**

必填，指寄存器地址。汇川 PLC 对于 MODBUS 协议支持线圈和寄存器访问。不同于标准 Modbus 协议，每个区域的地址范围如下表所示。

地址区域按 PLC 型号分为两种。

小型 PLC：EASY 系列、H5U 等。

| 地址                       | 地址范围                       | 数量       | 属性         | 寄存器大小     | 功能码        | 数据类型 |
| -------------------------- | ------------------------------ | ---------- | ----------- | ------------- | ------------- | ------- |
| M0-M7999（线圈）            | 0x0000-0x1F3F  (0-7999)        | 8000       |读/写        | 1Bit          | 0x01,0x05,0x0f | BIT    |
| B0-B32767（线圈）           | 0x3000-0xAFFF  (12288-45055)   | 32768      |读/写        | 1Bit          | 0x01,0x05,0x0f | BIT    |
| S0-S4095（线圈）            | 0xE000-0xEFFF  (57344-61439)   | 4096       |读/写        | 1Bit          | 0x01,0x05,0x0f | BIT    |
| X0-X1777（8 进制）（线圈）   | 0xF800-0xFBFF  (63488-64511)   | 1024       |读/写        | 1Bit          | 0x01,0x05,0x0f | BIT    |
| Y0-X1777（8 进制）（线圈）   | 0xFC00-0xFFFF  (64512-65535)   | 1024       |读/写        | 1Bit          | 0x01,0x05,0x0f | BIT    |
| D0-D7999（保持寄存器）       | 0x0000-0x1F3F  (0-7999)        | 8000       |读/写        | 16Bit,2Byte   | 0x03,0x06,0x10 | 多种   |
| R0-R32767（保持寄存器）      | 0x3000-0xAFFF  (12288-45055)   | 32768      |读/写        | 16Bit,2Byte   | 0x03,0x06,0x10 | 多种   |

::: tip
X 和 Y 区域的地址以八进制表示。
:::

中型 PLC：AM 系列，AC 系列等。

| 地址                       | 地址范围                        | 数量        | 属性         | 寄存器大小     | 功能码         | 数据类型 |
| -------------------------- | ------------------------------ | ----------  | ----------- | ------------- | -------------  | ------- |
| QX0.0-QX8191.7（线圈）      | 0x0000-0xFFFF  (0-65536)       | 65536       |读/写        | 1Bit          | 0x01,0x05,0x0f | BIT     |
| IX0.0-IX8191.7（离散量输入） | 0x0000-0xFFFF (0-65536)       | 65536       |读            | 1Bit          | 0x01,0x05,0x0f | BIT    |
| MW0-MW65535（保持寄存器）   | 0x0000-0xFFFF  (0-65536)       | 65536       |读/写         | 16Bit,2Byte   | 0x03,0x06,0x10 | 多种    |
| SM0-SM7999                 | 0x0000-0x1F3F  (0-7999)        | 8000       |读/写        | 16Bit,2Byte   | 0x01,0x05,0x0f  | BIT    |
| SD0-SD7999                 | 0x0000-0x1F3F  (0-7999)        | 8000       |读/写        | 16Bit,2Byte   | 0x03,0x06,0x10  | 多种    |

::: tip
M、I、Q 区域有多种寻址方式，支持如下寻址方式：（M|I|Q）X、（M|I|Q）B、（M|I|Q）W、（M|I|Q）D，分别按 bit、Byte、Word、Dword 寻址。
当采用 MX、MB 寻址方式时点位仅支持读属性。
:::

#### **.BIT**

选填，寄存器中的特定 bit，例如：
| 地址         | 数据类型 | 说明                                                |
| ----------- | ------- | --------------------------------------------------- |
| D4.0  | bit     | D 区域，地址为 4，第 0 位。    |
| D10.4  | bit     | D 区域，地址为 10，第 4 位。    |
| D1.15 | bit     | D 区域，地址为 1，第 15 位。   |

#### **#ENDIAN**

选填，字节顺序，适用于 int16/uint16/int32/uint32/float 数据类型，详细说明见下表。
| 符号 | 字节顺序 | 支持的数据类型        | 备注 |
| --- | ------- | ------------------ | ----- |
| #B  | 2,1     | int16/uint16       |       |
| #L  | 1,2     | int16/uint16       | 不填，默认字节顺序 |
| #LL | 3,4,1,2 | int32/uint32/float | 不填，默认字节顺序|
| #LB | 4,3,2,1 | int32/uint32/float | |
| #BL | 1,2,3,4 | int32/uint32/float | |
| #BB | 2,1,4,3 | int32/uint32/float | |

字节顺序同样适用于 int64/uint64/double 数据类型，每个数字代表一字节，详细说明见下表。
| 符号 | 字节顺序 | 支持的数据类型        | 备注 |
| --- | ------- | ------------------ | ----- |
| #LL | 12,34,56,78 | int64/uint64/double | 不填，默认字节顺序 |
| #LB | 21,43,65,87 | int64/uint64/double | |
| #BL | 78,56,34,12 | int64/uint64/double | |
| #BB | 87,65,43,21 | int64/uint64/double | |

::: tip
点位字节序优先级高于节点字节序配置。即点位配置字节序后，字节序按照点位的配置，忽略节点配置。
:::

#### .LEN\[H]\[L]

当数据类型为 STRING 类型时，**.LEN** 是必填项，表示字符串需要占用的字节长度，每个寄存器中包含**H**，**L** 两种存储方式，如下列表格所示。
| 符号 | 说明                                  |
| --- | ------------------------------------- |
| H   | 一个寄存器存储两个字节，高字节在前低字节在后。 |
| L   | 一个寄存器存储两个字节，低字节在前高字节在后。 |

::: tip
请注意，汇川插件字符串默认字节序为 L。
:::

#### **.BYTES**

选填，读写 bytes 类型数据的长度，适用于 bytes 数据类型。

::: tip
Modbus 驱动的一个寄存器包含 2 个 bytes，在以 bytes 数据类型读取和写入 Modbus 寄存器数据时，请保证 bytes 参数设置为偶数。
:::

### 地址示例

| 地址    | 数据类型 | 说明    |
| ------ | -------- | ------- |
| D8     | int16    | D 区域，地址为 8，字节顺序为 #L |
| D8#L   | int16    | D 区域，地址为 8，字节顺序为 #L |
| D8#B   | uint16   | D 区域，地址为 8，字节顺序为 #B |
| D8     | int32    | D 区域，地址为 8，字节顺序为 #LL |
| D8#LB  | uint32   | D 区域，地址为 8，字节顺序为 #LB |
| D8#BB  | uint32   | D 区域，地址为 8，字节顺序为 #BB |
| D8#LL  | int32    | D 区域，地址为 8，字节顺序为 #LL |
| D8#BL  | float    | D 区域，地址为 8，字节顺序为 #BL |
| D1.10  | String   | D 区域，地址为 1，字符长度为 10，字节顺序为 L，占用的地址为 D1 ～ D5  |
| D1.10H | String   | D 区域，地址为 1，字符长度为 10，字节顺序为 H，占用的地址为 D1 ～ D5  |
| D1.10L | String   | D 区域，地址为 1，字符长度为 10，字节顺序为 L，占用的地址为 D1 ～ D5  |
| M8     | bit      | M 区域，地址为 8  |
| X10    | bit      | X 区域，地址为 8  |
| MX1.1  | bit      | M 区域，地址为第一个寄存器第十位  |
| MB1    | int8     | X 区域，地址为第一个寄存器低字节  |
| MW1    | int16    | X 区域，地址为第二个寄存器  |
| MD1    | int32    | X 区域，地址为第三个寄存器  |

## 应用场景

使用汇川的 PLC 编程软件 AutoShop 可以快速连接 PLC 和 Neuron 并调试，具体操作见 [Easy521 连接示例](./example/autoshop/autoshop-modbus)。

## 数据监控

完成点位的配置后，您可点击 **监控** -> **数据监控**查看设备信息以及反控设备，具体可参考[数据监控](../../../admin/monitoring.md)。