控制器(IP盒子类似网关)收不到工位板的状态数据包
问题描述
如下图通信框图所示,控制器工位板程序通过RS422和控制器(类似网关)通信,控制器在将数据转发给Linux应用程序。
一开始设备装好,整个通信是没有任何问题的。
然后在很久之后,负责Linux应用开发的同事就向我们反馈问题说收不到工位板程序发送的状态包。
这就很奇怪了,一开始都是好好的。
+---------------------+ +---------------------+
| | | |
| | 以太网 | |
| +---------------->+ 控制器(IP盒子) |
| Linux应用 | | |
| +<----------------+ |
| | | |
| | | |
+---------------------+ +----+-------^--------+
| | UART
v |
+-+-------+---+
| RS422 |
+--^----+-----+
| |
| | UART
+------------------+----vv+
| |
| |
| 工位板 |
| |
| |
| |
+-------------------------+
定位与排查
首先确定工位板发送的数据是否正确,在物理层面上用逻辑分析仪抓取工位板发出的数据,对比通信协议发现是没有问题的。
通过逻辑分析仪抓取工位板发出的数据和wireshark抓包控制器接收的数据
发现工位控制板发送的数据和控制器接收到的数据不一致
可以看到逻辑分析的校验是正确的,但控制器接收的数据包校验是不正确数据包有几个位置的数据被修改了,重复多次都是如此。
控制器程序修改调试打印确实是底层串口接收到的数据就是错的,那么问题的根源可能就是中间422传输出现问题?
此时可以下结论,是422中间传输过程出了问题,也就是硬件问题导致的了。
最后排查422是哪里出现问题,在硬件同事看了原理图提醒,很可能是终端电阻和上下拉的问题。
去掉了上下拉电阻和终端电阻,通信果然正常了
再将终端电阻焊接回去,再测试通信就有问题,所以最终还是终端电阻问题,因为控制器那边422也加了120Ω终端电阻
两边都有终端电阻,但通信距离又不长,那问题就来了
问了硬件工程师去掉上下拉电阻的原因,大致意思如下:
422芯片驱动能力有限(改变信号线电压),422芯片驱动能力就这么大,加了上下拉之后,要将信号线电压改变所需要的驱动能力要增强,但422没法驱动那就可能导致数据错误