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

时间:2026-01-17

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

数据库? 选项中选择 查看数据库不使用文件支持 选项,点击DataSource按钮,选择前面创建的数据源,以后几步都是按默认选项,最后在基类中选择CrecordSet类,这样就建立了应用程序框架。1 2 用Windows通信API函数实现串行通信的

步骤

一般情况下的串行通信通常采用以下三种方法

[2]

据位、停止位、奇偶校验)选择窗口,在程序中编写Switch条件判断语句来实现。这样,不仅现场能方便地选择通信参数、进行串行通信参数的测定,以便进一步实现卷材数据的记录并与数据库系统联接,且在程序交付使用之后可以给用户带来便利,用户在不了解程序内部程序的前提下,也可在现场根据通信环境灵活选择通信参数。2.2 数据的分离

考虑到从现场发送过来的数据有大量的重复非数字字符,并且数据格式是相同的,如果都原封不动地接收过来,并且存储在数据库中,不仅存储的数据量较大,而且不方便用户查看,所以在接收大量数据时,可以根据数字和字母及其它不可见字符的ASCII码值对数据进行分离、滤除。对于要保留的字符可以利用传输中固定的格式和有效标志进行保留,把不需要的数据都过滤掉。例如数0~9的ASCII码值在48~57范围内而其它字符在48~57之外,这样利用ASCII码的数值就可以把数字字符分离出来。例如变量Coil的分离如下:

for(inti=0;(receive[i]!= \0 );i++){switch(k)

{case0:for(i=0;(receive[i]!= \r );i++); break; case1:

{while(receive[i]!= E &&receive[i-1]!= T ) {if((receive[i]> 0 )&&(receive[i]<= 9 )) {Coil[ii]=receive[i];ii++; }i++;data1.m

Coil=atoi(Coil);}

Coil为数据显示对话框中的变量

//data1.m

,一是利用Windows的通信API函数,二是利

用VC++(或其它语言)的标准通信函数inp和

outp,三是利用MSCOMM控件。本程序采用的是Windows的通信API函数,实现步骤如下[3]:

IDCOM=CreateFile( COM1 ,GENERIC0,NULL,OPENFILE

FLAG

EXISTING,FILE

WRITE|GENERIC

RANDOM

READ,

FLAG

ACCESS

OVERLAPPED,NULL);//打开串行口

BuildCommDCB( COM1:9600,N,8,1 ,&dcb);//创建数据控制块DCB结构

SetCommState(IDCOM,&dcb);//将结构DCB的主要参数设置到串行口

ddf=timeSetEvent(500,1,TimeProc,NULL,TIME置多媒体定时器和调用回调函数timeKillEvent(ddf);//关闭定时器

SetCommTimeouts(IDCOM,lptimeout);//设置读写操作的时间溢出ReadFile(IDCOM,receive1,1,&num,NULL);//读串行口ddf=timeSetEvent(500,1,TimeProc,NULL,TIME置多媒体定时器和调用回调函数CloseHandle(HANDLEIDCOM)//关闭串行口

PERIODIC);//设PERIODIC);//设

在Windows系统中,定时器也是一种输入设备,通常告诉Windows一个时间间隔,Windows就会以此时间间隔触发程序,本软件使用的定时器函数的标准格式为:

MMRESULTtimeSetEvent(UINT

dwUser,UINTfuEvent)

uDelay,UINTuResolution,DWORD

//DATA中的变量在2.4节有讲解

每个参数具体含义可以参考MSDN。当事件被激活后,此函数在定时器时间到之后自动调用指定的回调函数TimeProc(),在回调函数完成数据的接收并进入回调函数后,首先关闭定时器,然后设置读写操作的时间溢出,这样只要缓冲区有数据就连续读取,直到完成对一组连续卷材数据的读取操作后才再次打开定时器,重新设置定时器,调用回调函数,如此循环。因为COM口不是共享的,所以不通信的时候要用CloseHandle()函数关闭。

有些没有数字的行直接用语句for(;receive[i]!= \r ;i++);滤掉。对于那些相连的数据以空格分离它们,程序代码如下所示:

switch(kk){case a :

{for(;(receive[i]!= );i++) {Length[iii]=receive[i]; iii++;}//Length为卷材长度 data1.m

Length=atoi(Length);

i--;}break;

2 VC++实现的串行数据分离及动态存储

2.1 参数设置

本设计没有采用BuildCommDCB()函数来创建

数据控制块DCB结构,而是采用手动填充DCB的方式,在工程中建立通信参数(包括通信速率、数 18

2.3 数据的动态存储

数据实现了正确的接收之后,就要存储到AC-CESS数据库中,数据库中的变量是与卷材数据一一对应的,数据的分离方法如2.2节所述,数据的分离和动态存储是在Ondata()成员函数中完成

Industry2004

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

精彩图片

热门精选

大家正在看

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

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

支付方式:

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

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