基于C++Builder的串口数据实时曲线绘制的实现(共4页)

上传人:n85ho7****4h85bh 文档编号:47181847 上传时间:2021-12-17 格式:DOC 页数:4 大小:94KB
收藏 版权申诉 举报 下载
基于C++Builder的串口数据实时曲线绘制的实现(共4页)_第1页
第1页 / 共4页
基于C++Builder的串口数据实时曲线绘制的实现(共4页)_第2页
第2页 / 共4页
基于C++Builder的串口数据实时曲线绘制的实现(共4页)_第3页
第3页 / 共4页
资源描述:

《基于C++Builder的串口数据实时曲线绘制的实现(共4页)》由会员分享,可在线阅读,更多相关《基于C++Builder的串口数据实时曲线绘制的实现(共4页)(4页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上基于C+Builder的串口数据实时曲线绘制的实现范寒柏, 赵建锐, 谢汉华 时间:2011年10月27日 来源:微型机与应用2011年第14期关键词:摘 要:介绍了在 6.0软件开发环境下设计温盐深实时数据采集与处理系统的方法,其中PC机与数据接收装置之间的采用MSComm串行通信控件来实现,并给出了相应的程序代码,利用模拟数据源模拟现场采集数据,将实地测量得到的温度和电导率值依次通过串口传输到本软件中,结果证实系统运行稳定,该后台软件以绘制的方式形象、直观地显示了采集的温盐深数据,并能把盐度、密度、声速的曲线绘制出来,运行良好。关键词:C+ Builder; 实时

2、曲线; ; 串行通信 在海洋投弃式温盐深剖面测量中,需要进行大量的实时数据采集和可视化显示,经过软件处理后形成的曲线比原始数据更能给人直观的印象。C+ Builder是一种面向对象的可视化应用程序开发工具,为程序开发人员提供了十分轻松而快捷的开发环境。它以其友好的界面设计和方便的编程实现,广泛应用于工程实践中。本系统在C+ Builder环境下针对抛弃式温盐深剖面测量系统进行软件设计。其中利用C+ Builder进行数据的串行传输的方法,只要根据实际情况对代码稍做修改,即可应用到其他的以串口测量的系统,具有一定的通用性。1 系统概述该软件在Windows操作系统下以C+ Builder为开发平

3、台,应用于海洋投弃式温盐深剖面测量系统中的实时数据采集与处理。如图1所示,其主要包含与下位机通信、实时数据处理、实时曲线显示和数据导出,浏览等部分。软件以RS 232方式与下位机进行通信。对接收的数据进行处理和温度盐度曲线绘制后可在每次测量结束后自动将所有数据存储到Realtime Data文件夹和Backup文件夹中。操作人员可以对历史数据进行查询,并根据需要打印。2 串口通信2.1 MSComm控件MSComm(Microsoft Communications Contro1)控件是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行

4、接口收发数据的简便方法。它的安装也十分简单,只需把VB安装目录下Mscomm.reg、Mscomm32.ocx、Mscomm32.dep这三个文件拷贝到Windows的system32目录下。然后用Windows下的注册工具regsvr32注册该OCX控件,剩下的工作是在C+ Builder中导入这个ActiveX控件,进入C+ Builder环境在Component菜单下选Import ActiveX Control,这时在列表中可以看到Microsoft Comm Control 6.0选项, 选中这个选项点击Install按钮,完成安装。在ActiveX控件页面上可以看到一个为电话图标的

5、控件,这就是MSComm控件。MSComm控件有很多属性,如CommPort属性用来设置或返回通信端口号,可以设置为116之间的任何值,本系统采用缺省值2;Settings属性以字符串形式设置或返回波特率、奇偶校验、数据位和停止位,本系统采用缺省值“9 600,n,8,1”;PortOpen属性用来设置或返回通信端口的状态以及打开和关闭端口;InBufferSize和OutBufferSize属性分别设置接收和发送缓冲区分配的内存数量,单位为字节。 MSComm控件提供了两种处理通信问题的方法:(1)事件驱动方式,当串口上发生某一事件时,MSComm控件将解发OnComm事件,还可以检测并处理

6、通信错误信息,从而采取相应的操作。(2)查询方式,在程序的每个串行口操作后,将不断检查CommEvent属性的值以查询事件和错误。本后台软件采取事件驱动方式,事件驱动方式相当于一般程序设计中的中断方式。2.2 串口实现在添加了MSComm控件后,采集工作之前还要对串口进行必要的初始化工作。实质上就是要在PC机与数据接收装置之间建立起一个共同遵守的协议,以使两者在接收或发送数据上保持协调一致。串口初始化部分代码如下: if(MSComm1->PortOpen=true)MSComm1->PortOpen= false; MSComm1->CommPort=StrToInt(co

7、mno.Trim().SubString (comno.Length(),1); /点击开始后才开启Timer1 MSComm1->RThreshold=60; /接收缓冲区每有1个字符时, 就会触发一次OnComm事件 MSComm1->InputMode=1; /设置传入数据的格式,0表示文本形式 MSComm1->InBufferCount=0; /清除接收缓冲区 MSComm1->InBufferSize=32000; /设置MSComm1接收缓冲区为32 000 B MSComm1->PortOpen=true 把MSComm控件加入到窗体后,在主窗口系

8、统设置菜单里加入串口设置菜单,在窗体中再加入Memo控件,Memo控件用来显示接收到的数据,在主程序加入代码:void _fastcall TFormMain:N1Click(TObject *Sender) MSCcomm= new TFormScom(this); MSCcomm ->ShowModal(); MSCcomm ->Free(); 为了方便串口通信参数的选择,设置几个Combo Box控件,将常用串口参数值默认显示在控件中。串口参数默认值设置的具体代码如下: ComboBoxPort->Text=ReadConfig(iniComFileName,"

9、;scom","port","Com1"); ComboBoxBaud->Text=ReadConfig(iniComFileName,"scom","baud","9600"); ComboBoxDataBits->Text=ReadConfig(iniComFileName,"scom","databits","8"); ComboBoxParity->Text=ReadConfig(iniComFile

10、Name,"scom","parity","1"); ComboBoxStopBit->Text=ReadConfig(iniComFileName,"scom","stopbit","None"); 在使用MSComm控件开发抛弃式温盐深剖面测量数据采集系统时,采用事件驱动法处理通信问题,实现数据实时采集,即每当缓冲区有规定个数以上的新字符到达时或通信状态发生变化时,MSComm控件触发该事件并获取缓冲区的数据。主要是考虑MSComm控件在接收到数据事件发生时能及时响

11、应并获取缓冲区中的数据,不需要一直让程序处于检测的状态下,而且可靠性高。图2为串口窗口。3 实时温盐曲线的绘制3.1实时温盐曲线的绘制C+ Builder自带的画图控件Tchart,它的功能十分强大,曲线的绘制也十分简单,它可以实现曲线的局部放大和缩小,不需要加入额外代码,大大加快了软件的开发时间。在实时数据处理过程中只需添加如下代码即可。 Form1->Series1->AddXY(b0.ToDouble() ,FmatDepth0.ToDouble(),b0,clBlue); /在Tchart中添加一条蓝色的曲线,表示温度 Form1->Series2->AddXY

12、(a0.ToDouble() ,FmatDepth0.ToDouble() ,a0,clRed); /在Tchart中添加一条红色的曲线,表示电导率 Form1->Series1->YValues->Order=loAscending; Form1->Series1->XValues->Order=loNone; Form1->Series2->YValues->Order=loAscending; Form1->Series2->XValues->Order=loNone 后面这几条的表示使曲线在Y轴上的值递增。如图3所

13、示。3.2 历史曲线的绘制历史数据的显示同样使用Tchart控件,与实时数据曲线绘制不同的是,历史数据是从数据的存储文件中读取数据放入一自定义的数据结构中,利用该数据结构将数据添加到Tchart中,其温盐的效果与图3相同,另外还可以查看、盐度、密度、声速的曲线,还可以进行数据处理,如平滑、除噪等。代码实现片断如下: OpenDialog1->InitialDir=ExtractFilePath(Application->ExeName); OpenDialog1->Filter="数据文件|*.dtf" for(int i=0;i<文件中数据个数;i+) if(ChartSort="wtcon") / 温度,电导 GoChart(depthvalue,wtvalue,condvalue); else if(ChartSort="sl") /盐度 SlChart(); else if(ChartSort="den") /密度 DenChart(); else if(ChartSort="vel") /声速 VelChart()专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!