# HollySys Modbus TCP

EMQX Neuron HollySys Modbus TCP 驱动使用 Modbus TCP 协议，用于采集和利时 PLC 标签的数据，支持 LK/LE 系列 PLC 型号。

通用配置步骤见[添加南向驱动](../south-devices.md)与[组与点位](../../groups-tags/groups-tags.md)。

Modbus TCP 是一种基于以太网的 Modbus 协议版本，它使用 TCP/IP 协议进行通信。与传统的 Modbus RTU 协议不同，Modbus TCP 允许设备直接通过以太网互联，不需要任何专用的硬件或通信接口。因此，Modbus TCP 具有更高的通信速率和更广泛的应用范围。

## 添加驱动

在 **数据采集 → 南向设备** 页点击 **添加设备**，驱动类型选择 **HollySys Modbus TCP**。

## 连接参数

点击驱动卡片进入**设备配置**页填写：

| <div style="width:100pt">字段</div> | 说明                                                    |
| -------------------- | ------------------------------------------------------- |
| **最大重试次数** | 发送读取指令失败后最大重试次数。 |
| **指令重新发送间隔** | 发送读取指令失败后重新发送读指令时间间隔，单位为毫秒。 |
| **字节序**   | 32 位数据类型字节序，ABCD 对应 1234。 |
| **指令发送间隔** | 发送每条读写指令之间的等待时间。某些串口设备在较短时间内接收到连续指令时，可能会丢弃某些指令。 |
| **IP 地址** | TCP 连接时，设备的 IP 地址（EMQX Neuron 作为客户端）。|
| **端口号** | TCP 连接时，设备的端口号（EMQX Neuron 作为客户端）。|
| **连接超时时间** | 等待设备返回指令响应的时间。 |
| **校验报文头** | 选择是否对报文头进行校验。选择校验后，遇到报文头错误时 neuron 与设备会重新连接。 |

## 点位配置

以下为本驱动支持的数据类型与地址格式。

### 数据类型

* BIT
* BOOL
* INT16
* UINT16
* WORD

### 地址格式

> SLAVE!ADDRESS[#ENDIAN]

#### **SLAVE**

必填，指从机地址或者是站点号。

#### **ADDRESS**

和利时 PLC 将数据单元映射到 Modbus 地址空间，以通过 Modbus TCP 协议进行访问。
EMQX Neuron HollySys Modbus TCP 驱动将 PLC 数据单元名称指定为 **ADDRESS**，用户不需要关心地址映射的细节。

| 数据区                          | Modbus 地址范围                             | 属性       | 寄存器大小    | 数据类型  |
| ------------------------------- | ------------------------------------------- | ---------- | ------------- | --------- |
| IX (Input)                      | IX0.0 ... IX0.7, IX1.0 ... IX1.7 ...        | Read       | 1Bit          |  BOOL/BIT     |
| IW (Input Registers)            | IW0, IW1, ...                               | Read       | 16Bit,2Byte   |  INT16/UINT16 |
| QX (Coils)                      | QX0.0 ... QX0.7, QX1.0 ... QX1.7 ...        | Read/Write | 1Bit          |  BOOL/BIT     |
| QW (Hold Registers)             | QW0, QW1, ...                               | Read/Write | 16Bit,2Byte   |  INT16/UINT16 |
| MX (Coils)                      | MX0.0 ... MX0.7, MX1.0 ... MX1.7 ...        | Read/Write | 1Bit          |  BOOL/BIT     |
| MW (Hold Registers)             | MW0, MW1, ...                               | Read/Write | 16Bit,2Byte   |  INT16/UINT16 |

#### **#ENDIAN**

选填，字节顺序，适用于 int16/uint16 数据类型，详细说明见下表。

| 符号 | 字节顺序 | 支持的数据类型        | 备注 |
| --- | ------- | ------------------ | ----- |
| #B  | 2,1     | int16/uint16       |       |
| #L  | 1,2     | int16/uint16       | 不填，默认字节顺序 |

::: tip
点位字节序优先级高于节点字节序配置。即点位配置字节序后，字节序按照点位的配置，忽略节点配置。
字节顺序可能用 ABCD 表示，只需将 1234 对应 ABCD 即可。例如 ABCD 对应默认字节序 1234 (#LL)。
:::

### 地址示例

| 地址           | 数据类型  | 说明                                               |
| -------------- | --------- | -------------------------------------------------- |
| 1!IX1.0        | bit       | 指站号为 1，PLC 数据单元 IX1.0, 只读。             |
| 1!QW0          | int16     | 指站号为 1，PLC 数据单元 QW0, 支持读写。           |
| 2!MW1          | int16     | 指站号为 2，PLC 数据单元 MW1, 支持读写。           |
