使用SerialPort及ZedGraph快速实现串口数据实时显示.doc

上传人:scccc 文档编号:12945622 上传时间:2021-12-08 格式:DOC 页数:5 大小:84KB
返回 下载 相关 举报
使用SerialPort及ZedGraph快速实现串口数据实时显示.doc_第1页
第1页 / 共5页
使用SerialPort及ZedGraph快速实现串口数据实时显示.doc_第2页
第2页 / 共5页
使用SerialPort及ZedGraph快速实现串口数据实时显示.doc_第3页
第3页 / 共5页
使用SerialPort及ZedGraph快速实现串口数据实时显示.doc_第4页
第4页 / 共5页
使用SerialPort及ZedGraph快速实现串口数据实时显示.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《使用SerialPort及ZedGraph快速实现串口数据实时显示.doc》由会员分享,可在线阅读,更多相关《使用SerialPort及ZedGraph快速实现串口数据实时显示.doc(5页珍藏版)》请在三一文库上搜索。

1、浙江大学生仪学院陈玮使用SerialPort及ZedGraph快速实现串口数据实时显示0引子在采样速率要求不高的情况下(粗略计算,以串口最大115200的传输速率,也即14Kbyte/s计,则采样频率应该小于 7K,加上其他额外的开销,在16位单片机上,采样速率应该小于5K左右),使用串口进行实时数据采集的方案是比较简单易行的。因为,各类编程语言或开发环境都有对串口编程的支持。在windows平台上,早期的 Visual Studio 6环境下,即可以使用 Win32 API实现串口编程,也可以使用微软提供的MSComm控件来实现,到了2005年微软推出.NET 2.0后,直接加入了一非常好用

2、的串口控件一一SerialPort,在System.lO.Ports 名字空间下。另外一个问题便是数据采集后的绘图显示,无论是基于MFC的GDI或是基于.NET的GDI+,虽然都可以方便的实现绘图功能,但程序设计量大(如坐标,刻度,多条曲线,多个 窗口,屏幕推移等功能),还要处理一些如双缓冲的技术(在.NET的非精简版本中,绘图API中已经自动包含了双缓冲功能),多数第三方控件厂商都推出了五花八门,各具特色的绘图 控件,使用起来非常方便,但却要花费一定的成本,对于学生或小的实验项目而言,只好望 而却步。而开源绘图控件 一一ZedGraph即可让开发者深入的学习各类GDI+编程技巧,又提供了可与

3、大多数高价的第三方控件相媲美的强大功能。1 SerialPort 简介SerialPort类用于控制串行端口文件资源。SerialPort类提供同步I/O和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问。另外,SerialPort类的功能可以包装在内部 Stream对象中,可通过 BaseStream属性访问,并且可以传递给包装或使用流的 类。下面列举其一些常用的属性、方法及事件:1. 属性BaudRate 串口数据传输波特率设置 DataBits 每个字节的标准数据位长度2. 方法GetPortNames()获取当前计算机的串行端口名称数组Open()打开一个新的串行端

4、口连接3. 事件DataReceived表示将处理 SerialPort对象的数据接收事件的方法2 ZedGraph 简介ZedGraph是一个非常优秀的开源的作图控件来源:http:/sourceforge .n et/project/showfiles.php?group_id=114675例子资源:http:/zedgraph.0rg/wiki/i ndex.php?title=Sample_Graphs3系统实现3.1系统框图I a卡 r91 ;串口采集动态显Z5 ZedGraphGDHSystem. 10上ET譽Windows操作系统单片机数据采集设备3.2关键代码1初始化ZedGr

5、aph控件void zedGraph In it()GraphPa ne myPa ne = dataChart.GraphPa ne;/设置坐标名称myPane.Title.Text ="串口测试数据"myPa ne.XAxis.Title.Text =点数"myPane.YAxis.Title.Text =原始采样值"/将曲线加入绘图框中listl = new Poi ntPairList();myPane.AddCurve("Data", Iist1, Color.Red, SymbolType.None);/更新绘图区域dat

6、aChart.AxisCha nge();2. 查看系统中存在的串口/获取系统中存在的串口列表stri ng portsArray = SerialPort.GetPortNames();/按名称排序(COM11或排在COM2的前面,对串口数目超过 10的系统,需要改进)Array.Sort<stri ng>(portsArray);/将串口列表添加到下拉框中foreach (stri ng port in portsArray)comboBoxPortName .I tems.Add(port);3. 打开串口操作前需要进行一些必要的判断,如串口是否存在,或是否已经被打开comP

7、ort.Ope n();4. 开始监听串口/清除缓存comPort.Discardl nBuffer();开启串口数据监听,由comPort_DataReceived处理数据comPort.DataReceived += new SerialDataReceivedEve ntHa ndler(comPort_DataReceived);5. 数据解析/将2个字节做为一个点byte poin tBytes = on ePo in t.ToArray();16进制转换成short数据类型(16位)point = BitConverter.ToUInt16(pointBytes, 0);/触发单点

8、收到数据事件poin tCo min g(this, new Even tArgs();6. 绘图/移动坐标轴if (dataCo unt > ran ge)dataChart.GraphPa ne.XAxis.Scale. Min = dataCo unt - ran ge;dataChart.GraphPa ne.XAxis.Scale.Max = dataCou nt + 25;/将单片加入曲线点列表list1.Add(dataCount, point);/更新坐标轴,重新绘制图形区域dataChart.AxisCha nge();dataChart.I nvalidate();7

9、. 保存数据使用TextWriter类,可以方便的进行TXT文件的读写。/首先声明TextWriter对象TextWriter dataWriter;/用当前的时间做为文件名string newFileName = "datas" + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + ".txt" /初始化TextWriter对象dataWriter = File.CreateText( newFileName);/将一点写入TXT文件中dataWriter.WriteL in e(po in t);51/14

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1