📄 rfidctrl.ctl
字号:
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 + -