用SDK开发串口通讯,在写串口后(发送读命令),为什么要做延时操作才能接受到回送数据?
WriteFile(m_hComm,SendString,length,&length,&m_osWrite);
Sleep(130);
ReadFile();
请问这个和什么有关系?等待

解决方案 »

  1.   

    回送数据
    时要时间的
    不sleep,ReadFile()会出错
    ------
    本人估计
      

  2.   

    这样看来,通讯周期会增长,那有没有办法提高通讯周期呢?如果用MSComm是不是会一样的呢?
      

  3.   

    用SDK开发串口通讯,在写串口后(发送读命令),为什么要做延时操作才能接受到回送数据?
    WriteFile(m_hComm,SendString,length,&length,&m_osWrite);
    Sleep(130);
    ReadFile();
    请问这个和什么有关系?等待=========
    1:要看你设置的缓冲区的大小,建议尽量设置大点2:建议发送数据一帧完毕后,在接收数据前,最好把串口中的数据清除掉。3:看看你的操作系统是什么,如果是win98.可以不需要SLEEP。如果是2K/XP,最好SLEEP一下,这个问题我在写程序中也遇到过,请教老一辈的程序员,解释为2k/xp下发送数据有时会产生丢包(丢数据)的问题,具体无法得知,我曾写过一个程序向单板上EEPROM中写数据,发现在整个数据包中有1-2包会丢失,且基本上集中在后面。从另一个方面来说,发的越快,越容易丢数据。经过测试在98下没有这个问题。关于sleep的时间,经过我在115200bps下测试,sleep(5)就可以了,不用太长是可以保证收到数据了。不过丢失还是存在的,按照不同的需求要不通的要求,比如100万数据包只允许1-2包的丢失。
      

  4.   

    用MSComm也会需要时间的,一般来说使用串口通讯,速度比较慢,如果使用TCP/IP可以稍微快些,如果时间太短容易传诵数据出错,RS485与RS232的稳定性还比较好,你可以设置它的Event,用事件机制