当a=mscomm1.input的时候,就已经清除缓冲区了
这是 MSDN中写的(返回并删除接收缓冲区中的数据流。该属性在设计时无效,在运行时为只读。)

解决方案 »

  1.   

    inputlen=0的时候才是读全部数据,你的inputlen是不是不为0?
      

  2.   

    给我源码,我给你分析分析,[email protected]
      

  3.   

    我在其他单机上做了实验,结果是一样的。出现这种情况的时间是没有规律的。为了提高程序运行的时间,我在程序中设置了每小时重新打开端口一次,情况依旧。
    此外,因为数据桢是10秒发送一次,大小为300BYTE左右(根据帧的类型而不同),我的程序是每4秒检查帧一次,当帧结构对时,设INPUTLEN=LEN(帧)再INPUT;INBUFFER为10240BYTE,估计够大,应该不会是缓冲区的问题。
      

  4.   

    我的经验是,让inputlen=0,然后根据InbufferCount来决定是否读数据
    最好加上超时判断,即在一定的时间内读不到数据,就把缓冲区清空,等下一组数据
    const CommOverTime=1
    ...
    With MSComm1
        tm1 = Timer
        Do While .InBufferCount < LEN
            DoEvents
            If Timer - tm1 >= CommOverTime Or tm1 < CommOverTime Then    'tm1 < CommOverTime 只对0点有用,如果不是夜以继日的工作,可以不考虑
                Exit Do
            End If
        Loop
        StrReceive = .Input
    End With
      

  5.   

    ozw(沧浪客) :
      我设置了调试点,在串口读数据不进时,inbuffercount=0。而清空缓冲区也是用.inbuffercount=0。
      

  6.   

    是  DCS  通信吗?
    如果是,可以来信交流一下。
      

  7.   

    是DCS,楼上的也碰到了这样的问题吗?不知是控件的问题还是程序问题