数据采集器课题总结Read.docx

上传人:b****1 文档编号:2881488 上传时间:2023-05-04 格式:DOCX 页数:16 大小:228.33KB
下载 相关 举报
数据采集器课题总结Read.docx_第1页
第1页 / 共16页
数据采集器课题总结Read.docx_第2页
第2页 / 共16页
数据采集器课题总结Read.docx_第3页
第3页 / 共16页
数据采集器课题总结Read.docx_第4页
第4页 / 共16页
数据采集器课题总结Read.docx_第5页
第5页 / 共16页
数据采集器课题总结Read.docx_第6页
第6页 / 共16页
数据采集器课题总结Read.docx_第7页
第7页 / 共16页
数据采集器课题总结Read.docx_第8页
第8页 / 共16页
数据采集器课题总结Read.docx_第9页
第9页 / 共16页
数据采集器课题总结Read.docx_第10页
第10页 / 共16页
数据采集器课题总结Read.docx_第11页
第11页 / 共16页
数据采集器课题总结Read.docx_第12页
第12页 / 共16页
数据采集器课题总结Read.docx_第13页
第13页 / 共16页
数据采集器课题总结Read.docx_第14页
第14页 / 共16页
数据采集器课题总结Read.docx_第15页
第15页 / 共16页
数据采集器课题总结Read.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据采集器课题总结Read.docx

《数据采集器课题总结Read.docx》由会员分享,可在线阅读,更多相关《数据采集器课题总结Read.docx(16页珍藏版)》请在冰点文库上搜索。

数据采集器课题总结Read.docx

数据采集器课题总结Read

数据采集器课题总结

一.课题目的

在嵌入式应用领域,串口是目前应用非常广泛的一种接口。

我们以后基本都会遇到串口编程的相关需求,所以这是我们不能回避的一个学习要点。

我们通过自己编写的数据采集器来接收串口的数据,并且能够将数据保存为文本形式,方便分析与利用。

它给我们提供了一个很好的工作平台,在编程的同时,我们也学习了串口通信的原理与图片处理的知识。

二.课题要求

1.使用MS控件实现串口编程;

2.使用serialport类实现串口编程;

3.在实现串口编程的基础上结合单片机开发板(也可以是其他架构的嵌入式处理器)编写数据传送服务;

4.在实现第3点的基础上将下位机的数据以文本的形式实时显示在PC上;每个数据包内容为(X轴坐标值,Y轴坐标值)。

5.在实现第4点的基础上将下位机的数据以图形的方式实时绘制在PC上;

6.坐标系可以根据接收到的数据动态改变范围。

7.可以把当前显示的数据曲线保存成图片文件和txt文件。

8.利用鼠标可以放大缩小显示区域。

9.实现进程间传递数据,即串口进程接收另一个进程的数据并显示出来(其显示方式和4,5中要求一样)。

三.小组分工细则

本组有三个人组成。

按照实验的要求,我们将课题分为三个大的模块:

串口编程:

周志辉

图形显示:

严灿祥

数据处理、进程通信:

张孟威

相关说明:

1.串口编程部分我们采用了MS控件,因为它操作简便,网上有不少的实例,对我们编程有很大帮助。

2.图形显示方面用BMP格式存储位图,在内存中进行图形处理。

在构建了图形坐标后,就要建立相应的数据接口,可以和串口通信和数据导入相结合。

3.数据包括导入数据、导出数据、显示数据三个部分,另外还包括一些数据显示的优化。

重点要实现的是将图形的坐标读取并保存。

4.最后我们要做的是将各功能组合,并完善。

四.课题功能实现

图形显示

我们用的是基于对话框的MFC编程,在其中添加相关的菜单实现要求。

由MFC生成图形界面的框架,再由三人在此基础上进行分别的调试,如下图:

图形编程相对来说比较复杂,本组在接到课题时,还不了解有关图形方面的知识,但只要努力专研就一定能看懂!

为此,在查阅了许多有关图形方面的知识后,我们对图形这一方面也有了一定的了解,知道了一些有关坐标图的原理。

将此模块分为以下几个模块:

1.voidDrawCurvePanel(CDC*pDC);

初始化坐标盘

2.voidDrawGrid(CDC*pDC);

初始化画网格

3.voidDrawCurve(CDC*pDC)

画出数据对应坐标

4.voidDrawAxis(CDC*pDC);

画出X、Y轴的坐标。

5.intConvertTimeToAxisX(doubledTime);

将得到的坐标点x转化到坐标系中。

6.intConvertValueToAxisY(doubledValue);

将得到的坐标点y转化到坐标系中。

7.voidRecovery();

让窗口图像复位,用于放大图后的串口位图复原。

8.voidAmplify(void);

放大位图。

9.voidSetDimy(doublenewDimY);

用于设置y坐标相邻两个之间的最小单位。

10.voidSetDimT(doublenewDimT);

用于设置y坐标相邻两个之间的最小单位。

11.voidSaveBMP(CStringfilename);

保存位图。

12.voidDraw(CDC*pDC);

主画图函数,用于初始化整个坐标系。

13.voidClear();

将用于存取数据的链表清零,并含有voidRecovery();的功能。

14.voidUpdateCurve(intmaxtime,intmaxvalue);

更新坐标系,再接收新的数据后要将坐标图重画,加入坐标点。

15.voidAddValue(doubledTime,doubledValue);

用于将数据加入链表中。

16.virtual~CScope();

析构函数。

17.CScope();

用于相关数据的初始化,包括画刷,画笔,链表,CScope成员等。

18.BOOLOnEraseBkgnd(CDC*pDC)

坐标初始化背景函数,可以定位图中的坐标位置轴位置,及相关参数。

用Draw()函数初始化后的坐标图如下:

串口编程

串口方面的编程相对简洁,可以借助串口调试助手进行实验,我们采用的是将两个数据一组对单片机发过来的数据进行采样,中间为逗号隔开。

串口通信是目前工程中应用非常广泛的一种接口;在Win32下,可以使用三种编程方式实现串口通信。

1.调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且使用起来比较自由灵活,但由于涉及到Windows的底层接口函数,对于初学VC++的人来说,应用起来比较困难;

2.是使用ActiveX控件,VisualC++为我们提供了一种好用的ActiveX控件MicrosoftCommunicationsControl(即MSComm)来支持应用程序对串口的访问,在应用程序中插入MSComm控件后就可以较为方便地实现对通过计算机串口收发数据。

虽然在灵活性方面比较欠缺,但对初学者来说使用起来非常简单,很容易上手,因此在本程序中我们采用的是这种方法。

3.使用串口类。

由于MSComm控件的使用存在着诸多不便,因此国内外许多优秀的程序员自己编写了一些串口类,使用这些类我们可以更方便地操作串口。

由于本程序的串口通信比较简单,采用控件也能很方便地实现,因此,也就没采用该种方法。

首先,我们将ActiveX控件MSComm将其添加入工程,其方法是:

(1)单击主菜单project的子菜单AddToproject的ComponentsandControls选项;

(2)在弹出的"ComponentsandControlsGallery"对话框中RegisteredActiveXControls文件夹中的"MicrosoftCommunicationsControl,version6.0"选项,如下图:

单击其中的"Insert"按钮,MSComm控件就被增加到工程中了。

接下来就是进行串口的编程,以下是进行串口设置的部分代码:

{//m_mscomm为mscomm控件变量

m_mscomm.SetCommPort(tmp);//设置端口号为tmp,其中tmp为一整型值,本程序中可取1~4

m_mscomm.SetInBufferSize(1024);//设置串口输入缓存区的大小为1024字节

m_mscomm.SetOutBufferSize(512);//设置串口输出缓存区的大小为512字节

/*如果串口没有打开,就打开串口*/

if(!

m_mscomm.GetPortOpen())

{

m_mscomm.SetPortOpen(TRUE);

}

m_mscomm.SetInputMode

(1);//设置以二进制读写数据

baudrate.Format("%s%s",setdlg.m_btrate,",n,8,1");

m_mscomm.SetSettings(baudrate);//设置波特率,是否奇偶校验,数据位数,停止位,格式为“9600,n,8,1”

m_mscomm.SetRThreshold

(1);//一接收到字符就发送OnComm事件

m_mscomm.SetInputLen(0);//每次读取缓存区中的所有数据

}

串口数据的接收部分代码如下:

variant_inp=m_mscomm.GetInput();//获取缓存区的数据

safearray_inp=variant_inp;

len=safearray_inp.GetOneDimSize();//获得接收到的数据的个数

for(i=0;i

{

safearray_inp.GetElement(&i,&rxdata[i]);//读取数据到rxdata数组中

}

rxdata[i]='\0';

以下是通过串口调试助手发送的数据以及本程序对其的显示图:

数据处理

我们在Cscope类中添加了数据导出函数voidCScope:

:

Export(),该函数的功能是将接收到的数据导出到指定路径下的txt文件中,当点击程序菜单中的“导出数据”子菜单后主对话框CDateCollDlg类中的voidCDateCollDlg:

:

OnExportData()函数就会调用Cscope类中的Public函数voidCScope:

:

Export()来输出数据。

当需要重新显示以前保存的数据时,点击程序菜单中的“打开数据”子菜单,主对话框CDateCollDlg类中的voidCDateCollDlg:

:

OnOpenData()函数就会将已保存在txt文件中的数据重新在坐标中显示。

为了方便随时观察图形中描绘的数据,我们添加了“坐标显示”菜单,单击“显示”子菜单,就会在图像的右侧将该图像中描点连线的坐标给显示出来,当不需要时单击“隐藏”子菜单就会恢复到原来的界面。

该功能是通过voidCDateCollDlg:

:

OnShowData()和voidCDateCollDlg:

:

OnHide()函数来实现的,在对话框显示之前,在初始化函数BOOLCDateCollDlg:

:

OnInitDialog()中将图像右侧的数据显示区先隐藏起来。

进程通信

我们并没有搞很复杂的进程通信,具体实现如下。

将一个发送数据的进程实例打开,点击发送后就能将数据送到剪切板上,再有另一个进程,也就是我们的数据采集器获剪切板上的数据,做出相应的图。

1.数据发送窗口

2.数据接收窗口

为下图下方的窗口,由于显示相应的进程通信坐标。

功能整合

完成上述功能之后,就要进行整合,能让各模块协调工作。

下面是效果图

1.导入数据:

将“参数.txt”文件导入后显示如下,里面存储的是正弦波的坐标,当为乱序时,软件有坐标自动从小到大排列功能

放大后:

采用鼠标拖动,用矩形框选择所需要的放大的区域,放大后效果如下。

由采样的数据本身的间隔较大,显示的图形比较粗糙,再加上没有进行相关的图形优化算法,放大后的连线明显的有锯齿痕迹,有待改进。

文档参数如下:

2.BMP格式图形保存:

点击菜单中的“保存BMP”就可以生成*.bmp图片

3.串口设置

五.一些BUG与体会

如下图:

当图形放大后,坐标会跟着放大,这个问题其实很好解决,但是有一点就是在放大了之后还要显示特定区域的坐标,我们查看了Pspice画图软件,看到它的坐标处理的很好,值得我们思考,所以这么功能还有待完善。

还有就是坐标根据输入数据的变换,放大后它的坐标要跟着变。

一开始我们用的是“纯”的对话框,用按钮来实现功能,虽然我们的功能基本能实现,但是在进行坐标变换时很麻烦,图如下

我们在GetWindowRect和GetClientRect之间纠结了很长时间,再加上GetClientRect,会将获得的矩形框的左上角默认赋值为(0,0)所以坐标的转换很困难,在用了菜单之后,将整个坐标盘拉满整个客户区,就省去了不少的麻烦。

最让人头痛的要算是单片机的BUG了。

我们用单片机发送四个点作图,但在发送5个点的时候出现内存错误,于是我们用串口调试助手接收数据,发现单片机能将数据传出去。

仔细分析后我们将程序进行了调试,发现数据居然被准确地存进了我们的链表!

有同学提出会不会是按键抖动的问题,但很快被排除。

最后只好换了一种发送数据的方法。

这个问题只好让它留着。

在进程通信时,我们利用的剪切板有问题,只能接收一次数据,在第二次发送时图得不到更新!

我们发现剪切板的内容变了,但那个接收的还是原来的数据,也用了UpdateData()

没能解决。

值得高兴地是,我们最后基本实现了课题的要求,在整个过程中,很考究各组的分工合作,每个人对自己的任务要好好完成,并能按照一定的规范,方便队友的功能组合。

遇到困难要学会交流,也许某位队友在那方面厉害也说不定,可千万不能选择放弃,虽然这不是什么大的项目,但也要求我们有耐心去协调,融合。

六.操作技巧

1.按下鼠标左键,拖动产生矩形框,用于显示放大区。

2.放大后想还原原图,按鼠标右键

3.“文件->导入数据”后能及时显示图形,并在“坐标数据->显示”后,可看到坐标点。

导入数据格式:

4.点击“保存BMP”来保存图形。

5.打开进程通信的“TongXin.exe”后发送数据,在DateColl.exe中“进程通信->通信数据作图”后有图形出现,按“坐标数据->显示”可看到接收的数据。

发送的数据格式:

6.串口通信在串口在“串口通信->串口配置”中,有端口号和波特率,设置完成后如果接收正确,则“串口通信->作图”后,出显图形

单片机及串口调试助手发送数据格式:

其中

发送的数据以逗号为分隔符,且为偶数(因为坐标是x,y值共同决定的)。

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2