请教高手
    我在用VC++进行串口通信时,遇到回复数据的时候一条数据分成2条回     我通过VC++对一台带有串口通信接口的设备通信,发送一条命令,正常返回数据的时候是应该返回168位,但是竟然返回了2条 分别是98 和 70 我接收的时候只能接收到98那条信息。    附上我的代码:         m_com1.SetCommPort(1);
         m_com1.SetSettings("2400,n,8,1");               
m_com1.SetInputLen(0);
m_com1.SetInputMode(1);
m_com1.SetRThreshold(1);
m_com1.SetPortOpen(TRUE);
m_com1.GetInput();         sendData1 = "51 41 0D"; if(m_com1.GetPortOpen())
{
if (!sendData1.IsEmpty())
{
CByteArray hexdata;
int len = String2Hex(sendData1, hexdata); 
m_com1.SetOutput(COleVariant(hexdata)); 
::Sleep(500);
}                  
else
{
::AfxMessageBox("没有可以发送的数据");
}
}
else 
{
::AfxMessageBox("请先打开串行口");
}
         COleSafeArray safearray_inp;
COleVariant varReceive;
varReceive.Attach(m_com1.GetInput());
::Sleep(300);
safearray_inp = varReceive;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
{
      safearray_inp.GetElement(&k, rxdata + k);//转换为BYTE型数组
}         
                 我用DEBUG单步调试的时候每次都是回一条168字节的信息,但是直接运行就会回复98+70的信息        请教高手们 这是怎么回事啊??????    

解决方案 »

  1.   

    很简单 发送后 sleep 50ms
      

  2.   

    不知道你是自己用API进行串口通信还是用第三方控件进行串口通信,感觉应该是
    通信格式设置(SetCommState)有问题;
    确定通信格式设置没有问题,再看看读超时设置是否正常。
    我这里有一个API设置串口超时的代码:
    GetCommTimeouts(m_hCom, &cto);
    cto.ReadIntervalTimeout = 20;//读间隔超时
    cto.ReadTotalTimeoutMultiplier = 20;//读时间系数
    cto.ReadTotalTimeoutConstant = 20;//读时间常量
    SetCommTimeouts(m_hCom, &cto); //设置超时值
    粗看了你的代码像是用了第三方COM控件(类),你单步调试是因为在时间上,单步调试的时间充足!好好想想,可能就是你时间把握的不好!
      

  3.   

    CPU的速度远高于串口的速度,一个报文不能一次读入一点也不奇怪,最好的做法是每次读入一个队列,然后自己判断是否接收完整。
      

  4.   

    感谢各位回复...我想问一下 怎么做到循环收发???我试了下在发送后sleep50 还是拆分了2条回复的