QQ登录

只需一步,快速开始

上位机MFC使用串口控件实现温度数据采集并显示源代码下载

[ 复制链接 ]

上位机MFC使用串口控件实现温度数据采集并显示源代码下载

上位机MFC使用串口控件实现温度数据采集并显示源代码下载

串口编程,可以通过串口控件,也可以通过纯代码来编写实现。
这里通过串口控件实现。
界面 如上图。
控件的使用会麻烦些,
控件的使用:
你只需要确定一个mscomm32.ocx控件在system目录下并且该控件已经被windows注册。
方法:将mscomm32.ocx copy到C:\winnt\system32目录下
运行:regsvr32 mscomm32.ocx


串口的原理:
读串口数据的原理是,只要当有数据向串口发数据来时,
计算机就会自动将其数据写到一个特定的缓冲区,我们只要写程序去读那个特定的缓冲区就可以了.
有数据向串口发过来时,程序可以将数据接收到,接收的数据是字符型的,那么将数据转化为数字型的,
再将这个数据的大小作为画图的某一个点的纵坐标,横坐标为数据的序号.将这些点用线连起来就是一个曲线图了,
这个就是图形显示基本原理.
查看原来的数据的原理也是这样的,不同的地方就是,数据是从文件中来,同样的也是将多个数据分成一个一个的,
然后这一个数据的大小就是画图的某一个点的纵坐标,横坐标同样为数据的序号,再将这些点用线连起来就是曲线图.
图形能移动的原理,是我们首先改变的只是数据,图形并没有变,但图形的形式是由这些数据来确定的,
当数据发生变化后,我们通过刷新显示区来变化的.

上位机MFC使用串口控件实现温度数据采集并显示源代码下载

上位机MFC使用串口控件实现温度数据采集并显示源代码下载

上位机MFC使用串口控件实现温度数据采集并显示源代码下载

上位机MFC使用串口控件实现温度数据采集并显示源代码下载


串口数据采集实时显示程序说明:
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:isplay()
{
        if (NextTime <= 600 && stop==FALSE)
        {
                LineHight[NextTime/5] = LineHight[121]; //中保存的是最新采集的一个数据
        }
        else
        {
                for (int i=0;i<120;i++)
                {
                        LineHight = 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=LineHight;
        }
        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=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=LineHight;
以便在继续接收时能接着原来的。


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、通用性
为了提高程序的通用性,串口的波特率,串口号都采用下拉选择的方式,在使用中可跟据情况选择。
源代码下载地址:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:上位机MFC使用串口控件实现温度数据采集并显示源代码下载.rar 
文件大小:79.06 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例

  

经历1年的编程与录制点击进入查看


  

halcon从自学到接项目视频教程,另外再赠送全网最全资源  

  

欢迎围观我录制的一套halcon自学视频教程(进入)


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索