13.56MHz射频模块在酒店电脑管理中的应用

  • 格式:doc
  • 大小:83.00 KB
  • 文档页数:5

双龙13.56M射频模块在酒店公用电脑管理中的应用 摘要:本文介绍了双龙13.56M射频模块在酒店公用电脑管理中的应用方案 关键字:RFID,读卡模块,二代身份证

1.概述 自2004年起,全球范围内掀起了一场无线射频识别技术(RFID)的热潮,包括沃尔玛、宝洁、波音公司在内的商业巨头无不积极推动RFID在制造、物流、零售、交通等行业的应用。RFID技术及其应用正处于迅速上升的时期,被业界公认为是本世纪最具潜力的技术之一,它的发展和应用推广将是自动识别行业的一场技术革命。迄今为止在中国,成年人几乎人手都有一张二代身份证,城市的大部分人手中也有公交一卡通,及小区或办公室的门禁卡。 随时上网及异地办公已是目前许多旅游者及出差人的习惯,对于酒店来说如何提高服务意识,照顾好客人,多吸引回头客,同时兼顾多创造效益,建立并完善酒店公用电脑的管理应该是一件值得关注和改进的项目。虽然目前个人电脑的成本已经不高,但有些酒店仍需提供24小时公用电脑服务,那么就会涉及到不同时段、不同时长、不同级别客人(包括可能对来访者的开放)的管理。 酒店公用电脑管理系统是为了管理酒店的公用电脑,在酒店客人刷卡后有限制的使用公用电脑,系统可以限制使用时长、使用时段,并存储使用记录。在未刷卡的状态下,公用电脑通过冻结键盘及鼠标信号,使电脑不能进入操作状态。 本文介绍了RFID技术在酒店公用电脑管理中的应用,酒店客人只要把房卡或者二代身份证(需预先在系统服务器上刷卡登陆过)往公用电脑前的读卡器上一刷,电脑就可以无偿或有偿使用了,让住店客人享受到便捷优质的服务。

2.硬件设计 本系统需要读房卡(型号NXP Mifare S50)或者二代身份证的ID号,双龙公司的SL-13.56MOD-SU射频模块正好含有2条专用指令用于读S50卡片ID及二代身份证的ID。本系统需要通过RS-232接口与电脑交换数据,由SL-13.56MOD-SU射频模块附加MAX232芯片转换UART信号到RS-232。

SL-13.56MOD-SU 射频模块引脚图 SL-13.56MOD-SU 射频卡读写模块,可以读写符合ISO14443 TYPE A/B –2、-3 规范的射频卡片(二代身份证的ID、AT88RF020、AT88SC6416CRF、ST_SRI176、ST_SRIX4K、MIFARE S50、MIFARE S70 以及其他兼容ISO14443 TYPE A/B 规范的CPU 卡,双界面卡)。模块与上位机之间可以使用多种接口连接(UART、SPI、TWI),方便用户使用。

MAX232 IC转换电路图 酒店房卡(型号NXP Mifare S50)主要指标 ●容量为8K位EEPROM ●分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位 ●每个扇区有独立的一组密码及访问控制 ●每张卡有唯一序列号,为32位 ●具有防冲突机制,支持多卡操作 ●无电源,自带天线,内含加密控制逻辑和通讯逻辑电路 ●数据保存期为10年,可改写10万次,读无限次 ●工作温度:-20℃~50℃(湿度为90%)

3.软件设计 本系统分为前端和后端两部分,后端提供管理卡片、公用电脑使用权限设置、查询使用记录等功能;前端的功能是读卡、应用使用权限的限制、针对用户的友好提示、锁定解锁公用电脑。 前端部分框架图:

读卡功能实现: SL-13.56MOD-SU射频模块含有2条专用指令用于读S50卡片ID及二代身份证的ID,程序通过串口通讯按照格式发送指令并接收返回数据处理。 读S50卡ID的指令: 0x17: 检测卡(DETECT CARD) 该命令每执行一次,读卡器将自动开场,并发送监测卡片命令。若发现卡片就锁定卡片,并返回卡片的ID 信息和协议字节。这个命令可以自动检测TYPE A和TYPE B 的卡片。监测到卡片后模块将返回数据,并保持开场状态。若没有发现卡片,模块将自动关场,并返回错误信息代码。

1秒钟定时器, 输出时间触发

读卡功能, 输出读到的卡号或无卡 倒计时功能, 输出到期或剩余秒数

主程序, 内部状态转换功能, 根据输入信号锁定或解锁电脑, 显示用户界面提示 发送的数据 A6 03 FC 17 05 6B HEAD=A6 LENGTH=03 LEN_CHK =FC COMMAND=17 WAIT TIME=05 CHECKSUM =6B 返回信息为: MIFARE ONE S50卡 A6 0C F3 17 00 0A 04 00 A6 A2 FA 69 97 08 15 HEAD=A6 LENGTH=0C LEN_CHK =F3 COMMAND=17 STATUS=00 DATA=” 0A 04 00 A6 A2 FA 69 97 08 ” 卡号 CHECKSUM =15

读二代身份证ID的指令: 0x1E:读取二代身份证芯片ID 号命令 该命令用于读取二代身份证卡的ID 号。 发送的数据 A6 06 F9 1E 05 05 00 00 5F HEAD=A6 LENGTH=06 LEN_CHK =F9 COMMAND=1E WAIT TIME=05(波特率设置值 0x0F 表示使用106K 进行收发数据)。 PARAMETER=05 00 00(TYPE B 卡ATQB 命令)。 CHECKSUM =5F 模块返回的数据为: A6 37 C8 1E 00 50 00 00 00 00 ** 03 ** 05 00 ** ** 20 ** 20 ** ** 24 ** 78 00 01 ** ** 01 06 03 14 00 00 00 00 00 06 ** 10 70 ** 4B ** 8B ** ** AA ** 86 18 ** 93 ** ** ** HEAD=A6 LENGTH=37 LEN_CHK =C8 COMMAND=1E STATUS=00 DATA=” 50 00 00 00 00 ** 03 ** 05 00 ** ** 20 ** 20 ** ** 24 ** 78 00 身份证卡ID 号 01 ** ** 01 06 03 14 00 00 00 00 00 06 ** 10 70 ** 4B ** 8B ** ** AA ** 86 18 ** 93 ** ** ** ” (* 号部分为隐去的身份信息。返回的数据信息里面从第13 个字节开始的8 个字节的数据是身份证卡片的ID 号)。 CHECKSUM =74

读卡功能的步骤说明: 1.发送读MIFARE ONE S50卡ID命令 参考代码 ApdComPort1.PutBlock(ReadMOneCard, Length(ReadMOneCard)); 2.如成功,则返回卡号数据,结束;不成功则转到步骤3 3.发送读二代身份证的ID指令 参考代码 ApdComPort1.PutBlock(ReadPersonCard, Length(ReadPersonCard)); 4.如成功,则返回身份证卡号数据,结束;不成功返回无卡,结束 其中发送数据的声明如下 const ReadMOneCard : array[0..5] of byte = ($A6,$03,$FC,$17,$05,$6B); ReadPersonCard : array[0..8] of byte = ($A6,$06,$F9,$1E,$05,$05,$00,$00,$5F); 编程中串口通讯实现使用了专用的串口控件TurboPower Async Professional包,发送串口数据使用了其中"串行端口"组件TApdComPort,接收串口数据使用了其中数据包组件TApdDataPacket,在TApdDataPacket组件的OnPacket事件中处理接收到的数据,下面参考代码说明如何提取卡号。 procedure TFormReadIDCard.ApdDPSuccS50Packet(Sender: TObject; Data: Pointer; Size: Integer); ... For i := 0 To 4-1 Do begin baCardID[i] := Buffer[i + 7];//从7开始的4个字节为卡号 end;

procedure TFormReadIDCard.ApdDPSuccIDCPacket(Sender: TObject; Data: Pointer; Size: Integer); ... For i := 0 To 8-1 Do begin baCardID[i] := Buffer[i + 16]; //从16开始的8个字节为卡号 end;

锁定电脑功能实现: a. 伪装屏保状态, SystemParametersInfo(SPI_SETSCREENSAVERRUNNING, TRUE, NULL, 0); b. 禁止任务切换, SystemParametersInfo(SPI_SETFASTTASKSWITCH, FALSE, NULL, 0); c. 禁止屏保运行, SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, FALSE,0, SPIF_SENDWININICHANGE); d. 禁止任务管理器, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\DisableTaskMgr"设置这个键值为1 e. 钩住所有鼠标和键盘事件, hLKeyboardProcHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC) _LKeyboardProcHook, hInstance, 0L); hLMouseProcHook =SetWindowsHookEx(WH_MOUSE_LL, (HOOKPROC) _LMouseProcHook, hInstance, 0L); 在_LKeyboardProcHook和_LMouseProcHook这2个回调函数中根据需要过滤掉鼠标和键盘事件 f. 开机自动运行自己,"Software\\Microsoft\\Windows\\CurrentVersion\\Run"下增加一个键值"CmpMan=c:\CmpMan.exe