微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题用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下的代码容易移植,稍加改进即可应用于在线监测、自动化控制等各个方面,对科研、生产有着广泛的实用价值。