利用VC_实现实时串行数据的接收_分离及动态存储(3)

时间:2026-01-17

利用VC++实现实时串行数据的接收、分离及动态存储

的。由于数据的接收是在回调函数中进行的,而

在回调函数中不能使用自定义函数,只能使用SentMessage函数,所以本设计使用了自定义消息函数,当有数据接收时用函数SentMessage发送消息,然后调用自定义消息函数Ondata(),在此函数中完成数据的分离和存储。操作步骤如下:

在类CmyView的头文件myView.h中添加con-stWM

DATA=WM

USER+1000,即添加用户自

msgvoidOn-DATA,Onda-定义消息,在其类的定义中添加afx息映射区添加ONMESSAGE(WM

2.4 数据的动态显示

分离出来的数据按照固定的格式传递到不同的变量之后,不仅要把数据存起来,而且为了便于监控,应能看见当前接收过来的数据,所以有必要设立显示当前数据对话框。首先建立DATA对话框,并在对话框中添加编辑框和文本控件[4]。接着设置编辑框控件变量,在数据分离后把分离的数据直接传给建立的对话框中的编辑框变量,这样传送过来的数据在接收完就能看见,但是这时数据不是动态显示的。

我们采用定时器实现了数据的动态更新,首先在类DATA的类向导中添加成员函数OnCreate()和OnTimer(),然后在函数OnCreate()中加入SetTimer(1,1000,0),即设立定时器,每隔1000ms中断一次,在函数OnTimer()中添加UpdateData(FALSE)更新数据,这样每1000ms刷新一次对话框中的数据,就可以看见动态改变的数据。在类DATA中添加成员函数OnDestroy,这个函数是在关闭DATA对话框时调用的,在OnDestroy函数中加入KillTimer(1),这样在对话框关闭的同时也将定时器关闭。这时打开查看窗口就可以看到数据是动态显示的了,主要程序清单如下:

intDATA::OnCreate(LPCREATESTRUCTlpCreateStruct)

data(),即消息函数,并在CMyView成员函数的消ta),这样定义的消息函数就与消息连起来了。另外,需要在回调函数中加一标志位,用于标志有接收数据时才调用消息函数,设全局变量BOOLflag1=FALSE,在回调函数中当有接收的数据时,将变量设为flag1=TRUE,数据保存完后,设置为flag1=FALSE。在消息函数中先处理数据的分离,再用函数AddNew()为记录集增加一个记录,用函数SetFieldNull()为每个字段增加空白域,用于存放接收分离完的数据,然后用函数Update(TRUE)更新数据记录表,最后调用函数Requery()进行查询。程序清单如下:

mm

pSet->AddNew();//增加新记录pSet->SetFieldNull(&m

pSet->m

COIL,NULL);

{if(CDialog::OnCreate(lpCreateStruct)==-1) return-1;

SetTimer(1,1000,NULL);return0;}voidDATA::OnTimer(UINTnIDEvent) {UpdateData(FALSE); CDialog::OnTimer(nIDEvent);} voidCMyView::OnDestroy() {KillTimer(1);

CRecordView::OnDestroy();}

//为字段开辟空白域mmm

pSet->m

COIL=data.m

Coil;//添加数据

pSet->Update(TRUE);//更新数据库pSet->Requery(); //查询数据库

程序中的mpSet为记录集指针,data为数据显示对话框的对象,m

Coil为对话框中的编辑控

件变量。下面设定函数SentMessage的参数,在类CmyView的构造函数前添加CMyView*pView,即定义视图类指针,因为把视图类定义为主类,同时在构造函数中添加pView=this,把视图类指针定义成当前指针,然后在回调函数TimeProc()中添加如下代码:

if(flag1==TRUE)

{SentMessage(pView->GetSafeHwnd(),WM

DATA,0,0);flag1=FALSE;}

3 程序调试及运行结果

根据以上设计思想,利用VC++编写程序,通过调试运行表明,此软件性能稳定可靠,可视化界面操作简单,通信过程稳定。建立通信后,接收到的每一个卷材数据在建立的DATA对话框中动态更新显示。在通信过程中,接收到的串行数据在软件设计的窗口中可动态刷新,显示的都是最新接收到的数据,而同时所有的数据以每个卷材数据作为一个记录,存入了建立的ACCESS数据库。这样只要点击菜单中的查看数据库选项,就可以看到数据库中的卷材数据(每个卷材数据中包括时间、操作员号、卷号、品种、合金号、宽度、长度、

(下转第38页)

程序中的pView->GetSafeHwnd()表示视图类的句柄,函数SentMessage后两个参数空缺,当if语句中的条件满足,函数SentMessage就向视图类(当前主窗口)发送消息WM消息函数Ondata()。

6DATA,调用自定义

19

…… 此处隐藏:163字,全部文档内容请下载后查看。喜欢就下载吧 ……
利用VC_实现实时串行数据的接收_分离及动态存储(3).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:4.9 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:19元/月

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