用VC进行试验数据的采集

在工程试验过程中,经常要用到标准的串行通讯端口进行试验数据的采集及处理。早期的微机多采用DOS操作系统,因此,人们以DOS为平台,采用Turbo C、Basic等软件开发了大量的试验数据采集、处理软件。如今随着计算机技术的普及,Windows因其界面友好、易操作等众多优点,越来越多地被人们所采用。故此有必要开发采用Windows 为平台的简单有效的数据采集、处理软件。
   在微软公司推出的Visual C++中,即可利用MFC CFile类来实现串行通讯。首先利用VC++中的向导建立一个支持MFC类的工作台工程,并在XXX.cpp(XXX为工程名)文件中函数int _tmain(int argc,TCHAR* argv[],TCHAR* envp[])中命令行:
   CString strHello;
   strHello.LoadString(IDS_HELLO);

cout <<(LPCTSTR)strHello << endl;
   后面加入如下代码即可实现串行通讯。
   CFile file;
   CFileException e;
   //以读写方式打开串口
   file.Open(“COM1”,CFile::modeReadWrite,&e);

//配置串口
   DCB dcb;

::GetCommState( (HANDLE)file.m_hFile,&dcb);

dcb.BaudRate=4800;//波特率
   dcb.ByteSize=7;//数据位
   dcb.StopBits=2;//停止位
   dcb.Parity=2;//奇偶校验位
   ::SetCommState((HANDLE)file.m_hFile,&dcb);

//数据采集
   char m_ReadBuff[2];

char m_WriteBuff[2];

m_WriteBuff[0]= 'a';
   int dbyte;
   //读串口数据
   dbyte=file.Read (&m_ReadBuff,1);

//写串口数据
   dbyte=file.Write (&m_WriteBuff,1);

在将串行通讯数据经过处理后可以利用函数printf或cout实现类似于DOS状态下的输出格式。这对长期使用DOS应用程序的工程人员也较易接受。
   为了更好地控制端口可以利用结构COMMTIMEOUTS打开或关闭超时功能,具体代码如下:
   //设置超时功能
   COMMTIMEOUTS cto;
   ::GetCommTimeouts((HANDLE)file.m_hFile,&cto);
   cto.ReadIntervalTimeout=0;

cto.ReadTotalTimeoutMultiplier=20;
   cto.ReadTotalTimeoutConstant =20;
   cto.WriteTotalTimeoutMultiplier=0;

cto.WriteTotalTimeoutConstant =0;
   ::SetCommTimeouts ((HANDLE)file.m_hFile,&cto);

另外,可以将采集的试验数据通过Cfile类存储在磁盘文件中留待进一步数据处理。
   采用上面方法,利用MFC CFile类进行串行通讯,不仅代码简单、编程量小,而且原有DOS下的代码容易移植,稍加改进即可应用于在线监测、自动化控制等各个方面,对科研、生产有着广泛的实用价值。