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

📄 mod.bas

📁 串口调试相关源码
💻 BAS
📖 第 1 页 / 共 2 页
字号:
Attribute VB_Name = "Modtotu"
Dim sum_chk%                    '存储校验和
Dim sql$
Dim rs As ADODB.Recordset



'一个数据包中的变量
Public SOH As Byte              '数据包头  1个字节   ABH
Public EID As String            '设备号    3个字节
Public FID As Byte              '功能号    1个字节
                                '0建档,1传成绩,2查询数据,3应答,4掉线命令,5返回时间,6返回名次
Public CID As String            '卡号      5个字节
Public DID As String            '脚环号    5个字节
Public TIM As String            '时间      8个字节
Public CHK As Byte              '校验字节  1个字节   前面的数据和并求反
Public GRD As String            '名次      4个字节
Public SPD As String            '速度      8个字节   米/分
Public DIS As String            '距离      8个字节   米
Public CTM As String            '耗时      8个字节   秒
Public YNE As Byte              '是否结束  1个字节   0结束,1继续发送下一条记录
Public RID As String            '记录编号  3个字节



'对功能号的各种情况的解释
Const SD As Byte = &H0          '建档
Const SR As Byte = &H1          '上传成绩
Const RR As Byte = &H2          '查询成绩
Const AK As Byte = &H3          '应答 确认
Const HD As Byte = &H4          '掉线命令
Const RT As Byte = &H5          '返回时间
Const RG As Byte = &H6          '返回名次
Const QT As Byte = &H5          '请求时间(to tu)




'不同数据包的接收的二进制数组
Public GE_byte() As Byte      '通用             50个字节

Public SD_byte(0 To 39) As Byte     '建档             40个字节
Public SR_byte(0 To 39) As Byte     '上传成绩         40个字节
Public RR_byte(0 To 17) As Byte     '查询成绩         18个字节
Public AK_byte(0 To 8) As Byte      '应答             9个字节
Public HD_byte(0 To 8) As Byte      '掉线命令         9个字节
Public RT_byte(0 To 18) As Byte     '返回时间         19个字节
Public RG_byte(0 To 46) As Byte     '返回名次/记录    47个字节
Public CO_byte(0 To 5) As Byte      '计算机上确认     6个字节(to tu)
Public QT_byte(0 To 8) As Byte      '请求时间         9个字节(to tu)


'十六进制转换为十进制
Public Function hex_10(ByVal hhex As String) As Long
    Const M As Integer = 16
    Dim hh As Long
    Dim i As Long
    Dim j As Long
    Dim lin As Integer
    j = Len(hhex)
    For i = 1 To Len(hhex)
       Select Case Mid$(hhex, i, 1)
              Case "A"
                    lin = 10
              Case "B"
                    lin = 11
              Case "C"
                    lin = 12
              Case "D"
                    lin = 13
              Case "E"
                    lin = 14
              Case "F"
                    lin = 15
              Case Else
                    lin = Val(Mid$(hhex, i, 1))
       End Select
       j = j - 1
      hh = hh + M ^ j * lin
    Next i
    hex_10 = hh
End Function
Public Sub read()
    
       a = Form1.MSComm1(m_id).InBufferCount    '收到多少个数据
       ReDim GE_byte(a) As Byte
       
       GE_byte = Form1.MSComm1(m_id).Input
       
       For i = 0 To a - 1  '显示出来
           Form1.Text4.Text = Form1.Text4.Text + Chr(GE_byte(i))
         
           Form1.Text8.Text = Form1.Text8.Text + Hex(CInt(GE_byte(i))) + Space(1)
           If CInt(GE_byte(i)) = 13 Then
              Form1.Text8.Text = Form1.Text8.Text + vbCrLf
           End If
       Next i
       
       Form1.Text4.SelStart = Len(Form1.Text4.Text)
       Form1.Text8.SelStart = Len(Form1.Text8.Text):
sum_chk = 0   '校验和清零
    If UBound(GE_byte) > 7 Then    '判断读出的字符串是不是超过6个字节
       Select Case GE_byte(7)
              Case QT
                       '请求时间
                   For i = 0 To 7
                       QT_byte(i) = GE_byte(i)
                       sum_chk = sum_chk + GE_byte(i)
                   Next i
                    '进行校验
                    
                    mod_chk = sum_chk Mod 256
                    
                    If mod_chk = Not (GE_byte(8)) Then
                       Call QT_opt
                    End If
       
              Case SD       '建档
                           '**********************************************************************
                             'ABH|主机设备号|功能号|电子脚环号|日期和时间|通用脚环号|校验
                             ' 1 |     6    |   1  |    10    |    6     |     15   |  1
                             '共40个字节
                           '*********************************************************************
                   For i = 0 To 38
                       SD_byte(i) = GE_byte(i)
                       sum_chk = sum_chk + GE_byte(i)
                   Next i
                    '进行校验
                    
                    mod_chk = sum_chk Mod 256
                    
                    If mod_chk = Not (GE_byte(39)) Then
                       Call SD_opt
                    End If
                   
              Case SR       '上传成绩
                           '**********************************************************************
                             'ABH|主机设备号|功能号|电子脚环号|日期和时间|通用脚环号|校验
                             ' 1 |     6    |   1  |    10    |    6     |     15   |  1
                             '共40个字节
                           '*********************************************************************

                   For i = 0 To 38
                       SR_byte(i) = GE_byte(i)
                       sum_chk = sum_chk + GE_byte(i)
                   Next i
                    '进行校验
                    mod_chk = sum_chk Mod 256
                    
                    If mod_chk = Not (GE_byte(39)) Then
                       Call SR_opt
                    End If
              Case RR       '查询成绩
                   For i = 0 To 17
                       RR_byte(i) = GE_byte(i)
                       sum_chk = sum_chk + GE_byte(i)
                   Next i
                    '进行校验
                    sum_chk = sum_chk - GE_byte(17)
                    mod_chk = sum_chk Mod 256
                    
                    If mod_chk = Not (GE_byte(17)) Then
                       Call RR_opt
                    End If
                    
              Case AK       '应答
                   For i = 0 To 8
                       AK_byte(i) = GE_byte(i)
                       sum_chk = sum_chk + GE_byte(i)
                   Next i
                    '进行校验
                    sum_chk = sum_chk - GE_byte(8)
                    mod_chk = sum_chk Mod 256
                    
                    If mod_chk = Not (GE_byte(8)) Then
                       Call AK_opt
                    End If
              Case HD       '掉线
                   For i = 0 To 8
                       RR_byte(i) = GE_byte(i)
                       sum_chk = sum_chk + GE_byte(i)
                   Next i
                    '进行校验
                    sum_chk = sum_chk - GE_byte(8)
                    mod_chk = sum_chk Mod 256
                    
                    If mod_chk = Not (GE_byte(8)) Then
                       Call HD_opt
                    End If
       End Select
       
    End If
err:

End Sub

Sub QT_opt()
    'MsgBox "请求时间"
    SOH = &HAB
      '****************************************************************************************************
    FID = &H5 '功能编号为5 返回时间
''''''    TIM = Date$ + Space(1) + Time$
'''''    '得到日期和时间
'''''    d1 = CInt(Year(Date)) \ 256         '和d1组成年
'''''    d2 = CInt(Year(Date)) Mod 256
'''''    d3 = CInt(Month(Date))              '月
'''''    d4 = CInt(Day(Date))                '日
'''''    d5 = 32                             '一个空格
'''''    d6 = CInt(Hour(Time))               '小时
'''''    d7 = CInt(Minute(Time))             '分钟
'''''    d8 = CInt(Second(Time))             '秒
'''''
'''''    CHK = ((CInt(SOH) + e1 + e2 + e3 + CInt(FID) + d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8) Mod 256)
'''''
'''''    CHK = Not CHK

    Dim e1, e2, e3 As Byte
    '把服务器的计算机名称转换成三个字节 在这个地方名称用8为数字做为名称但不大于256*256*256
    e1 = CLng(computername) \ 65536
    e2 = (CLng(computername) Mod 65536) \ 256
    e3 = (CLng(computername) Mod 65536) Mod 256
    Dim d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13 As Byte
    '年
    d1 = CInt(Mid(CStr(Year(Date)), 3, 1)) + &H30
    d2 = CInt(Right(CStr(Year(Date)), 1)) + &H30
    '月
    If Len(CStr(Month(Date))) < 2 Then

⌨️ 快捷键说明

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