C# 上位机串口调试工具实时显示

        大家好~我又来啦~最近没有继续更新leetcode上的题目啊,深感愧疚,最近在忙着做一个上位机PC软件,功能是能够正常接收串口传输来的数据并解析这些数据中对我们有用的数据,另外,为了更加直观的观察这些数据代表的意义,我们还有一个目的就是讲这些数据实时地绘画出来,也就是动态显示。

        忙活了不到一个月,终于把这个给搞定了,心情无比的开心,因为这个我自己一个人完成的,当然也要感谢帮助我的老师和网上的资源,我也要将我的心得写出来希望能够帮助其他人,哈哈,努力追上大神们的脚步。今天我就花两个小时来写下我的心得,有不对的地方还请大家指教哈!

        首先声明一下,我在做这个之前是对C#完全不懂的,我甚至对C++都不懂,只是刚刚开始接触C++,我只是一个只会一点儿C的人,但是我一点点的跟着别人学习也弄懂了一些关于C++的知识。体会最深的就是对面向过程和面向对象的区别,之前我在网上查了很多资料讲这个的,但是都给我看的云里雾里的,完全不知所云,通过这个小项目我来讲讲我的认识吧。C中面向过程的意思就是要实现一个最终目的要分成很好顺序的步骤,第一步干嘛第二步干嘛,都是顺序执行的,中间该调用函数就调用函数,但是这并不影响面向过程的本质,但是C++中的面向对象的意思是它把很多步骤集合成一个整体(也就是所谓的对象),然后这些步骤的完成就是对这个整体的操作。打个比方吧,我要实现一个最终目的的步骤中需要一个人的一些行为,需要他跳100米,跑100米,走100米,如果C来实现的话就是顺序执行这些动作,然后每个动作都写一个函数,顺序调用就可以了,这就是所谓的面向过程的含义,但是C++不会这样,它会将这个人“封装”起来,然后将着三个动作(或者更多)添加到“人”(也就是“类”的含义)这个整体中,当我需要这个人跳的时候,就相当于直接对这个整体(也就是这个人)进行操作,是不是简单了许多呢。做完这个小项目之后,我忽然发现C++真的是很有用的一门语言,我喜欢哈哈。

        这个小项目我把它划分为了三个主要部分,1、实现实时串口通信;2、实现绘图过程并实时显示;3、保存解析的有用数据到指定的TXT文件(这个部分特别的简单,摆渡一下就知道只需要添加几行代码就可以啦!)这里面比较难的就是绘图了,这里我用的是GDI+直接用笔绘图,没有使用专门绘图的控件,只是在界面上加了一个可以画图的面板Panel。下面我将分为三个部分来讲。

        一、实现实时串口通信

        其实我在这里还花了挺长时间的,因为一些细节问题(还是因为自己太懒啦哈哈)得不到解决就拖了很久才解决。其实说实话我从一开始做这个的时候我都无从下手,首先就是用什么平台的问题,我们之前已经用Matlab做过串口通信,只是用Matlab比较麻烦而且不能封装不能直接使用,所以想要做一个上位机软件。C#,VC,Labview,Delphi,Java,QT等等都是一些方法,但是我最选择了比较简单的C#,并不接近底层且封装性较好的一种方法。哦对,比较常见的就是VC的MFC,但是这个已经很老了。。。平台使用的是VS2015,使用的是C#控制台程序。从刚开始的一无所知都不知道怎么建立显示界面等等到做成需要的是合理利用网上资源并自己去悟,在文章的最后我会贴出对我有帮助的网址,有需要的可以去看。这里我想谈几点我在这个过程中遇到的问题。

(1)最主要的问题还是在于接收串口数据和解析串口数据上吧。这是一个非常重要的问题,因为如果你的解析过程非常的复杂,又与接收串口数据在同一个线程上那就很麻烦了,因为在接收的过程中是有一定的触发事件的条件的,如果在处理数据的过程中用掉了很多的时间,串口数据又不能及时的接收,程序就会出现问题,所以应该设立一个公用缓冲区,将接收到的串口数据放到公共缓冲区,然后另外开启一个线程去处理数据,这样两个过程就互不耽误了。开启新的线程需要使用新的命名空间using System.Threading,其他的具体细节就不说啦!

(2)我在调试程序的时候发现一个问题,就是SerialPort类中有一个属性是Receive

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值