本帖最后由 wuyazhe 于 2011-03-14 13:07:40 编辑

解决方案 »

  1.   

    先不用OnComm事件接收,发完等0。5秒直接.input接收看会不会少。
      

  2.   

    检查参数中的偏移量,应该是这方面的问题
    比如If recdata(2) = &HE1 Then中的2为什么是2不是1?
    FOR循环的起始与结束值等
      

  3.   

    用这个试一试:
    http://download.csdn.net/source/1262066
      

  4.   

    你认为一个数据帧是15位,但是InByte() = MSComm1.Input不能保证这个时候输入缓冲区是15位。即使输入缓冲区里面只有一个数据也会产生oncomm事件。实际可能是,输入缓冲区已经有一个数据了,产生了oncomm事件,你的程序开始读取数据,在读取的时候读取的数据还没有够到15个。以前做一个程序,我是先把缓冲区的数据放在自己的缓冲区,自己的缓冲区超过15个数据才开始自己处理数据,并把处理的数据移出缓冲区。
    要是每个数据帧都是15位,那应该等够15位了再处理。
      

  5.   

    MSComm1.RThreshold = 1时,加延时接收是必要的。
      

  6.   

    你试试把判断接受到的数据字节型转成字符型,然后在把,判断数据是否数据完整,的语句放在for j = 1 to lennow -1next j
    里面,不完整就就把接受到的数据存起来。
      

  7.   

    你已经设置MSComm1.RThreshold = 1,那么每接收一个字节就会产生oncomm事件。
    InBufferCount属性返回缓冲区内的未处理数据所以在 Case comEvReceive '接收到字符 后面添加
    if mscomm1.InBufferCount<16 then exit sub计算机没串口,没实验