串口发来一个17个字节的数据包,我怎么将其提取和处理啊?用过VC的串口处理,但是对VB的一点儿也不太懂。谁能提供个思路和具体实现的途径啊。包头是AA,后面是所要接收的数据。我想收到包头前将接收的数据踢出,收到包头开始处理相关数据。谢谢!

解决方案 »

  1.   

    用 MSComm 控件,接收全部 17 个字节以后再处理。
      

  2.   

    '添加 Command1  List1 MSComm1Dim Rcvdata$, Trec&, i&, Comrecno&, RcvStr&()
    Private Sub Form_Load()
       With MSComm1
          .CommPort = 1
          .Settings = "9600,n,8,1" '自己改为你的协议
          .InputLen = 0
          .InBufferSize = 1
          .RThreshold = 17
          .InputMode = comInputModeBinary
       End With
       Command1.Caption = "开始接收"
       Trec = 0
    End SubPrivate Sub Form_Unload(Cancel As Integer)
       If MSComm1.PortOpen Then MSComm1.PortOpen = False
       End
    End SubPrivate Sub Command1_Click()
       ReDim RcvStr&(Trec)
       For i = 0 To Trec - 1 '每次开始时别忘了清空
          RcvStr(i) = vbNull
       Next i
       If Not MSComm1.PortOpen Then MSComm1.PortOpen = True
       If MSComm1.PortOpen Then MSComm1.DTREnable = True
       List1.Clear
    End SubPrivate Static Sub MSComm1_OnComm()
       Dim okstring$, ReceivedLen%, Rx_buff() As Byte
       Select Case MSComm1.CommEvent
          Case comEvReceive '接收缓冲区收到Rthreshold 个字符时触发
             If MSComm1.InBufferCount > 0 Then
                ReceivedLen = MSComm1.InBufferCount
                Rx_buff = MSComm1.Input
                Rcvdata = ""
                For i = 0 To UBound(Rx_buff)
                   Rcvdata = Rcvdata & Trim(Chr(Rx_buff(i)))
                Next i
                RcvStr(Comrecno) = Val(Mid(Rcvdata, 2, 16)) '从第2位开始抓16位
                List1.AddItem CStr(RcvStr(Comrecno)) '添加List1方便看数据
                List1.Selected(List1.ListCount - 1) = True
                Me.Caption = CStr(RcvStr(Comrecno))
                Comrecno = Comrecno + 1
                If Comrecno > Trec Then
                   Trec = Comrecno
                   ReDim Preserve RcvStr&(Trec)
                End If
             End If
       End Select
    End Sub
      

  3.   

    Private Sub Command1_Click() 
       ReDim RcvStr&(Trec) 
       For i = 0 To Trec - 1 '每次开始时别忘了清空 
          RcvStr(i) = vbNull 
       Next i 
       If Not MSComm1.PortOpen Then MSComm1.PortOpen = True 
       If MSComm1.PortOpen Then MSComm1.DTREnable = True 
       List1.Clear 
       trec=0
    End Sub