组态王上位机与STM32单片机的通信调试介绍

控制/MCU

1878人已加入

描述

上位机采用的是组态王这款监控软件,单片机采用的是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线是否损坏?  数据传送的过程可以用示波器来检测,便于查看数据传送到哪一步卡住了

在整个调试的过程中,我们得出一个很好的习惯,就是写代码的时候,最好加上一些标志,比如程序运行到哪一步就会打印出哪些提示或者数据,然后制成一个通信协议,方便以后出问题可以对照通信协议来找出问题所在。还有就是懂得利用一些相关的仪器来检测问题。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分