modbus-TCP 采集
描述:根据常用传输介质,Modbus 可使用串口和网口(含光纤)方式进行传输,RTU 是属于串口通讯,TCP 属于网口(以太网通讯)。Modbus 通信协议遵循主设备和从设备的通信步骤,边缘网关中 Modbus 驱动使用 Master 客户端【主站】(主设备),采取主动询问方式,发送查询信息给 Modbus 从设备,然后由 Modbus 从设备依据接到的内容准备响应信息回传给网关。
1. 创建节点
Section titled “1. 创建节点”(1) 进入 CommBridge 页面的【智慧孪生】,在左侧点击切换至【设备智联】。

(2) 依次拖拽 Modbus 客户端【主站】、数据处理和 MQTT 上传插件到插件工作区,分别生成三个节点。

(3) 依次连接三个节点,连接顺序:Modbus 客户端【主站】 → 数据处理 → MQTT 上传。

2. 创建方案
Section titled “2. 创建方案”协议选择
Modbus-TCP
(1) 双击 Modbus 客户端【主站】,点击【添加方案】按钮。

(2) 填写连接配置,点击【下一步】。

(3) 点击【添加分组】,填写分组信息,点击【确认】。

(4) 点击【添加数据】,填写点位数据,点击【确认】。

(5) 点击【完成】,成功添加采集方案。

(6) 打开方案的开关,点击【保存】。

3. 查看结果
Section titled “3. 查看结果”(1) 点击【设备智联】的【部署】按钮,部署成功。

(2) 切换至【智慧孪生】,鼠标移动至 Modbus 客户端【主站】节点,弹出节点信息列表。

(3) 点击方案,查看该方案下各分组的点位实时数据和历史数据。
采集(处理前):

处理后(数据处理插件中查看方案):

4. 写数据
Section titled “4. 写数据”点位的读写模式为
rw和wo,且正常采集数据时才能修改数据。
(1) 点击单个数据的【写】按钮,配置数据,点击【确定】。

(2) 查看历史数据。

5. 配置描述说明
Section titled “5. 配置描述说明”| 参数 | 描述 | 格式 | 举例 |
|---|---|---|---|
| 方案名称 | 用户自定义该方案的名称 | 非空 | 采集 slave |
| 协议 | Modbus 协议 | Modbus TCP、Modbus RTU | Modbus TCP |
| 同步采集 | 支持是否同步采集,Yes 和 No | Yes、No | YES |
| 采集周期 | 数据读取轮询周期,指整个方案内的每个分组每次读取寄存器的间隔时间 | 数字,范围:(100,2147483647] | 2000 |
| 采集时效性 | 分组内所有点位需在设定时间内完成采集,否则丢弃该分组数据;该时间包含帧延迟。 | 数字,范围:(0, 采集周期] | 1000 |
| 超时时间 | 指整个方案下每个分组的每次采集数据的时间,若超过了该时间则丢弃该次读取的数据 | 数字,范围:(0, 采集周期] | 1000 |
| 最大批量寄存器数 | 连续点位批量采集时的最大批量寄存器数 | 自然数,范围:[1,120] | 120 |
| 帧延迟 | 两次采集之间的最小间隔,0为默认值。若采集频繁超时可适当增大,否则无需修改。 | 单位毫秒,数字,范围:[0, 2147483647] | 0 |
| 写帧延迟 | 写数据时的额外等待时间,部分设备写操作较慢需设置,0表示无需额外延迟。 | 单位毫秒,数字,范围:[0, 2147483647] | 0 |
| 写寄存器功能码 | 设置写保持寄存器的功能码。 | Auto、06、10,详见下说明 | Auto |
| 变化采集 | 数据采集的方式。No:不变化采集;SingleData: 只传输变化的点位;WholeGroup:组内任意数据变化后传输一整组数据。 | No、SingleData、WholeGroup | SingleData |
| 变化采集重置时间 | 数据持续未变化超过该时间强制触发一次数据提交。设置为0表示永不触发 | 单位秒,数字,范围:(0, 2147483647] | 0 |
| 失败退避 | 采集失败后按退避率延长下次采集时间,最长不超过采集周期 × 最大退避率 | Yes、No,详见下说明 | Yes |
| 退避率 | 失败时的时间增长比率,必须大于0且不等于1 | 数字 | 2 |
| 最大退避率 | 最大退避时间比率,增长到这个比率后将保持最大比率不变。 | 数字 | 16 |
同步采集:
- “Yes”表示整个方案下分组的采集周期、超时时间和采集时效性统一配置;作用范围:整个方案内点位数据;
- “No”表示每个分组自行配置采集周期、超时时间和采集时效性。
写寄存器功能码:Auto: 写一个寄存器时使用06,写大于一个寄存器时使用10;06:全部使用06写寄存器;10:全部使用10写寄存器
失败退避:例如采集周期为1秒,退避率为2,最大退避率为16,那么一直采集失败的等待时间会是1s, 2s, 4s, 8s, 16s。同理,如果采集周期为10秒,退避率为0.5,最大退避率为0.1,那么一直失败的等待时间会是10s, 5s, 2.5s, 1.25s。一旦成功采集将恢复初始默认的采集周期
当退避率大于1时,最大退避率需要大于退避率,当退避率小于1时,最大退避率需要小于退避率
| 参数 | 描述 | 格式 | 举例 |
|---|---|---|---|
| 分组名称 | 用户自定义该分组的名称 | 非空 | 分组一 |
| Slave ID | Modbus 设备地址,被采集的设备的从地址 | 数字,范围:(0,255] | 1 |
| IP | Modbus 设备 IP 地址 | 输入点分十进制格式的地址 | 172.21.78.157 |
| 端口 | Modbus 设备端口号,默认为 502 | 数字,范围:(0,65535] | 502 |
| 采集周期 | 数据读取轮询周期,指单个分组每次读取寄存器的间隔时间 | 数字,范围:(100,2147483647] | 2000 |
| 采集时效性 | 指单个分组的所有点位采集数据的有效时间,在该时间内未读取到分组内的所有点位数据,则丢弃该分组内的所有点位数据 | 数字,范围:(0, 采集周期] | 1000 |
| 超时时间 | 指单个分组的每次采集数据的时间,若超过了该时间则丢弃该次读取的数据 | 数字,范围:(0, 采集周期] | 1000 |
注意: 连接配置的同步采集为 No,整个分组内的点位数据 Modbus 一次性读取的寄存器个数有数量限制。 Holding Register 和 Input Register 寄存器一次性读取一组连续寄存器点位个数最大是 120,Discrete 和 Coils 寄存器一次性读取一组连续寄存器点位最大是 2000。
| 参数 | 前提 | 描述 | 格式 | 举例 |
|---|---|---|---|---|
| 数据别名 | 点位的名称,同一分组中是唯一的 | 非空,不能以数字、下划线开头,不能包含空格 | M | |
| 地址 | 寄存器地址,同一分组下地址不能相同 | 寄存器地址,同一个分组下的地址不能相同 | 数字,范围:(0,2147483647) | 0 |
| 寄存器类型 | 指 Modbus 的操作码 | Holding Register、Input Register、Discrete、Coils,详见下说明 | Holding Register | |
| 数据类型 | 寄存器类型决定 | 寄存器数据的原始类型 | uint16、int16、uint32、int32、float、boolean、combine、string、hex string,详见下说明 | uint16 |
| 字节序 | 寄存器类型和数据类型共同决定 | 指超过一个字节的数据类型在内存中的存储顺序 | AB、BA、ABCD、CDAB、BADC、DCBA,详见下说明 | AB |
| 寄存器数量 | 寄存器类型和数据类型共同决定 | 寄存器的数据类型的个数 | 详见下说明 | 1 |
| 读写模式 | 寄存器类型决定 | 支持 ro(只读)、rw(读写)、wo(只写) | ro、rw、wo | ro |
| 计算 | 用户根据数据别名自定义公式 | {M}/10 | ||
| 偏移 | 数据类型为bit | 按照字节序调整后,从高位到低位的bit偏移 | 数字,范围:[0,15] |
例如,要调试温度属性,您设备的温度属性地址为 1,则寄存器的地址可设置为 1。
- 当寄存器类型为 Discrete、Coils 时,数据类型默认为 boolean。
- 当数据类型为 uint16、int16、combine 时,字节序可选择 AB、BA;当数据类型为 uint32、int32、float 时,字节序可选择 ABCD、CDAB、BADC、DCBA;其他数据类型没有字节序。
- 当寄存器类型为 Discrete、Coils 时,寄存器数量默认为 1;当数据类型为 uint16、int16、boolean 时,寄存器数量默认为 1;当数据类型为 uint32、int32、float 时,寄存器数量默认为 2;当数据类型为 combine 时,寄存器数量可选择 1、2;当数据类型为 string、hex string 时,寄存器数量可手动填写。
16位顺序:
- AB:表示1个字的寄存器,高字在前低字在后,字内高字节在前低字节在后(大端排序)
- BA:表示1个字的寄存器,高字在前低字在后,字内低字节在前高字节在后(小端排序)
32位顺序:
- ABCD:表示2个字的寄存器,高字在前低字在后,字内高字节在前低字节在后(大端排序)
- BADC:表示2个字的寄存器,高字在前低字在后,字内低字节在前高字节在后(大端字节交换)
- CDAB:表示2个字的寄存器,低字在前高字在后,字内高字节在前低字节在后(小端字节交换)
- DCBA:表示2个字的寄存器,低字在前高字在后,字内低字节在前高字节在后(小端排序)
6. Modbus 协议相关参数说明
Section titled “6. Modbus 协议相关参数说明”寄存器类型决定数据类型、寄存器数量和读写模式。
寄存器类型的相关介绍
Section titled “寄存器类型的相关介绍”0x、1x、3x、4x 是 Modbus 协议规定的地址范围
| 寄存器类型 | 名称 | 寄存器 PLC 地址 | 寄存器协议地址 | 读写状态 | 说明 |
|---|---|---|---|---|---|
| Holding Register | 保存寄存器(4x) | 40001-49999 | 0000H-FFFFH | 读写,读取: 0x03,写入:0x06 | 输出参数或者保存参数,控制器运行时被设定的某些参数 |
| Input Register | 输入寄存器 (3x) | 30001-39999 | 0000H-FFFFH | 只读,0x04 | 输入参数,控制器运行时从外部设备获得的参数 |
| Discrete | 离散输入状态(1x) | 10001-19999 | 0000H-FFFFH | 只读,0x02 | 输入端口,通过外部设定改变输入状态 |
| Coils | 线圈状态(0x) | 00001-09999 | 0000H-FFFFH | 读写,读取:0x01,写单线圈:0x05,写多线圈:0x0F | 输出端口,可设定端口的输出状态和读取该位的输出状态 |
数据类型的相关介绍
Section titled “数据类型的相关介绍”数据类型根据原始数据类型、交换寄存器内高低字节和交换寄存器的顺序三者决定,每个字母代表一个字节。
- 原始数据类型:uint16、int16、uint32、int32、float、boolean、combine、string、hex string。
- 交换寄存器内高低字节:把寄存器内 16 位数据的前后 8 个 bits 交换,16bit 只存在正序(AB)和反序(BA),高位优先位正序,低位优先位反序。
- 交换寄存器顺序:把寄存器内 32 位数据的 16 个 bits 交换,如 ABCD 和 CDAB。
原始数据类型说明:
| 名称 | 说明 | 寄存器数量 |
|---|---|---|
| uint16 | 16 位无符号整型 | 1 |
| int16 | 16 位有符号整型 | 1 |
| uint32 | 32 位无符号整型 | 2 |
| int32 | 32 位有符号整型 | 2 |
| float | 32 位浮点型 | 2 |
| combine | 1、2 | |
| boolean | 布尔值 | 1 |
| string | ASCII 字符串类型 | 可自定义 |
| hex string | 16 进制字符串类型 | 可自定义 |
高低位顺序说明:
| 属性值 | 说明 |
|---|---|
| AB | 表示 2 个 字节 的寄存器高字节在前低字节在后(正序) |
| BA | 表示 2 个 字节 的寄存器低字节在前高字节在后(反序) |
| ABCD | 表示 2 个 字 的寄存器,高字在前低字在后,字内高字节在前低字节在后(大端排序) |
| BADC | 表示 2 个 字 的寄存器,高字在前低字在后,字内低字节在前高字节在后(大端字节交换) |
| CDAB | 表示 2 个 字 的寄存器,低字在前高字在后,字内高字节在前低字节在后(小端字节交换) |
| DCBA | 表示 2 个 字 的寄存器,低字在前高字在后,字内低字节在前高字节在后(小端排序) |