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

📄 modulecomcmd.bas

📁 完整的VB和单片机系统连接的源代码
💻 BAS
字号:
Attribute VB_Name = "命令分析"
Option Explicit



Public StsLedFlag(30) As Integer


'串口命令类型
Public Enum enum_ComSendType
    SendIs_Connect = 65 '"A"
    SendIs_ReadSave
    SendIs_ReadWorkTimes
    SendIs_WritePara
    SendIs_ReadPara
    
    SendIs_ReadDepth '"F"
    SendIs_ReadSpeed
    SendIs_ReadStatus
    SendIs_ReadOutput
    SendIs_ReadClick
    SendIs_ReadErr '"K"
    SendIs_ReadSts '"L"
    SendIs_SerialKey '"M"
End Enum
Public Const ComCmdMax = 12 '@20050523

Public Enum enum_ComReceiveType
        Is_Up = 1
        Is_Down
        Is_Center
        Is_OverSpeed '超速 err
        Is_SlowSpeed '减速点 err
        Is_LimitSpeed '限速 err
        Is_OverTop    '过卷 err
        Is_Halt       '卡斗 err
        Is_OnTop      '到位
        Is_DeepFalse  '深失 err
        Is_RopeLoose  '松绳 err
        Is_Stop       '制动 err all
        
        Is_Depth '
        Is_Speed '
        Is_Click '
        
        Is_ParaID
        Is_ParaData
        
        Is_ifProtect
End Enum

'Public Type type_CommandS
        
'End Type

Public Sub InitComCmd()
    '数码管状态
    StsLedFlag(Is_Up) = &H4000                '上
    StsLedFlag(Is_Down) = &H8000              '下
    StsLedFlag(Is_Center) = &H2000            '中心
    StsLedFlag(Is_OverSpeed) = &H1000         '超速
    StsLedFlag(Is_SlowSpeed) = &H800          '减速
    StsLedFlag(Is_LimitSpeed) = &H400         '限速
    StsLedFlag(Is_OverTop) = &H200            '过卷
    StsLedFlag(Is_Halt) = &H100               '卡斗
    StsLedFlag(Is_OnTop) = &H80               '到位
    StsLedFlag(Is_DeepFalse) = &H40           '深失
    StsLedFlag(Is_RopeLoose) = &H20           '松绳
    StsLedFlag(Is_Stop) = &H10                '制动
End Sub

Public Sub ComSendAnalize(SendType As enum_ComSendType, val1 As Integer, val2 As Integer)   '发送分析
    Dim s As String
    s = Trim(Chr(SendType))
    Select Case SendType
    Case SendIs_Connect:                                   '连接 A
        s = s
    Case SendIs_ReadSave:                                  ' 保存的速度数据  B
        If val1 = 0 Then
            s = s + "0"
        Else
            s = s + "1"
        End If
        s = s + Right("000" & Trim(Hex(val2)), 4)
    Case SendIs_ReadWorkTimes:                              ' 读勾数 C
    Case SendIs_WritePara:                                  ' 写参数D
        s = s + Right("0" & Trim(Hex(val1)), 2) + _
                Right("000" & Trim(Hex(val2)), 4)
    Case SendIs_ReadPara:                                   '读参数E
        s = s + Right("0" & Trim(Hex(val1)), 2)
    Case SendIs_ReadDepth To SendIs_ReadClick:              ' 读深度F ~ 打点J
        If s = "F" Then
            s = s
        End If
    Case SendIs_ReadErr                                     ' 读错误K
        s = s + Right("0" & Trim(Hex(val1)), 1)
    Case SendIs_ReadSts                                     ' 读保护状态L
    Case SendIs_SerialKey                                   '串口键盘M
        s = s & Right("0" & Trim(Hex(val1)), 2)
    End Select
    frmDebug.ComSend s
    s = Trim(Chr(comStartflag)) + s + Trim(Chr(comEndflag))
    frmMain.ComSend s '发送s
End Sub



Public Sub ComReceiveAnalize(ComCmdS As String)                                 '接收分析
    Dim i As enum_ComReceiveType
    Dim j As Integer
   On Error GoTo aErr
    frmDebug.ComReceive ComCmdS
    Select Case Asc(Left(ComCmdS, 1))
    
    Case SendIs_Connect:       ' "A"'按键应答
        frmMain.ConnectSuccess
    Case SendIs_ReadSave:     'B读到保存的速度数据
        j = Asc(Mid(ComCmdS, 2, 1)) - Asc("0")
        If j = 0 Or j = 1 Then
            frmMain.ReceiveSaveSpeed j, "&H" + Mid(ComCmdS, 3, 4), "&H" + Mid(ComCmdS, 7, 2)
        End If
    Case SendIs_ReadWorkTimes: 'C读到勾数
        frmMain.ReceiveWorkTimes "&h" + Mid(ComCmdS, 2, 4)
    Case SendIs_WritePara       'D写参数
        frmPara.ReceivePara "&h" + Mid(ComCmdS, 2, 2), "&h" + Mid(ComCmdS, 4, 4), False
    Case SendIs_ReadPara        'E读参数
        frmPara.ReceivePara "&h" + Mid(ComCmdS, 2, 2), "&h" + Mid(ComCmdS, 4, 4), True
    '
    Case SendIs_ReadDepth       'F读深度
        If frmMain.Receive(Is_Depth, "&h" + Right(ComCmdS, Len(ComCmdS) - 1)) = False Then
            Call SaveComLog("接收分析:" & ComCmdS)
        End If
        
    Case SendIs_ReadSpeed       'G读速度
        If frmMain.Receive(Is_Speed, "&h" + Right(ComCmdS, Len(ComCmdS) - 1)) = False Then
            Call SaveComLog("接收分析:" & ComCmdS)
        End If
        
    Case SendIs_ReadStatus      'H读显示状态
        j = "&h" + Mid(ComCmdS, 2, 4)
        For i = Is_Up To Is_Stop
            frmMain.Receive i, IIf((j And StsLedFlag(i)) <> 0, True, False)
        Next i
        If (j And StsLedFlag(Is_OnTop)) <> 0 Then ComSendAnalize SendIs_ReadDepth, 0, 0
    Case SendIs_ReadOutput      'I读输出
                                            '读输出需要加入代码
    Case SendIs_ReadClick       'J读打点
        frmMain.ReceiveClick Right(ComCmdS, Len(ComCmdS) - 1)
    Case SendIs_ReadErr       'K读错误
        frmMain.ReceiveErr Asc(Mid(ComCmdS, 2, 1)) - Asc("0"), Trim(Str("&h" + Mid(ComCmdS, 3, 2)))
    Case SendIs_ReadSts       'L读保护...状态
        frmMain.ReceiveSts "&h" & Mid(ComCmdS, 2, 2)
    Case SendIs_SerialKey      'M读显示
        frmMain.ReceiveLedSts Right(ComCmdS, 9)
    End Select
    Call frmMain.ReceiveAny '通知有收到数据
    Exit Sub
aErr:
    Call SaveComLog("接收分析:" & ComCmdS)
End Sub

Public Sub SaveComLog(s As String)                                 '接收分析

End Sub

⌨️ 快捷键说明

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