新闻中心
PRESS CENTERModbus读:用于Modbus RTU/Modbus TCP协议的数据读取。
Modbus写:用于Modbus RTU/Modbus TCP协议的数据写入。
Modbus服务:用于Modbus RTU/Modbus TCP协议的服务端,即从站,寄存器地址可以自定义。
以上3个节点在原Modbus请求Modbus解析节点的基础上增加了多个特色功能:寄存器配置导入导出、动态配置采集参数、结果基本计算、数据汇总输出等等。
Modbus基础概念此处不在介绍,如果不熟悉,请参考以下资料:Modbus协议【完整版】-https://iotrouter.yuque.com/attachments/yuque/0/2025/pdf/38696274/1753768218220-93df9205-5f53-458d-9ad9-38e48c0ed131.pdf
如下源码:https://iotrouter.yuque.com/zn3vdn/eg8000/deauhgopg8ggogap#yXy1k
支持Modbus RTU/Modbus TCP协议,选择不同的配置项即可,以下介绍不在区分。
输入
msg.payload.uid
#从机地址,1-255
msg.payload.fc
#功能码,十进制表示,取值范围:1/2/3/4
msg.payload.columns
#数据点,多个数据点以数组的形式表示:
{
"Key":"",//数据点名称:字符串格式
"Address":0,//寄存器地址:十进制表示(无需加1),例如:0x0000-->00x0100-->256
"Type":1,//数据类型:1--24,对应关系详见配置页面下拉选型
"Tdata":1//数据处理方式:对于位解析为必填参数,取值1-16表示哪一位;对于其他类型为选填,表示结果乘的系数,10表示放大10倍,0.1表示缩小10倍
}
输出
msg.payload
#正常返回:数据以对象的形式存储在msg.payload中
#异常返回:null
msg.status
#正常返回:OK
#异常返回:ERROR
#超时返回:TIMEOUT
msg.reqpayload
#发送的原始指令
msg.reppayload
#响应的原始指令
示例
1. 寄存器导入导出
在寄存器比较多的时候,手动依次录入是比较麻烦的,Modbus读节点增加了导入导出配置的功能,大大提高了录入效率:
2. 动态配置/结果计算/汇总输出
新增动态配置功能,允许通过msg携带配置参数修改采集指令,从而根据需求动态采集传感器数据。例如:云端根据业务需求,不同情况下,下发不同的采集命令。
新增字段“Tdata”,支持对寄存器返回的结果进行简单的计算,最终的结果以对象的形式存储在msg.payload中,方便后续统一处理。
支持Modbus RTU/Modbus TCP协议,选择不同的配置项即可,以下介绍不在区分。
输入
msg.payload.uid
#从机地址,1-255
msg.payload.fc
#功能码,十进制表示,取值范围:5/6/15/16
msg.payload.address
#寄存器起始地址,十进制表示(无需加1),例如:0x0000-->00x0100-->256
msg.payload.quantity
#寄存器写入的数量,写单个可不填,写多个必须填
msg.payload.value
#FC 5:写单个线圈(msg.payload.value:1/0)
#FC 6:写单个保持寄存器(msg.payload.value:0-65535)
#FC15:写多个线圈(msg.payload.value:字节数组,每个字节表示8个线圈)
#FC16:写多个保持寄存器(msg.payload.value::一个寄存器2个字节,要写入的具体字节数组)
输出
msg.payload
#写入成功:true
#写入失败:false
msg.status
#正常返回:OK
#异常返回:ERROR
#超时返回:TIMEOUT
msg.reppayload
#发送的原始指令
msg.reqpayload
#响应的原始指令
示例
1. 写多个保持寄存器
Modbus服务作为Modbus从站,支持将不同来源的数据重新映射为新的寄存器地址,统一响应主站的请求,从而提高主站的采集效率。目前仅支持读操作,不支持写操作。
Modbus服务节点实际工作原理是将传入数据重新映射为新的地址存储,当有Modbus请求时,在把存储的数据格式化为合法的Modbus响应输出。
输入
msg.coils
#数组,取值为0/1,索引为寄存器地址,如果只更新某个参数,请将其它索引值置为null或不初始化
msg.discretes
#数组,取值为0/1,索引为寄存器地址,如果只更新某个参数,请将其它索引值置为null或不初始化
msg.holdings
#数组,取值最大32位,索引为寄存器地址,如果某个值超出16位请将下个索引置为null或不初始化
msg.inpus
#数组,取值最大32位,索引为寄存器地址,如果某个值超出16位请将下个索引置为null或不初始化
msg.payload
#如果不存在以上属性,则会把msg.payload作为请求指令解析
输出
输出1
msg.payload
#modbus响应报文
输出2(只有msg.coils/msg.discretes/msg.holdings/msg.input属性注入时才会输出2)
msg.coils
#显示coils中当前存放的数据
msg.discretes
#显示discretes中当前存放的数据
msg.holdings
#显示holdings中当前存放的数据
msg.inpus
#显示inpus中当前存放的数据
示例
1. 保持寄存器
本示例设置保持寄存器数量为10个,其中:寄存器0x0000-0x0001,0x0002-0x0003,0x0004-0x0005,0x0006-0x0007为32位浮点型数据(ABCD),寄存器0x0008,0x0009为16位整型数据(AB)。
配置界面设置内容如下图所示: