串口温度数据采集并实时显示(2)

2019-03-04 14:43

{ }

//对串口数据的处理,包括接收,保存等 void CCommDlg::OnComm() { }

//开串口程序

void CCommDlg::OnButton1() { }

//清除编辑框内容程序

void CCommDlg::OnButton2() { }

//选择那一个串口程序

void CCommDlg::OnComselect() { }

//选择波特率

void CCommDlg::OnComspeed() { }

//停止/继续程序

void CCommDlg::OnStoprecv() { }

//对数据显示前的处理:将新数年据加到左边,原来的右移一位 void CCommDlg::Display() { }

//以下四个函数是查看原来数据的程序 //按钮《 程序

void CCommDlg::OnButton4() { }

//按钮 》程序

void CCommDlg::OnButton5() { }

//按钮 < 程序

void CCommDlg::OnButton6() { }

//按钮 > 程序

void CCommDlg::OnButton7() { }

//此函数用来查看最后一屏数据 void CCommDlg::OnButton8() { }

对于其它的文件中的程序我没有手动修改,均为MFC自动生成,我在这就不作详细介绍了.

共有4个程序文件,5个头文件 comm.cpp commDlg.cpp mscomm.cpp StdAfx.cpp

comm.h commDlg.h mscomm.h Resource.h StdAfs.h

┏━━━━━━━━━━━━━━━━━━━━━┓ ┃ 源 码 爱 好 者 ┃ ┣━━━━━━━━━━━━━━━━━━━━━┫ ┃ ┃ ┃ 提供源码发布与下载 ┃ ┃ ┃ ┃ http://www.codefans.net ┃ ┃ ┃ ┃ 互助、分享、提高 ┃

┗━━━━━━━━━━━━━━━━━━━━━┛ 田远驰 t.yc@163.com

四、数据采集实时显示程序设计

1、串口控件使用说明

本程序使用VC6.0的通用串口控件MSCOMM32.OCX来对发送到串口的数据进行采集处理。主要使用方法

串口设置:m_Comm.SetSettings(“波特率,校验方式,数据位数,停止位数”) 取串口数据:m_Comm.GetInput()

你只首先要确定一个mscomm32.ocx控件在system目录下并且该控件已经被windows注册,本程序才能正常运行。

2、串口数据的获取

if(m_Comm.GetCommEvent()==2)//判断接收缓冲区内有无数据 {

m_input1=m_Comm.GetInput();//读取缓冲区内的数据 ???? }

m_input2.GetOneDimSize();//确定数据长度

m_input2.GetElement(&i,data+i);//将数据转换为BYTE型数组

由于直接获取的数据为VARIANT型数据,我们再通过数据类型转换来变为我们所要的数据类型INT和CString型。

3、整数位与小数位的处理

为了提高精度,对数据采用两位整数,一位小数年的方式,在发送数据时,最前一个字节为FF起始位,接着的一个字节为整数部分,再接着发一个字节的数据为小数部分。取数算法如下: BYTE a=* (char *)(data+i) BYTE b=* (char *)(data+(++i)) float c=(float)a+(float)(b)/10

4、画图原理

我画图使用的是画直线的方式(LineTo()),先定义一个全局变量用来保存采集的数据值,在画图函数OnPaint()中用这个全局变量来作为纵坐标,等分的120个点作为横坐标,那么就有120个点,最后用直线将这120个点连接起来就组成了一个完整的曲线图。只要当全局变量中的数值发生变化后就使用函数this->Invalidate()强制重载OnPaint()函数,那么数据图就可以动起来了。OnPaint()画图函数如下: void CCommDlg::Display()

{

if (NextTime <= 600 && stop==FALSE) { LineHight[NextTime/5] = LineHight[121]; //中保存的是最新采集的一个数据 } else { for (int i=0;i<120;i++) { LineHight[i] = LineHight[i+1]; } LineHight[120]=LineHight[121]; }

NextTime = NextTime+5; this->Invalidate(); return; }

5、查看以前的数据

查看以前的数据的方法是,将数据从文件中取出并将每一个数据都付给那一个全局变量,最后同样用this->Invalidate()就能显示以前的数据了。具体算法见commDlg.cpp文件中的OnButton4()和OnButton5()函数。按秒移动查看以前数据算法见OnButton6()和OnButton7()。 void CCommDlg::OnButton7() {

if (stop==FALSE) { gogo=NextTime; DTemp=m_ReceiveData; for (int i =0;i<120;i++) LHTemp[i]=LineHight[i]; }

stop=TRUE;//关闭接收数据,使显示区和数据区用来为显示原来数据用 if (NextTime==0) NextTime=595; NextTime=NextTime-595;

SetDlgItemText(IDC_STOPRECV,\继续显示\ //先取出文件中的数据,放入一个数组中 CStdioFile file;

if(file.Open(FilePath,CFile::modeRead)) { CString str; CString instr; CString outstr;

CString sss; int i; while(file.ReadString(str))//逐行查询,至到文件尾 { instr+=str; } if (instr.GetLength()>=600 && NextTime>instr.GetLength()-600) NextTime=instr.GetLength()-600; for (i=0;i<120;i++)//取出起点后的120个数据 { sss=instr[NextTime]; sss+=instr[NextTime+1]; outstr+=sss+instr[NextTime+2]+instr[NextTime+3]+\ LineHight[i]=atoi(sss); NextTime=NextTime+5; } m_ReceiveData=outstr; UpdateData(FALSE);//更新编辑框内容 this->Invalidate();//更新图相 } }

在移动数据以前要对当前显示的数据进行保存: gogo=NextTime;

DTemp=m_ReceiveData;

for (int i =0;i<120;i++) LHTemp[i]=LineHight[i]; 以便在继续接收时能接着原来的。

6、数据保存方式

对采集的数据采用文本方式保存于一文件中,保存格式为,第120数据保存一次,数据采用推算法来确定时间。如:08.9 33.5 08.8 65.4 09.8 09.3?? 程序算法为:

if (file.Open(FilePath,CFile::modeCreate|CFile::modeReadWrite)) {

file.Write(m_ReceiveData,600);//写入120个数据 file.Close(); }

完整算法见:OnComm()

7、通用性

为了提高程序的通用性,串口的波特率,串口号都采用下拉选择的方式,在使用中可跟据情况选择。

┏━━━━━━━━━━━━━━━━━━━━━┓

┃ 源 码 爱 好 者 ┃ ┣━━━━━━━━━━━━━━━━━━━━━┫ ┃ ┃ ┃ 提供源码发布与下载 ┃ ┃ ┃ ┃ http://www.codefans.net ┃ ┃ ┃ ┃ 互助、分享、提高 ┃ ┗━━━━━━━━━━━━━━━━━━━━━┛

田远驰 t.yc@163.com

五、说明:

你只需要确定一个mscomm32.ocx控件在system目录下并且该控件已经被windows注册。

方法:将mscomm32.ocx copy到C:\\winnt\\system32目录下 运行:regsvr32 mscomm32.ocx

┏━━━━━━━━━━━━━━━━━━━━━┓ ┃ 源 码 爱 好 者 ┃ ┣━━━━━━━━━━━━━━━━━━━━━┫ ┃ ┃ ┃ 提供源码发布与下载 ┃ ┃ ┃ ┃ http://www.codefans.net ┃ ┃ ┃ ┃ 互助、分享、提高 ┃ ┗━━━━━━━━━━━━━━━━━━━━━┛


串口温度数据采集并实时显示(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:大型综合体商业购物中心物业管理公司投标书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: