用VC进行试验数据的采集 尚金瑞 2001年 31期 在工程试验过程中,经常要用到标准的串行通讯端口进行试验数据的采集及处理。早期的微机多采用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下的代码容易移植,稍加改进即可应用于在线监测、自动化控制等各个方面,对科研、生产有着广泛的实用价值。