概览

Modbus RTU 是 Modbus 协议的一种版本,它是基于串行通信的协议。与 Modbus TCP 协议不同,Modbus RTU 通常用于连接在工厂生产线上的传感器、执行器和其他控制设备,是一种快速、可靠、灵活的串行通信协议,提供了可靠的数据传输和控制功能。

Modbus RTU 协议采用二进制编码,可以在 RS-232、RS-485 或其他串行通信介质上传输数据,Neuron 的 Modbus RTU 插件增加了基于以太网 TCP 的实现,通过 DTU 设备,可实现远端设备的数据采集与控制。

参数

参数说明
物理链路选择使用串口或者是以太网通信介质。
连接超时时间等待设备返回指令响应的时间。
指令发送间隔发送每条读写指令之间的等待时间。某些串口设备在较短时间内接收到连续指令时,可能会丢弃某些指令。
串口设备使用串口连接时,串口设备的路径,如 Linux 系统中 /dev/ttyS0。
停止位串口连接参数。
校验位串口连接参数。
波特率串口连接参数。
数据位串口连接参数。
连接模式选择以太网 TCP 连接时,可以选择 Neuron 作为 TCP 的客户端或是服务端。
IP 地址TCP 连接时,设备的 IP 地址(Neuron 作为客户端);或是 Neuron 本机的 IP 地址(Neuron 作为服务端),默认可填 0.0.0.0。
端口号TCP 连接时,设备的端口号(Neuron 作为客户端);或是 Neuron 本机的端口(Neuron 作为服务端)。
最大重试次数发送读取指令失败后最大重试次数。
指令重新发送间隔发送读取指令失败后重新发送读指令时间间隔,单位为毫秒。
传输模式TCP 传输或 UDP 传输。

数据类型

  • 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读/写1Bit0x01,0x05,0x0fBIT
Input(离散量输入)100001 ~ 1655361Bit0x02BIT
Input Register(输入寄存器)300001 ~ 36553616Bit,2Byte0x04BIT,INT16,UINT16,INT32,UINT32,INT64,UINT64,FLOAT,DOUBLE,STRING
Hold Register(保持寄存器)400001 ~ 465536读/写16Bit,2Byte0x03,0x06,0x10BIT,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.0bit指站号为1,离散量输入区域,地址为 300004,第 0 位。
1!400010.4bit指站号为1,保持寄存器区域,地址为 400010,第 4 位。
2!400001.15bit指站号为2,保持寄存器区域,地址为 400001,第 15 位。

#ENDIAN

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

符号字节顺序支持的数据类型备注
#B2,1int16/uint16
#L1,2int16/uint16不填,默认字节顺序
#LL1,2,3,4int32/uint32/float不填,默认字节顺序
#LB2,1,4,3int32/uint32/float
#BB3,4,1,2int32/uint32/float
#BL4,3,2,1int32/uint32/float

.LEN[H][L][D][E]

当数据类型为 STRING 类型时,.LEN 是必填项,表示字符串需要占用的字节长度,每个寄存器中包含HLDE 四种存储方式,如下列表格所示。

符号说明
H一个寄存器存储两个字节,高字节在前低字节在后。
L一个寄存器存储两个字节,低字节在前高字节在后。
D一个寄存器存储一个字节,且存储在低字节。
E一个寄存器存储一个字节,且存储在高字节。

示例

地址数据类型说明
1!300004int16指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #L
1!300004#Bint16指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #B
1!300004#Luint16指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #L
1!400004int16指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #L
1!400004#Lint16指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #L
1!400004#Buint16指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #B
1!300004int32指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #LL
1!300004#BBuint32指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #BB
1!300004#LBuint32指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #LB
1!300004#BLfloat指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #BL
1!300004#LLint32指站号为 1,离散量输入区域,地址为 300004,字节顺序为 #LL
1!400004int32指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #LL
1!400004#LBuint32指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #LB
1!400004#BBuint32指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #BB
1!400004#LLint32指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #LL
1!400004#BLfloat指站号为 1,保持寄存器区域,地址为 400004,字节顺序为 #BL
1!300001.10String指站号为1,离散量输入区域,地址为 300001,字符长度为 10,字节顺序为 L,即占用的地址为 300001 ~ 300005
1!300001.10HString指站号为1,离散量输入区域,地址为 300001,字符长度为 10,字节顺序为 H,即占用的地址为 300001 ~ 300005
1!300001.10LString指站号为1,离散量输入区域,地址为 300001,字符长度为 10,字节顺序为 L,即占用的地址为 300001 ~ 300005
1!400001.10String指站号为1,保持寄存器区域,地址为 400001,字符长度为 10,字节顺序为 L,即占用的地址为 400001 ~ 400005
1!400001.10HString指站号为1,保持寄存器区域,地址为 400001,字符长度为 10,字节顺序为 H,即占用的地址为 400001 ~ 400005
1!400001.10LString指站号为1,保持寄存器区域,地址为 400001,字符长度为 10,字节顺序为 L,即占用的地址为 400001 ~ 400005
1!400001.10DString指站号为1,保持寄存器区域,地址为 400001,字符长度为 10,字节顺序为 D,即占用的地址为 400001 ~ 400010
1!400001.10EString指站号为1,保持寄存器区域,地址为 400001,字符长度为 10,字节顺序为 E,即占用的地址为 400001 ~ 400010