使用comdebeger V1.0软件接收到232串口的数据为:
AB 01 EE 01 AD 10 15 AD 00 00 00 00 02 00 00 00 即16个16进制数
使用VB6中MScom控件自己编写的串口调试程序接收到的的数据为:
AB 01 EE 01 AD 10 15 AD 00 00 00 00 02
AB 01 EE 02 AD 10 15 AD 00 00 00 
AB 01 EE 03 AD 10 15 AD 00 00 00 00
这是为什么?怎么能让自己编写的调试程序能接收到上面格式的数据(即16个16进制数) 

解决方案 »

  1.   

    设置
    MSComm1.RThreshold = 16      
      

  2.   

    Option Explicit
        Dim strData As String
        Dim BytReceived() As BytePrivate Sub Form_Load()
        MSComm1.CommPort = 1                   'COM端口
        MSComm1.Settings = "9600,n,8,1"
        MSComm1.InputMode = comInputModeBinary      '采用二进制传输
        MSComm1.InBufferCount = 0   '清空接受缓冲区
        MSComm1.OutBufferCount = 0  '清空传输缓冲区
        MSComm1.RThreshold = 1      '产生MSComm事件
        MSComm1.InBufferSize = 1024
        MSComm1.PortOpen = True
    End SubPrivate Sub MSComm1_OnComm() '接收数据
        Dim strBuff As String
        Select Case MSComm1.CommEvent
            Case 2
                MSComm1.InputLen = 0
                strBuff = MSComm1.Input
                BytReceived() = strBuff
                Dim i As Integer
                '接收数据处理为16进制
                For i = 0 To UBound(BytReceived)
                    If Len(Hex(BytReceived(i))) = 1 Then
                        strData = strData & "0" & Hex(BytReceived(i))
                    Else
                        strData = strData & Hex(BytReceived(i))
                    End If
                Next
                If Mid(strData, 1, 2) = "AB" And Len(strData) = 32 Then
                    Text1 = strData
                    strData = ""
                End If
        End Select
    End Sub
      

  3.   

    Option Explicit
        Dim strData As String
        Dim BytReceived() As BytePrivate Sub Form_Load()
        MSComm1.CommPort = 1                   'COM端口
        MSComm1.Settings = "9600,n,8,1"
        MSComm1.InputMode = comInputModeBinary      '采用二进制传输
        MSComm1.InBufferCount = 0   '清空接受缓冲区
        MSComm1.OutBufferCount = 0  '清空传输缓冲区
        MSComm1.RThreshold = 1      '产生MSComm事件
        MSComm1.InBufferSize = 1024
        MSComm1.PortOpen = True
    End SubPrivate Sub MSComm1_OnComm() '接收数据
        Dim strBuff As String
        Select Case MSComm1.CommEvent
            Case 2
                MSComm1.InputLen = 0
                strBuff = MSComm1.Input
                BytReceived() = strBuff
                Dim i As Integer
                '接收数据处理为16进制
                For i = 0 To UBound(BytReceived)
                    If Len(Hex(BytReceived(i))) = 1 Then
                        strData = strData & "0" & Hex(BytReceived(i)) & " "
                    Else
                        strData = strData & Hex(BytReceived(i)) & " "
                    End If
                Next
                If Mid(strData, 1, 2) = "AB" And Len(strData) = 48 Then
                    Text1 = strData
                    strData = ""
                End If
        End Select
    End Sub
      

  4.   

    能不能告诉我为什么用mscom读出来的数有的是13个,有的是11个? 
      

  5.   

    Public Function OpenPort(PortNo As Integer, Optional InBufferSize As Integer = 1024, Optional OutBufferSize As Integer = 512) As Long
        On Error GoTo ErrExit
        MSComm1.CommPort = PortNo                   '采用COM端口
        MSComm1.Settings = "9600,n,8,1"
        MSComm1.InputMode = comInputModeBinary      '采用二进制传输
        MSComm1.InputLen = 0                        '读取缓冲区全部内容
        MSComm1.NullDiscard = False                 'NULL字符从端口传送到接受缓冲区
        MSComm1.DTREnable = False                   'DTR线无效
        MSComm1.EOFEnable = False                   '不寻找EOF符
        MSComm1.RTSEnable = False                   'RTS线无效
        MSComm1.InBufferCount = 0                   '清空接受缓冲区
        MSComm1.OutBufferCount = 0                  '清空传输缓冲区
        MSComm1.SThreshold = 0                      '不产生MSComm事件
        MSComm1.RThreshold = 1                      '收到一个字符就产生MSComm事件
        MSComm1.InBufferSize = InBufferSize         '接收缓冲区  默认为1024个字节
        MSComm1.OutBufferSize = OutBufferSize       '发送缓冲区  默认为512个字节
        MSComm1.PortOpen = True                     '打开端口
        OpenPort = 0
        Exit Function
    ErrExit:
        OpenPort = 1
    End FunctionPrivate Sub MSComm1_OnComm()
        '------------------------------------------------
        If MSComm1.CommEvent >= 1001 And MSComm1.CommEvent <= 1011 Then
            Exit Sub
        End If    '----------------------------------------------------
        Dim bytReceiveArray() As Byte        '接收数据缓冲区
        Dim VarReceiveData As Variant        '接收的变体数据
        Dim t As Integer
        Dim i As Long    '数据接收
        If MSComm1.CommEvent = comEvReceive And MSComm1.InBufferCount >= 1 Then
        
            '-------------------------------
            t = MSComm1.InBufferCount
            VarReceiveData = MSComm1.Input
            ReDim bytReceiveArray(0) As Byte
            bytReceiveArray = VarReceiveData
            
            For i = 0 To t - 1
                txtR.Text = txtR.Text & Hex(bytReceiveArray(i)) & " "
            Next    End If
        '------------------------------------------------    Exit Sub    '----------------
    ToExit:
        'Resume Next
    End Sub
      

  6.   

    从你的代码看接收部分无明显错误,但缺少接收数据的正确与否及长度判断:代码略做修改:
    Private Sub MSComm1_OnComm()
        If MSComm1.CommEvent >= 1001 And MSComm1.CommEvent <= 1011 Then
            Exit Sub
        End If
        Dim bytReceiveArray() As Byte        '接收数据缓冲区
        Dim VarReceiveData As Variant        '接收的变体数据
        Dim t As Integer
        Dim i As Long
        '数据接收
        If MSComm1.CommEvent = comEvReceive And MSComm1.InBufferCount >= 1 Then
            t = MSComm1.InBufferCount
            VarReceiveData = MSComm1.Input
            ReDim bytReceiveArray(0) As Byte
            bytReceiveArray = VarReceiveData
            For i = 0 To t - 1
                If Len(Hex(bytReceiveArray(i))) = 1 Then
                    txtr.Text = txtr.Text & "0" & Hex(bytReceiveArray(i)) & " "
                Else
                    txtr.Text = txtr.Text & Hex(bytReceiveArray(i)) & " "
                End If
            Next
            If Mid(txtr, 1, 2) = "AB" And Len(txtr) = 48 Then
                Text1 = txtr
                txtr = ""
            End If
        End If
        Exit Sub
    End Sub
      

  7.   

    Option Explicit
        Dim PortNo As Long
        Dim InBufferSize As Integer
        Dim OutBufferSize As Integer
    Private Sub Command1_Click()
        PortNo = 1
        OpenPort (PortNo)
    End SubPublic Function OpenPort(PortNo As Integer, Optional InBufferSize As Integer = 1024, Optional OutBufferSize As Integer = 512) As Long
        On Error GoTo ErrExit
        MSComm1.CommPort = PortNo                  '采用COM端口
        MSComm1.Settings = "9600,n,8,1"
        MSComm1.InputMode = comInputModeBinary      '采用二进制传输
        MSComm1.InputLen = 0                        '读取缓冲区全部内容
        MSComm1.NullDiscard = False                'NULL字符从端口传送到接受缓冲区
        MSComm1.DTREnable = False                  'DTR线无效
        MSComm1.EOFEnable = False                  '不寻找EOF符
        MSComm1.RTSEnable = False                  'RTS线无效
        MSComm1.InBufferCount = 0                  '清空接受缓冲区
        MSComm1.OutBufferCount = 0                  '清空传输缓冲区
        MSComm1.SThreshold = 0                      '不产生MSComm事件
        MSComm1.RThreshold = 1                      '收到一个字符就产生MSComm事件
        MSComm1.InBufferSize = InBufferSize        '接收缓冲区  默认为1024个字节
        MSComm1.OutBufferSize = OutBufferSize      '发送缓冲区  默认为512个字节
        MSComm1.PortOpen = True                    '打开端口
        OpenPort = 0
        Exit Function
    ErrExit:
        OpenPort = 1
    End FunctionPrivate Sub Form_Load()
        txtr = ""
    End SubPrivate Sub MSComm1_OnComm()
        If MSComm1.CommEvent >= 1001 And MSComm1.CommEvent <= 1011 Then
            Exit Sub
        End If
        Dim bytReceiveArray() As Byte        '接收数据缓冲区
        Dim VarReceiveData As Variant        '接收的变体数据
        Dim t As Integer
        Dim i As Long
        '数据接收
        If MSComm1.CommEvent = comEvReceive And MSComm1.InBufferCount >= 1 Then
            t = MSComm1.InBufferCount
            VarReceiveData = MSComm1.Input
            ReDim bytReceiveArray(0) As Byte
            bytReceiveArray = VarReceiveData
            For i = 0 To t - 1
                If Len(Hex(bytReceiveArray(i))) = 1 Then
                    txtr.Text = txtr.Text & "0" & Hex(bytReceiveArray(i)) & " "
                Else
                    txtr.Text = txtr.Text & Hex(bytReceiveArray(i)) & " "
                End If
            Next
            If Mid(txtr, 1, 2) = "AB" And Len(txtr) = 48 Then
                Text1 = txtr
                txtr = ""
            End If
        End If
        Exit Sub
    End Sub