当前位置:首页 >> 信息与通信 >>

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


[请 输 入 学 校 名 称
[请 输 入 专 业] 论文 请

串口温度数据采集并实时显示 (上位机部分)

姓 学

名: [请输入作者] 号: [请 输 入 学 号]

指导教师: [请输入指导教师]

2012 年 4 月 9 日

一、原理
读串口数据的原理是,只要当有数据向串口发数据来时 计算机就 读串口数据的原理是 只要当有数据向串口发数据来时,计算机就 只要当有数据向串口发数据来时 会自动将其数据写到一个特定的缓冲区,我们只要写程序去读那个特 会自动将其数据写到一个特定的缓冲区 我们只要写程序去读那个特 定的缓冲区就可以了. 定的缓冲区就可以了

有数据向串口发过来时,程序可以将数据接收到 接收的数据是字 有数据向串口发过来时 程序可以将数据接收到,接收的数据是字 程序可以将数据接收到 符型的,那么将数据转化为数字型的 再将这个数据的大小作为画图的 符型的 那么将数据转化为数字型的,再将这个数据的大小作为画图的 那么将数据转化为数字型的 某一个点的纵坐标,横坐标为数据的序号 将这些点用线连起来就是一 某一个点的纵坐标 横坐标为数据的序号.将这些点用线连起来就是一 横坐标为数据的序号 个曲线图了,这个就是图形显示基本原理 个曲线图了 这个就是图形显示基本原理. 这个就是图形显示基本原理

查看原来的数据的原理也是这样的,不同的地方就是 数据是从文 查看原来的数据的原理也是这样的 不同的地方就是,数据是从文 不同的地方就是 件中来,同样的也是将多个数据分成一个一个的,然后这一个数据的大 件中来 同样的也是将多个数据分成一个一个的 然后这一个数据的大 同样的也是将多个数据分成一个一个的 小就是画图的某一个点的纵坐标,横坐标同样为数据的序号 再将这些 小就是画图的某一个点的纵坐标 横坐标同样为数据的序号,再将这些 横坐标同样为数据的序号 点用线连起来就是曲线图. 点用线连起来就是曲线图

图形能移动的原理,是我们首先改变的只是数据 图形并没有变 图形能移动的原理 是我们首先改变的只是数据,图形并没有变 是我们首先改变的只是数据 图形并没有变, 但图形的形式是由这些数据来确定的,当数据发生变化后 我们通过刷 但图形的形式是由这些数据来确定的 当数据发生变化后,我们通过刷 当数据发生变化后 新显示区来变化的. 新显示区来变化的

二、程序流程

发送到串口来的数

选择接收数据的方

查看以前的数据

接收数据

打开以前的数据文件

显 示

保 存 数

按 《 方 式 查

按 》 方 式 查

按 < 方 式 查

按 > 方 式 查

发送到串口来的数

OnComselect(),OnComspe

查看以前的数据

OnComm()

打开以前的数据文件

Display() OnPaint()

OnComm () OnButton4(

OnButton5(

OnButton7

OnButton6(

三、串口程序设计
///////////////文件 commDlg.cpp//////////////// 文件 //一个类 对话框类 本程序使用的是对话框形式 这个类是在 VC 用 MFC 自动生 一个类,对话框类 本程序使用的是对话框形式,这个类是在 一个类 对话框类,本程序使用的是对话框形式 成的,其中包括了对话框程序应有的一些方法 成的 其中包括了对话框程序应有的一些方法 class CAboutDlg : public CDialog { }; /********************以下的个方法也是 VC 的 MFC 的对话框程序固有的 也 以下的个方法也是 的对话框程序固有的,也 自动生成的**************/ 是 MFC 自动生成的 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { }

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() CCommDlg::CCommDlg(CWnd* CDialog(CCommDlg::IDD, pParent) { } pParent /*=NULL*/):

void CCommDlg::DoDataExchange(CDataExchange* pDX) { } //下面这个包括的是界面中的组件 下面这个包括的是界面中的组件 BEGIN_MESSAGE_MAP(CCommDlg, CDialog) END_MESSAGE_MAP() // CCommDlg message handlers BOOL CCommDlg::OnInitDialog() { } void CCommDlg::OnSysCommand(UINT nID, LPARAM lParam) { } // The system calls this to obtain the cursor to display while the user drags the minimized window. HCURSOR CCommDlg::OnQueryDragIcon() { } BEGIN_EVENTSINK_MAP(CCommDlg, CDialog) END_EVENTSINK_MAP() /********************以上的个方法也是 VC 的 MFC 的对话框程序固有的 也 以上的个方法也是 的对话框程序固有的,也 自动生成的**************/ 是 MFC 自动生成的 /******************** 我 在 做 这 个 程 序 时 以 上 的 程 序 并 没 有 手 动 修 改 *******************************/

// 画图函数 // 算法 运用 LineTo 函数把 120 个点连成折线 算法:运用 void CCommDlg::OnPaint()

{ } //对串口数据的处理 包括接收 保存等 对串口数据的处理,包括接收 对串口数据的处理 包括接收,保存等 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 自动生成 我在这就不作详 细介绍了. 细介绍了 个程序文件,5 共有 4 个程序文件 个头文件 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)/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 ┃ ┃ ┃ ┃ 互助、分享、 ┃ 互助、分享、提高 ┃ ┗━━━━━━━━━━━━━━━━━━━━━┛


相关文章:
串口温度数据采集并实时显示.doc
串口温度数据采集并实时显示_信息与通信_工程科技_专业资料。串口温度数据采集并实时显示(上位机部分) [请输入学校名称 [请输入专业] 论文 请 串口温度数据采集并...
基于Matlab+GUI串口通信的实时温度监控系统设计_图文.pdf
系统功能主要由两 2)打开串口,如果打开串口出现错误或异常,界面将弹 出错误信息...系统的下位机部分负责温度数据采集工作,并通过串 行通信实时地将数据传送回...
基于多串口通信的实时温度采集系统设计.pdf
基于多串口通信的实时温度采集系统设计 - 数采与监测 文章编号 :1008-05
温度采集与显示系统_图文.doc
在 1602 上实时显示温度; 3、每隔 10 秒采集一次温度数据并保存到 AT24C02 ...换言之, 如果离开它, 我们就无法用软件监控电源状态了 (需 要串口返回信号) ...
基于单片机与计算机串口的温度实时监控系统设计.pdf
基于单片机与计算机串口温度实时监控系统设计 - 设计了一种温度实时监控系统.该系统通过单片机实现实时控制,并通过串口连接单片机与上位计算机,在计算机中实现实时监控...
基于VC_6_0的串口实时数据采集及实时曲线显示_图文.pdf
基于VC_6_0的串口实时数据采集实时曲线显示 - 户口显示及时串数实采基集曲的线据 瓣 纷薰恤 及数 的串口实时 据采集 实时显示 线恤 ...
温度采集与显示系统_图文.doc
实时显示温度; 3、 每隔 10 秒采集一次温度数据...CPU 停止工作,允许 RAM、定时器 /计数器、串口、...
远程串口温度采集系统设计_图文.doc
远程串口温度测量系统设计 摘要 远程温度测量系统是利用下位机实时温度的采集,并...而且对所设计电路给出了相应的软件设计, 包括串行口初始化,数据采集和数据传输...
基于labview串口的现场实时多通道温度采集测量与实现本....doc
基于labview串口的现场实时多通道温度采集测量与实现本科学位论文 - 摘 要 温度是机械加工中最基本的参数之一,在生产过程中常需要对温度进行检测和监 控。数控机床...
...-基于LABVIEW串口的现场实时多通道温度采集测量与实....doc
毕业设计论文--基于LABVIEW串口的现场实时多通道温度采集测量与实现 - 摘 要 温度是机械加工中最基本的参数之一,在生产过程中常需要对温度进行检测和监 控。数控...
基于VC++6.0的串口实时数据采集及实时曲线显示.pdf
基于VC++6.0的串口实时数据采集实时曲线显示 - 基 Te pnoRaTe
远程串口温度采集系统设计_毕业设计_图文.doc
远程串口温度采集系统设计_毕业设计 - 毕业设计 远程串口温度测量系统设计 摘要 远程温度测量系统是利用下位机实时温度采集,并将结果传输到上位机。以达到对温度的...
温度采集与显示系统_图文.doc
实时显示温度; 3) 每隔 10 秒采集一次温度数据...串口通信电路 图 3.8 串口通信电路 3.2 核心器件...
基于LabVIEW与串口通讯的温度采集系统的设计.pdf
并通过通信接口 RS232 进行单工串行通信,运用 LabVIEW 的 VISA 串口函 数编程来完成串口的初始化, 及接口缓存的数据采集, 并将 温度值采集进计算机内部并显示...
基于单片机和PC串口通信的温度采集系统设计.pdf
在过程控制的实时检测和监控系统中,温度采集是很...器将温度显示出来,且采用串口通信,把温度显示在 VB...数据显示比较直观而且测量精度也比较高,范围也比 1 ...
温度采集与显示系统_图文.doc
实时显示温度; 3) 每隔 10 秒采集一次温度数据...串口下载 温度传感器
基于LabVIEW的串口温度采集系统_图文.doc
计算机利用 LabVIEW 的 VISA 读取串口数据并进行处理和显示,实现基于 VISA 的串口温度采集监控。 关键词:DS18B20 温度传感器 AVR 单片机 VISA 串口 1、 概述 实时...
基于USB串口多点温度采集系统的设计.pdf
中国特种设备检测研究院 , 北京 100013 )摘要 : 介绍了基于 USB 串口多点温度...来将 实时 采集 到的 温度 数据 高速 回送 到计 算机之中 ,形成原 始数 ...
基于LABVIEW串口的现场实时多通道温度采集测量与实现毕....doc
基于LABVIEW串口的现场实时多通道温度采集测量与实现毕业设计论文 - 毕业设计论文 基于 LABVIEW 串口的现场实时多通道温度采集测量与实现 毕业设计(论文)原创性声明和...
基于labview的串口温度采集系统设计.doc
串口温度采集系统设计 摘要 随着信息领域各种技术的发展, 在数据采集方面的技术...结束语本系统利用数字化的温度传感器和单片机组成测温单元,实时、方便、可靠的 ...
更多相关标签: