歡迎您訪問鄭州興邦電子股份有限公司官方網(wǎng)站!
阿里巴巴誠信通企業(yè)
全國咨詢熱線:40000-63966
興邦電子,中國水控機第一品牌

聯(lián)系興邦電子

全國咨詢熱線:40000-63966

售后:0371-55132951/55132952

工廠:河南省 鄭州市 高新區(qū)蓮花街電子電器產(chǎn)業(yè)園

非接觸IC卡讀卡器的開發(fā)研究

文章出處:http://overnightmodel.com 作者:李揚弘 李秉智   人氣: 發(fā)表時間:2011年11月17日

[文章內(nèi)容簡介]:隨著高校招生規(guī)模的不斷擴大,各學(xué)校原有的消費和管理模式已不能適應(yīng)新的發(fā)展要求,先進的校園一卡通系統(tǒng)的出現(xiàn)帶來了管理工作的革命。論文介紹了校園一卡通的組成和應(yīng)用,對非接觸IC 卡、串口通信、多線程等技術(shù)進行了研究,提出了使用多線程、串口等技術(shù)開發(fā)基于PC 控制的非接觸IC 卡讀卡器系統(tǒng)作為校園一卡通系統(tǒng)的一個重要子系統(tǒng),建立非接觸IC 卡子系統(tǒng)模型,并給出了程序的測試結(jié)果。

    隨著高校招生規(guī)模不斷擴大,學(xué)生人數(shù)逐漸增多,用傳統(tǒng)的方法進行管理工作已經(jīng)不能快速高效地解決學(xué)生提出的學(xué)習(xí)、生活、消費的需求問題。校園一卡通系統(tǒng)就是使用先進的非接觸IC 卡技術(shù)以及網(wǎng)絡(luò)通訊技術(shù),針對學(xué)校的綜合管理而開發(fā)設(shè)計的。一卡通系統(tǒng)以非接觸IC 卡作為載體,結(jié)合電子技術(shù)、非接觸IC 卡技術(shù)、計算機網(wǎng)絡(luò)技術(shù)以及數(shù)據(jù)庫技術(shù)等,使其具有身份識別和電子錢包的功能,可替代校園日常生活所需各種證件和現(xiàn)金交易,達到證件、考勤、消費娛樂、餐飲等收費的全電子化和智能化。結(jié)束了傳統(tǒng)校園生活中證件、卡片和票據(jù)滿天飛的情況,將多種管理系統(tǒng)集成為一體,以一卡通的形式進行諸如簽到考勤、身份證明、借閱圖書、校園消費等多種活動,使用方便快捷,安全可靠,做到“一卡在手,走遍校園”。 

    1 校園一卡通系統(tǒng)簡介
 

    構(gòu)建校園一卡通系統(tǒng)是為了利用已有的校園網(wǎng)絡(luò)和普及的PC 機建成一個用于綜合管理的系統(tǒng),它主要由數(shù)據(jù)庫服務(wù)器、PC 機、非接觸IC 卡、讀卡器和通訊網(wǎng)絡(luò)及其所需軟件組成。系統(tǒng)的設(shè)計原則為安全、快捷、一卡通用性和可擴展性,網(wǎng)絡(luò)結(jié)構(gòu)采用業(yè)界流行的Client/Server 體系結(jié)構(gòu),數(shù)據(jù)庫服務(wù)器采用目前流行的SQL Server 構(gòu)建數(shù)據(jù)庫,其基本表包括學(xué)生信息表,教師信息表,課程安排信息表,電子錢包剩余金額信息表等,隨系統(tǒng)擴展可加入更多的基本表。數(shù)據(jù)庫進行字段加密,

    只能通過服務(wù)器端程序手動或者自動訪問,避免直接對數(shù)據(jù)庫進行不安全的訪問。作為客戶端的PC 機上運行客戶端程序,控制讀卡器運作并與服務(wù)器端程序進行數(shù)據(jù)通信。用戶持非接觸IC 卡,可在各種讀卡器上進行相應(yīng)的操作,或在客戶端PC機上做許可范圍內(nèi)的查詢。讀卡器程序與非接觸IC 卡進行相互通信和系統(tǒng)數(shù)據(jù)庫進行操作管理,是整個一卡通系統(tǒng)的控制程序。讀卡器程序的開發(fā),是實現(xiàn)一卡通系統(tǒng)的關(guān)鍵。一卡通系統(tǒng)結(jié)構(gòu)框圖如圖1 所示。 

一卡通系統(tǒng)結(jié)構(gòu)圖

    2 非接觸IC 卡子系統(tǒng) 

    非接觸IC 卡子系統(tǒng)由讀卡器、非接觸IC 卡、PC 機以及運行在PC 上的控制程序組成。讀卡器和非接觸IC 卡之間使用射頻技術(shù)進行通信。 

    2.1 射頻技術(shù)及MIFARE 非接觸IC 卡介紹 

    射頻識別技術(shù)是利用射頻方式進行非接觸雙向通信,以達到識別目的并交換數(shù)據(jù)。它與同期或早期的接觸式識別技術(shù)不同。RFID 系統(tǒng)的射頻卡和讀寫器之間不用接觸就可完成識別,因此它可在更廣泛的場合中應(yīng)用。其工作原理如圖2 所示。

工作原理圖

    MIFARE 非接觸式IC 卡由IC 芯片,感應(yīng)天線組成,并完全密封在一個標準PVC 卡片中,無外露部分。讀寫過程通常由非接觸型IC 卡與讀寫器之間通過無線電波來完成讀寫操作。
 
    卡本身是無源體,當讀寫器對卡進行讀寫操作時,讀寫器發(fā)出的信號由兩部分疊加組成:一部分是電源信號,該信號由卡接收后,與其本身的L/C 產(chǎn)生諧振,產(chǎn)生一個瞬間能量來供給芯片工作。另一部分則是結(jié)合數(shù)據(jù)信號,指揮芯片完成數(shù)據(jù)的讀取、修改、存儲等,并返回給讀寫器。由非接觸式IC 卡所形成的讀寫系統(tǒng),無論是硬件結(jié)構(gòu),還是操作過程都得到了很大的簡化,同時借助于先進的管理軟件,可脫機的操作方式,都使數(shù)據(jù)讀寫過程更為簡單。 

    2.2 ZLG500B 讀卡模塊數(shù)據(jù)傳輸協(xié)議 

    ZLG500B 是一個簡單的串行讀寫模塊,包括一個PCB 天線,提供一個UART 接口(CMOS 電平)。UART 接口一幀的數(shù)據(jù)格式為1 個起始位,8 個數(shù)據(jù)位,無奇偶校驗位,1 個停止位,自動波特率探測。ZLG500B 上電后,將RC500 內(nèi)的EERPOM中地址為0×7F 單元的內(nèi)容讀出,取其低2 位來初始化自己的波特率。在接收主機發(fā)出的STX 的同時,測量波特率,若一致,則繼續(xù)通信;若不一致,則修改自己的波特率與主機一致,存入0×7F 單元,準備接收下一個STX。STX 為開始符,值為0×20;ETX 為終止符,值為0x03;應(yīng)答ACK 和無應(yīng)答NAK 的值分別為0×06、0- 15。 

    開始通信前,主機和ZLG500B 斗處于就緒狀態(tài),主機首先發(fā)出STX,然后等待ZLG500B 的響應(yīng)ACK。若在10ms 內(nèi)未檢測到此響應(yīng),或收到NAK,則再次發(fā)送STX,若三次均未收到正確應(yīng)答,則退出本次傳輸,將錯誤代碼返回主程序,由主程序進行錯誤處理。若收到正確響應(yīng)ACK,則發(fā)送數(shù)據(jù)塊,最后發(fā)送終止符ETX 結(jié)束本次發(fā)送。 

    2.3 基于串口通信的讀卡器開發(fā) 

    2.3.1 程序界面開發(fā)
 

    系統(tǒng)采用對話框形式作為界面,包括主界面、設(shè)置界面、讀寫操作界面和網(wǎng)絡(luò)操作界面共四個界面,主界面用按鈕連接到其他三個界面。主界面使用一個按鈕來提供自動簽到和手動操作,由單擊按鈕在簽到和操作之間切換。簽到系統(tǒng)為自動控制,屏蔽除退出以外的其他按鈕,讀卡器每讀到一張屬于本系統(tǒng)的卡,就自動將所讀到的學(xué)號、讀卡器號和當前時間記錄到本地數(shù)據(jù)庫,以便于統(tǒng)計查詢。選取操作則可使用從服務(wù)器數(shù)據(jù)庫調(diào)用詳細資料、修改卡中數(shù)據(jù)等需要手動操作的其他服務(wù),例如電子錢包消費或初始化向卡寫入數(shù)據(jù)。設(shè)置界面由主界面“設(shè)置”按鈕打開,提供串口和波特率設(shè)置。讀寫操作界面由“讀寫卡”按鈕打開,能讀寫卡中特定允許地址的數(shù)據(jù)。網(wǎng)絡(luò)操作界面由“網(wǎng)絡(luò)操作”按鈕打開,提供對遠程數(shù)據(jù)庫的讀寫和更新。

    2.3.2 基于多線程的串口通信 

    串行端口的本質(zhì)功能是作為CPU 和串行設(shè)備間的編碼轉(zhuǎn)換器。當數(shù)據(jù)從CPU 經(jīng)過串行端口發(fā)送出去時,字節(jié)數(shù)據(jù)轉(zhuǎn)換為串行的位。在接收數(shù)據(jù)時,串行的位被轉(zhuǎn)換為字節(jié)數(shù)據(jù)。在Windows 環(huán)境(Windows NT、Win98、Windows2000)下,串口是系統(tǒng)資源的一部分。應(yīng)用程序要使用串口進行通信,必須在使用之前向操作系統(tǒng)提出資源申請要求(打開串口),通信完成后必須釋放資源(關(guān)閉串口)。在MFC 下32 位串口通信程序可以用以下三種方法實現(xiàn):

    利用VC++的標準通信函數(shù)_inp 和_outp 可實現(xiàn)串口通信,利用ActiveX 控件和使用API 通信函數(shù)。VC++6.0 的標準通信函數(shù)用類似i=inp(PORT+5)&& 0xfe,outp(PORT+5,i)的形式操作串口。VC++6.0 提供的MSComm控件通過串行端口發(fā)送和接收數(shù)據(jù),為應(yīng)用程序提供串行通信功能,編程時只需將控件對話中的MSComm 控件拖至你的應(yīng)用對話框中,在主對話框的.h 文件中為新創(chuàng)建的通信控件定義成員對象(CMSComm m_Comm),通過該對象便可以設(shè)置操作MSComm控件的27 個屬性,格式為“m_Comm.屬性”??丶m然簡單易用,但由于必須拿到對話框中使用,在一些需要在線程中實現(xiàn)通信的應(yīng)用場合下,控件的使用顯得捉襟見肘。API 是附帶在Windows 內(nèi)部的一個極其重要的組成部分,Windows 的32 位API 主要是一系列很復(fù)雜的函數(shù)和消息集合。它可以看作是Windows 系統(tǒng)為在其下運行的各種開發(fā)系統(tǒng)提供的開放式通用功能增強接口。 

    ZLG500B 開發(fā)板使用VC++標準通信函數(shù)封裝了一些底層和高層庫函數(shù),使用這些庫函數(shù)可以簡化開發(fā)工作。首先將庫函數(shù)文件放入工作目錄中,在.CPP 中包含zlg500B.h 頭文件,然后將zlg500B.lib 加入到工程文件中。這樣在程序中,就可以象調(diào)用VC 庫函數(shù)一樣調(diào)用這些函數(shù)了。 

    程序采用多線程技術(shù),解決串口輸入的瓶頸問題,當讀卡工作線程運行的時候,程序可以做一些其他的事情,比如操作服務(wù)器數(shù)據(jù)庫等。而用戶界面始終可以繼續(xù)操作,一個永遠有反應(yīng)的UI 是很重要的。除由進程產(chǎn)生的主線程外,程序產(chǎn)生三個工作線程,分別用于卡的檢測、卡的操作和socket 通信。由主程序創(chuàng)建檢測卡的工作線程: 

pCheckThread=AfxBeginThread(ThreadFunc,this,0,THREAD_PRIORITY_NORMAL,CREATE_SUSPENDED) 

    其中最后一個參數(shù)表示創(chuàng)建線程的同時掛起線程,在程序中由設(shè)置按鈕的響應(yīng)函數(shù)在設(shè)置端口和波特率后恢復(fù)線程運行。主線程由按鈕事件驅(qū)動控制整個程序流程,產(chǎn)生需要的工作線程。程序入口之前聲明一些全局變量,包括讀卡所需的數(shù)據(jù)、緩沖區(qū)、序列號等的全局結(jié)構(gòu)datas 和全局標志量等,用于各線程之間數(shù)據(jù)通信。程序流程結(jié)構(gòu)圖如圖3 所示。
 
    無接觸IC 卡本身是無源體,由讀卡器發(fā)出的信號提供工作能量,所以讀卡器工作線程采用主動輪循檢測卡,在關(guān)閉軟件之前,它將一直運行。讀卡線程設(shè)置一靜態(tài)變量用于每次結(jié)束后儲存卡的序列號,初始化讀卡模塊,然后開始檢測有效范圍是否有卡,發(fā)現(xiàn)卡后獲得序列號存入局部變量,裝載密碼防沖撞選擇,選擇卡進行認證,成功后驅(qū)動蜂鳴器并比較獲得的序列號的局部變量和存上次的序列號的靜態(tài)變量,不同則更新靜態(tài)變量的序列號并檢測運行狀態(tài):為簽到狀態(tài)就讀入特定地址需要的數(shù)據(jù),寫入到本地數(shù)據(jù)庫,為操作狀態(tài)就設(shè)置標志量,完成所有步驟或者某一步不能通過都返回循環(huán)開始處繼續(xù)查找。程序提供一個全局二維鏈表,首節(jié)點保存當天日期,其他節(jié)點保存已簽到卡號,每次讀卡后在鏈表中查找卡號,為新卡則增加節(jié)點將卡號寫入,再將所需數(shù)據(jù)寫入數(shù)據(jù)庫,以此來保證不重復(fù)簽到。操作狀態(tài)下由讀寫操作按鈕事件建立讀寫操作線程,扇區(qū)和塊選擇由讀寫操作界面上用戶輸入然后傳遞給線程函數(shù)。每一次讀寫、增加或減少數(shù)據(jù)之前必須首先請求應(yīng)答與卡建立第一步聯(lián)系、防沖撞在多張卡片中選定一張、select 卡片選擇明確可對卡進行下一步操作,上述的三個步驟確認已經(jīng)選擇了一張卡片,還必須對卡片上已經(jīng)設(shè)置的密碼進行認證,如果匹配,則允許進一步的讀寫等操作。

程序流程結(jié)構(gòu)框圖

    對卡的密碼驗證的三遍認證過程:由Mifare 卡片向讀寫器發(fā)送一個隨機數(shù)據(jù)RB;由讀寫器收到RB 后向Mifare 卡片發(fā)送一個令牌數(shù)據(jù)TOKENAB,其中包含了讀寫器發(fā)出的一個隨機數(shù)據(jù)RA;Mifare 卡片收到TOKEN AB 后,對TOKEN AB 的加密的部分進行解密,并校驗第一次由Mifare 卡片發(fā)出去的隨機數(shù)RB 是否與環(huán)中接收到的TOKEN AB 中的RA 相一致;如果校驗是正確的,則Mifare 卡片向讀寫器發(fā)送令牌TOKEN BA 給讀寫器;讀寫器收到令牌TOKEN BA 后,讀寫器將對令牌TOKEN BA 中的RB 進行解密;并校驗第一次由讀寫器發(fā)出去的隨機數(shù)RA 是否與接收到的TOKEN BA 中的RB 相一致;如果上述的每一步都為“真”,都能正確通過驗證,則整個的認證過程將成功。讀寫器將能對剛剛認證通過的卡片上的這個扇區(qū)可以進入下一步的操作(READ/WRITE 等操作)??ㄆ械钠渌葏^(qū)由于有其各自的密碼,因此不能對其進行進一步的操作。如想對其他扇區(qū)進行操作,必須完成上述的認證過程。認證過程中的任何一環(huán)出現(xiàn)差錯,整個認證將告失敗,必須從新開始。MIFARE 卡片上有16 個扇區(qū),每個扇區(qū)都可分別設(shè)置各自的密碼,互不干涉。因此每個扇區(qū)可獨立地應(yīng)用于一個應(yīng)用場合,滿足一卡多用的需要。 

    程序里放置了一個身份驗證模塊來維護系統(tǒng)安全,確保用戶不能越權(quán)使用。用戶在對卡數(shù)據(jù)或數(shù)據(jù)庫進行操作的時候會要求輸入密碼。不同的用戶輸入不同的個人密碼將擁有不同的權(quán)限,密碼是與卡相對應(yīng)的,刷卡相當于輸入用戶名。不輸入任何密碼只能基本的簽到功能,輸入用戶密碼可以查詢個人資料,通過鍵盤輸入密碼,允許持卡人輸入三次密碼,如果三次輸?shù)亩疾粚?,卡就會被鎖住,只有PIN 碼對了,用戶才能對卡進行操作。高級系統(tǒng)管理員才有權(quán)限修改用戶卡和數(shù)據(jù)庫資料和讓鎖住的卡重新投入使用,保證整個系統(tǒng)安全使用。程序在運行過程中檢測到串口上下行數(shù)據(jù)為: 
    【W(wǎng)rite 數(shù)據(jù):】20 主機首先發(fā)送
    【Read 數(shù)據(jù):】06 收到ZLG500B 的正確響應(yīng)
    【W(wǎng)rite 數(shù)據(jù):】00 52 00 AD 03 主機發(fā)送打開串口的命
    令03 作為終止符
    【W(wǎng)rite 數(shù)據(jù):】20
    【Read 數(shù)據(jù):】06
    【W(wǎng)rite 數(shù)據(jù):】00 41 01 00 BF 03 主機發(fā)送request 命令
    【Read 數(shù)據(jù):】20
    【W(wǎng)rite 數(shù)據(jù):】06
    【Read 數(shù)據(jù):】00 00 02 04 00 F9 03 request 命令成功返回
    【W(wǎng)rite 數(shù)據(jù):】20 20 20 主機收不到響應(yīng)的情況,將
    連發(fā)三次后返回
    通過長達100h 的單機測試,程序運行良好,完全能達到設(shè)計的要求。 
    
    3 結(jié)束語 

    基于PC 開發(fā)讀卡器程序,是實現(xiàn)校園一卡通系統(tǒng)的關(guān)鍵,利用現(xiàn)有普及的PC 機,能縮減構(gòu)建系統(tǒng)的成本,提高資源利用率,簡化校園管理,方便學(xué)生的校園生活。隨著不斷深入研究完善校園一卡通系統(tǒng),系統(tǒng)將能應(yīng)用到更多領(lǐng)域,有著廣闊的前景

本文關(guān)鍵詞:非接觸IC卡,IC卡,讀卡器,校園一卡通
回到頂部