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

📄 mdldefine.bas

📁 HD 6P RFID 终端机、考勤卡钟 RS232/RS485 通讯接口程序 VB 源码
💻 BAS
字号:
Attribute VB_Name = "mdlDef"

Option Explicit

'---------------------------------------------------------------------------
' 常量定义
'---------------------------------------------------------------------------
Public Const HDA_REQMESSAGEOFBACKGROUND = 1     '// 后台请求报文
Public Const HDA_REQMESSAGEOFTERMINAL = 0       '// 终端请求报文
Public Const HDA_BROADCASTSN = 0                '// 广播序列号
Public Const HDA_BROADCASTTERMINALID = 0        '// 广播终端号
Public Const HDA_BROADCASTADDRESSOFALL = &HFFFF '// CAN全网广播地址
Public Const HDA_BROADCASTADDRESSOFONE = &HFF   '// CAN广播地址
Public Const HDA_SYSTEMIDOFATT1_1 = &H400       '// CAN1.1考勤系统子系统号
Public Const HDA_SYSTEMIDOFACC1_1 = &H500       '// CAN1.1门禁系统子系统号
Public Const HDA_SYSTEMIDOFPOS1_1 = &H600       '// CAN1.1收费系统子系统号

'---------------------------------------------------------------------------
' 枚举类型
'---------------------------------------------------------------------------
'汉字内码
Public Enum CHINESETYPE
    GB_GB = 0                          ' 后台-GB   / 终端-GB
    GB_BIG5 = 1                        ' 后台-GB   / 终端-BIG5
    BIG5_GB = 2                        ' 后台-BIG5 / 终端-GB
    BIG5_BIG5 = 3                      ' 后台-BIG5 / 终端-BIG5
End Enum

'通讯方式
Public Enum COMMTYPE
    COMMTYPE_CAN1_0 = 0                'CAN 1.0(地址1B)
    COMMTYPE_CAN1_1 = 1                'CAN 1.1(地址2B)
    COMMTYPE_CAN2_0 = 2                'CAN 2.0(地址2B)
    COMMTYPE_RS232 = 3                 'RS232
    COMMTYPE_TCP_IP = 4                'TCP/IP
End Enum

'信息码(为偶数的值表示报文发起方为终端一方,为奇数表示报文发起方为后台一方)
Public Enum MessageType
    MT_ONLINENOTICE1 = &H26               '终端在线通知
    MT_ONLINENOTICE2 = &H27               '
    
    MT_REECHO1 = &H28                     '回响测试
    MT_REECHO2 = &H29                     '
    
    MT_ALLOTADDRESS1 = &H6                '分配地址
    MT_ALLOTADDRESS2 = &H7
    
    MT_CONFIGPARA1 = &H22                 '配置参数
    MT_CONFIGPARA2 = &H23
    
    MT_INITPARA1 = &H0                    '初始化参数
    MT_INITPARA2 = &H1
    MT_SIGNIN1 = &H20                      ' // 签到
    MT_SETUSERDEFNUMBER2 = &HD            ' 设置用户自定义编号
    
    MT_SENDATTENDEVENT1 = &H94             ' 上送考勤事件
    
    MT_UPDATELIST1 = &H2A                  ' 更新黑名单
    MT_UPDATELIST2 = &H2B
    MT_UPDATEIDLIST2 = &H3B                '更新ID黑名单
    MT_UPDATEIDWCLIST2 = &H3D              '更新ID白名单
    
    MT_BATCHSENDRECORD2 = &H31             ' 采集脱机记录
    
    MT_DELETERECORD2 = &H33                ' 删除当次采集记录
    
    MT_QUERY1 = &H50                       '查询
    MT_TRADE1 = &H60                      ' 消费
End Enum

'报文响应码
Public Enum RESPONSECODE
    RC_SUCCESS = 0                      '   // 批准或成功地完成
    RC_ENQUIRECENTER = 1                '   // 请查询管理中心
    RC_ADDRESSCONFLICT = 2              '   // 地址冲突
    RC_INVALIDMERCHANT = 3              '   // 无效商户
    RC_SEIZURECARD = 4                  '   // 没收卡
    RC_TERMINALSTATEERROR = 5           '   // 终端状态错误
    RC_INVALIDMESSAGE = 12              '   // 无效报文
    RC_INVALIDAMOUNT = 13               '   // 无效金额
    RC_INVALIDCARDNO = 14               '   // 无效卡号
    RC_INVALIDOPRCARDNO = 15            '   // 无效操作员卡号
    RC_NOORIGINALTRANS = 25             '   // 未能找到原交易
    RC_DATAGRAMERROR = 30               '   // 报文错
    RC_MACERROR = 31                    '   // 产生MAC错
    RC_PINFORMATERROR = 32              '   // PIN格式错
    RC_CONFIOVERDUECARD = 33            '   // 过期的卡-没收
    RC_CONFIPINWRONGOVERTIMES = 38      '   // 超过允许的PIN试输入-没收
    RC_LISTVERSIONERROR = 39            '   // 黑名单版本错误
    RC_CONFIREPORTLOSSCARD = 41         '   // 挂失卡-没收
    RC_CONFIBESTOLENCARD = 43           '   // 被窃卡-没收
    RC_TARIFFVERSIONERROR = 44          '   // 价目表版本错误
    RC_NOTSUFFICIENT = 51               '   // 无足够的存款
    RC_OVERDUECARD = 54                 '   // 过期的卡
    RC_PINWRONG = 55                    '   // 不正确的PIN
    RC_UNALLOWEDTRANSFORCARDHOLDER = 57 '   // 不允许持卡人进行的交易
    RC_UNALLOWEDTRANSFORTERMINAL = 58   '   // 不允许终端进行的交易
    RC_ORIGINALAMOUNTWRONG = 64         '   // 原始金额不正确
    RC_GETCASHOVERTIMES = 65            '   // 超出取款次数限制
    RC_PINWRONGOVERTIMES = 75           '   // 允许的输入PIN次数超限
    RC_BALANCEWRONG = 77                '   // 结算不平
    RC_VOUCHERIDWRONG = 78              '   // 凭证号错误
    RC_BATCHIDWRONG = 80                '   // 批号错误
    RC_ORIGINALTRANSBECHANGED = 86      '   // 原交易已改变
    RC_NOANSWER = 87                    '   // 收不到发卡方的应答
    RC_INVALIDTERMINAL = 89             '   // 无效终端
    RC_INDATESWITCHING = 90             '   // 日期切换正在处理
    RC_TRANSUNALLOWEDTEMP = 91          '   // 发卡方或POS中心不能操作
    RC_TRANSREPEATED = 94               '   // 交易重复
    RC_BALANCEWRONGANDBATCHSEND = 95    '   // 结算不平,要求批上送
    RC_SYSTEMDISABLED = 96              '   // 系统异常、失效
End Enum

'---------------------------------------------------------------------------
' 结构
'---------------------------------------------------------------------------
Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type

'日期时间结构
Type MYDATETIMESTRUCT
    Year As Byte                        ' // 年
    Month As Byte                       ' // 月
    Day As Byte                         ' // 日
    Hour As Byte                        ' // 时
    Minute As Byte                      ' // 分
    Second As Byte                      ' // 秒
    DayOfWeek As Byte                   ' // 周
End Type

'按结构方式调用报文结构
Type HD8583STRUCT
   Message_Type As Byte                ' // 信息码(报文类型)
    Response_Code As Byte               ' // 响应码
    TERMINALTYPE As Byte                ' // 终端类型
    WorkMode As Byte                    ' // 终端工作模式
    IndexOfEW  As Byte                  ' // 电子钱包索引号
    DateTime As MYDATETIMESTRUCT        ' // 日期和时间

    CardNumber As Long                  ' // 卡号
    Amount As Long                      ' // 交易金额
    AdditionalAmount As Long            ' // 附加金额
    AdditionalAmount2 As Long           ' // 附加金额2
    TraceOfPOS As Long                  ' // POS流水号
    OrgTransTrace As Long               ' // 原交易POS流水号
    OperatorID As Long                  ' // 操作员号
    TerminalSN  As Long                 ' // 终端序列号
    VerOfList As Long                   ' // 黑名单版本

    TraceOfEW  As Integer               ' // 电子钱包流水号
    TerminalID  As Integer              ' // 终端号
    MerchantID  As Integer              ' // 商户号
    Address As Integer                  ' // 终端地址
    
    LenOfAdditionalData1 As Integer     ' // 附加数据1长度
    AdditionalData1(0 To 2499) As Byte  ' // 附加数据1
    LenOfAdditionalData2 As Integer     ' // 附加数据2长度
    AdditionalData2(0 To 2499) As Byte  ' // 附加数据2
    LenOfAdditionalData3 As Integer     ' // 附加数据3长度
    AdditionalData3 As String * 2500    ' // 附加数据3
    'AdditionalData3(0 To 2499) As Byte
    LenOfAdditionalData4 As Integer     ' // 附加数据4长度
    AdditionalData4 As String * 2500    ' // 附加数据4
    'AdditionalData4  As Byte
    
    PIN(0 To 7) As Byte                 ' // 个人识别码
    WorkKey(0 To 7) As Byte             ' // 工作密钥
End Type

'Buffer结构
Type BUFFERSTRUCT
    Buffer(0 To 4095) As Byte           ' // 4k Bytes
End Type

Type ORGTRADERECORDSTRUCT  ' 原始交易数据结构

     Data(47) As Byte
 End Type

Type ORGATTENDRECORDSTRUCT   ' 原始考勤数据结构

     Data(14) As Byte
End Type

Type ORGACCESSRECORDSTRUCT  ' 原始门禁数据结构
    Data(18) As Byte
End Type

Public Enum TERMINALTYPE
    TERMINALTYPE_READER = 0             '读写器终端
    TERMINALTYPE_POS = 1                   '消费终端
    TERMINALTYPE_ATTEND = 2               ' 考勤终端
    TERMINALTYPE_ACCESS = 3                '门禁终端
   

    TERMINALTYPE_IDREADER = &H40          ' // ID卡读写器终端
    TERMINALTYPE_IDPOS = &H41             ' // ID卡消费终端
    TERMINALTYPE_IDATTEND = &H42          ' // ID卡考勤终端
    TERMINALTYPE_IDGCU = &H43             ' // ID卡GCU
End Enum
Type TRADERECORDSTRUCT ' 交易记录数据结构

    CardNumber As Long     '   // 卡号
     Balance   As Long     '              ;   // 卡余额
     Amount    As Long     '         ;   // 交易金额
     Year      As Long     '   // 交易日期
     Month     As Long     ';
     Day       As Long     ';
     Hour      As Long     ';   // 交易时间
     Minute    As Long     '    ;
     Second    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
End Type

Type ATTENDRECORDSTRUCT  ' 考勤记录数据结构

     CardNumber    As Long     ';   // 卡号
     Year          As Long     ';   // 日期
     Month         As Long     ';
     Day           As Long     ';
     Hour          As Long     ';   // 时间
     Minute        As Long  ';
     Second        As Long ';
     TerminalID    As Long ';   // 终端号
     ReaderID      As Long ';   // 读头号
     RecordType    As Long  ';   // 记录类型
End Type

Type ACCESSRECORDSTRUCT   ' 门禁记录数据结构

    CardNumber  As Long   '  ;   // 卡号
    Year        As Long   '  ;   // 日期
    Month       As Long   '  ;
    Day         As Long   '  ;
    Hour        As Long   '  ;   // 时间
    Minute      As Long   '  ;
    Second      As Long   '  ;
    TerminalID  As Long   '  ;   // 终端号
    ReaderID    As Long   '  ;   // 读头号
    EventType   As Long  '  ;   // 事件类型
    EventInfo(4) As String  '  ;   // 事件信息
End Type
Type BlackListSTRUCT
     SerialNO As Byte
     CardNO As Long
End Type
     
'---------------------------------------------------------------------------
' 库函数调用声明-KERNEL32
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Sub GetLocalTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)
Public Declare Function GetTickCount Lib "kernel32" () As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

' 库函数调用声明-HD8583
Public Declare Function CreateObject Lib "HD8583.dll" (ByVal hwnd As Long, ByVal COMMTYPE As COMMTYPE, ByVal BasalBitmap As Long, ByVal Lang As CHINESETYPE) As Boolean
Public Declare Sub DestroyObject Lib "HD8583.dll" ()
Public Declare Function SendHD8583 Lib "HD8583.dll" (ByRef HD8583 As HD8583STRUCT, ByRef Buffer As Any, ByRef BufferLength As Long, ByVal OnlyBackData As Long, ByVal bCRC16 As Long) As Boolean
Public Declare Function GetHD8583 Lib "HD8583.dll" (ByRef Buffer As Any, ByVal BufferLength As Long, ByRef HD8583 As HD8583STRUCT) As Boolean
Public Declare Function UnPackHD8583A Lib "HD8583.dll" (ByRef Buffer As Any, ByVal BufferLength As Long, ByRef DataLength As Long) As Long
Public Declare Function IsMACValidA Lib "HD8583.dll" (ByRef WorkKey As Any, ByRef Buffer As Any, ByVal BufferLength As Long) As Boolean
Public Declare Function IsPINValid Lib "HD8583.dll" (ByRef WorkKey As Any, ByVal CardID As Long, ByVal Password As String, ByRef PIN As Any) As Boolean

' 库函数调用声明-Stdfun_HD
Public Declare Function EnumCommPorts Lib "Stdfun_HD.dll" () As String
Public Declare Sub MemSet_HD Lib "Stdfun_HD.dll" (ByRef Dest As Any, ByVal Data As Byte, ByVal Length As Long)

⌨️ 快捷键说明

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