一般无法读取导数据,通常是读数据时间设定有问题,通过修改设定时间就可以轻松读取数据.
 BOOL OpenComPort(const int port,int flag)
 {
 CString strComCode;
 strComCode.Format(_T(“COM%d”),port);
 hCom=CreateFile(strComCode,//COM1口
 GENERIC_READ|GENERIC_WRITE, //允许读和写
 0, //独占方式
 NULL,
 OPEN_EXISTING, //打开而不是创建
 0, //同步方式
 NULL);
 if(hCom==(HANDLE)-1)
 {
 AfxMessageBox(L"打开COM失败!");
 CloseHandle(hCom);
 return FALSE;
 }
SetupComm(hCom,1024,1024); //输入缓冲区和输出缓冲区的大小都是1024COMMTIMEOUTS TimeOuts;
TimeOuts.ReadIntervalTimeout=MAXDWORD;
**TimeOuts.ReadTotalTimeoutMultiplier=10;
TimeOuts.ReadTotalTimeoutConstant=10;**
TimeOuts.WriteTotalTimeoutMultiplier=100;
 TimeOuts.WriteTotalTimeoutConstant=500;
 SetCommTimeouts(hCom,&TimeOuts); //设置超时
 DCB dcb;
 GetCommState(hCom,&dcb);
 dcb.BaudRate=9600; //波特率为9600
 dcb.ByteSize=7; //每个字节有7位
 dcb.Parity=EVENPARITY/NOPARITY/; //偶校验位
 dcb.StopBits=TWOSTOPBITS; //两个停止位
 SetCommState(hCom,&dcb);
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);return TRUE;
}
 串口硬件配置上,波特率,奇偶校验最好都改成这样,这样有一个好处,串口的响应速度也会变快,缩短等待时间
BOOL ReadData(char readBuffer[])
 {
 DWORD length = 128;//长度也很关键,如果设置为0.直接返回,不会读渠道任何数据
 memset(readBuffer, ‘\0’, 256);
 BOOL bReadStat = ReadFile(hCom, readBuffer, length, &length, NULL);
 if (!bReadStat)
 {
 AfxMessageBox(_T(“温控器1读取数据失败!”));
 CloseHandle(hCom);
 hCom = NULL;
 return FALSE;
 }
 PurgeComm(hCom, PURGE_TXABORT |
 PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
 return TRUE;
 }
 BOOL SendData(char* p,const int len, char writeBuffer[],CString strCRC)
 {
 for(…)
 writeBuffer[i]=XXX;
DWORD dwBytesWrite=7;
 COMSTAT ComStat;
 DWORD dwErrorFlags;
 BOOL bWriteStat;
 ClearCommError(hCom,&dwErrorFlags,&ComStat);
bWriteStat=WriteFile(hCom,writeBuffer,strlen(writeBuffer),& dwBytesWrite,NULL);
if(!bWriteStat)
{AfxMessageBox(L"写串口失败!#add1");return FALSE;
}
returnTRUE;
}
这样我们就可以写度,读数据,当然数据解析也很重要,转换成你需要的数据类型就可以了.