在读取串口数据时,总是返回上一次发送的数据

在读取串口数据时,老是返回上一次发送的数据?
运用的是SerialPort类来进行串口的读写。该类我们老大做了修改。由于不是MFC类不能使用BEGIN_MESSAGE_MAP()   END_MESSAGE_MAP() 来发送消息。我利用串口监听软件可以看到,数据是同步的,但是读取上来时,却是上一次发送的数据。而且在打开串口时会读到一个字符在读取串口数据时,总是返回上一次发送的数据

串口通信刚接触不久,可能表述的不是太好,有些东西理解的也不是太好,求大神帮助,有哪里有问题也请点出来,在这先谢了。第一次发帖有点紧张.....通信基本代码如下:

读取数据

BOOL  CSerialPort::ReadData(unsigned char* cDest,unsigned int iDataCount)
{
if(iDataCount>m_iRecCounter)
{
m_iRecCounter=0;
m_iReadPointer=0;
return FALSE;
}

unsigned int i,j;
j=0;
for(i=0;i<iDataCount;i++)
{
cDest[i]=m_szRecBuffer[m_iReadPointer++];
if(m_iReadPointer>=REC_BUFSIZE)
m_iReadPointer=0;
}
m_iRecCounter-=iDataCount;

return TRUE;
}


打开串口


void CExMessage::Open()
{
     // 串口初始化
     m_SerialPort.InitPort(this,(UINT)5,38400,'N',8,1,EV_RXFLAG | EV_RXCHAR,512); 
     // 启动串口监视线程 
     m_SerialPort.StartMonitoring();   

}


发送数据

void CExMessage::Send()
{
     char send[11] = {0x4D,0x45,0x41,0x53,0x3A,0x56,0x4F,0x4C,0x54,0x3F,0x0A};
     // 发送数据  
     m_SerialPort.WriteToPort(send,11);
     ::SendMessage(this->m_hWnd, WM_COMM_CTS_DETECTED,  0, (LPARAM)OnComm());
}

OnCom事件

LRESULT CExMessage::OnComm()
{
     CString Receive = _T("");
     unsigned char str[100];
     memset(str,'\0',100);
     //m_SerialPort.GetRec()获取接收缓冲区内的字节数
     if(!m_SerialPort.ReadData(str,m_SerialPort.GetRec()))
     {
             // 复位串口
     m_SerialPort.ResetComport();
     AfxMessageBox(L"错误:实际读取字节个数大于缓冲区字节个数!");
     return 0;
      }
     
      Receive =str ;
      
      m_fVoltage = CStringToFloat(Receive);
      return 0;
}

------解决方案--------------------
在ReadData中设置一个段点,单步调试一下。
------解决方案--------------------
cDest[i] 看这个里面的值是否每次都改变 、 、
------解决方案--------------------
Send() 之后,立即 ReadData()
------解决方案--------------------
简单地说,你每次发送数据之后,要等待一段时间才有返回数据
串口通讯都是低速设备,别以为你两条语句那点时间足以让串口完成发送处理返回这么一大堆任务
因为你每次发送之后立刻处理数据,自然第一次没有数据,第二次处理的是第一次慢悠悠返回的数据,以此类推
------解决方案--------------------
你接收完数据并处理(比如显示)后就清除接收缓冲,看看是不是你接收太快导致接收超时退出才继续显示上一次的数据
------解决方案--------------------
我之前做串口通信的时候好像也碰到过这个问题,忘记怎么解决的了。= =
------解决方案--------------------
如果你是被SerialPort类限制了,那就抛弃它
说白了读写串口不过就是ReadFile和WriteFile而已,开个线程建个循环完事