新聞中心

EEPW首頁 > 設計應用 > 基于NFC手機的RFID中間件設計

基于NFC手機的RFID中間件設計

作者: 時間:2016-10-10 來源:網(wǎng)絡 收藏

(RFID) 中間件位于RFID閱讀器與上層服務器應用層之間,具有屏蔽底層設備、標簽數(shù)據(jù)清洗、等功能。目前,國內(nèi)外許多企業(yè)以及機構(gòu)也都致力于RFID 中間件的研究,如:IBM、Microsoft、清華同方等都有自己的RFID 中間件產(chǎn)品。 這些產(chǎn)品大多部署在服務器端,如果短時間內(nèi)產(chǎn)生了海量RFID 數(shù)據(jù),大量原始數(shù)據(jù)都將集中在服務器端,對中間件的數(shù)據(jù)處理能力是很大的考驗。同時,海量數(shù)據(jù)的傳輸會占用網(wǎng)絡帶寬,如果網(wǎng)絡出現(xiàn)故障,有可能會造成數(shù)據(jù)的丟失。隨著大數(shù)據(jù)時代的到來,傳統(tǒng)RFID 中間件的瓶頸逐漸暴露,直接影響系統(tǒng)的整體性能。因此,在面對海量RFID原始數(shù)據(jù)的情況下,如何減小服務器端處理壓力,降低系統(tǒng)對網(wǎng)絡的依賴性成為 RFID 中間件急需解決的問題。本文就一種基于 NFC手機的RFID中間件進行研究與實現(xiàn),將RFID 中間件技術(shù)與移動互聯(lián)網(wǎng)相結(jié)合,彌補了傳統(tǒng)RFID 中間件的不足之處,并且符合當前發(fā)展趨勢。

本文引用地址:http://butianyuan.cn/article/201610/306217.htm

1 中間件設計方案

1.1 系統(tǒng)架構(gòu)

根據(jù)RFID 中間件功能需求以及移動設備資源有限等特點,提出了如圖1 所示的系統(tǒng)架構(gòu)。

圖1 系統(tǒng)總體架構(gòu)圖

圖1 系統(tǒng)總體架構(gòu)圖

1) 設備管理模塊主要包含 4 個部分,NFC讀卡部分負責調(diào)用手機自帶 NFC模塊進行讀取標簽信息;外接閱讀器管理部分兼容外接閱讀器驅(qū)動,并通過藍牙、WiFi、3G網(wǎng)絡等與之進行;工作日志管理部分主要對手機及中間件的工作日志進行管理;手機狀態(tài)查詢部分能夠?qū)崟r地對手機電量、剩余存儲空間、信號等狀態(tài)進行查詢。

2)數(shù)據(jù)處理模塊主要包含5 個部分,協(xié)議校驗部分負責對RFID 標簽數(shù)據(jù)根據(jù)標識位進行初步校驗,去除殘缺的或者非本系統(tǒng)數(shù)據(jù);標簽緩存部分采用BlockingQueue 隊列作為緩存將初步校驗后的數(shù)據(jù)存儲;冗余數(shù)據(jù)處理部分采用自適應的臨近排序算法(Sorted Neighborhood Method,SNM)去除冗余數(shù)據(jù);數(shù)據(jù)校驗部分采用 CRC16 算法對標簽數(shù)據(jù)中的校驗源數(shù)據(jù)進行校驗,以此驗證標簽數(shù)據(jù)是否被篡改過;數(shù)據(jù)分類部分根據(jù)約定的數(shù)據(jù)規(guī)則將數(shù)據(jù)進行分類。

3)數(shù)據(jù)庫模塊采用 SQLite 嵌入式數(shù)據(jù)庫存儲處理好的數(shù)據(jù)。

4)模塊采用Quartz框架結(jié)合Socket編程實現(xiàn)中間件與服務器之間的數(shù)據(jù)交互。

5)任務管理模塊負責將服務器端發(fā)送來的命令文件進行緩存與管理。

1.2 系統(tǒng)設計重點

1.2.1 設備管理模塊

該模塊主要為對硬件設備的管理與監(jiān)控,集成NFC以及外接讀卡器驅(qū)動,并且能夠?qū)ο到y(tǒng)工作日志以及手機狀態(tài)進行查詢。

系統(tǒng)主要采用 NFC模塊對RFID 卡片進行讀寫,集成多種NFC標準,可自動判別卡片類型,相關代碼如下所示:

mTechLists =new String[][]{new String[]{MifareClassic.class.getName()},

new String[]{MifareUltralight.class.getName()},

new String[]{NdefFormatable.class.getName()},

new String[]{Ndef.class.getName()},

new String[]{IsoDep.class.getName()},

new String[]{NfcV.class.getName()},

new String[]{NfcF.class.getName()},

new String[]{NfcB.class.getName()},

new String[]{NfcA.class.getName()}};

為了使系統(tǒng)有良好的可擴展性,中間件兼容多種讀卡器驅(qū)動,通過藍牙、WiFi、3G 網(wǎng)絡等與外接讀卡器進行數(shù)據(jù)傳輸。

此外,提供良好的接口,可對中間件工作日志以及手機電量、信號強度、剩余存儲空間等信息進行實時查詢與管理。

1.2.2 數(shù)據(jù)處理模塊

1)數(shù)據(jù)緩存、校驗及冗余數(shù)據(jù)處理。

系統(tǒng)采用BlockingQueue 隊列作為緩存來存儲短時間內(nèi)接收的大量數(shù)據(jù)。 將接收的卡片數(shù)據(jù)進行初步校驗,去除殘缺或者非本系統(tǒng)數(shù)據(jù)。

表 1 為標簽數(shù)據(jù)格式,其中UID 為每個標簽唯一標識,校驗數(shù)據(jù)中前7 位是用于生成校驗碼的原始數(shù)據(jù),第8 位為本系統(tǒng)標簽標識,且對每個標簽的前7位校驗數(shù)據(jù)采用 CRC16 算法生成校驗碼,與標簽UID 一起由服務器通過JSON 文件寫入到手機端數(shù)據(jù)庫中。 當讀取到標簽數(shù)據(jù)后,中間件首先根據(jù)校驗源數(shù)據(jù)中第8 位標識符來判斷該卡片是否為本系統(tǒng)所屬,然后采用相同的 CRC16 算法對前7 位校驗數(shù)據(jù)生成校驗碼,并根據(jù)標簽 UID 與數(shù)據(jù)庫中的校驗碼相比較,以此來判斷標簽數(shù)據(jù)是否被改寫。 8 位校驗源數(shù)據(jù)在校驗完成后需去掉,只將有用數(shù)據(jù)存儲。

表1 RFID 標簽數(shù)據(jù)格式

表1 RFID 標簽數(shù)據(jù)格式

數(shù)據(jù)冗余是RFID 系統(tǒng)不可避免的問題,如果數(shù)據(jù)不清洗,大量有用、無用的數(shù)據(jù)會占用網(wǎng)絡帶寬,增加系統(tǒng)處理負擔;如果將接收的數(shù)據(jù)逐一與數(shù)據(jù)庫中的數(shù)據(jù)進行比對,雖然準確率高,但是面對大量的RFID數(shù)據(jù)時會降低系統(tǒng)效率,因此,針對移動端有限的資源以及對數(shù)據(jù)處理效率的綜合考慮,本系統(tǒng)采用SNM 算法來處理冗余數(shù)據(jù)。

數(shù)據(jù)清洗流程如圖2 所示。

圖2 數(shù)據(jù)清洗流程圖

圖2 數(shù)據(jù)清洗流程圖

2)數(shù)據(jù)分類。

將通過清洗的數(shù)據(jù)根據(jù)事先約定好的數(shù)據(jù)規(guī)則進行分類,比如事先規(guī)定卡片中第 Ni ~Nj 位為數(shù)據(jù)標識位,則將數(shù)據(jù)存儲到 SQLite 數(shù)據(jù)庫相應表格中。

1.2.3 數(shù)據(jù)交互模塊

該模塊負責移動端中間件與服務器之間的數(shù)據(jù)交互,在保證數(shù)據(jù)完整性、安全性的前提下,提高傳輸速度。 采用Socket 通信,以文件的方式傳輸命令與數(shù)據(jù),模塊中采用 CRC 校驗確保文件安全,并且支持文件斷點上傳、下載。 將相關文件在移動端進行存儲與備份,即使網(wǎng)絡出現(xiàn)故障,中間件也可以正常工作,且不會造成數(shù)據(jù)丟失。

數(shù)據(jù)交互流程如圖3 所示。

圖3 數(shù)據(jù)交互模塊流程圖

圖3 數(shù)據(jù)交互模塊流程圖

中間件采用Quartz開源框架根據(jù)需求設置作業(yè)調(diào)度,在一定時間自動向服務器發(fā)送一次請求,若服務器端有新的命令,則獲取該命令,解析并執(zhí)行,無需人工干預,且參數(shù)可由服務器端下發(fā)命令進行修改,自動化程度高,可配置性好,服務器端采用多線程處理中間件的請求,進而提高處理效率。

表2 數(shù)據(jù)交互模塊傳輸速度測試

表2 數(shù)據(jù)交互模塊傳輸速度測試

表 2 為對數(shù)據(jù)交互模塊傳輸速度的測試結(jié)果,其中測試數(shù)據(jù)為支持ISO15693 標準的RFID標簽數(shù)據(jù),手機端通過3G 網(wǎng)絡向服務器端上傳RFID 標簽數(shù)據(jù)文件,支持文件斷點續(xù)傳,而且當文件傳輸完成后,還會在本地進行備份,避免文件數(shù)據(jù)丟失。 由于手機端緩存有限,且經(jīng)過測試,發(fā)送的數(shù)據(jù)包如果過大會導致數(shù)據(jù)丟失,所以系統(tǒng)數(shù)據(jù)包大小設置為 1kB,且每發(fā)送一次數(shù)據(jù)包,都會加上報頭用以標識該手機以及報尾用作 CRC 校驗。 當數(shù)據(jù)量較小時,傳輸速度受報頭、報尾的影響較大,而當數(shù)據(jù)量增大時,報頭、報尾對數(shù)據(jù)傳輸速度的影響越來越少。 所以,當傳輸?shù)臄?shù)據(jù)量增大到一定程度時(100000 條數(shù)據(jù)左右),所消耗的時間基本上與數(shù)據(jù)量大小成正比,此外,數(shù)據(jù)傳輸速度受網(wǎng)絡因素以及設備讀寫速度影響較大。

1.2.4 任務管理模塊

將命令文件解析后依次執(zhí)行,如果命令執(zhí)行成功,則將命令文件移到備份文件夾中;如果由于網(wǎng)絡原因造成命令執(zhí)行失敗,則將該命令加入到任務隊列,待網(wǎng)絡恢復后執(zhí)行該命令,命令所需數(shù)據(jù)暫存在本地數(shù)據(jù)庫中。

如以下JSON 命令所示,status 表示命令狀態(tài),即服務器端命令是否正常;order_type 表示命令類型,比如獲取數(shù)據(jù)、修改參數(shù)等;details 中表示要進行的詳細操作,其中的object 表示操作的對象;action 表示對該對象執(zhí)行的操作,比如獲取某一類型的數(shù)據(jù)、獲取日志文件、獲取設備狀態(tài)或者是修改請求上傳/下載時間間隔等程序參數(shù),使得該中間件可配置性好。

基于NFC手機的RFID中間件設計

1.2.5 數(shù)據(jù)存儲模塊

中間件根據(jù)服務器端發(fā)送來的命令,將相關數(shù)據(jù)生成JSON 文件,發(fā)送到服務器端的同時,將JSON格式的數(shù)據(jù)文件備份到本地存儲設備中,防止由于網(wǎng)絡問題等原因造成的服務器端接收的數(shù)據(jù)不完整,只有服務器端收到完整數(shù)據(jù),并且發(fā)送相關命令給中間件,中間件才能根據(jù)命令將相關數(shù)據(jù)文件刪除,以此節(jié)省移動設備的存儲空間。

1.3 系統(tǒng)優(yōu)點

1)減輕服務器端負擔。

RFID原始數(shù)據(jù)經(jīng)由多個部署在移動設備上的中間件進行處理,將處理后的有效數(shù)據(jù)發(fā)送到服務器端,這樣既減少服務器端的壓力,又減少網(wǎng)絡傳輸量,提高了系統(tǒng)運行效率。

2)具有數(shù)據(jù)存儲及備份功能,獨立性強。

移動設備的存儲性能越來越強,當網(wǎng)絡或者服務器端出現(xiàn)故障時,可將RFID數(shù)據(jù)存儲在移動設備中,有效避免數(shù)據(jù)丟失。 因此在斷網(wǎng)的情況下也可以正常工作,解決了以往RFID中間件技術(shù)對網(wǎng)絡的依賴。

3)操作靈活,部署簡單。

NFC手機集讀卡器、中間件于一體,可以根據(jù)數(shù)據(jù)量的大小增減設備數(shù)量,也可根據(jù)卡片分布對中間件位置做出調(diào)整,方便部署,同時也解決了以往RFID系統(tǒng)中讀卡器與中間件之間信息安全及傳輸速率問題。

4)系統(tǒng)可配置性高。

中間件與服務器端通過傳輸JSON命令來控制系統(tǒng)進行相關操作或者更改系統(tǒng)參數(shù),比如獲取指定數(shù)據(jù)、改變數(shù)據(jù)交互時間間隔等。 同時,操作人員也可以通過系統(tǒng)界面對中間件參數(shù)進行設置,解決了以往中間件自動化低、可配置性差等缺點。

5)自動報警機制。

系統(tǒng)定期對設備日志及狀態(tài)信息進行自檢,若出現(xiàn)緊急狀況,比如設備電量不足、存儲空間過滿以及卡片信息被篡改等,可以及時地向指定的手機號碼發(fā)送預警信息,避免造成損失,彌補了以往中間件報警不及時的弊端。

2 系統(tǒng)實現(xiàn)及運行效果

系統(tǒng)采用 Java 語言基于 Eclipse 平臺編寫,數(shù)據(jù)庫為 SQLite 嵌入式數(shù)據(jù)庫,測試設備為魅族 MX3 智能手機,其 RAM 容量為 2 GB,CPU 頻率為 1638MHz,ROM 為 32 GB,測試用卡片遵循 ISO15693 標準,采用NFC模塊讀取卡片內(nèi)容,部分運行界面如圖4 所示。

圖4 系統(tǒng)運行部分界面

圖4 系統(tǒng)運行部分界面

當程序運行時,將手機連接電腦,在 Eclipse 中啟動 Dalvik 調(diào)試監(jiān)控服務器 (Dalvik Debug MonitorService,DDMS),并通過 DDMS 自帶的 Heap 來查看系統(tǒng)消耗內(nèi)存,顯示該程序所占內(nèi)存為 22.628 M,CPU 占用率為6%,由此可見,該系統(tǒng)可在移動設備有限的資源中完美運行。 并且經(jīng)測試,包含 1000 W條RFID數(shù)據(jù)的 SQLite 數(shù)據(jù)庫大小為188 M,從所占存儲空間來看,該RFID 中間件可部署于大部分主流移動設備中,并且可有效處理并存儲更多的數(shù)據(jù)。

為了模擬處理大量RFID 數(shù)據(jù)下系統(tǒng)工作狀況,編寫程序根據(jù)RFID數(shù)據(jù)規(guī)則自動生成測試數(shù)據(jù),不同數(shù)據(jù)量的系統(tǒng)性能測試結(jié)果如表3 所示。

表3 中間件部分性能測試

基于NFC手機的RFID中間件設計

表3 中T 表示將原始數(shù)據(jù)經(jīng)過清洗并且存入數(shù)據(jù)庫所需時間,R和P分別表示數(shù)據(jù)清洗的召回率和正確率,R=系統(tǒng)正確識別的重復記錄數(shù)/數(shù)據(jù)集中實際包含的重復記錄數(shù),P=系統(tǒng)正確識別的重復記錄數(shù)/系統(tǒng)總共檢索到的重復記錄數(shù),Size表示保存相應數(shù)據(jù)量數(shù)據(jù)庫的大小。

可以看出,系統(tǒng)能夠滿足基本的數(shù)據(jù)處理要求,但數(shù)據(jù)清洗的召回率、正確率及所耗時間還有待提高,分析其原因主要是滑動窗口的大小以及排序關鍵字的選擇。 當窗口太小時,容易漏配,即去除冗余效果不佳,導致召回率不理想;當窗口太大時,會產(chǎn)生許多沒必要的比較,時間效果不理想。所以,采用自適應隨機窗口在二者間找到一個平衡點。 本系統(tǒng)選取的關鍵字是時間戳,而根據(jù)實際應用,新到達的RFID數(shù)據(jù)更能代表當前狀況,所以每次比較都保留最新時間戳數(shù)據(jù),這樣,使得部分數(shù)據(jù)之間的時間閾值可能小于預設值,即有的數(shù)據(jù)被誤認為是重復數(shù)據(jù),導致了準確率不是很理想。

3 結(jié)束語

本文提出了基于NFC手機的RFID中間件,由于NFC手機集讀卡器與中間件功能于一體,且有較好的存儲能力,即使在網(wǎng)絡出現(xiàn)故障時中間件仍然可以運行,同時也使得系統(tǒng)部署更為靈活;數(shù)據(jù)交互模塊采用Quartz框架與Socket編程相結(jié)合,自動化程度高;通過JSON命令或者良好的界面對參數(shù)進行設置,使得系統(tǒng)具有良好的可配置性;在系統(tǒng)發(fā)生異常時還可實時發(fā)出報警短信,以便及時處理;充分利用移動互聯(lián)網(wǎng)的優(yōu)勢,將RFID 中間件與移動平臺完美結(jié)合,解決了傳統(tǒng)中間件的諸多不便之處。



評論


相關推薦

技術(shù)專區(qū)

關閉