跳转到内容
返回官网

modbus-TCP 采集

描述:根据常用传输介质,Modbus 可使用串口和网口(含光纤)方式进行传输,RTU 是属于串口通讯,TCP 属于网口(以太网通讯)。Modbus 通信协议遵循主设备和从设备的通信步骤,边缘网关中 Modbus 驱动使用 Master 客户端【主站】(主设备),采取主动询问方式,发送查询信息给 Modbus 从设备,然后由 Modbus 从设备依据接到的内容准备响应信息回传给网关。

(1) 进入 CommBridge 页面的【智慧孪生】,在左侧点击切换至【设备智联】。

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

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

协议选择 Modbus-TCP

(1) 双击 Modbus 客户端【主站】,点击【添加方案】按钮。

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

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

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

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

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

(1) 点击【设备智联】的【部署】按钮,部署成功。

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

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

采集(处理前):

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

点位的读写模式为 rw 和 wo,且正常采集数据时才能修改数据。

(1) 点击单个数据的【写】按钮,配置数据,点击【确定】。

(2) 查看历史数据。

参数 描述 格式 举例
方案名称 用户自定义该方案的名称 非空 采集 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

同步采集:

  1. “Yes”表示整个方案下分组的采集周期、超时时间和采集时效性统一配置;作用范围:整个方案内点位数据;
  2. “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。

  1. 当寄存器类型为 Discrete、Coils 时,数据类型默认为 boolean。
  2. 当数据类型为 uint16、int16、combine 时,字节序可选择 AB、BA;当数据类型为 uint32、int32、float 时,字节序可选择 ABCD、CDAB、BADC、DCBA;其他数据类型没有字节序。
  3. 当寄存器类型为 Discrete、Coils 时,寄存器数量默认为 1;当数据类型为 uint16、int16、boolean 时,寄存器数量默认为 1;当数据类型为 uint32、int32、float 时,寄存器数量默认为 2;当数据类型为 combine 时,寄存器数量可选择 1、2;当数据类型为 string、hex string 时,寄存器数量可手动填写。

16位顺序:

  1. AB:表示1个字的寄存器,高字在前低字在后,字内高字节在前低字节在后(大端排序)
  2. BA:表示1个字的寄存器,高字在前低字在后,字内低字节在前高字节在后(小端排序)

32位顺序:

  1. ABCD:表示2个字的寄存器,高字在前低字在后,字内高字节在前低字节在后(大端排序)
  2. BADC:表示2个字的寄存器,高字在前低字在后,字内低字节在前高字节在后(大端字节交换)
  3. CDAB:表示2个字的寄存器,低字在前高字在后,字内高字节在前低字节在后(小端字节交换)
  4. DCBA:表示2个字的寄存器,低字在前高字在后,字内低字节在前高字节在后(小端排序)

寄存器类型决定数据类型、寄存器数量和读写模式。

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 输出端口,可设定端口的输出状态和读取该位的输出状态

数据类型根据原始数据类型、交换寄存器内高低字节和交换寄存器的顺序三者决定,每个字母代表一个字节。

  1. 原始数据类型:uint16、int16、uint32、int32、float、boolean、combine、string、hex string。
  2. 交换寄存器内高低字节:把寄存器内 16 位数据的前后 8 个 bits 交换,16bit 只存在正序(AB)和反序(BA),高位优先位正序,低位优先位反序。
  3. 交换寄存器顺序:把寄存器内 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 个 字 的寄存器,低字在前高字在后,字内低字节在前高字节在后(小端排序)