RS485 Modbus协议解析

    在工作中,当我们采集采用RS485主从式半双工通讯的传感器时,会接触到Modbus协议。有时我们手上没有实物,只能通过协议文档手册,编写完代码后,自己用RS485来模拟发送验证。下面就说说如何快速组装数值发送验证,以及解析数值。

标准Modbus协议结构如下:

主机发送读寄存器协议数据结构形式为:

设备地址           1字节

读寄存器命令   1字节

寄存器地址       2字节

读寄存器个数   2字节

CRC校验(低字节在前,高字节在后)   2字节

 

例(主机发送数据到传感器):01 03 00 12 00 02 64 0E

解析:

01    表示设备地址

03    表示读寄存器指令

00 12 表示寄存器的起始地址

00 02 表示读取两个寄存器

64 0E 表示CRC校验码

 

从机返回寄存器是数据结构形式为:

设备地址   1字节

读寄存器命令   1字节

读取字节个数   N字节

XX *N   N个所读取字节数据

CRC校验(低字节在前,高字节在后)

 

例(传感器发送回给主机):01 03 04 41 E6 28 F6 91 BE

解析:

01          表示设备地址

03          表示读寄存器指令

04          表示有四个16进制数据

41 E6 28 F6  表示传感器的有效数据

91 BE       表示CRC校验码

 

1.若厂家对传感器的数据存储采用标准单精度浮点数方式,则对于一串采集回来的16进制数据,要转成浮点数是比较麻烦的,可以看下先用科学计数法方式存储计算:

方式1:如解析上述的返回值41 E6 28 F6

计算 41 E6 28 F6 (采用科学计数法方式存储计算)

转为二进制:01000001111001100010100011110110‬

红色’0’:表示符号位,1为负,0为正

10000011:表示指数位,转为十进制为2^0+2^1+2^7=131 131-127=4 说明指数位为4

则表示为((1.11001100010100011110110)*2^4)=11100. 1100010100011110110=

2^2+2^3+2^4. 2^-1+2^-2+..=28.77

41 E6 28 F6 转为十进制为28.77

 

方式2:采用工具快速转换,如下图所示

有了该工具,想要自己模拟发送任意数值的modbus协议数据,也是非常方便的。

比如主机发送了01 03 00 12 00 02 64 0E 采集命令,想要模拟传感器数值为12.34

通过工具转换如下:

则可组装modbus协议数据为01 03 04 41 45 70 A4 , 对于后面两位crc校验可以采用如下工具,可以得到:

可知组装的完整mobdus协议数据为01 03 04 41 45 70 A4 DB A1

2.若厂家对传感器的数据处理是采用16进制转整数方式处理,就像如下图所示:

这种形式的16进制传感器数据,可以采用电脑的计算器快速计算得到。

如计算00 9B

16进制模拟负值,可以采用计算器

如模拟-50,计算器输入如下0-50

再点击计算器上的xor

则16进制FF CE 则表示负数-50

以下是一个简单的 RS485 Modbus RTU 通信协议实例: 1. 配置串口参数:波特率、数据位、停止位、奇偶校验位等。 2. 定义 Modbus RTU 协议帧格式:起始位、地址、功能码、数据、CRC 校验等。 3. 发送命令帧给从设备:将命令帧通过串口发送给从设备。 4. 接收从设备响应:等待从设备响应,接收响应帧。 5. 解析响应帧:检查响应帧的地址、功能码、数据和 CRC 校验是否正确。 6. 处理响应帧数据:根据功能码和数据域内容,处理从设备返回的数据。 例如,假设要获取从设备地址为 01,寄存器地址为 1000 的寄存器内容,可以按照以下步骤执行: 1. 配置串口参数:波特率为 9600,数据位为 8,停止位为 1,无奇偶校验位。 2. 定义 Modbus RTU 协议帧格式:起始位为 0x01,地址为 0x01,功能码为 0x03,数据为 0x03E8(1000 的十六进制表示),CRC 校验为 0xXXXX(根据协议计算得出)。 3. 发送命令帧给从设备:将命令帧通过串口发送给从设备。 4. 接收从设备响应:等待从设备响应,接收响应帧。 5. 解析响应帧:检查响应帧的地址、功能码、数据和 CRC 校验是否正确。 6. 处理响应帧数据:根据功能码和数据域内容,处理从设备返回的数据,例如将 0x0123(响应帧中的数据域)转换为十进制数 291。 需要注意的是,具体的实现细节可能因设备和通信协议而异,需要参考相关文档和标准。同时,通信过程中需要注意错误处理和异常情况的处理,以保证通信的可靠性和稳定性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值