Rthreshold这个属性最好设为"1",这样一有数据发来就可以产生OnComm事件,然后用个全局变量存储数据,并发送到固定的单元再将这个全局变量清空即可得到所有完整的数据,这个问题我原来也遇到过.给你一点源代码提示:
    
Private Sub MSComm1_OnComm() If MSComm1.InBufferCount Then
    
' 通讯埠中假如有资料的话, 则读取进来
    
        InStringB = InStringB & MSComm1.Input
        ' 如果资料中有 Chr(13) 和 Chr(10) 的话, 则显示出来
        If InStr(InStringB, vbCrLf) Then
            
    instring = instring & InStringB  '这句产生的结果是将收到的字符全部存入instring 是全部!,之后你可以将它打印到文件,再做分析.....
            
            AddText Text1, InStringB, False  '所有字符送入Text1
            
            InStringB = ""
        End If
    End If
 End If'-------------------
End SubPublic Function AddText(OcxT As TextBox, StrT As String, CrLf As Boolean)
        OcxT.SelStart = Len(OcxT.Text)
        OcxT.SelLength = 0
        If CrLf Then OcxT.SelText = StrT + vbCrLf Else OcxT.SelText = StrT
End Function

解决方案 »

  1.   

    oncomm有许多乱七八糟的响应事件
    还不如直接读串口取数据
      

  2.   

    直接读串口取数据 也是可以的,用轮询就可搞定,但是我没有发现直接读串口取数据 有什么优点缺点倒不少,我编过直接读串口取数据 根本没有能力解决数据可靠性的问题,收回的数据有20%的是废的怪字符,而且数据有丢失(我用OnComm和它比较过),根本不能达到我的要求
    ,,,,,,,,,,,,
    其实OnComm事件很好用的,而且那"许多乱七八糟的响应事件"非常有用..要不要源码?...
      

  3.   

    本问题的标分已达238分,分五贴,有好意见的热心人可以进入各贴领分...
       
        http://www.csdn.net/expert/topic/495/495039.shtm
        http://www.csdn.net/expert/topic/497/497597.shtm
        http://www.csdn.net/expert/topic/490/490318.shtm
        http://www.csdn.net/expert/topic/487/487090.shtm
        http://www.csdn.net/expert/topic/497/497640.shtm
      

  4.   

    比较数据的头尾校验位应该可以收齐数据的,我主要是觉得oncomm事件响应太慢了