数据采集器课题总结ReadWord文档格式.docx
- 文档编号:22984519
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:16
- 大小:228.33KB
数据采集器课题总结ReadWord文档格式.docx
《数据采集器课题总结ReadWord文档格式.docx》由会员分享,可在线阅读,更多相关《数据采集器课题总结ReadWord文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
串口编程:
周志辉
图形显示:
严灿祥
数据处理、进程通信:
张孟威
相关说明:
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);
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<
len;
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值共同决定的)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 采集 课题 总结 Read