⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frm_reg.frm

📁 提供给入门级别的GPRS编程人员
💻 FRM
📖 第 1 页 / 共 2 页
字号:
        Debug.Print UBound(bybuff) + 1
        For i = 0 To UBound(bybuff) Step 1
            str = str & bybuff(i) & " "
        Next i
        Debug.Print "缓冲区内的总数据为:"
        Debug.Print str
        
        If UBound(bybuff) >= 2 Then '可能存在完整的消息的最小消息长度(消息开始符都为3字节)
                
                For i = 0 To UBound(bybuff) - 2 Step 1
                    '//MO: Or WD: Or WM: 都有可能是一个完整的消息
                    If (bybuff(i) = 77 And bybuff(i + 1) = 79 And bybuff(i + 2) = 58) Or (bybuff(i) = 87 And bybuff(i + 1) = 68 And bybuff(i + 2) = 58) Or (bybuff(i) = 87 And bybuff(i + 1) = 77 And bybuff(i + 2) = 58) Then ' MO:可能是一个完整的消息
                        ReDim Preserve sgmsg(j) As Integer
                        sgmsg(j) = i
                        j = j + 1
                    End If
                Next i
                '//一个可能的完整消息都找不到则认为是错误数据丢弃(2006/5/11修改)
                If j = 0 Then
                    '//清空缓冲区
                    ReDim bybuff(0) As Byte
                    bybuff(0) = 0
                    Exit Sub
                End If
                
                ReDim mymsg(j - 1) As msg
                
                '//1个完整的消息
                '//(bybuff中所有的数据取出认为是正确的消息此时只存在两种可能这个消息刚好是一个完整正确消息没有返回数据,这个消息不是一个完整的消息返回全部数据等待下次使用,可保证disp_message处理消息的算法正确)
                If j = 1 Then
                    mymsg(0).msginfo = bybuff
                    myremsg = disp_message(mymsg(0).msginfo)
                    tempbuff = myremsg.haltdata
                    ReDim bybuff(UBound(tempbuff)) As Byte
                    For k = 0 To UBound(tempbuff)
                        bybuff(k) = tempbuff(k)
                    Next k
                    Exit Sub
                End If
                    '//多个完整的消息(bybuff中两个开始符之间是一个完整的消息取出调用消息处理函数返回剩余数据存入缓冲区等待下次使用)
                If j >= 2 Then
                    '//前j-1个消息无论是不是正确的消息都没有返回数据
                    '//(每个消息刚好是一个正确的消息无返回数据,如果是一个错误的消息直接丢弃)
                    For m = 0 To j - 2 Step 1 '
                        ReDim mymsg(m).msginfo(sgmsg(m + 1) - sgmsg(m) - 1)
                        For k = 0 To sgmsg(m + 1) - sgmsg(m) - 1
                            mymsg(m).msginfo(k) = bybuff(k)
                        Next k
                        myremsg = disp_message(mymsg(m).msginfo)
                    Next m
                    '//第j个消息 数组下标为j-1 即最后1个消息
                    '//(这个消息刚好是一个完整正确消息没有返回数据,这个消息不是一个完整的消息返回全部数据等待下次使用,可保证disp_message处理消息的算法正确)
                    ReDim mymsg(j - 1).msginfo(UBound(bybuff) - sgmsg(j - 1))
                    For k = 0 To UBound(bybuff) - sgmsg(j - 1) Step 1
                        mymsg(j - 1).msginfo(k) = bybuff(k)
                    Next k
                    myremsg = disp_message(mymsg(j - 1).msginfo)
                    tempbuff = myremsg.haltdata
                    ReDim bybuff(UBound(tempbuff)) As Byte
                    For k = 0 To UBound(tempbuff)
                        bybuff(k) = tempbuff(k)
                    Next k
                    Exit Sub
                End If
                   
        '//缓冲区内只有1个数据(如果是'M' or 'W') 则保留
       ElseIf UBound(bybuff) = 0 And (bybuff(0) = 77 Or bybuff(0) = 87) Then Exit Sub
       '//冲区内只有2个数据
       ElseIf UBound(bybuff) = 1 Then  '//防止开机出错
              '//冲区内只有2个数据(如果第1个是'M' 且第2个是'O' )则保留
              If bybuff(0) = 77 And bybuff(1) = 79 Then Exit Sub
              '//冲区内只有2个数据(如果第1个是'W' 且第2个是'D' or 'M' )则保留
              If bybuff(0) = 87 And (bybuff(1) = 68 Or bybuff(1) = 77) Then Exit Sub
       '//其它情况都认为是错误数据丢弃
       Else
            '//清空缓冲区
            ReDim bybuff(0) As Byte
            bybuff(0) = 0
            Exit Sub
       End If
    End Select
End Sub

Private Sub txt_id_Change()
    Dim i As Integer
    Dim str As String
    If Trim(txt_id.Text) = "" Then Exit Sub
    For i = 1 To Len(Trim(txt_id.Text))
        If Asc(Mid(Trim(txt_id.Text), i, 1)) >= 48 And Asc(Mid(Trim(txt_id.Text), i, 1)) <= 57 Then
            str = str & Mid(Trim(txt_id.Text), i, 1)
        End If
    Next i
    txt_id.Text = str
End Sub

Private Sub txt_man_Change()
    Dim str As String
    Dim i As Integer
    If Trim(txt_man.Text) = "" Then Exit Sub
    For i = 1 To Len(Trim(txt_man.Text))
        If Asc(Mid(Trim(txt_man.Text), i, 1)) < 0 Then
            str = str & Mid(Trim(txt_man.Text), i, 1)
        End If
    Next i
    txt_man.Text = str
End Sub

Private Sub txt_mobile_Change()
    Dim i As Integer
    Dim str As String
    If Trim(txt_mobile.Text) = "" Then Exit Sub
    For i = 1 To Len(Trim(txt_mobile.Text))
        If Asc(Mid(Trim(txt_mobile.Text), i, 1)) >= 48 And Asc(Mid(Trim(txt_mobile.Text), i, 1)) <= 57 Then
            str = str & Mid(Trim(txt_mobile.Text), i, 1)
        End If
    Next i
    txt_mobile.Text = str
End Sub

Private Sub txt_name_Change()
    Dim str As String
    Dim i As Integer
    If Trim(txt_name.Text) = "" Then Exit Sub
    For i = 1 To Len(Trim(txt_name.Text))
        If Asc(Mid(Trim(txt_name.Text), i, 1)) < 0 Then
            str = str & Mid(Trim(txt_name.Text), i, 1)
        End If
    Next i
    txt_name.Text = str
End Sub

Private Sub txt_pw_Change()
    Dim i As Integer
    Dim str As String
    If Trim(txt_pw.Text) = "" Then Exit Sub
    For i = 1 To Len(Trim(txt_pw.Text))
        If Asc(Mid(Trim(txt_pw.Text), i, 1)) >= 48 And Asc(Mid(Trim(txt_pw.Text), i, 1)) <= 57 Then
            str = str & Mid(Trim(txt_pw.Text), i, 1)
        End If
    Next i
    txt_pw.Text = str
End Sub

Private Sub txt_sim_Change()
    Dim i As Integer
    Dim str As String
    If Trim(txt_sim.Text) = "" Then Exit Sub
    For i = 1 To Len(Trim(txt_sim.Text))
        If Asc(Mid(Trim(txt_sim.Text), i, 1)) >= 48 And Asc(Mid(Trim(txt_sim.Text), i, 1)) <= 57 Then
            str = str & Mid(Trim(txt_sim.Text), i, 1)
        End If
    Next i
    txt_sim.Text = str
End Sub

Private Sub txt_tel_Change()
    Dim i As Integer
    Dim str As String
    If Trim(txt_tel.Text) = "" Then Exit Sub
    For i = 1 To Len(Trim(txt_tel.Text))
        If Asc(Mid(Trim(txt_tel.Text), i, 1)) >= 48 And Asc(Mid(Trim(txt_tel.Text), i, 1)) <= 57 Then
            str = str & Mid(Trim(txt_tel.Text), i, 1)
        End If
    Next i
    txt_tel.Text = str
End Sub

Private Sub xpcmdbutton1_Click() '注册
    Dim strregdata1 As String
    Dim regdata1() As Byte
    Dim regdata2() As Byte
    Dim tempregdata2() As Byte
    Dim regdata() As Byte
    Dim numregdata As Integer
    Dim i As Integer
    Dim centerip As String
    Dim centerport As String
    centerip = GetInIKeyValue("center", "centerip", App.Path & "\file\gprspcset.ini")
    centerport = GetInIKeyValue("center", "centerport", App.Path & "\file\gprspcset.ini")
    strregdata1 = "ATJAU" & centerip & "PORT:" & centerport
    regdata1 = StrConv(strregdata1, vbFromUnicode)
    tempregdata2 = dispose_senddta
    If UBound(tempregdata2) = 0 And tempregdata2(0) = 0 Then Exit Sub '2006-6-5修改防止输入出错
    regdata2 = reg_pctocenter(tempregdata2)
    numregdata = UBound(regdata1) + UBound(regdata2) + 2
    ReDim regdata(numregdata - 1) As Byte
    For i = 0 To UBound(regdata1) Step 1
        regdata(i) = regdata1(i)
    Next i
    For i = UBound(regdata1) + 1 To numregdata - 1
        regdata(i) = regdata2(i - UBound(regdata1) - 1)
    Next i
    comsenddatame regdata '发送数据
    
    '//清空缓冲区
    ReDim bybuff(0) As Byte

End Sub

Private Sub xpcmdbutton2_Click() '退出
   Unload Me
End Sub
Private Function dispose_senddta() As Byte() '注册信息处理函数
    Dim str1 As String
    Dim str2 As String
    Dim str3 As String
    Dim str4 As String
    Dim str5 As String
    Dim str6 As String
    Dim str7 As String
    Dim num As Long
    Dim i As Integer
    Dim senddata() As Byte
    Dim tempname() As Byte
    Dim byname(0 To 29)
    Dim tempman() As Byte
    Dim byman(0 To 5) As Byte
    
    '从输入框中提取输入信息
    str1 = Trim(txt_id.Text)
    str2 = Trim(txt_name.Text)
    str3 = Trim(txt_pw.Text)
    
    str4 = Trim(txt_sim.Text)
    str5 = Trim(txt_tel.Text)
    
    str6 = Trim(txt_mobile.Text)
    str7 = Trim(txt_man.Text)
    If Len(str1) < 6 Then
        MsgBox ("请输入6位数字的区域号!"), vbOKOnly + vbCritical, "错误"
        ReDim senddata(0) As Byte
        senddata(0) = 0
        dispose_senddta = senddata
        Exit Function
    End If
     If str2 = "" Then
        MsgBox ("区域名称不能为空!"), vbOKOnly + vbCritical, "错误"
        ReDim senddata(0) As Byte
        senddata(0) = 0
        dispose_senddta = senddata
        Exit Function
    End If
     If Len(str3) < 12 Then
        MsgBox ("请输入12位数字的区域密码!"), vbOKOnly + vbCritical, "错误"
        ReDim senddata(0) As Byte
        senddata(0) = 0
        dispose_senddta = senddata
        Exit Function
    End If
    If Len(str4) < 11 Then
        MsgBox ("请输入11位数字的SIM卡号!"), vbOKOnly + vbCritical, "错误"
        ReDim senddata(0) As Byte
        senddata(0) = 0
        dispose_senddta = senddata
        Exit Function
    End If
    If Len(str5) < 11 Then
        MsgBox ("请输入11位数字电话号码!"), vbOKOnly + vbCritical, "错误"
        ReDim senddata(0) As Byte
        senddata(0) = 0
        dispose_senddta = senddata
        Exit Function
    End If
    If Len(str6) < 11 Then
        MsgBox ("请输入11位数字联系手机!"), vbOKOnly + vbCritical, "错误"
        ReDim senddata(0) As Byte
        senddata(0) = 0
        dispose_senddta = senddata
        Exit Function
    End If
    If str7 = "" Then
        MsgBox ("联系人不能为空!"), vbOKOnly + vbCritical, "错误"
        ReDim senddata(0) As Byte
        senddata(0) = 0
        dispose_senddta = senddata
        Exit Function
    End If
    
    ReDim senddata(62) As Byte '注册信息共63字节
    For i = 0 To 2 Step 1 '区域号(3字节)
        num = Mid(str1, 2 * i + 1, 2)
        senddata(i) = num
    Next i
    
    tempname = StrConv(str2, vbFromUnicode) '区域名称(汉字30字节)
    If UBound(tempname) < 29 Then '不满30个字节
        For i = 0 To UBound(tempname) Step 1
            byname(i) = tempname(i)
        Next i
        For i = UBound(tempname) + 1 To 29 Step 1 '填空格
            byname(i) = 32
        Next i
    Else '30个字节不填空格
        For i = 0 To 29 Step 1
            byname(i) = tempname(i)
        Next i
    End If
    For i = 3 To 32 Step 1
        senddata(i) = byname(i - 3)
    Next i
    
    For i = 33 To 38 Step 1 '区域密码(6字节)
        num = Mid(str3, 2 * (i - 33) + 1, 2)
        senddata(i) = num
    Next i
    
  
    
    For i = 39 To 43 Step 1 'SIM卡号(前5字节)
        num = Mid(str4, 2 * (i - 39) + 1, 2)
        senddata(i) = num
    Next i
    num = Mid(str4, 11, 1) 'SIM卡号(后1字节)
    senddata(44) = num
     
    For i = 45 To 49 Step 1 '联系电话(前5字节)
        num = Mid(str5, 2 * (i - 45) + 1, 2)
        senddata(i) = num
    Next i
    num = Mid(str5, 11, 1) '联系电话(后1字节)
    senddata(50) = num
    
    For i = 51 To 55 Step 1 '联系手机(前5字节)
        num = Mid(str6, 2 * (i - 51) + 1, 2)
        senddata(i) = num
    Next i
    num = Mid(str6, 11, 1) '联系手机(后1字节)
    senddata(56) = num
    
    tempman = StrConv(str7, vbFromUnicode) '注册人(汉字6字节)
    If UBound(tempman) < 5 Then '不满6个字节
        For i = 0 To UBound(tempman) Step 1
            byman(i) = tempman(i)
        Next i
        For i = UBound(tempman) + 1 To 5 Step 1 '填空格
            byman(i) = 32
        Next i
    Else '6个字节不填空格
        For i = 0 To 5 Step 1
            byman(i) = tempman(i)
        Next i
    End If
    For i = 57 To 62 Step 1
        senddata(i) = byman(i - 57)
    Next i
    
    dispose_senddta = senddata
End Function
Private Function comsenddatame(ByRef indata() As Byte)  '发送数据函数
    Me.MSComm1.Output = indata '发送数据
    Do
        DoEvents '等待发送完毕
    Loop Until Me.MSComm1.OutBufferCount = 0
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -