利用VC_实现实时串行数据的接收_分离及动态存储(3)
时间:2026-01-17
时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……