程序和下位机进行通讯 采用问答式通讯方式,即上位机发送命令,下位机返回数据,
 通讯时候通过长度 累计达到1000个字节的时候,接收接收。
 我每次在发送的时候都调用下面函数。想清除一次缓冲区 但是时间长了,就接收不到数据了,软件重新启动就正常了。为什么??? 这样做有问题吗?PurgeComm(COMDEV(npCommInfo),PURGE_RXCLEAR|PURGE_TXCLEAR| PURGE_RXABORT | PURGE_TXABORT); 
memset(npCommInfo->Queue, 0, 10000);
npCommInfo->HeadPtr=0;设置数据索引为0开始

解决方案 »

  1.   

    收不到数据极有可能是死锁了,发送的事情清除哪个缓存? 还是读写缓存全清?串口有自己的接受缓存和发送缓存区,你readfile一次,取出多少就从接受缓存区中擦去多少数据。
    严谨的方式,应当是一个线程负责readfile,将读出来的数据都放入一个缓存区中,然后根据包头包尾解析每段协议。
    串口传输中半包问题出现概率比较大,根据自己需求自己设计呗。
      

  2.   

    输入和输出全部清除。
    看标志 PURGE_RXCLEAR|PURGE_TXCLEAR| PURGE_RXABORT | PURGE_TXABORT
    由于以前的协议 没有报头和报尾,因此只有按长度截取。有的时候 由于长度没有收够,导致无法解析。形成超时。
    有的时候,截取的位置不对,导致校验和通不过,形成校验错误。因此我在下发取数据命令之前,都对输入和输出缓存都进行了清空。
    就是保证 每次接收的字符都是新传上来。