上位机与单片机的通信问题

你。 提交于 2019-12-29 11:29:43
上位机采用的是组态王这款监控软件,单片机采用的是STM32,系统的总框架分为4层:
       服务器(组态王)——网关2——网关1——节点
通信过程中遇到的问题如下:
1. 将单片机与组态王连接完成后,组态王上没显示
(1)首先检查电路有没有连接正确(已经确定连接无误)
(2)利用串口查看网关1跟网关2打印出来的数据(对照代码中的内容,确定运行到每一步应有什么标志,可以通过打印不同的数据来监测运行到哪一步)
2. 网关2打印的数据总是显示网关2已经给网关1下发查询命令了,但是却没有收到网关1给它回复的数据,而且网关1也没有数据打印
分析可以知道网关2已经给网关1下发查询命令了,但是可能它的命令没有下发成功卡在485那块,导致网关1没有接收到命令所以没有打印数据,或者是网关2已经成功发送出去,只是网关1不接收而已,又或者是网关1已经接收到了但没有解包执行。
出现这种现象,原因有以下几种:
(1)程序跑死了
(2)485有问题 (3)硬件问题
因为这程序在之前一直跑得没问题,所以暂时先排除代码问题,先检查485那块的线路
检查结果:线路没连错,但是485线那块的RX,TX,GND这3根线裸露在空气中,而且有几根是相互接触了,用绝缘胶布包好之后,再一次通讯,这时网关1和2都有数据了,但是组态王还是没有显示
                         (网关2)
 
由我这个网关2打印的数据对照通信协议可知,网关2已经把节点上报的所有数据都上传给组态王了,而且打印出来的数据都是正确的,因为由系统的框架可知,节点的数据是通过485线传给相应的网关1的,网关1再将接收到的数据传给网关2,网关2再将所有的数据打包上报给上位机组态王,每个网关1打印的数据都跟它底下连着的节点状态一样,所以网关1和网关2都没问题。
3. 但是网关2已经把网关1上传的所有节点信息都上报给组态王的,但是组态王依然没有显示。
因为网关2跟组态王连接是通过一根USB转RS232线,会不会是这根线有问题?
换一根,果然,组态王有显示且显示各实验室的状态都正确。
后来由于我们要弄一套试验版,所以我们又得焊一套新的电源管理板子,一个网关2板子,一个网关1板子和五个节点板子。
4. 焊完之后,我们把各自的程序下进去,发现用不了,网关2和网关1都没数据
后来我们采用替换法,用旧的那套网关1和节点板子替换新的,目的是检测是否是新网关2出问题。
5. 替换之后发现网关2还是没有打印出数据,不用说组态王肯定也没有显示
我们先检测硬件问题,发现网关2的器件不小心焊错了,换回来之后,发现还是不行,后来我们自己写个485调试的程序(含有对串口2的调用),发现这个程序跑不了,我们定位是板子的主芯片STM32F103有问题,先排除是不是芯片引脚虚焊,然后发现是这个芯片坏了(不过一般情况下芯片很少会坏的),换个新的芯片后,程序能跑了。而且网关1和2都打印出正确的数据,组态王也显示正确。
噢,还有一个补充的是,之前那套旧的板子,曾出现过这么一个情况:时而有数据打印,时而没有。我们之前还以为是所处的环境干扰太大(有很多大型服务器在周围),其实是串口排针焊接不良导致的。(那时还没发现是USB转232线损坏,所以网关有数据,组态王没显示)
 所以综合目前所出现的所有情况可以得出:上位机与单片机通信的问题大多都是出现在硬件问题上。
一、是否电路都连接正确?
二、是否焊接不良? 这步可以利用万用表来一步步地检测
三、485通信的那三根485线RX,TX,GND是否有接触?
四、与上位机相连的那个USB转232线是否损坏?  数据传送的过程可以用示波器来检测,便于查看数据传送到哪一步卡住了
    在整个调试的过程中,我们得出一个很好的习惯,就是写代码的时候,最好加上一些标志,比如程序运行到哪一步就会打印出哪些提示或者数据,然后制成一个通信协议,方便以后出问题可以对照通信协议来找出问题所在。还有就是懂得利用一些相关的仪器来检测问题。
---------------------
作者:思念中华
来源:CSDN
原文:https://blog.csdn.net/qq_38021919/article/details/79050085
版权声明:本文为博主原创文章,转载请附上博文链接!
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!