我的MSComm控件属性设置如下:
   MSComm.PortOpen = True
   MSComm.Settings = "9600,N,8,1"
   MSComm.OutBufferCount = 0              '清空发送缓冲区
   MSComm.InBufferCount = 0
   MSComm.RThreshold = 5              '滑空接收缓冲区
   MSComm.InputLen = 0
  
   MSComm.InputMode = comInputModeBinary  '接收二进制数据
   MSComm.SThreshold = 1数据接收函数如下:
Private Sub MSComm_OnComm()
Dim data(5) As Byte
Select Case MSComm.CommEvent
Case comEvReceive
data()= MSComm.Input
End Sub
这个肯定是错误的,请问怎么才能通过MSComm.Input得到多个字节呢?我设置了MSComm.RThreshold = 5

解决方案 »

  1.   

    Option Explicit
        Dim BytReceived() As Byte
        Dim strData As StringPrivate Sub Form_Load()
        MSComm1.Settings = "9600,N,8,1"
        MSComm1.InputMode = comInputModeBinary
        MSComm1.RThreshold = 1
        MSComm1.PortOpen = True
    End Sub
    Private Sub MSComm1_OnComm() '接收数据
        Dim strBuff As String
        Text1 = ""
        Select Case MSComm1.CommEvent
            Case 2
                MSComm1.InputLen = 0
                strBuff = MSComm1.Input
                BytReceived() = strBuff
                jieshou
                If Len(strData) = 10 Then
                    strData = ""
                End If
        End Select
    End Sub
    Public Function jieshou() '接收数据处理为16进制
        Dim i As Integer
        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
        Text1 = strData
    End Function
      

  2.   

    基本上有两类方法:
    1 延时。进入 OnComm 事件后,等待适当时间再接收。Private Sub MSComm_OnComm() 
    Dim data(5) As Byte 
    Select Case MSComm.CommEvent 
    Case comEvReceive 
    Sleep 100
    data()= MSComm.Input 
    End Sub2 等待至预定数量的字节数后再接收:
    Private Sub MSComm_OnComm() 
    Dim data(5) As Byte 
    Select Case MSComm.CommEvent 
    Case comEvReceive 
    Do Until MSComm.InBufferCount = myCount
        DoEvents
    Loop
    data()= MSComm.Input 
    End Sub第二类方法要么是固定长度数据包(也可以用你的 RThreshold 属性设置来处理),要么是数据打包传送,在包头中说明数据长度。
    在后一种情况下,先将 RThreshold 和 InputLen 设置成包头长度。事件发生后取一次包头。然后将 InputLen 改为0 或者数据实际长度,并等待数据完全到达。 
      

  3.   

    将Mscomm.Input赋给一个数组,而后判断该数组有多少个字节,再一个一个地取出来
    不知道是否这样
      

  4.   

    我的下位机DSP通过串口发送的方式是这样的:
    每个机器周期只发送一个字节
    发送五个自己就需要5个机器周期
    这种情形下VB接收数据需要怎么一种方式呢?
      

  5.   


    Private Sub MSComm1_OnComm() '接收数据
        Dim strBuff As String
        Text1 = ""
        Select Case MSComm1.CommEvent
            Case 2
                MSComm1.InputLen = 0
                strBuff = MSComm1.Input
                BytReceived() = strBuff
                jieshou
                strData = "" '本句依实际情况使用
        End Select
    End Sub
      

  6.   

    既然用
    BytReceived() = strBuff
    得到了串口通信过来的数据,那为什么不直接取数组
    BytReceived里面的数据呢?
      

  7.   

    运行到这一行For i = 0 To UBound(BytReceived)
    出现类型不匹配的错误
    请问这是怎么回事啊?