1)我认为你的InputLen = 5的用法不妥.
InputLen 属性
设置并返回 Input 属性从接收缓冲区读取的字符数。
InputLen 属性的缺省值是 0。设置 InputLen 为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。
2)属性InputMode = comInputModeBinary 是设置接收数据模式为二进制形式,那么你收到的是BYTE数据类型,应由接收代码处理成16进制的字符串来显示.根据传进的数据看是20字长,如果接收数据始终为20字长属性RThreshold建议设为20.
建议你可参考"人民邮电出版社"的"VISUAL BASIC 串扣通信工程开发实例导航"一书,它的第1章 串口调试精灵代码是相当好的代码,消化吸收作修改可解决很多问题.
关于一条一条记录定长进入,我认为应将完整记录集合读入,然后按记录格式给接收到记录且代码判断正确,由其后代码处理.
以下是依据串口调试精灵代码做的MSComm_OnComm事件的代码.我仔细看了其代码,对InputLen属性的用法仅是在关闭串口时使用了缺省值 0.
Private Sub ctrMSComm_OnComm()
    Dim bytInput() As Byte
    Dim intInputLen As Integer
    Dim outputV As Single
    Select Case frmMain.ctrMSComm.CommEvent
        Case comEvReceive
            If blnReceiveFlag Then
                If Not frmMain.ctrMSComm.PortOpen Then
                    frmMain.ctrMSComm.CommPort = intPort
                    frmMain.ctrMSComm.Settings = strSet
                    frmMain.ctrMSComm.PortOpen = True
                End If
                '此处添加处理接收的代码
                frmMain.ctrMSComm.InputMode = comInputModeBinary
                intInputLen = frmMain.ctrMSComm.InBufferCount
                Text3 = intInputLen
                ReDim bytInput(intInputLen)
                bytInput = frmMain.ctrMSComm.Input
                Call InputManage(bytInput, intInputLen)
                Call GetDisplayText
                '插入处理代码
                Text2 = HexStr1
                If Mid(HexStr1, 17, 2) >= 80 And Mid(HexStr1, 17, 2) <= 81 Then
                    If Mid(HexStr1, 17, 2) = "80" Then
                        blL = Mid(HexStr1, 11, 2)
                        Call Hex_bin '判别故障
                        alame(0) = Mid(zt_dm1, 2.1)
                        dizhi = Val(Mid(HexStr1, 18, 1))
                        xh = Val(Mid(HexStr1, 20, 1))
                        outputV = Val("&H" & Mid(HexStr1, 9, 2)) / 2.55
                        frmYibiao.Label2(dizhi) = Int(outputV)
                        sj_bm(dizhi, xh) = Val("&H" & Mid(HexStr1, 5, 4)) / 10 '16进制转换为10进制
                        frmYibiao.Label1(dizhi) = sj_bm(dizhi, xh)
                        record_jm(0) = Val("&H" & Mid(HexStr1, 1, 4)) / 10
                        frmYibiao.Label3(dizhi) = record_jm(0) 'Val("&H" & Mid(HexStr1, 5, 4)) / 10
                        If xh = 2 Then
                        End If
                    ElseIf Mid(HexStr1, 17, 2) = "81" Then
                        blL = Mid(HexStr1, 11, 2)
                        Call Hex_bin '判别故障
                        alame(1) = Mid(zt_dm1, 2.1)
                        dizhi = Val(Mid(HexStr1, 18, 1))
                        xh = Val(Mid(HexStr1, 20, 1))
                        outputV = Val("&H" & Mid(HexStr1, 9, 2)) / 2.55
                        frmYibiao.Label2(dizhi) = Int(outputV)
                        sj_bm(dizhi, xh) = Val("&H" & Mid(HexStr1, 5, 4)) / 10
                        frmYibiao.Label1(dizhi) = sj_bm(dizhi, xh)
                        record_jm(1) = Val("&H" & Mid(HexStr1, 1, 4)) / 10
                        frmYibiao.Label3(dizhi) = record_jm(1) 'Val("&H" & Mid(HexStr1, 5, 4)) / 10
                        If xh = 2 Then
                        End If
                    End If
                    Text4 = Val(jieshou_sj) / 10
                    Text5 = Mid(HexStr1, 17, 2) & Mid(HexStr1, 19, 2) & Text4
                End If
                Call display
                If Val(Text3) >= 10 Then
                    Call cmdClear_Click
                End If
                If Not blnAutoSendFlag And Not blnReceiveFlag Then
                    frmMain.ctrMSComm.PortOpen = False
                End If
            End If
    End Select
End Subhttp://zhidao.baidu.com/question/18050782.html
其它参阅上述网址本人关于串口通信在baidu的答复,希望对你有帮助.祝你成功!