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

📄 rfidctrl.ctl

📁 这个是我们为烟草行业出厂管理编写的RFID读写软件
💻 CTL
📖 第 1 页 / 共 4 页
字号:
    
    Call PDTRACELOG(2, "000-RFIDCtrl", "------In OpenReader" & "|获取了日志路径和级别,开始记录Reader的日志")
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In OpenReader" & "|ReaderSN = " & InnerReaderSN)
    
    hCom = INVALID_HANDLE_VALUE
    
    '判断属性(通讯方式、通讯参数)是否正常,如N,跳转到ErrDeal。
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In OpenReader" & "|开始判断Reader的通讯方式、参数是否正确")
    If Not CommIsLegal(InnerCommType, InnerCommParam, ErrorDesc) Then
        Call PDTRACELOG(1, "000-RFIDCtrl", "------In OpenReader" & "|Reader的通讯方式:" & InnerCommType & "参数:" & InnerCommParam & "错误!")
        GoTo ErrDeal
    End If
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In OpenReader" & "|结束判断,Reader的通讯方式、参数正确")
   
    '如果通讯方式是TCP/IP方式,初始化Socket;如果通讯方式是COM方式,初始化串口;如不成功,跳转到ErrDeal。
    If InnerCommType = 0 Then
        '初始化Socket(目前不需要)
    Else
        '初始化串口(目前不需要)
    End If

    '取得设备状态,需要调用RFID设备模块的相应方法。(现有设备不支持此方法!)
    Dim status As Integer
    '判断是否Ready,如N,跳转到ErrDeal。
    'If Not GetReaderStatus(Status) Then
    '    GoTo ErrDeal
    'End If
        
    '对设备做一些必要的初始化操作。
    '打开Reader
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In OpenReader" & "|开始Open Reader")
    
    Sleep InnerMinCmdInterval
    PrintDetailInfo "OpenReader|XCOpen"
    aStatus = XCOpen(hCom, RFID_API_INISettingFile, READER_INI_ITEM)
    PrintDetailInfo "OpenReader|XCOpen()"
'_________________________________________________________
'    aStatus = 1    '无设备时调试使用
'_________________________________________________________
    Select Case aStatus
        Case 0
            ErrorDesc = "打开端口失败返回"
            Call PDTRACELOG(1, "000-RFIDCtrl", "------In OpenReader|aStatus=" & aStatus & "打开端口失败返回")
            GoTo ErrDeal
        Case 1
            ErrorDesc = "读写器打开成功返回" & CStr(hCom)
            Call PDTRACELOG(3, "000-RFIDCtrl", "------In OpenReader|aStatus=" & aStatus & "读写器打开成功返回")
        Case 2
            ErrorDesc = "配置文件未找到或读取失败返回"
            Call PDTRACELOG(1, "000-RFIDCtrl", "------In OpenReader|aStatus=" & aStatus & "配置文件未找到或读取失败返回")
            GoTo ErrDeal
        Case 3
            ErrorDesc = "读写器已经打开返回"
            Call PDTRACELOG(3, "000-RFIDCtrl", "------In OpenReader|aStatus=" & aStatus & "读写器已经打开返回")
        Case Else
            ErrorDesc = "打开端口失败返回"
            Call PDTRACELOG(1, "000-RFIDCtrl", "------In OpenReader|aStatus=" & aStatus & "打开端口失败返回")
            GoTo ErrDeal
    End Select
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In OpenReader" & "|成功Open Reader")
    
    '打开功放(目前设备无需显式的打开功放,设备能够根据需要自动开启)
    
    '设置Reader状态为Open
    CurState = StateOpenned

    '将返回值设置为TRUE。
    OpenReader = True
    
    NetState = True
    PingTimer.Interval = InnerTestTimerInterval
    If InnerCommType = 0 Then
        PingTimer.Enabled = True
    End If
    Call PDTRACELOG(2, "000-RFIDCtrl", "------Out OpenReader")
Exit Function
ErrDeal:
    '将返回值设置为FALSE
    ErrorDesc = ErrorDesc & Err.Description
    OpenReader = False
    Call PDTRACELOG(1, "000-RFIDCtrl", "------In OpenReader" & "|发生错误:" & ErrorDesc)
    Call PDTRACELOG(2, "000-RFIDCtrl", "------Out OpenReader(1)")
End Function

'***********************************************************
'使RFID设备暂时闲置,等待使用前再唤起。
'   输入:   无
'   输出:  成功与否标志,错误描述。
'***********************************************************
Public Function CloseReader(ErrorDesc As String) As Boolean
    On Error GoTo ErrDeal
    Call PDTRACELOG(2, "000-RFIDCtrl", "------In CloseReader")
    If CurState = StateClosed Then
        Call PDTRACELOG(3, "000-RFIDCtrl", "------In CloseReader" & "|Reader already closed.")
        CloseReader = True
        Exit Function
    End If
    
    '对设备做一些必要的Close操作:如果通讯方式是TCP/IP方式,关闭Socket;如果通讯方式是COM方式,关闭串口;如不成功,跳转到ErrDeal。
    '目前设备不需要显式的关闭
    
    '关闭Reader的Polling
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In CloseReader" & "|开始关闭Polling")
    StopPolling
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In CloseReader" & "|完成关闭Polling")
    
    '关闭Reader
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In CloseReader" & "|开始Close Reader")
    
    Sleep InnerMinCmdInterval
    PrintDetailInfo "CloseReader|XCClose"
    aStatus = XCClose(hCom)
    PrintDetailInfo "CloseReader|XCClose()"
'________________________________________
'    aStatus = 1    '无设备时调试使用
'________________________________________
    Select Case aStatus
        Case 0
            ErrorDesc = "关闭端口失败,aStatus=" & aStatus
            Call PDTRACELOG(1, "000-RFIDCtrl", "------In CloseReader|aStatus=" & aStatus & "关闭端口失败")
            GoTo ErrDeal
        Case 1, 3
            Call PDTRACELOG(3, "000-RFIDCtrl", "------In CloseReader|aStatus=" & aStatus & "(1-成功关闭;3-已经关闭)")
        Case Else
            ErrorDesc = "关闭端口失败,aStatus=" & aStatus
            Call PDTRACELOG(1, "000-RFIDCtrl", "------In CloseReader|aStatus=" & aStatus & "关闭端口失败")
            GoTo ErrDeal
    End Select
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In CloseReader" & "|成功Close Reader")
    
    '设置Reader状态为Close
    CurState = StateClosed

    '设置返回值为TRUE。
    CloseReader = True
    
    PingTimer.Enabled = False
    Call PDTRACELOG(2, "000-RFIDCtrl", "------Out CloseReader")
Exit Function
ErrDeal:
    '将返回值设置为FALSE
    ErrorDesc = ErrorDesc & Err.Description
    CloseReader = False
    Call PDTRACELOG(1, "000-RFIDCtrl", "------In CloseReader" & "|发生错误:" & ErrorDesc)
    Call PDTRACELOG(2, "000-RFIDCtrl", "------Out CloseReader()")
End Function

'***********************************************************
'根据需要读取电子标签的ID号。
'   输入:   ReadCtrlInfoWhenCallingReadIDs,是否自动读取控制信息
'   输出:  成功与否标志,错误描述,ID号列表
'***********************************************************
Public Function ReadIDs(ReadCtrlInfoWhenCallingReadIDs As Boolean, ByRef IDs As String, ByRef ErrorDesc As String) As Boolean
    On Error GoTo ErrDeal
    Dim IndexPowerOff As Integer
    Call PDTRACELOG(2, "000-RFIDCtrl", "------In ReadIDs")
    '向Reader发送读取指令,等待返回,如超时,跳转到ErrDeal。

    Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|开始向Reader发送XCIdentify指令")
    
    '************************
'    aStatus = XCIdentify(hCom, 4, InnerXC_ANTENNA_CONCTL, 1)
'    Sleep 40
'    aStatus = XCPowerOff(hCom)
'    Sleep 40
    
    '************************
    Sleep InnerMinCmdInterval
    PrintDetailInfo "ReadIDs|XCIdentify"
    aStatus = XCIdentify(hCom, 4, InnerXC_ANTENNA_CONCTL, 1)
    PrintDetailInfo "ReadIDs|XCIdentify()"
    
     Sleep 10
'   _______________________________________________
'    aStatus = 1    '无设备时调试使用
'   _______________________________________________
'    If aStatus <> 0 Then
    If aStatus > 0 Then
        '成功发送读取ID指令
        Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|Status=" & aStatus & "发送指令成功")
    Else
        ErrorDesc = Abs(aStatus) & "@" & "发送读取ID指令失败"
        Call PDTRACELOG(1, "000-RFIDCtrl", "------In ReadIDs" & "|Status=" & aStatus & "发送指令失败")
        GoTo ErrDeal
    End If
    
    '取得返回值
    Dim Records As Integer
    Dim tValue(1 To 200) As Byte
    
    Dim Done As Boolean
    Dim IsResponseTimeout As Boolean
    
    '获取时间,以判断是否超时
    Dim CmdStart As Long
    CmdStart = GetTickCount
    
    Do While Not Done
'        Sleep 10
        Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|开始向Reader发送XCReport指令")
        Sleep InnerMinCmdInterval
        PrintDetailInfo "ReadIDs|XCReport"
        Records = XCReport(hCom, tValue(1))
        PrintDetailInfo "ReadIDs|XCReport()"
        
        Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|Records = " & Records)
        Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|tValue() = " & ByteToString(tValue))
'   _______________________________________________
'        Records = 1
'        tValue(1) = &H0
'        tValue(3) = 4      '无设备时调试使用
'   _______________________________________________
        
        '读取ID错误,重新发送指令
        If tValue(1) = &H3A Then
            ErrorDesc = "8" & "@" & "读取ID失败" '本次读ID号请求时间到
            Call PDTRACELOG(1, "000-RFIDCtrl", "------In ReadIDs" & "|tValue(1) = &H3A,本次读ID号请求时间到")
            GoTo ErrDeal
        End If
        
        
        If Records > 0 Then
            If tValue(1) <> 0 Then '通讯错误
                ErrorDesc = "21" & "@" & "通讯错误"
                Call PDTRACELOG(1, "000-RFIDCtrl", "------In ReadIDs" & "|tValue(1)=" & tValue(1) & ",通讯错误")
                GoTo ErrDeal
            End If
            
            'tValue(1)----tValue(200?)
            '第1个字节为错误代码
            '第2个字节为天线号
            '第3个字节为标签类型(4:XCTF-6000标签)
            '数据从第4个字节开始
            If tValue(3) = 4 Then
                Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|开始获取Tag的ID号码")
                IDs = AddZero(CStr(Hex(tValue(4))), 2) + AddZero(CStr(Hex(tValue(5))), 2) _
                 + AddZero(CStr(Hex(tValue(6))), 2) + AddZero(CStr(Hex(tValue(7))), 2) _
                 + AddZero(CStr(Hex(tValue(8))), 2) + AddZero(CStr(Hex(tValue(9))), 2) _
                 + AddZero(CStr(Hex(tValue(10))), 2) + AddZero(CStr(Hex(tValue(11))), 2)
                Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|ID号码:" & IDs)
'   ____________________________________________________________
'                 IDs = "0123456789ABCDEF"  '无设备时调试使用
'   ____________________________________________________________
            Else
                Call PDTRACELOG(1, "000-RFIDCtrl", "------In ReadIDs" & "|tValue(3) != 4")
            End If
            
            '关闭功放
            Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|开始关闭功放")
            For IndexPowerOff = 1 To InnerRE_POWEROFF_TIMES
                Sleep InnerMinCmdInterval
                PrintDetailInfo "ReadIDs|XCPowerOff"
                aStatus = XCPowerOff(hCom)
                PrintDetailInfo "ReadIDs|XCPowerOff()"
                
                If aStatus = 1 Then
                    Do
                        Sleep InnerMinCmdInterval
                    Loop While (XCReport(hCom, tValue(1)) > 0)
                    Exit For
                End If
            Next
            
'            aStatus = XCPowerOff(hCom)
'   _____________________________________________
'            aStatus = 1    '无设备时调试使用
'   _____________________________________________
            If aStatus = 1 Then
                '成功关闭功放
                Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs|aStatus = 1" & "成功关闭功放")
            Else
                ErrorDesc = Abs(aStatus) & "&" & "关闭功放失败,aStatus=" & aStatus
                Call PDTRACELOG(1, "000-RFIDCtrl", "------In ReadIDs|aStatus =" & aStatus & "(0--失败;2--没有应答信息,或其他错误)")
                GoTo ErrDeal
            End If
            
            Done = True
        Else

        End If
        

        '检测是否超时
        Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|开始检测是否超时")
        If Not Done And GetTickCount - CmdStart >= InnerReaderResponseTimeout Then
            '关闭功放
            Sleep InnerMinCmdInterval
            PrintDetailInfo "ReadIDs|XCPowerOff"
            aStatus = XCPowerOff(hCom)
            PrintDetailInfo "ReadIDs|XCPowerOff()"
            
            Do
                Sleep InnerMinCmdInterval
            Loop While (XCReport(hCom, tValue(1)) > 0)
            Call PDTRACELOG(1, "000-RFIDCtrl", "------In ReadIDs|XCPowerOff,aStatus =" & aStatus & "(0--失败;1--成功;2--没有应答信息,或其他错误)")
'   _____________________________________________
'            aStatus = 1    '无设备时调试使用
'   _____________________________________________
            IsResponseTimeout = True
            Done = True
        End If
        Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|结束是否超时的检测")
'        DoEvents
    Loop
    
    If IsResponseTimeout Then
        ErrorDesc = "51" & "@" & "读取标签ID超时"
        Call PDTRACELOG(1, "000-RFIDCtrl", "------In ReadIDs" & "|读取标签ID超时")
        GoTo ErrDeal
    Else
        Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|读取标签ID未超时")
    End If
    
    '读取到的信息是否正确?,如不正确,跳转到ErrDeal。
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|开始检查读取到的信息是否正确")
    If Not IDIslegal(IDs, ErrorDesc) Then
        ErrorDesc = "52" & "@""读取到的ID:" & IDs & "信息不正确"
        Call PDTRACELOG(1, "000-RFIDCtrl", "------In ReadIDs" & "|读取到的ID:" & IDs & "信息不正确")
        GoTo ErrDeal
    Else
        Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|读取到的ID:" & IDs & "信息正确")
    End If
    
    Dim Length As Long
    
    Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|判断是否需要读取标签中的控制信息")
    If ReadCtrlInfoWhenCallingReadIDs Then
        Call PDTRACELOG(3, "000-RFIDCtrl", "------In ReadIDs" & "|需要读取标签中的控制信息,并开始读取")
        
        Dim Succeed As Boolean
        Succeed = ReadKeyInfo(IDs, ErrorDesc)
'   _____________________________________________
'        Succeed = True
'        Succeed = False        '无设备时调试使用
'   _____________________________________________
        If Not Succeed Then

⌨️ 快捷键说明

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