在OnTimer函数中读取rs232接口数据,为什么总是读取失败?请各位帮我,3kx!!!
fagin 2003-10-16 04:14:37 各位高手,我在OnTimer函数中读取rs232接口数据,为什么总是读取失败?请各位帮我
看看原因在哪里
我在OnInitialUpdate()函数中已经打开com接口了。
程序代码如下:
void CRetestView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
DWORD dRead,dReadNum;
OVERLAPPED osRead={0};
BYTE buff [1000];
dRead=ReadFile(hCom, &buff[1000], 10, &dReadNum, NULL); //接收100个字符,
CString s1;
s1.Format("%d",dRead);
pDC->TextOut(100,230,s1);
CFormView::OnTimer(nIDEvent);
}
是这样的吗?
hCom = CreateFile ("COM1",GENERIC_READ| GENERIC_WRITE,0,NULL,OPEN_EXISTING,F
ILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if (hCom==INVALID_HANDLE_VALUE)
{
AfxMessageBox("无法打开串行口");
}
else
{
SetCommMask(hCom, EV_RXCHAR ) ;
SetupComm(hCom, 4096, 4096 ) ; //设置收发缓冲区 尺寸为4K
PurgeComm(hCom, PURGE_TXABORT|
PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR )
; //清收发缓冲区
//以下初始化结构变量CommTimeOuts, 设置超时参数
CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
CommTimeOuts.ReadTotalTimeoutConstant = 4000 ;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 4000 ;
SetCommTimeouts(hCom, &CommTimeOuts ); //设置超时参数
ComDcb.DCBlength = sizeof( DCB ) ;
GetCommState( hCom, &ComDcb ) ; //获取当前参数
ComDcb.BaudRate =9600; //波特率
ComDcb.ByteSize = 8; //数据位
ComDcb.Parity = 0; //校验 0~4=no, odd, even, mark, space
SetCommState(hCom, &ComDcb ) ;
}