问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

停止位异常导致MODBUS通讯异常的分析

创作时间:
作者:
@小白创作中心

停止位异常导致MODBUS通讯异常的分析

引用
CSDN
1.
https://blog.csdn.net/weixin_48258579/article/details/136401102

本文详细分析了一个关于MODBUS通讯异常的具体案例,通过对比PC模拟通讯和实际设备通讯的差异,最终发现停止位设置异常是导致通讯失败的根本原因。这个案例对于从事相关技术工作的读者具有较高的参考价值。

1、问题概述

收到售后反馈,外挂式WIFI模组(下称主机)通过MODBUS无法与主板(下称从机)通讯。

2、分析

由于之前测试过主机的通讯,所以第一次收到反馈时,我十分惊讶。因此首先搭台测试。测试结果果真不能通讯。

用PC监控串口,发现主机能够正常发送数据,就是从机无回送。 因此,分别用PC模拟上位机、下位机进行通讯,但发现都能正常通讯。

想到之前是测试过没问题的,因此用测试过的设备再次测试,发现能够正常通讯。因此我怀疑是电平匹配问题导致从机无法识别串口信号。因此大喊硬件工程师帮忙看看是否有问题。(这里为什么这样怀疑,其实是我印象中有听说过这么一回事,因为电平不匹配导致无法识别信号)

硬件工程师一番折腾,也没发现什么问题。我和硬件工程师热烈地讨论,惊动了我们组长。他提供了一个很好的思路,怀疑主机的停止位实际没有设置成功,即显示为2,但实际为1。

因此我开始抓串口的波形,分析停止位是否正确设置。波形的详细分析参考。

因为是通过串口发送数据,数据格式是:起始位+数据位+停止位。所以是先发送一个起始位,在波形上是一个低电平。然后才是发送1个字节的数据,最后还有一个停止位,在波形上是一个高电平。一共需要10个bit。还有一个特别需要注意的点,所要发送出去的1个字节的数据位是先发低位,再发高位。

参考文章:https://blog.51cto.com/u_16213705/7315764

一开始抓到波形确实是2位停止位,这让我陷入了困难,停止位确实是2啊,为什么不能通讯呢?

通过比对PC作为主机正常通讯时的帧,我怀疑是不是帧头待机电平的事,咨询硬件工程师得到否定的答案。

最后仔细观察,发现停止位的长度有点不对劲,通过测量,发现2位停止位长度只有160us左右,见图1。而9600波特率情况下,1bit数据的时间长度应该为1s/9600=104.16us,2bits的长度应该为200us左右,见图2。


图1


图2

随后,将主机、从机均改成停止位1,通讯正常。可知是2个停止位时,长度有问题。

3、疑问点

用PC模拟上位机或下位机时,发现偶尔会出现无论PC的停止位设置1位还是2位,都能够正常通讯。请教前辈,前辈给出的说法是PC的时序卡的没那么严,所以会出现这种现象。如果网友有更详细的解释或者更好的说法,欢迎留下你的想法。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号