新闻中心

PRESS CENTER 纵横智控
你的位置: 首页 新闻 技术应用
纵横智控

Modbus 主站请求/主站解析-EG边缘计算网关

2025-09-16 15:00:45 阅读: 发布人:纵横智控

概述

Modbus是一种工业现场总线协议,通常运行于RS485总线,采用半双工即一问一答的通信机制。Modbus分为Modbus RTU/Modbus TCP/Modbus ASCII三种通信模式,网关目前支持Modbus RTU/Modbus TCP两种通信模式。

Modbus主站请求节点:根据设置的参数(地址码/功能码/寄存器起始地址/寄存器数量等)生成Modbus指令。

Modbus主站解析节点:根据匹配的Modbus主站请求节点,解析响应数据。

Modbus主站解析节点使用时需指定匹配的Modbus主站请求节点(Modbus主站请求和Modbus主站解析节点匹配码一致即可),匹配完成就会按照Modbus主站请求节点的设置来解析数据,因此Modbus主站请求和Modbus主站解析节点必须成对出现且匹配码必须唯一。

节点只对协议报文处理,并未指定相应的物理通道,因此一般配合串口或者TCP节点一起使用。从而可以灵活实现Modbus RTU / Modbus TCP / Modbus RTU over TCP / Modbus TCP over RTU。

以下介绍主要针对Modbus主站请求节点,Modbus主站解析节点无任何设置项。Modbus基础概念此处不在介绍,如果不熟悉,请参考以下资料:https://iotrouter.yuque.com/attachments/yuque/0/2024/pdf/26702863/1726737470503-a9dfc212-14fd-45f3-b41a-0feee6be77b9.pdf

Modbus 主站请求

输入

#高级用法-动态传参读取:

msg.type = "read"

#字符串:read读/write写

msg.payload = [

{

"read":true, //执行读操作:必填项

"groups":"", //组名:必填项,详见点位表介绍

"name":"", //点位名称:必填项,详见点位表介绍

"slaveAddr":"1", //从机地址:必填项,详见点位表介绍

"registerAddr":"1", //偏执:必填项,详见点位表介绍

"funCode":"FC1", //功能码:必填项,详见点位表介绍

"type":"Bool", //数据类型:必填项,详见点位表介绍

"decimalPlaces":"1", //保留小数位:范围1-4(选填参数)

"slope":"", //斜率K:选填参数,详见点位表介绍

"intercept":"",//截距B:选填参数,详见点位表介绍

"special":"",//特殊处理:选填参数,详见点位表介绍

}

]

输出

msg.payload

#根据配置项生成的Modbus RTU/TCP请求指令

group

#当前指令的组名

protocol

#协议

cmdJson

#本条指令的点位信息

功能

1.名称

工作区内节点的命名,方便维护及记忆。

2.匹配码

当请求节点匹配码与解析节点匹配码一致时,自动完成匹配,解析节点会按照请求节点的配置进行解析。

3.协议

Modbus RTU / Modbus TCP。

4.点位表

Modbus 主站请求/主站解析-EG边缘计算网关

a勾选框

请勾选要读取的点位。不勾选则不会自动读取,仅用于写入时匹配数据点用。

Modbus 主站请求/主站解析-EG边缘计算网关

不勾选的点位只在写入时用作匹配数据点用。如上图所示,C未勾选则不会自动读取C点位,写入时输入格式:【msg.payload.C = 125】,当表中有数据名称为C的点位时,将会匹配该点位,并将值125写入对应的寄存器。

b组

连续 且 可读 且 从机地址相同 且 功能码相同 的点位可配置为一个组,同组点位读取会构造一条指令读取,从而大幅提高读取效率。不同组的点位,会按照一个点位构造一条指令的方式读取。

Modbus 主站请求/主站解析-EG边缘计算网关

同组使用时,需严格遵守Modbus协议中关于寄存器读取最大长度的限制!

c数据名称

数据名称作为每个数据点的唯一键(key),请确保其不重复。

Modbus 主站请求/主站解析-EG边缘计算网关

d从机地址

Modbus协议站号(10进制地址,范围1-255)。

Modbus 主站请求/主站解析-EG边缘计算网关

连接多个从机时,可以在同一个 Modbus 主站节点的点位表中配置多个从机的寄存器地址。

e偏置

数据点的Modbus寄存器地址(填写10进制地址)。

Modbus 主站请求/主站解析-EG边缘计算网关

偏置实际上是指Modbus寄存器地址,此处叫做偏执是为了统一表达。

呈现方式:Modbus寄存器地址一般以两种形式呈现:

十六进制地址:例如0X0000、0X0001

十进制地址:例如40001、40002

填写方式:

十六进制地址:将十六进制地址转换为十进制地址后加1。例如:十六进制的 0x0000 偏置填写 1;十六进制的0x0001偏执填写2

十进制地址:去掉十进制地址的首位后,直接填写偏置。例如:十进制的 40001偏置填写 1;十进制的40002偏执填写2

寄存器类型

地址形式

偏置值

十六进制

0x0000

1

十六进制

0x0001

2

十进制

40001

1

十进制

40002

2

f功能码

FC1:对线圈点位进行读写操作,写入操作默认采用05功能码。

FC2:对触点进行读操作。

FC3:对保持寄存器读写操作。写入时,对于单个寄存器默认使用06功能码(针对16位整型),对于多个寄存器或更大位宽(如32位、64位整形及浮点型)写入则采用10功能码。

FC4:对输入寄存器读操作,不支持写入,确保了对存储数据的非侵入式访问,适用于需要监测或收集数据而不改变其状态的场景。

g数据类型

Bool:二进制位解析。

UInt16:占用1个寄存器,2个字节,表示非负整数,数据范围 0 ~ 65535。

Int16:占用1个寄存器,2个字节,表示整数,数据范围 -32768 ~ 32767。

UInt32:占2个寄存器,4个字节,表示非负整数,数据范围 0 ~ 4294967295。

Int32:占2个寄存器,4个字节,表示整数,数据范围 -2147483648 ~ 2147483647。

Float32:占2个寄存器,4个字节,表示浮点数。

Double64:占4个寄存器,8个字节,表示浮点数。

BCD:占用n个寄存器,n*2个字节,表示16进制字符串(n=特殊处理项填入的值)。

String:占用n个寄存器,n*2个字节,表示ASCII字符串(n=特殊处理项填入的值)。

hK(斜率)/B (截距)

按照线性关系 y=kx+B计算,其中 x 是寄存器值,y 是转换后的值。

缩小10倍:K = 0.1,B = 0

放大10倍:K = 10,B = 0

i特殊处理

对于FC3功能码,要求按bit位进行数据解析时,通过在特殊处理框内输入0-15的数值,即可实现对指定数据的位解析。

Modbus 主站请求/主站解析-EG边缘计算网关

在String解析模式下,特殊处理的值表示读取字符串寄存器的长度,如下图为读取5个寄存器长度的字符串数据。

Modbus 主站请求/主站解析-EG边缘计算网关

在BCD解析模式下,特殊处理的值将表示读取BCD寄存器的长度,如下图为读取5个寄存器长度的BCD数据。

Modbus 主站请求/主站解析-EG边缘计算网关

5.超时时间

主站发出一个请求后,等待从站应答的最长时间。如果在这段时间内没有收到从站的应答,主站会触发超时处理。

Modbus 主站解析

输入

msg.payload

#从站响应的Modbus报文

输出

msg.payload

#解析后的数据

msg.log

#本次通信的原始请求指令和从机响应数据以及一些其它参数

{

group:"",//组名

slaveAddr:1,//从机地址

funCode:1,//功能码

dataPoints:[{}],//本次读取的数据点详细配置参数

data:{},//解析后的值

reqpayload:[],//原始请求指令

message:"",//success请求成功,timeout请求超时,error请求错误,一般表示返回的报文不符合格式

reppayload:[],//从机响应的原始报文

}

功能

名称

工作区内节点的命名,方便维护及记忆。

匹配码

当请求节点匹配码与解析节点匹配码一致时,自动完成匹配,解析节点会按照请求节点的配置进行解析。

模式

合并所有变量输出:将所有变量整合为一个key-value集合,合并输出。

Modbus 主站请求/主站解析-EG边缘计算网关

每组变量单独输出:以组的维度进行输出,每个组内的变量以key-value集合的形式输出。

Modbus 主站请求/主站解析-EG边缘计算网关

按组合并输出:先以组的维度将输出分类,然后构建一个嵌套的key-value结构,其中外层key为组名,内层为该组内所有变量的key-value集合,实现数据的按组聚合和有序展示。

Modbus 主站请求/主站解析-EG边缘计算网关

按从机地址合并输出:先以从机地址的维度将输出分类,然后构建一个嵌套的key-value结构,其中外层key为从机地址,内层为该从机内所有变量的key-value集合,实现数据的按组聚合和有序展示。

Modbus 主站请求/主站解析-EG边缘计算网关

示例

1.读单个从机

见文末

2.读多个从机

Modbus 主站请求/主站解析-EG边缘计算网关

源码:见文末

3.写从机数据

见文末

4.高级读-动态传参

允许通过msg携带配置参数修改采集指令,从而根据需求动态采集传感器数据。例如:云端根据业务需求,不同情况下,下发不同的采集命令。

源码:见文末

5.高级写-动态传参

允许通过msg携带参数动态写入数据。

源码:见文末

6.高级-组使用方法

如果配置了组,可以通过msg.group = ${组名}来读取指定组的数据。

源码:见文末

扩展延伸

上文示例中使用到的是TCP链路的ModbusTCP协议。实际使用中,可以根据自己的需求自由组合来实现不同的应用,例如:Modbus RTU / Modbus TCP / Modbus RTU over TCP / Modbus TCP over RTU。

ModbusRTU协议 串口链路

使用场景:在串口链路上使用MobusRTU协议。

Modbus 主站请求/主站解析-EG边缘计算网关

ModbusRTU协议 TCP链路

使用场景:在TCP链路上使用ModbusRTU协议。

Modbus 主站请求/主站解析-EG边缘计算网关

 

源码/原文:https://iotrouter.yuque.com/zn3vdn/eg8000/yg8a2l602l18xc8a

热门产品