概览
Modbus TCP 是一种基于以太网的 Modbus 协议版本,它使用 TCP/IP 协议进行通信。与传统的 Modbus RTU 协议不同,Modbus TCP 允许设备直接通过以太网互联,不需要任何专用的硬件或通信接口。因此,Modbus TCP 具有更高的通信速率和更广泛的应用范围。
Neuron 的 Modbus TCP 插件除了支持以 TCP 客户端的模式主动接入设备进行数据采集与空;还增加支持了 TCP 服务端模式,允许设备主动接入到 Neuron,主要用于如 4G DTU,因 4G 网络的 IP 是属于私网 IP,此时只能由 DTU 设备主动连接到 Neuron。
插件
插件 | 说明 |
---|---|
Modbus TCP | 标准 Modbus TCP 协议实现,支持 TCP 客户端与服务端模式,对设备有更好的兼容性。 |
Modbus TCP community | 标准 Modbus TCP 协议开源版本,只支持 TCP 客户端模式。 |
Modbus TCP QH | 定制化 Modbus TCP 协议实现,支持一次最大读取 65530 字节,标准的协议最大一次读取 250 字节。 |
参数
字段 | 说明 |
---|---|
连接模式 | 选择以太网 TCP 连接时,可以选择 Neuron 作为 TCP 的客户端或是服务端。 |
指令发送间隔 | 发送每条读写指令之间的等待时间。某些串口设备在较短时间内接收到连续指令时,可能会丢弃某些指令。 |
IP 地址 | TCP 连接时,设备的 IP 地址(Neuron 作为客户端);或是 Neuron 本机的 IP 地址(Neuron 作为服务端),默认可填 0.0.0.0。 |
端口号 | TCP 连接时,设备的端口号(Neuron 作为客户端);或是 Neuron 本机的端口(Neuron 作为服务端)。 |
连接超时时间 | 等待设备返回指令响应的时间 |
数据类型
- INT16
- UINT16
- INT32
- UINT32
- INT64
- UINT64
- FLOAT
- DOUBLE
- BIT
- STRING
地址格式
SLAVE!ADDRESS[.BIT][#ENDIAN][.LEN[H][L][D][E]]
SLAVE
必填,指从机地址或者是站点号。
ADDRESS
必填,指寄存器地址。Modbus 协议有四个区域,每个区域最大有 65536 个寄存器,每个区域的地址范围如下表所示。需要注意的是实际应用中一般不需要 65536 这么大的存储区,一般 PLC 厂家普遍采用 10000 以内的地址范围,请注意根据设备的区域及功能码,正确填写点位地址。
区域 | 地址范围 | 属性 | 寄存器大小 | 功能码 | 数据类型 |
---|---|---|---|---|---|
Coil(线圈) | 000001 ~ 065536 | 读/写 | 1Bit | 0x01,0x05,0x0f | BIT |
Input(离散量输入) | 100001 ~ 165536 | 读 | 1Bit | 0x02 | BIT |
Input Register(输入寄存器) | 300001 ~ 365536 | 读 | 16Bit,2Byte | 0x04 | BIT,INT16,UINT16,INT32,UINT32,INT64,UINT64,FLOAT,DOUBLE,STRING |
Hold Register(保持寄存器) | 400001 ~ 465536 | 读/写 | 16Bit,2Byte | 0x03,0x06,0x10 | BIT,INT16,UINT16,INT32,UINT32,INT64,UINT64,FLOAT,DOUBLE,STRING |
提示
一些设备文件会使用功能码和寄存器地址来描述指令,因为寄存器地址编号是从 0 开始的,所以每个区域的寄存器地址范围为 0 ~ 65535。Neuron 采用 PLC 组态地址规范,因此 Neuron 配置的地址从 1 开始。 组态地址规范转换规则:根据功能码确定地址的最高位数,并在寄存器地址上加 1,作为 Neuron 的使用地址。
例如,功能码是 0x03,寄存器地址是 0,Neuron 使用的地址是 400001。功能码是 0x02,寄存器地址是 5,Neuron 使用的地址是 100006。
.BIT
选填,寄存器中的特定 bit,例如:
地址 | 数据类型 | 说明 |
---|---|---|
1!300004.0 | bit | 指站号为1,离散量输入区域,地址为 300004,第 0 位。 |
1!400010.4 | bit | 指站号为1,保持寄存器区域,地址为 400010,第 4 位。 |
2!400001.15 | bit | 指站号为2,保持寄存器区域,地址为 400001,第 15 位。 |
#ENDIAN
选填,字节顺序,适用于 int16/uint16/int32/uint32/float 数据类型,详细说明见下表。
符号 | 字节顺序 | 支持的数据类型 | 备注 |
---|---|---|---|
#B | 2,1 | int16/uint16 | |
#L | 1,2 | int16/uint16 | 不填,默认字节顺序 |
#LL | 1,2,3,4 | int32/uint32/float | 不填,默认字节顺序 |
#LB | 2,1,4,3 | int32/uint32/float | |
#BB | 3,4,1,2 | int32/uint32/float | |
#BL | 4,3,2,1 | int32/uint32/float |
.LEN[H][L][D][E]
当数据类型为 STRING 类型时,.LEN 是必填项,表示字符串需要占用的字节长度,每个寄存器中包含H,L,D 和E 四种存储方式,如下列表格所示。
符号 | 说明 |
---|---|
H | 一个寄存器存储两个字节,高字节在前低字节在后。 |
L | 一个寄存器存储两个字节,低字节在前高字节在后。 |
D | 一个寄存器存储一个字节,且存储在低字节。 |
E | 一个寄存器存储一个字节,且存储在高字节。 |
示例
地址 | 数据类型 | 说明 |
---|---|---|
1!300004 | int16 | 指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #L |
1!300004#B | int16 | 指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #B |
1!300004#L | uint16 | 指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #L |
1!400004 | int16 | 指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #L |
1!400004#L | int16 | 指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #L |
1!400004#B | uint16 | 指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #B |
1!300004 | int32 | 指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #LL |
1!300004#BB | uint32 | 指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #BB |
1!300004#LB | uint32 | 指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #LB |
1!300004#BL | float | 指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #BL |
1!300004#LL | int32 | 指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #LL |
1!400004 | int32 | 指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #LL |
1!400004#LB | uint32 | 指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #LB |
1!400004#BB | uint32 | 指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #BB |
1!400004#LL | int32 | 指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #LL |
1!400004#BL | float | 指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #BL |
1!300001.10 | String | 指站号为1,离散量输入区域,地址为 300001,字符长度为 10,字节顺序为 L,即占用的地址为 300001 ~ 300005 |
1!300001.10H | String | 指站号为1,离散量输入区域,地址为 300001,字符长度为 10,字节顺序为 H,即占用的地址为 300001 ~ 300005 |
1!300001.10L | String | 指站号为1,离散量输入区域,地址为 300001,字符长度为 10,字节顺序为 L,即占用的地址为 300001 ~ 300005 |
1!400001.10 | String | 指站号为1,保持寄存器区域,地址为 400001,字符长度为 10,字节顺序为 L,即占用的地址为 400001 ~ 400005 |
1!400001.10H | String | 指站号为1,保持寄存器区域,地址为 400001,字符长度为 10,字节顺序为 H,即占用的地址为 400001 ~ 400005 |
1!400001.10L | String | 指站号为1,保持寄存器区域,地址为 400001,字符长度为 10,字节顺序为 L,即占用的地址为 400001 ~ 400005 |
1!400001.10D | String | 指站号为1,保持寄存器区域,地址为 400001,字符长度为 10,字节顺序为 D,即占用的地址为 400001 ~ 400010 |
1!400001.10E | String | 指站号为1,保持寄存器区域,地址为 400001,字符长度为 10,字节顺序为 E,即占用的地址为 400001 ~ 400010 |