Modbus协议数据帧RTU形式演示
在上一篇文章中已对Modbus协议原理做了相关介绍,需要的可以去看上一篇哦
这里对Modbus中常用RTU数据帧格式进行相关数据演示。
下图为演示的相关数据,该过程学习自B站UP主需要自行前往观看哈
所需工具,在这里没有用到硬件,而是使用虚拟串口进行主从数据收发调试,用到的工具都在下面哦
链接: https://pan.baidu.com/s/1NL8FNIXPc4vTXDWlw2kQCw?pwd=3u29 提取码: 3u29 复制这段内容后打开百度网盘手机App,操作更方便哦
--来自百度网盘超级会员v5的分享
1、使用虚拟串口创建两个相关串口 这里使用COM1 COM2 可根据自己来选择
2、打开MODSIM32 从设备工具
点击文件---新建
点击连接设置 进行串口的选择,MODSIM32我选择COM2 在另一个串口工具我选择COM1
注意:
这里通过虚拟串口工具创建出来的虚拟串口有时生效了,重新创建一组就好了,我这里就失效 MODSIM32选择COM3 串口助手COM4
下面开始测试第一组数据
01[地址] 01[功能码] 00 00[寄存器地址] 00 08[寄存器数量] 3D CC[CRC]
将00001 和 00007这两个设置为1(双击<0>就可以设置了)
下面通过串口助手发送数据帧,并观察返回的数据
这里可以看到返回数据帧为01 01 01 41 91 B8
数据解析:
第一位01为地址码
第二位01为功能码
第三位01为返回数据值有一个字节
第四位41 为所读寄存器中的值
第五 第六位 是返回数据帧的CRC校验码【01 01 01 41】校验码91 B8
十六进制41 也就是0100 0001 与我们所设置地址中的值换算后一样
下图为返回数据帧的CRC校验 与我们串口所显示的数据一样
从以上数据看出我们所得到的数据帧是正确滴
第二组数据测试
数据解析:
第一位20位地址码
第二位04位功能码
第三位为字节数0C 十进制12 表示返回有12个字节数据(除地址码 功能码和CRC校验码之外)
第4 5 位00 01为地址30001中的值(十进制1)占两个字节
第6 7 位00 00为地址30002中的值(十进制0)占两个字节
第8 9 位00 01为地址30003中的值 (十进制1)占两个字节
第10 11位00 00为地址30004中的值(十进制0)占两个字节
第12 13位00 00为地址30005中的值(十进制0)占两个字节
第14 15位00 01为地址30006中的值(十进制1)占两个字节
第16 17 A1 53为CRC校验码 占两个字节
经验证数据正确,和我们分析的一样,其他几组数据分析方法一样这里就不在演示了 。