主题
Modbus 接入
通过 Modbus 协议实现设备接入。
Modbus RTU 协议
Modbus RTU 是 Modbus 协议的一种版本,它是基于串行通信的协议。与 Modbus TCP 协议不同,Modbus RTU 通常用于连接在工厂生产线上的传感器、执行器和其他控制设备,是一种快速、可靠、灵活的串行通信协议,提供了可靠的数据传输和控制功能。
Modbus RTU 协议采用二进制编码,TopStack/TopLink 提供了 3 种通讯链路用于支持 Modbus RTU 通讯:
- 串口:可以在 RS-232、RS-485 或其他串行通信介质上传输数据。
- 网口:基于以太网 TCP 的实现与子站进行通讯。
- DTU:通过 DTU 设备,通过透传方式与子站设备进行通讯。
通道设置
参数说明
名称 | 必填 | 说明 |
---|---|---|
通讯链路 | - | 网口/串口/DTU。 |
IP | - | 通讯链路为网口时有效。 |
端口 | - | 通讯链路为网口时有效。 |
DTU ID | - | DTU 设备的 ID,通讯链路为 DTU 时有效。 |
串口号 | - | 通讯链路为串口时有效。 |
读超时 | 是 | 单位毫秒,如果在指定时间内未收到子站数据,则判断为超时 |
连续超时次数 | 是 | 如果连续超时次数超过该值,则认为设备离线 |
恢复采集间隔 | 是 | 单位秒,如果设备离线,则经过该间隔时间后再次尝试读取数据 |
通讯链路超时 | 是 | 单位秒,如果长时间收不到数据,如果长时间收不到数据或者终端心跳,平台会主动断开与子站的连接和通信。 |
帧间隔 | 是 | 单位毫秒,每次接收到数据到下次发出请求之间的最小时间间隔 |
Modbus TCP 协议
Modbus TCP 是一种基于以太网的 Modbus 协议版本,它使用 TCP/IP 协议进行通信。与传统的 Modbus RTU 协议不同,Modbus TCP 允许设备直接通过以太网互联,不需要任何专用的硬件或通信接口。因此,Modbus TCP 具有更高的通信速率和更广泛的应用范围。
通道设置
参数说明
名称 | 必填 | 说明 |
---|---|---|
主IP地址 | - | 子站设备的IP。 |
主端口号 | - | 子站设备的端口。 |
副IP地址 | 否 | 子站设备的备用IP。 |
副端口号 | 否 | 子站设备的备用端口。 |
读超时 | 是 | 单位毫秒,如果在指定时间内未收到子站数据,则判断为超时 |
连续超时次数 | 是 | 如果连续超时次数超过该值,则认为设备离线 |
恢复采集间隔 | 是 | 单位秒,如果设备离线,则经过该间隔时间后再次尝试读取数据 |
通讯链路超时 | 是 | 单位秒,如果长时间收不到数据,如果长时间收不到数据或者终端心跳,平台会主动断开与子站的连接和通信。 |
帧间隔 | 是 | 单位毫秒,每次接收到数据到下次发出请求之间的最小时间间隔 |
寻址方式
Modbus RTU 与 Modbus TCP 采用相同的寻址方式。
设备地址
点表中的【设备地址】对应的是 Modbus 子站地址(1-247)。
点位地址
点表中的【点位地址】用于对应 Modbus 寄存器地址。 在 Modbus 寻址中,地址的第一位指定了主表格。其余位表示设备的数据项。数据项的最大值是一个两字节的无符号整型值 (65,535)。驱动程序内部需要六位数字来表示整个地址表格和项。 请务必注意,许多 Modbus 设备可能不支持数据项的整个范围。为避免在输入此类设备的地址时出现混乱,此驱动程序将根据地址字段中输入的内容来“填充”地址 (添加数字)。
如果主表格类型后跟最多 4 位数字 (示例:4 x、4xx、4xxx 或 4xxxx),则地址仍可保留或使用额外的 0 填充到 5 位数字。
如果主表格类型后跟 5 位数字 (示例︰4xxxxx),则该地址不变。
输入为 41、401、4001、40001 或 400001 的地址是指定主表格类型 4 和数据项 1 的地址的所有对等表示。
WARNING
注:40001~4xxxx 是美国 Modicon 公司和 GE 公司 PLC 使用的 modbus 地址,它是基于1的地址,即同类元件的首地址为1。标准 Modbus 寄存器地址是基于 0 的地址,需要+1转换为 40001~4xxxx 格式的地址。
寄存器地址表
布尔型:
主表格 | 寄存器类型 | 范围 | 功能码 | 数值类型 | 读写模式 |
---|---|---|---|---|---|
0 | 输出线圈 | 000001-065536 或 H000001-H010000 | 01,05,15 | bool | 读/写 |
1 | 输入线圈 | 100001-165536 或 H100001-H110000 | 2 | bool | 只读 |
3 | 内部寄存器 | 300001.0-365536.15 或 H300001.0-H310000.15 | 4 | bit | 只读 |
4 | 保持寄存器 | 400001.0-465536.15 或 H400001.0-H410000.15 | 03,06,16 | bit | 读/写 |
整数型、浮点型、字符型:
主表格 | 寄存器类型 | 范围 | 功能码 | 读写模式 |
---|---|---|---|---|
3 | 内部寄存器 | 300001-365536 或 H300001-H310000 | 4 | 只读 |
4 | 保持寄存器 | 400001-465536 或 H400001-H410000 | 03,06,16 | 读/写 |
示例
对于从 40200 开始、长度为 4 字节的符号整数,要对其进行寻址,请输入:”40200”或”H400C8”。
位支持
读取内部寄存器或者保持寄存器中的位可以在地址中增加位号,地址格式示例: 对于读取 40200 寄存器的第 0 位,要对其进行寻址,请输入:“40200.0”。
字节顺序支持
modubs 中每个寄存器占用一个“字”( 2 个字节)的空间。如果读取数据时,需要每个“字”交换高低字节位置,可以增加地址后缀“X” ,如 4001X
。 如果一个测点占用了多个寄存器,默认的读取顺序是低字在前,高字在后,如果读取数据时,需要高字在前,低字在后,可以增加地址后缀“Z”,如 4001Z
。如果需要高字在前,低字在后,且每个“字”交换高低字节位置,可以增加地址后缀“X” ,如 4001XZ
假设,某测点为单浮点数(float32),起始地址为 4001,在 Modbus 寄存器中需要占用 4001 和 4002 两个寄存器,数据存放顺序为 ABCD,数采驱动在读取数据时,不同的字节顺对应的地址格式如下:
ABCD -> 4001
BADC -> 4001X
CDAB -> 4001Z
DCBA -> 4001XZ
字符串
读取字符串类型, 需要在地址后增加字符长度和字节顺序的配置。
格式:<地址><.字符长度>L 或 <地址><.字符长度>H
示例:
- 4032.10H 表示起始地址为 32 的寄存器连续 10 个字符(高地址前)
- 4032.10L 表示起始地址为 32 的寄存器连续 10 个字符(默认顺序,低地址在前)