标题用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下的代码容易移植,稍加改进即可应用于在线监测、自动化控制等各个方面,对科研、生产有着广泛的实用价值。