串口设置:    
With MSComm1
        .CommPort = intCommPort           '通信端口号
        .Settings = strCommSettings       ' "9600,N,8,2"  '通信端口参数
        .InBufferSize = 24               '缓冲区接收数据长度
        .InputMode = comInputModeBinary    '端口以二进数据发送
        .InputLen = 24                   '每次从端口缓冲区读数据的长度
        .RThreshold = 24                     '接收N个字节就产生Oncomm事件
        .PortOpen = True                   '打开串口
    End With
接收事件:
Private Sub MSComm1_OnComm()    Dim InByte, i As Integer
    js = ""
    Select Case MSComm1.CommEvent
    Case 2
        InByte = MSComm1.Input
        For i = 0 To 23
           js = js & Hex(InByte(i)) & " "
          data(i) = InByte(i)
           AnaData(i) = Hex(InByte(i))
        Next
        Text2.Text = Len(InByte)
    End Select
    MSComm1.InBufferCount = 0
    Text1.Text = js
    AnalyseDataEnd Sub现在的问题是收到的数据一般都正常,但也有少数情况收到的不正常,10次有2,3次,正常的都是F2打头的,不正常的就不是以F2打头的,用串口工具接收正常,都是F2打头,不知道表述明白不,求帮助

解决方案 »

  1.   

    看看这个Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    '接收事件:
    Private Sub MSComm1_OnComm()
      Dim InByte(0 To 1023) As Integer
      Dim i As Integer
      Dim j As Integer
      Dim varP As Variant
      js = ""
      Select Case MSComm1.CommEvent
        Case 2
            MSComm1.RThreshold = 0  '在接收数据时禁止触发OnComm事件
            Sleep 10
            Do
                varP = Null
                varP = MSComm1.Input
                If Not IsNull(varP) Then
                    InByte(i) = Val("&H" & varP(0))
                    i = i + 1
                    js = js & varP(0) & " "
                End If
            Loop Until MSComm1.InBufferCount = 0
            Text2.Text = Len(InByte)
            Text1.Text = js
            MSComm1.RThreshold = 1  '接收完毕,恢复触发功能
      End SelectEnd Sub
    Private Sub Form_Load()
        With MSComm1
            .CommPort = intCommPort '通信端口号
            .Settings = strCommSettings ' "9600,N,8,2" '通信端口参数
            .InBufferSize = 1024 '缓冲区接收数据长度
            .InputMode = comInputModeBinary '端口以二进数据发送
            .InputLen = 1 '每次从端口缓冲区读数据的长度
            .RThreshold = 1 '接收N个字节就产生Oncomm事件
            .PortOpen = True '打开串口
        End With
    End Sub
      

  2.   

    每次接收一个就触发oncomm事件的话,后面的就收不到了。他一次发过来就24个字节
      

  3.   

    MSComm1.RThreshold = 0  '在接收数据时禁止触发OnComm事件
    用了这个以后,会不会丢数据,就是说在禁止触发oncomm事件的时候发过来的数据我这会不会收不到?
    他那边是1秒发一次
      

  4.   

    不会丢数据的
    建议楼主了解一下MSComm的基本属性。
    RThreshold=x,表示的是串口接收到x个字符就触发一次OnComm事件,而当x为0时,表示不触发OnComm事件,不触发事件,并不代表不能接收数据,数据依然源源不断的写入输入缓冲区,只不过没有触发OnComm事件而已。