这段小程序是串口接收程序,串口接收到的数据MSComm.Input为组数
我用串口监听程序监听到的16进制的结果(MSComm.Input):IRP_MJ_READ    Length: 0003, Data: 11 A3 05 
以下程序就是要把这个组数转为字符显示出来,我得到的结果是:recTxt="11 00 3F"
我找不出以下程序有什么问题,请大家帮忙!!Public Sub Mscomm_OnComm()  '接收数据触发OnComm()事件  
    Dim recLen As Integer
   Dim recData as Byte
    Dim  recTxt as String
    Select Case MSComm.CommEvent  '在CommEvent中接收数据
    Case comEvReceive
            ReDim recData(MSComm.InBufferCount - 1)
            recLen = MSComm.InBufferCount
            recData = MSComm.Input
            For i = 0 To recLen - 1
                If Len((Hex$(recData(i)))) > 1 Then
                    temp = Hex$(recData(i))
                Else
                    temp = "0" & Hex$(recData(i))
                End If
                recTxt = Trim(recTxt) & " " & temp
            Next i
    End Select
    
End Sub

解决方案 »

  1.   

    A、Redim 那一句编译通不过的
    B、InputMode 要设成二进制方式
      

  2.   

    Option Explicit
        Dim recTxt As StringPrivate Sub Form_Load()
        MSComm.Settings = "9600,N,8,1"
        MSComm.RThreshold = 1
        MSComm.InputMode = comInputModeBinary
        MSComm.PortOpen = True
    End SubPrivate Sub MsComm_OnComm()
        Dim recLen As Integer
        Dim recData() As Byte
        Dim i As Integer
        Select Case MSComm.CommEvent  '在CommEvent中接收数据
            Case comEvReceive
                recLen = MSComm.InBufferCount
                ReDim recData(recLen)
                recData = MSComm.Input
                For i = 0 To UBound(recData)
                    If Len((Hex(recData(i)))) = 1 Then
                        recTxt = recTxt & "0" & Hex(recData(i))
                    Else
                        recTxt = recTxt & Hex(recData(i))
                    End If
                Next i
                Text1 = recTxt
           End Select
    End Sub
      

  3.   

    zdingyun 你好,按你的指点把接收改为二进制接收,结果就正常了,谢谢!
    我还不很理解inputMode为二进制和文本制有什么本质的区别,请为我解答一下,谢谢!