完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请教各位,使用libmodbus作为主机读取输入寄存器的值,一段时间后后,读取错误,使用modbus_set_debug(),发现是接收从机的数据丢失一部分,导致crc错误。从机使用的是modbus slave 工具。 |
|
相关推荐
6个回答
|
|
|
|
|
|
嗯,RTU模式,串口没有开DMA,波特率是9600,数据量不大,就是一段时间后就出问题了,在调试信息里面可以看到丢失了从机响应包固定长度的数据,10个字节
|
|
|
|
应该说从调试信息上看,接收的从机数据长度跟主机发送的长度一样,但是接收的数据又是从机数据的中间的固定的一部分
|
|
|
|
波特率还行,应该不至于这么严重。
你说从调试信息上看,是在设备这边把 modbus 接收的所有数据在串口终端里打印输出了? 既然能打印出来,说明数据接收完整了的。然后向解析部分传递的过程丢了? 你最后贴出来代码,一个是你说的“从调试信息上看,接收的从机数据长度跟主机发送的长度一样”这个位置的调试信息执行的位置;一个是 crc 错误的位置。找到这两个位置的代码,就可以定位到原因了。 |
|
|
|
调试信息两边都有,设备端显示数据发送成功,监控设备的发送数据也是ok的,主机这边是丢失数据
|
|
|
|
先缩小范围,哪边收数据错误了从哪边入手,既然有数据收到,虽然不全,发送丢失的可能性极小。这种接收不全的,多半是接收处理不过来丢了部分数据。
首先确定数据长度对不对,是如果长度不对,逐字节比对发送和接收到的数据,找到什么位置丢失的数据。 如果长度相等,比对中间哪些数据不一样了。从不一样的数据里找找有没有规律。 还有一种可能接收能处理过来,所有数据都接收了,但是接收最后一个字节前,因为意外情况,内存被非法修改了,导致校验的时候出错,这也是一种可能。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
622 浏览 0 评论
2576 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2286 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2756 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
29883 浏览 11 评论
72380 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 14:59 , Processed in 1.319209 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号