电子称RS232测试。参数:
波特率:2400
数据位:7
奇偶校验:Even
停止位:2
用串口助手打开串口,发送“W",可以正常收到重量消息,于是想自己用MFC写一个获取重量的程序。
函数:
void FunRs232()
{
// 1. 创建文件
HANDLE hFile = CreateFile(m_sCom, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0);
if(INVALID_HANDLE_VALUE == hFile)
{
MessageBox("CreateFile");
CloseHandle(hFile);
return;
}
// 2. 设置串口
DCB dcb;
GetCommState(hFile, &dcb);
dcb.BaudRate = CBR_2400 ;
dcb.ByteSize = 7;
dcb.Parity = EVENPARITY;
dcb.StopBits = TWOSTOPBITS;
if(! SetCommState(m_hFile, &dcb))
{
MessageBox("SetCommState", this);
CloseHandle(hFile);
return;
}
// 3.设置缓冲区
if(! SetupComm(m_hFile, 512, 256))
{
MessageBox("设置缓冲区");
return;
}
// 4.设置读写超时时间
COMMTIMEOUTS CommTimeouts;
CommTimeouts.ReadIntervalTimeout = 1000;
CommTimeouts.ReadTotalTimeoutMultiplier = 1000;
CommTimeouts.ReadTotalTimeoutConstant = 1000;
CommTimeouts.WriteTotalTimeoutMultiplier = 1000;
CommTimeouts.WriteTotalTimeoutConstant = 1000;
if(! SetCommTimeouts(m_hFile, &CommTimeouts))
{
MessageBox("设置读写超时时间");
return;
}
// 5. 发送重量指令
DWORD dwHadWrite = 0;
CString sOrder = "W";
BOOL bRes = WriteFile(hFile, (LPCVOID)sOrder, sOrder.GetLength(), &dwHadWrite, NULL);
// 6.读取数据
char buf[256] = {0};
DWORD dwHadRead = 0; // 读到的字节量
boRes = ReadFile(hFile, (LPVOID)buf, 2, &dwHadRead, NULL);
}
问题是:读取不到重量数据. boRes一直为1,就是说ReadFile()是成功的,但是dwHadRead一直是0,buf也没任何内容,不知道哪里出了问题,求大神飘过.