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

📄 frmdemo.frm

📁 HD 6P RFID 终端机、考勤卡钟 TCP/IP通讯接口程序 VB 源码
💻 FRM
📖 第 1 页 / 共 4 页
字号:
            Exit Sub
        End If
    Else
        DateTime = GetDateTime
    End If
    
    m_RspHd8583.Message_Type = m_ReqHd8583.Message_Type

    '根据信息码对报文做不同的处理
    Select Case m_ReqHd8583.Message_Type
           Case MT_REECHO1 '回响测试
                m_RspHd8583.TerminalSN = m_ReqHd8583.TerminalSN
                m_RspHd8583.Address = m_ReqHd8583.Address
                txtAddress.Text = CStr(m_ReqHd8583.Address Mod 256)
                m_RspHd8583.Response_Code = RC_SUCCESS
                
           Case MT_REECHO2
           Case MT_ONLINENOTICE1, MT_ONLINENOTICE2
                m_RspHd8583.TerminalSN = m_ReqHd8583.TerminalSN
                m_RspHd8583.Address = m_ReqHd8583.Address
                m_RspHd8583.DateTime = DateTime
                m_RspHd8583.Response_Code = RC_SUCCESS
                m_RspHd8583.VerOfList = m_ReqHd8583.VerOfList
                If CKBlistMode.Value = 1 Then
                   CurrentVersion = m_ReqHd8583.VerOfList  '黑名单
                Else
                   IDWCListVersion = m_ReqHd8583.VerOfList '白名单
                End If
                txtAddress.Text = CStr(m_ReqHd8583.Address Mod 256)
                txtTerSN.Text = CStr(m_ReqHd8583.TerminalSN)
                Textblist.Text = CStr(m_ReqHd8583.VerOfList)
                
           Case MT_SETUSERDEFNUMBER2    '获取用户自定义编号
                m_RspHd8583.TerminalSN = m_ReqHd8583.TerminalSN
                m_RspHd8583.Address = m_ReqHd8583.Address
                m_RspHd8583.Response_Code = RC_SUCCESS
                
           Case MT_CONFIGPARA2  '获取终端参数
                m_RspHd8583.TerminalSN = m_ReqHd8583.TerminalSN
                m_RspHd8583.Address = m_ReqHd8583.Address
                TextTermilID.Text = CStr(m_ReqHd8583.TerminalID)
                txtAddress.Text = CStr(m_ReqHd8583.Address Mod 256)
                txtTerSN.Text = CStr(m_ReqHd8583.TerminalSN)
                m_RspHd8583.Response_Code = RC_SUCCESS
                If m_ReqHd8583.AdditionalData1(11) > 0 Then
                   CKBlistMode.Value = 1
                   LbVersion.Caption = "黑名单版本"
                Else
                   CKBlistMode.Value = 0
                   LbVersion.Caption = "白名单版本"
                End If
                   '脱机模式处理
                If m_ReqHd8583.AdditionalData1(13) > 0 Then
                   chkOfflineMode.Value = 1
                Else
                   chkOfflineMode.Value = 0
                End If
                
           Case MT_BATCHSENDRECORD2
           
                If DealRecvRecord() = RC_SUCCESS Then '采集脱机记录,并写TXT文件
                               
                  '进行下次采集,先删除已采集的数据
                  m_nTryTimes = 4
                  '2006-05-22 调试时加入
                  If nCount > 0 Then
                     m_RspHd8583.Response_Code = RC_SUCCESS
                     m_RspHd8583.Message_Type = MT_DELETERECORD2
                     m_RspHd8583.Address = m_ReqHd8583.Address
                     m_RspHd8583.TerminalID = m_ReqHd8583.TerminalID
                     m_RspHd8583.LenOfAdditionalData1 = 1
                     m_RspHd8583.AdditionalData1(0) = nCount
                     m_RspHd8583.WorkKey(1) = &HFF
                     m_RspHd8583.WorkKey(2) = &HFF
                     m_RspHd8583.WorkKey(3) = &HFF
                     m_RspHd8583.WorkKey(4) = &HFF
                     m_RspHd8583.WorkKey(5) = &HFF
                     m_RspHd8583.WorkKey(6) = &HFF
                     m_RspHd8583.WorkKey(7) = &HFF
                     m_RspHd8583.WorkKey(0) = &HFF
                     
                     
                     Call DoSendDatagram(m_RspHd8583, -1) '发送删除记录报文 MT_DELETERECORD2
                     
                     Sleep (600) '没有翻译
                     
                     
                     If (TimerOn(frmMain.btnCollectRec, 5000)) Then       '再采集后续数据
                        Call DoSendDatagram(m_HD8583_Bak, -1) '发送报文
                     End If
                   End If
                 Else
                   m_nTryTimes = m_nTryTimes - 1
                   If (m_nTryTimes) > 0 Then
                      If (TimerOn(frmMain.btnCollectRec, 5000)) Then
                          Call DoSendDatagram(m_HD8583_Bak, -1) '发送报文
                      End If
                   End If
                 End If
                 
            Case MT_UPDATELIST2 '更新IC黑白名单
            
                 If m_ReqHd8583.VerOfList < (CurrentVersion + 10) Then
                    m_RspHd8583.Address = m_ReqHd8583.Address
                    m_RspHd8583.TerminalID = m_ReqHd8583.TerminalID
                    m_RspHd8583.WorkKey(1) = &HFF
                    m_RspHd8583.WorkKey(2) = &HFF
                    m_RspHd8583.WorkKey(3) = &HFF
                    m_RspHd8583.WorkKey(4) = &HFF
                    m_RspHd8583.WorkKey(5) = &HFF
                    m_RspHd8583.WorkKey(6) = &HFF
                    m_RspHd8583.WorkKey(7) = &HFF
                    m_RspHd8583.WorkKey(0) = &HFF
                    
                    Dim Count As Long
                    Dim Rsend As Long
                    Dim CardNO As Long
                    Rsend = CurrentVersion - m_ReqHd8583.VerOfList + 10
                    For Count = 1 To Rsend Step 1
                        CardNO = Count + m_ReqHd8583.VerOfList
                        Call CopyMemory(m_HD8583.AdditionalData2(Count * 4), CardNO, 4)
                    Next Count
                    m_RspHd8583.LenOfAdditionalData3 = 1 '结束标志
                    
                    If (TimerOn(btnUpdateBCList, 3500)) Then
                       Call DoSendDatagram(m_RspHd8583, -1)
                    End If
                    CurrentVersion = m_ReqHd8583.VerOfList
                    Textblist.Text = CStr(m_ReqHd8583.VerOfList)
                  End If
                  
            Case MT_UPDATEIDLIST2   '更新ID黑名单
                 If m_ReqHd8583.VerOfList < (CurrentVersion + 10) Then
                    m_RspHd8583.Address = m_ReqHd8583.Address
                    m_RspHd8583.TerminalID = m_ReqHd8583.TerminalID
                    m_RspHd8583.WorkKey(1) = &HFF
                    m_RspHd8583.WorkKey(2) = &HFF
                    m_RspHd8583.WorkKey(3) = &HFF
                    m_RspHd8583.WorkKey(4) = &HFF
                    m_RspHd8583.WorkKey(5) = &HFF
                    m_RspHd8583.WorkKey(6) = &HFF
                    m_RspHd8583.WorkKey(7) = &HFF
                    m_RspHd8583.WorkKey(0) = &HFF
                    m_RspHd8583.LenOfAdditionalData3 = 1 ' 结束标志
                    Dim SerialNum As Long
                    SerialNum = 1
                    m_RspHd8583.LenOfAdditionalData1 = Len(SerialNum)
                    Call CopyMemory(m_RspHd8583.AdditionalData1(0), SerialNum, Len(SerialNum))
                    'Dim Count As Long
                    'Dim Rsend As Long
                    'Dim CardNO As Long
                    Rsend = CurrentVersion - m_ReqHd8583.VerOfList + 10
                    For Count = 1 To Rsend Step 1
                        CardNO = Count + m_ReqHd8583.VerOfList
                        Call CopyMemory(m_HD8583.AdditionalData2(Count * 4), CardNO, 4)
                    Next Count
                    m_RspHd8583.LenOfAdditionalData3 = 1 '结束标志
                    If (TimerOn(btnUpdateBCList, 3500)) Then
                       Call DoSendDatagram(m_RspHd8583, -1)
                    End If
                    CurrentVersion = m_ReqHd8583.VerOfList
                    Textblist.Text = CStr(m_ReqHd8583.VerOfList)
                  End If
           ' Case MT_SIGNIN1            ' 签到
           '         m_RspHd8583.TerminalSN = m_ReqHd8583.TerminalSN
           '         m_RspHd8583.Address = m_ReqHd8583.Address
           '         Call CopyMemory(m_RspHd8583.DateTime, DateTime, Len(DateTime))
           '         m_RspHd8583.Response_Code = RC_SUCCESS
           '         m_RspHd8583.TerminalID = m_ReqHd8583.TerminalID      ' 终端号
           '         m_RspHd8583.TERMINALTYPE = m_ReqHd8583.TERMINALTYPE  ' 终端类型
           '         m_RspHd8583.WorkMode = m_ReqHd8583.WorkMode     ' 终端工作模式
           '         WordMode = m_ReqHd8583.WorkMode
           '         m_RspHd8583.VerOfList = CurrentVersion        ' 黑名单版本
           '         If (m_ReqHd8583.OperatorID <> 0) Then      ' 操作员卡签到否
           '             Dim k As Integer
           '             For k = 0 To 7 Step 1
           '                  m_RspHd8583.WorkKey(k) = 255
           '             Next k
           '            ' m_SignInType = SIGNINTYPE_OPRCARD
           '         Else
           '          '如果m_ReqHd8583.OperatorID 是系统操作员
           '             If (m_ReqHd8583.OperatorID > 10000) Then '可自定义 系统卡签到否
           '                ' m_SignInType = SIGNINTYPE_SYSCARD
           '             Else
           '               ' m_RspHd8583.RESPONSECODE = RC_INVALIDCARDNO
           '             End If
           '         End If
             Case MT_UPDATEIDWCLIST2 ' 更新白名单
                 '如果没有下完,请继续.结构可以参考黑名单的处理方式
             Case MT_SENDATTENDEVENT1
                  m_RspHd8583.TerminalSN = m_ReqHd8583.TerminalSN
                  m_RspHd8583.Address = m_ReqHd8583.Address
                  m_RspHd8583.Response_Code = RC_SUCCESS
                  m_RspHd8583.VerOfList = m_ReqHd8583.VerOfList
                  '从报文中获取卡号
                  TextCardNo.Text = m_ReqHd8583.CardNumber
                  'm_RspHd8583.DateTime
                  '组织日期和时间
                  TextDateTime.Text = CStr(DateTime.Year + 2000) + "-" + CStr(DateTime.Month) + "-" + CStr(DateTime.Day) + " "
                  TextDateTime.Text = TextDateTime.Text + CStr(DateTime.Hour) + ":" + CStr(DateTime.Minute) + ":" + CStr(DateTime.Second)
                 '从报文中获取终端地址(报文发送的机器地址)
                  TextID.Text = CStr(m_ReqHd8583.Address Mod 256)
                  txtAddress.Text = CStr(m_ReqHd8583.Address Mod 256)
            Case MT_QUERY1
                 m_RspHd8583.TerminalSN = m_ReqHd8583.TerminalSN
                 m_RspHd8583.Address = m_ReqHd8583.Address
                 m_RspHd8583.TERMINALTYPE = m_ReqHd8583.TERMINALTYPE
                 
                '写金额
                 m_RspHd8583.AdditionalAmount = 12350
                 Dim MyName  As String * 6
                 MyName = "张三风"
                 m_RspHd8583.AdditionalData4 = MyName
                 m_RspHd8583.LenOfAdditionalData4 = Len(MyName)
                '写余额
                 m_RspHd8583.Response_Code = RC_SUCCESS
            Case MT_TRADE1
                 m_RspHd8583.TerminalSN = m_ReqHd8583.TerminalSN
                 m_RspHd8583.Address = m_ReqHd8583.Address
               
                '写金额
                 m_RspHd8583.AdditionalAmount = 2450
                 m_RspHd8583.Amount = m_ReqHd8583.Amount
                 Dim MyName1  As String * 12
                 MyName1 = "张三风"
                 m_RspHd8583.AdditionalData4 = MyName1
                 m_RspHd8583.LenOfAdditionalData4 = Len(MyName1)
                '写余额
                 m_RspHd8583.Response_Code = RC_SUCCESS
    End Select

    '是终端请求报文则发送响应报文
    If (m_ReqHd8583.Message_Type Mod 2) = HDA_REQMESSAGEOFTERMINAL Then
        Call DoSendDatagram(m_RspHd8583, Index)
    End If
End Sub


 Function DealRecvRecord() As Long
  Dim rback As Long
  Dim strFileName As String '文件名
  Dim lngHandle As Long '句柄
  Dim strWrite As String '要写入的文本内容
  strFileName = App.Path
  strFileName = strFileName + "\AttRecord.txt"
  lngHandle = FreeFile() '取得句柄
  '准备要写入的内容
  
  rback = 0
  nCount = 0
  Select Case (m_ReqHd8583.TERMINALTYPE)
     Case TERMINALTYPE_POS, TERMINALTYPE_IDPOS 'POS消费 ID卡消费终端
            Dim TradeRecord(0 To 100) As TRADERECORDSTRUCT
          If (m_ReqHd8583.LenOfAdditionalData1 Mod Len(TradeRecord(0))) = 0 Then
              '可以处理相关记录
              
              Dim nCountPos As Integer
              nCount = m_ReqHd8583.LenOfAdditionalData1 / Len(TradeRecord(0))
              Call CopyMemory(TradeRecord(0), m_ReqHd8583.AdditionalData1(0), m_ReqHd8583.LenOfAdditionalData1)
              strWrite = ""
              For nCountPos = 0 To nCount - 1 Step 1
                  '卡号,终端号
               'CardNumber As Long     '   // 卡号
               'Balance   As Long     '              ;   // 卡余额
               'Amount    As Long     '         ;   // 交易金额
               'TraceOfEW As Long     '    ;   // 钱包流水号
               'TraceOfPOS As Long    '    ;   // POS流水号
               'OrgTransTrace  As Long ';   // 原交易POS流水号
               'OperatorID    As Long      ';   // 操作员号
               'PreTerminalSN As Long    ';   // 前笔交易终端序列号
               'TerminalID    As Long    ';   // 交易终端号
               'GoodsNumber   As Long    ';   // 商品编号
               'IndexOfEW     As Long    ';   // 钱包索引号
               'RecordType    As Long    ';   // 消费记录类型
               'ConsumeMode   As Long    ';   // 消费模式
               'MAC(4) As Byte
               '       ;   // MAC
                  '卡号
                  strWrite = strWrite + CStr(TradeRecord(nCountPos).CardNumber) + ","
                  '消费信息
                  strWrite = strWrite + CStr(TradeRecord(nCountPos).IndexOfEW) + ","
                  strWrite = strWrite + CStr(TradeRecord(nCountPos).Amount) + ","
                  strWrite = strWrite + CStr(TradeRecord(nCountPos).Balance) + ","
                  
                  '消费模式与消费流水
                  strWrite = strWrite + CStr(TradeRecord(nCountPos).ConsumeMode) + ","
                  strWrite = strWrite + CStr(TradeRecord(nCountPos).TraceOfEW) + ","
                  strWrite = strWrite + CStr(TradeRecord(nCountPos).TraceOfPOS) + ","
                  
                  '终端号与操作员
                  strWrite = strWrite + CStr(TradeRecord(nCountPos).TerminalID) + ","
                  strWrite = strWrite + CStr(TradeRecord(nCountPos).OperatorID) + ","
                  
                  '消费时间
                  strWrite = strWrite + CStr(TradeRecord(nCountPos).Year + 2000) + "-" + CStr(TradeRecord(nCountPos).Month) + "-" + CStr(TradeRecord(nCountPos).Day)
                  strWrite = strWrite + " " + CStr(TradeRecord(nCountPos).Hour) + ":" + CStr(TradeRecord(nCountPos).Minute) + ":" + CStr(TradeRecord(nCountPos).Second)
                  
                  strWrite = strWrite + Chr(13) + Chr(10)
              Next nCountPos
              If nCount > 0 Then
                 strWrite = Mid(strWrite, 1, Len(strWrite) - 2)
                 Open strFileName For Append As lngHandle    '打开文件
                 Print #lngHandle, strWrite    '写入文本
                 Close lngHandle    '关闭文件
               End If
          Else
              DealRecvRecord = RC_DATAGRAMERROR
          End If
     Case TERMINALTYPE_ATTEND, TERMINALTYPE_IDATTEND   '考勤
           Dim attendrecord(0 To 100) As ATTENDRECORDSTRUCT
           If (m_ReqHd8583.LenOfAdditionalData1 Mod Len(attendrecord(0))) = 0 Then
               Dim nCountATT As Integer
              nCount = m_ReqHd8583.LenOfAdditionalData1 / Len(attendrecord(0))
              Call CopyMemory(attendrecord(0), m_ReqHd8583.AdditionalData1(0), m_ReqHd8583.LenOfAdditionalData1)
              strWrite = ""
              For nCountATT = 0 To nCount - 1 Step 1
                  strWrite = strWrite + CStr(attendrecord(nCountATT).CardNumber) + ","
                  strWrite = strWrite + CStr(attendrecord(nCountATT).TerminalID) + ","
                  strWrite = strWrite + CStr(attendrecord(nCountATT).Year + 2000) + "-" + CStr(attendrecord(nCountATT).Month) + "-" + CStr(attendrecord(nCountATT).Day)
                  strWrite = strWrite + " " + CStr(attendrecord(nCountATT).Hour) + ":" + CStr(attendrecord(nCountATT).Minute) + ":" + CStr(attendrecord(nCountATT).Second)
                  strWrite = strWrite + Chr(13) + Chr(10)
              Next nCountATT
              If nCount > 0 Then
                 strWrite = Mid(strWrite, 1, Len(strWrite) - 2)
                 Open strFileName For Append As lngHandle    '打开文件
                 Print #lngHandle, strWrite    '写入文本
                 Close lngHandle    '关闭文件
               End If
            Else
               DealRecvRecord = RC_DATAGRAMERROR
           End If
     Case TERMINALTYPE_ACCESS    '门禁
           Dim access As ACCESSRECORDSTRUCT
           If (m_ReqHd8583.LenOfAdditionalData1 Mod Len(access)) = 0 Then
               Dim nCountAcc As Integer
               nCount = m_ReqHd8583.LenOfAdditionalData1 / Len(access)
            Else
              DealRecvRecord = RC_DATAGRAMERROR
           End If
   End Select
   DealRecvRecord = RC_SUCCESS
End Function
Function GetTerminalID() As Integer
    GetTerminalID = CInt(TextTermilID.Text)
End Function

⌨️ 快捷键说明

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