0%

串口数据转发与监控

这个小软件是在某个项目中作为附属开发的工具,使用python开发。

起因说明

该项目中,单片机与Android屏通信,接口使用RS-232。二者之间的通信协议继承之前的结构,并且增加了许多新的功能。屏与单片机均可以主动发送数据,数据错误的时候还会重新发送。

通过实际的操作发现,有时候在屏上的操作会没有反应,原因是单片机未接收到数据(这种处理方式是协议设计的原因,即屏只是用来显示而不处理数据,操作每个按键都会下发数据,Android不关注具体每个键的作用,等到单片机接收并应答后才会响应),也就是存在数据丢失的情况。具体丢失哪些数据,在操作步骤的哪个节点上丢失无从得知。

工作过程

原理很简单,就是在通信双方的链路中插入计算机,计算机将数据转发的同时,进行数据的显示与记录,这样对于双方的通信的数据就会比较清楚。原理框图如下。

s2wBHU.png

正常工作时,数据通过上面的链路通信,调试时使用下面的链路,也就是数据会经过计算机的转发,与此同时实现数据的显示、存储与分析。

软件实现

主要包括2个库:tkinter用来做界面,serial用来操作串口。效果如下图。

s2wrEF.png

可以对串口进行选择,对串口参数进行配置。

最后两个按键可以实现清屏处理与数据保存,数据保存按照时间命名为txt文件,方便查看与处理。

s2waj0.png

文件中的保存方式就是软件中数据的显示方式,如下。

s2wwuV.png

结尾

这个小软件发挥了很大的作用,除了上面提到的数据丢失问题,还发现了其它一些不容易出现的问题,这样就可以更有针对性的优化软件。

一个需要注意的问题是数据显示。因为有两个串口可能会同时接收到数据,那么显示数据时可能就会有冲突。所以需要一个来保证数据写入的正常,待数据写入完成后,释放锁。

再说一句,这个项目中单片机软件的实现架构不太好,uart数据接收方式也有问题,另外一些操作相当费时。比如键盘上的LCD屏,调试的时候发现,竟然需要100多毫秒。而上面所说的数据重发数据间隔并没有那么长,基本上也就50ms左右。某些情况下,两帧数据会连续发送,其发送间隔很小,如果在处理接收的数据过程中存在比较费时的操作,那么下次的是数据可能就会无法正常接收,也就是会造成数据丢失。究其根本,还是单片机接收Android下发的数据存在比较大的问题,这个项目会在另一篇中详细说明。


更新(2021-5-25 21:20:10)

针对新的测试数据内容,修改了左侧设置选项之布局,并且增加了16进制与字符串显示设置。如下图所示。

2S04EV.png

左侧方框里面选择16进制(Hex)或者字符串(Str)形式,具体格式如右侧所示。中间部分时16进制的方式显示,上下两部分为字符串形式。

上图示例是服务器与主板MCU通信数据,采用mqtt协议,数据采用json格式。该项目有时间再具体讨论。