Dim inbuff() As Byte
Dim x As Integer 
Private Sub Form_Load() 'MSComm1初始化    MSComm1.CommPort = 5
    MSComm1.Settings = "1200,e,8,1"    MSComm1.InBufferSize = 1024    MSComm1.InputMode = comInputModeBinary    MSComm1.RThreshold = 1    MSComm1.PortOpen = True
     MSComm1.OutBufferCount = 0      '清除发送缓冲区
        MSComm1.InBufferCount = 0       '清除接收缓冲区
End Sub
 
Private Sub MSComm1_OnComm()
 
    Dim strHex As String    Select Case MSComm1.CommEvent
        Case 2
          
        MSComm1.InputLen = 0
       
        inbuff = MSComm1.Input
        
        'x = x + 1
        'Print x
           
         jeishou
        
    End SelectEnd SubPrivate Sub ComCvot_Click()
        Dim OutBuffer() As Byte
        Dim tem As Variant
        Dim e As Integer
        Dim q As Integer
        Dim LenOfText As Integer
        Dim Bvot As String
        Dim ShuruText As String
    Bvot = "6858000000000068010246e95a16"
    ShuruText = Bvot
    LenOfText = Len(ShuruText) \ 2 - 1
    ReDim OutBuffer(LenOfText)
   
        q = 0
        For e = 1 To Len(ShuruText) Step 2
            tem = Mid(ShuruText, e, 2)
            OutBuffer(q) = Val("&H" & tem)
                       q = q + 1
              Next
                MSComm1.Output = OutBuffer
End SubPublic Sub jeishou()
    
    
    'For i = 0 To UBound(inbuff)        strHex = strHex & Right("0" & Hex(inbuff(i)), 2) & " "
        
        Text1 = Text1 + strHex
        
     '   Next i
End Sub我发送以后,接受的数据为  68 58 00 00 00 00 00 68 81 04 46 E9 33 33 42 16 如何把这一串字符中第8个字符和第九个字符提取出来单独显示到另外两个文本框中去呢?

解决方案 »

  1.   

    Public Sub jeishou()
        For i = 0 To UBound(inbuff)
            strHex = strHex & Right("0" & Hex(inbuff(i)), 2) & " "
        Next i
        Text1 = Val("&H" & Mid(strHex, 15, 2))
        Text2 = Val("&H" & Mid(strHex, 17, 2))
    End Sub
      

  2.   

    Public Sub jeishou()
        For i = 0 To UBound(inbuff)
            strHex = strHex & Right("0" & Hex(inbuff(i)), 2) 
        Next i
        Text1 = Val("&H" & Mid(strHex, 15, 2))
        Text2 = Val("&H" & Mid(strHex, 17, 2))
    End Sub
      

  3.   

    这个我试过,是可以的,但是我想通过inbuff(i)数组这样的形式来赋值,因为后期我还要牵扯一些判断。所以采用这种模式会很费劲,能不能用inbuff()这种的来赋值呢?谢谢
      

  4.   


    Dim inbuff() As Byte
    Dim x As Integer
    Private Sub Form_Load() 'MSComm1初始化    MSComm1.CommPort = 5
        
        MSComm1.Settings = "1200,e,8,1"    MSComm1.InBufferSize = 1024    MSComm1.InputMode = comInputModeBinary    MSComm1.RThreshold = 1    MSComm1.PortOpen = True
        
        MSComm1.OutBufferCount = 0
        '清除发送缓冲区
        MSComm1.InBufferCount = 0
        '清除接收缓冲区
        MSComm1.InputLen = 1
        
    End Sub
     
    Private Sub MSComm1_OnComm()
     
        Dim strHex As String
        Dim hx As Variant
    ss:
        Select Case MSComm1.CommEvent
            Case 2
              hx = MSComm1.Input
            Text1.Text = Text1.Text & hx(0)
            'x = x + 1
            'Print x
               If MSComm1.InBufferCount <> 0 Then
               GoTo ss
            End If
             jeishou
            
        End SelectEnd SubPrivate Sub ComCvot_Click()
            Dim OutBuffer() As Byte
            Dim tem As Variant
            Dim e As Integer
            Dim q As Integer
            Dim LenOfText As Integer
            Dim Bvot As String
            Dim ShuruText As String
        Bvot = "6858000000000068010246e95a16"
        ShuruText = Bvot
        LenOfText = Len(ShuruText) \ 2 - 1
        ReDim OutBuffer(LenOfText)
       
            q = 0
            For e = 1 To Len(ShuruText) Step 2
                tem = Mid(ShuruText, e, 2)
                OutBuffer(q) = Val("&H" & tem)
                           q = q + 1
                  Next
                    MSComm1.Output = OutBuffer
    End SubPublic Sub jeishou()
        For i = 0 To UBound(inbuff)
            strHex = strHex & Right("0" & Hex(inbuff(i)), 2)
        Next i
        Text1 = Val("&H" & Mid(strHex, 15, 2))
        Text2 = Val("&H" & Mid(strHex, 17, 2))
    End Sub
      

  5.   

    除非你设置MSComm1.RThreshold为你需接收的数据字节长度.
      

  6.   

    最好还是设置RThreshold=1,楼主你可以在在接收数据之前延迟片刻,等待下位机数据完全发送上来Private Sub MSComm1_OnComm()
     
        Dim strHex As String
        Sleep 30
        Select Case MSComm1.CommEvent
            Case 2
              
            MSComm1.InputLen = 0
           
            inbuff = MSComm1.Input
            
            'x = x + 1
            'Print x
               
             jeishou
            
        End SelectEnd Sub