我下位机的有三个地址:"0106"、“0206”、“0306”;,如果我在接收到
":020600010025FA"的数据。一个数据16位(十六进制),以冒号开始,“FA”是校验位。
那位大侠帮帮小弟。怎么判断接收到的数据是“0206”(地址位)“0001”(功能位),最终得到想要的数据位“0025”。让他(0025)在label里显示出来。希望大侠能给出提示。或写点类似的代码,不胜感激。(不明白的地方我在补充)

解决方案 »

  1.   

    楼主是要判断代码呢?还是要整个接收代码?
    前者简单,后者需要详细的通信协议.
    前者虽然简单,但LZ没描述清楚
    ":020600010025FA"的数据。一个数据16位(十六进制),以冒号开始,“FA”是校验位。
    一个数据16位(十六进制),应该是15字节长(ASCII字符.
      

  2.   

    '字符串表示的十六进制数据转化为相应的字节串
    '返回转化后的字节数
    Function strHexToByteArray(strText As String, bytByte() As Byte) As Integer
        
        Dim HexData As Integer          '十六进制(二进制)数据字节对应值
        Dim hstr As String * 1          '高位字符
        Dim lstr As String * 1          '低位字符
        Dim HighHexData As Integer      '高位数值
        Dim LowHexData As Integer       '低位数值
        Dim HexDataLen As Integer       '字节数
        Dim StringLen As Integer        '字符串长度
        Dim Account As Integer          '计数
            
        strTestn = ""                   '设初值
        HexDataLen = 0
        strHexToByteArray = 0
        
        StringLen = Len(strText)
        Account = StringLen \ 2
        ReDim bytByte(Account)
        
        For n = 1 To StringLen
        
            Do                                              '清除空格
                hstr = Mid(strText, n, 1)
                n = n + 1
                If (n - 1) > StringLen Then
                    HexDataLen = HexDataLen - 1
                    
                    Exit For
                End If
            Loop While hstr = " "
            
            Do
                lstr = Mid(strText, n, 1)
                n = n + 1
                If (n - 1) > StringLen Then
                    HexDataLen = HexDataLen - 1
                    
                    Exit For
                End If
            Loop While lstr = " "
            n = n - 1
            If n > StringLen Then
                HexDataLen = HexDataLen - 1
                Exit For
            End If
            
            HighHexData = ConvertHexChr(hstr)
            LowHexData = ConvertHexChr(lstr)
            
            If HighHexData = -1 Or LowHexData = -1 Then     '遇到非法字符中断转化
                HexDataLen = HexDataLen - 1
                
                Exit For
            Else
                
                HexData = HighHexData * 16 + LowHexData
                bytByte(HexDataLen) = HexData
                HexDataLen = HexDataLen + 1
                
                
            End If
                            
        Next n
        
        If HexDataLen > 0 Then                              '修正最后一次循环改变的数值
            HexDataLen = HexDataLen - 1
            ReDim Preserve bytByte(HexDataLen)
        Else
            ReDim Preserve bytByte(0)
        End If
        
        
        If StringLen = 0 Then                               '如果是空串,则不会进入循环体
            strHexToByteArray = 0
        Else
            strHexToByteArray = HexDataLen + 1
        End If
        
        
    End Function
    楼主可以参考上述代码来判断前4个和后4个字符串是否是相应的地址为和校验位,然后再把剩下的作为内容显示出来就可以了。
      

  3.   

    label1.caption=mid(":020600010025FA",9,4)?
      

  4.   

    下位机的有三个地址:"0106"、“0206”、“0306”;,如果我在接收到很多数据如下: 
    ":020600010025FA:010600020013DF:030600020001F1:0020600020015FA"的数据。数据格式16位(十六进制),以冒号开始,“FA”是校验位。 那位大侠帮帮小弟。怎么吧接收到的数据“:020600010025FA”其中的“0025以十进制显示出来。”“0206”(地址位)“0001”(功能位),最终得到想要的数据位“0025”。让他(0025)以十进制在label里显示出来。希望大侠能给出提示。或写点类似的代码,不胜感激。(不明白的地方我在补充)
      

  5.   

    Private Sub Form_Load()
    Dim str As String, a() As String, i As Integer
        Label1.Caption = ""
        str = ":020600010025FA:010600020013DF:030600020001F1:020600020015FA"
        a = Split(str, ":")
        For i = 1 To UBound(a)
            Label1.Caption = Label1.Caption + CStr(CLng("&H" & Mid(a(i), 9, 4))) + ";"
        Next i
    End Sub是要这个效果吗?
      

  6.   

    Option Explicit
        Dim strData As String
    Private Sub Form_Load()
        MSComm1.Settings = "9600,N,8,1"
        MSComm1.RThreshold = 1
        MSComm1.CommPort = 1
        MSComm1.InputMode = comInputModeText '按文本接收
        MSComm1.PortOpen = True
    End SubPrivate Sub MSComm1_OnComm()
        Select Case MSComm1.CommEvent
            Case 2
                MSComm1.InputLen = 0
                strData = strData & MSComm1.Input
                Text1 = strData
                If Mid(strData, 1, 1) = ":" And Right(strData, 2) = "FA" Then
                    Label1.Caption = Val(Mid(strData, 10, 4)) '这是按0025是10进制数
                      Label2.Caption = Val("&H" & Mid(strData, 10, 4)) '这是按0025是16进制数
                      strData = ""
                End If
        End Select
    End Sub