基于RS485 modbus-RTU协议分析

         最近学习modbus-RTU通讯协议。手头刚好有个步科的步进电机驱动器FM-860采用RS-485通讯,modbus-RTU协议

基于RS485 modbus-RTU协议分析_第1张图片


该驱动器有个寄存器是存取电源电压的。通过查找手册得到如下信息

Modbus地址 单位 功能
0x3F00 V 实时母线电压



这边采用半双工 RS485两线模式
基于RS485 modbus-RTU协议分析_第2张图片

电脑连接端采用485转串口,在设备管理器里可以看到设备使用COM2端口。

这里需要读取寄存器参数。使用功能码0x03

基于RS485 modbus-RTU协议分析_第3张图片

设备地址 功能码 modbus地址起始地址高位 modbus地址起始地址低位 读取个数高字节 读取个数低字节 CRC校验(两字节)
0x01 0x03 0x3F 0x00 00 01 0x88 0x1E

CRC校验计算可以通过工具计算得来

基于RS485 modbus-RTU协议分析_第4张图片

因为发送时先发送低位再发送高位,所以0x88 在前0x1E在后

下面就发送给驱动器来获得参数值。

我先开一个串口监视软件来监控串口数据。

基于RS485 modbus-RTU协议分析_第5张图片

点开监控后再打开串口调试工具。设置好参数。发送数据01 03 3F 00 00 01 88 1E

基于RS485 modbus-RTU协议分析_第6张图片

这时驱动器已经返回参数了。再看串口监视器也有数据。两个数据一致。

基于RS485 modbus-RTU协议分析_第7张图片

再来分析得到的数据01 03 02 00 17 F8 4A 

根据modbus响应报文格式 

01设备地址

03查询功能码

02返回byte数据个数

00 17参数数据

F8 4A校验码CRC 

数据0x17转换成十进制为23。所以电压为23V。

我们再通过官方的调试软件看下是否正确。

基于RS485 modbus-RTU协议分析_第8张图片

结果一致。

下面通过逻辑分析仪看看485的时序,是如何传递数据的

下面为截取的时序图,

1.发送

基于RS485 modbus-RTU协议分析_第9张图片

485两线制,差分信号,所以电平是相对称的。

看第一个箭头由高到低表示起始位。

后面红框8个白点表示8位数据,第一个高电平后面都是低电平,值为10000000。由于数据由前向后发送,所以转换成十六进制要倒过来就是0x01。

看第三个箭头处高电平为停止位。

后面数据依次类推: 11000000=0x03    11111100=0x3F   00000000=0x00    00000000=0x00  10000000=0x01 
00010001=0x88      01111000=0x1E      
与我们发送的码是一致的。

2.接收

基于RS485 modbus-RTU协议分析_第10张图片

同理分析可得 01 03 02 00 17 F8 4A。


最后通过LABVIEW写个简单的上位机监控该参数,采用NI的modbus库。

通过调整电源电压值,可以观测到驱动器电压曲线波动

基于RS485 modbus-RTU协议分析_第11张图片


labview中modbus 地址为10进制,所以0x3F00要转换成16128

基于RS485 modbus-RTU协议分析_第12张图片

                       

                             

                             


                          

                       







你可能感兴趣的:(基于RS485 modbus-RTU协议分析)