基于.net的串口示波器开发
2016-08-04天津中德应用技术大学300350
王 刚(天津中德应用技术大学,300350)
基于.net的串口示波器开发
王 刚
(天津中德应用技术大学,300350)
摘要:本文用.net中的SerialPort和Chart控件实现了一个简单的串口示波器,它能够把嵌入式系统采集并通过串口发送来的数据,以波形图的形式绘制在窗口界面上并实时更新,实现了一个简单的上位机监控程序。
关键词:串口通信;SerialPort;Chart;示波器
0 引言
在工业控制,智能家居以及物联网应用等领域,使用PC机或移动设备对传感器、单片机采集发送来的数据进行接收、显示、存储甚至统计分析是一种常用的应用形式。
受到成本,体积以及能耗的限制,负责采集发送数据的设备,一般不是传统意义的电脑而是各种类型的嵌入式系统。使用网络、WIFI、蓝牙等形式进行数据传输成本较高,所以大多数情况下,人们会选择串口通信作为嵌入式系统和上位机通信的方式,串口是单片机普遍支持的通信方式,可以直接和PC机的串口或通过转换器和USB口连接(不同设备的串口规格不一样比如RS232,RS422等,需要的USB串口转换器也不同),如果需要无线传输,还可以在收发双方使用无线串口模块,在不改变两端程序的情况下实现无线传输。
本文以最简单的单通道串口示波器为例,其运行效果如下:
图1 上位机执行效果图
1 数据的采集和发送
本文使用Arduino作为嵌入式系统的核心,在Arduino中模拟了一个循环生成的正弦波形状的数据,Arduino以一定的时间间隔通过串口发出一个浮点数,程序代码如下图2:
Arduino可以把数据以二进制(使用Serial.write() 命令)或者字符串(使用Serial.print()命令)的形式发送到串口,如果采集来的数据可以用整型描述就采用二进制形式发送,处理比较简单,如果是浮点数比如温度、电压、气体浓度等,可以以ASCII码的方式发送到串口,默认浮点数小数点后保留两位,上位机确认数据的长度并把字符型转化为浮点型就可以使用了。
2 上位机接收串口数据
Windows系统中实现串口数据收发有三种实现方式:(1)MFC里利用MSCOMM控件(2)利用WINAPI函数(3).NET2.0以后可以使用SerialPort类。
目前第三种是最常用的方式,更为简便,而且利用.net框架中的控件,可以实现更强大的功能。SerialPort类的属性主要包括: 串口名,波特率,数据位,停止位和奇偶校验 。SerialPort类的事件中的DataReceived方法用于异步接收串口数据事件,下图3是串口初始化和数据接收主要代码。
从 SerialPort 对象接收数据时,会在辅助线程上引发DataReceived 事件。由于此事件在辅助线程而非主线程上引发,修改主线程中的元素会引发异常,要将辅助线程中所读到的数据显示到主线程的Form控件上时,只有通过Invoke方法来实现。
3 使用Chart类绘制动态波形图
.net中的Chart控件功能强大,使用灵活,一个Chart可以绘制多个绘图区域(ChartArea),多个ChartArea可以叠加在一起,每个ChartArea又可以绘制多条Series。series是在ChartAarea上的数据描述形式,它可以是线、点、柱或者饼图等。
chart的属性很多,支持从数据库到数组等多种数据来源,作为示波器,我们选择线图的方式。首先在设计视图中打开“工具
图3
图4
箱”,在“数据”类别中选择图表控件(Chart)拖到设计区域。然后在窗口类中创建一个Series对象,并用如下语句在构造函数中初始化series对象:
series.ChartType = SeriesChartType.Spline; // Spline是利用数据生成平滑曲线的属性
series.Name = "电压"; //图例,若在一个界面上绘制多条曲线,可以对其进行标识
this.myChart.Series.Add(series);
最后定义array_show()方法用于把串口传来的浮点数作为数据点绘制到ChartArea中去。
在上面的程序中(如图4),每收到一个浮点数,就添加到图表中,当达到180个的时候,则移除数据点在序列中索引为0的点,也就是第一个点,那么图中将始终只保留最后收到的180个数据点,最后两条语句是在图表中显示数据点的编号。
本文只绘制了一条数据线,如果需要可以绘制多条曲线在一个或多个绘图区域中以描述多种数据,比如使用姿态传感器的开发和测试,每个时刻传感器可以送出9个甚至更多数据,图形化的串口示波器比大段文本数据显示方式要直观高效的多。而对于快速变化或者长时间接收的大量数据,还可以把其存储在Access之类的数据库中,然后利用Chart类读取指定区间的数据,这样就可以对历史数据进行显示、分析了。
作者简介
王刚 男 民族:汉 出生年月:1978.06 籍贯:天津 职称:讲师学历:硕士研究生 研究方向:软件工程与嵌入式开发。
Development of serial port oscilloscope based on.Net
Wang Gang
(Tianjin Sino-German University of Applied Sciences,300350)
Abstract:In this paper, with the. Net framework serialport and chart control realized a simple serial oscilloscope,it can the acquisition embedded system and through the serial port to send data,waveform drawing in the window interface and real-time updates,realize a simple PC monitoring program.
Keywords:serial communication;SerialPort;Chart;oscilloscope