小弟遇到一个奇怪问题,请求大虾帮助。
程序通过RS485虚拟串口 对30台下位机进行实时采集数据(轮询)。。
在采集过程中,发现有时会出错。原因是在改MARK 和 SPACE 效验位后在接收数据。
数据会多1一个BYTE出来。也就是会出现错误数据。比如:我改SPACE后接收1个BYTE,但确出现2个BYTE
多了一个错误的BYTE。请问有遇此现象麽?
(这个问题在实时采集数据(轮询)时,不是经常出现而是有时会出现,导致无法继续轮询。小弟万般无奈,只有求助于此。)
(开发环境:用虚拟机繁体版WINXP系统,波特率为:9600每次接收数据需用MARK 和 SPACE做效验。)

解决方案 »

  1.   

    常用的校验大体有两种:
    1、一般的和校验一字节
    2、CRC校验两字节要仔细看下位机说明书,不可瞎改。如果不是以上问题,而是下位机有时乱数,可以先自已做一个长度校验,先判断长度,
    如果长不对,直接丢弃,继续轮询下一个,最后再补招一下没收到正确数据的点。
      

  2.   

    LZ:需要详细说明你的通信协议和数据约定.怀疑LZ的对协议的理解有误.
      

  3.   


    你好,我是按下位机要求来做的,这点你可放心。
    至于丢弃数据,在我这程序里并不是解决问题的方法。
    因为下位机传数据时会停止工作,必须要穿完全部数据后才会继续工作。
    所以这种情况实在令人费解。不知是否有更好的方法?
    (我用COM口调试器来接收数据并不会出现这种错误数据的情况。
    但真正用我程序跑起来确收到这错误数据。
    但这种问题有时会出现有时确十分正常。)
      

  4.   


    通讯协议:
    1.开始下位机和PC以MARK为效验位,PC为主发送机号与下位机通信.
    2.下位机收到PC发过来的机号,则相对应的机号的下位机回应机号给PC后改效验位为: SPACE
    3.PC收到机号,也同时改效验位为: SPACE.之后PC发接收数据的指令给下位机.
    4.下位机开始发数据给PC
    5.PC开始接受数据.
      

  5.   

    用/space切换通讯的办法很痛苦,而且容易死机...
      

  6.   

    稳妥的方法是按照ASTM协议做,但是下位机开发成本会增加