首页 > 编程知识 正文

rs485接口通讯协议(RS485 Modbus协议解析)

时间:2023-05-04 06:05:37 阅读:122731 作者:3121

工作中,采集采用RS485主从半双工通信的传感器时,接触Modbus协议。 有时候我们手上没有实物,只能用协议手册编写代码后,自己用RS485发送模拟验证。 对快速组装数值并发送验证,分析数值的方法进行说明。

标准的Modbus协议结构如下:

主机发送读取寄存器协议数据结构形式如下。

设备地址1字节

读寄存器指令1字节

寄存器地址2字节

读寄存器数2字节

CRC检查(低位字节为高位,高位字节为低位) 2字节

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

分析:

01表示设备地址

03表示读寄存器指令

012表示寄存器的起始地址

002表示读取2个寄存器

60e表示CRC校验码

从站返回寄存器的数据结构形式如下。

设备地址1字节

读寄存器指令1字节

读字节数n字节

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

CRC检查(低字节在前,高字节在后) ) )。

例)将传感器送回主机(01 03 04 41 E6 28 F691 BE

分析:

01表示设备地址

03表示读寄存器指令

04表示有四个十六进制数据

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

91 BE表示CRC校验码

1 .如果厂家在传感器的数据存储上采用标准的单精度浮点数方式,那么将采集到的一系列十六进制数据转换为浮点数比较麻烦,首先可以考虑用科学的计数方法存储计算。

方式1 :分析上述返回值41 E6 28 F6

计算41 E6 28 F6 (基于科学计数法的记忆计算() ) ) ) ) ) ) )。

转换为二进制: 0100001110011000010010100000100001000011110110

红’0’:表示已编码比特,1是负,0是正

10000011:表示指数位,如果变换为十进制数,则2^0 2^1 2^7=131 131-127=4表示指数位为4

(1.110011000100100001110110 )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 a-4,并且可以使用以下工具进行低两位crc检查,获得:

可见,构建的完整mobdus协议数据为01 03 04 41 45 70 A4 DB A1

2 .制造商以十六进制整数方式处理传感器的数据处理时,如下图所示。

这种形式的十六进制传感器数据可以使用电脑的计算机迅速计算。

例如计算00 9B

十六进制模拟为负值,可以使用计算机

对于模拟-50,计算机输入以下0-50

单击计算器上的xor

十六进制FF CE表示负数-50

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。