最近,项目要编一个四串口 的高速数据采集程序,速度是115200bps(四个都是这个速度),但是发现有数据丢失现象,能提供一些解决方案吗?提供一些经验!

解决方案 »

  1.   

    我曾经用MOXA卡C104搞过,也是4个口,开了4个线程,使用串口事件,相当稳定,没有发现丢失数据。
      

  2.   

    你是地层编程方式么?
    如果是的话,就不应该,有什么问题联系我[email protected]
      

  3.   

    我的文章和组件
    http://www.csdn.net/develop/read_article.asp?id=11215
    可能对你有用。但是组件不那么傻瓜,用起来可能比较麻烦。
    另外我现在还有新的组件版本,支持抛出COM异常的(_com_error::Description)的,需要的话和我联系:[email protected]
      

  4.   

    你用底层的winapi函数从头编写!
    封装好CComm类(里面有读写线程)
    然后针对每一个传口进行设置!CComm pComm[N];
    对应每一个串口要有自己的数据处理线程!
    记着把缓冲区开大一些(因为你的速率要求很高)或者用标准模版:CList array<var,var>最好了!
    这样就不会丢失数据了!但是有时候传输速率太高,硬件会有丢失数据,但是很少发生这种情况,所以你最后有重发数据的机制!
      

  5.   

    给你一个封装了API的类,或许对你有帮助:
    A Communication Class for Serial Port 
    http://codeguru.earthweb.com/network/serialport.shtml
      

  6.   

    而且我的组件的CPU占用率还不高
      

  7.   

    我用的也是异步操作:
    发现 ClearCommError( hCom, &dwError, &comstat);
    当一次事件激发时,WaitCommEvent( hCom, &dwMask, NULL );
    comstat.cbInQue每次返回8,当然是数据量很大时。
    不知你们是不是也是这样的情况?