用VC进行试验数据的采集

Author: 尚金瑞 Date: 2001年 31期

?牐犜诠こ淌匝楣讨校R玫奖曜嫉拇型ㄑ抖丝诮惺匝槭莸牟杉按?理。早期的微机多采用DOS操作系统,因此,人们以DOS为平台,采用Turbo C、Basic等软件开发了大量的试验数据采集、处理软件。如今随着计算机技术的普及,Windows因其界面友好、易操作等众多优点,越来越多地被人们所采用。故此有必要开发采用Windows 为平台的简单有效的数据采集、处理软件。
  ?牐犜谖⑷砉就瞥龅腣isual C++中,即可利用MFC CFile类来实现串行通讯。首先利用VC++中的向导建立一个支持MFC类的工作台工程,并在XXX.cpp(XXX为工程名)文件中函数int _tmain(int argc,TCHAR* argv[],TCHAR* envp[])中命令行:
  ?牐燙String strHello;
  ?牐爏trHello.LoadString(IDS_HELLO);?牔?
  ?牐燾out <<(LPCTSTR)strHello << endl;
  ?牐牶竺婕尤肴缦麓爰纯墒迪执型ㄑ丁?
  ?牐燙File file;
  ?牐燙FileException e;
  ?牐?//以读写方式打开串口
  ?牐爁ile.Open(“COM1”,CFile::modeReadWrite,&e);?牔?
  ?牐?//配置串口
  ?牐燚CB dcb;??
  ?牐?::GetCommState( (HANDLE)file.m_hFile,&dcb); ?牔?
  ?牐燿cb.BaudRate=4800;//波特率
  ?牐燿cb.ByteSize=7;//数据位
  ?牐燿cb.StopBits=2;//停止位
  ?牐燿cb.Parity=2;//奇偶校验位
  ?牐?::SetCommState((HANDLE)file.m_hFile,&dcb);??
  ?牐?//数据采集
  ?牐燾har m_ReadBuff[2];?牔?
  ?牐燾har m_WriteBuff[2];?牔?
  ?牐爉_WriteBuff[0]= 'a';
  ?牐爄nt dbyte;
  ?牐?//读串口数据
  ?牐燿byte=file.Read (&m_ReadBuff,1);?牔?
  ?牐?//写串口数据
  ?牐燿byte=file.Write (&m_WriteBuff,1);?牔?
  ?牐犜诮型ㄑ妒菥?理后可以利用函数printf或cout实现类似于DOS状态下的输出格式。这对长期使用DOS应用程序的工程人员也较易接受。
  ?牐犖烁玫乜刂贫丝诳梢岳媒峁笴OMMTIMEOUTS打开或关闭超时功能,具体代码如下:
  ?牐?//设置超时功能
  ?牐燙OMMTIMEOUTS cto;
  ?牐?::GetCommTimeouts((HANDLE)file.m_hFile,&cto);
  ?牐燾to.ReadIntervalTimeout=0;??
  ?牐燾to.ReadTotalTimeoutMultiplier=20;
  ?牐燾to.ReadTotalTimeoutConstant =20;
  ?牐燾to.WriteTotalTimeoutMultiplier=0;??
  ?牐燾to.WriteTotalTimeoutConstant =0;
  ?牐?::SetCommTimeouts  ((HANDLE)file.m_hFile,&cto);?牔?
  ?牐犃硗猓梢越杉氖匝槭萃ü鼵file类存储在磁盘文件中留待进一步数据处理。
  ?牐牪捎蒙厦娣椒ǎ肕FC CFile类进行串行通讯,不仅代码简单、编程量小而且原有DOS下的代码容易移植,稍加改进即可应用于在线监测、自动化控制等各个方面,对科研、生产有着广泛的实用价值。