黎志庭,龍?zhí)镳B(yǎng),徐慶華,劉創(chuàng)新,吳振彪,沈德才
(1.廣東省東莞市大嶺山森林公園,東莞 523100;2.廣東省東莞市林業(yè)科學(xué)研究所,東莞 523106)
基于RFID的植物識(shí)別研究與實(shí)現(xiàn)
黎志庭1,龍?zhí)镳B(yǎng)2,徐慶華1,劉創(chuàng)新2,吳振彪1,沈德才2
(1.廣東省東莞市大嶺山森林公園,東莞 523100;2.廣東省東莞市林業(yè)科學(xué)研究所,東莞 523106)
基于RFID的植物識(shí)別能夠有效提高植物管理的工作效率。介紹一種基于Java平臺(tái),使用JNA調(diào)用本地驅(qū)動(dòng)程序的RFID開發(fā)方法,使用工廠方法模式解決讀卡器類型多樣化的問題,并對(duì)防碰撞和循環(huán)讀取中數(shù)據(jù)傳輸問題進(jìn)行解決。該方法在鄉(xiāng)土植物管理系統(tǒng)中應(yīng)用效果較好。
無線射頻識(shí)別;JNA;植物識(shí)別
無線射頻識(shí)別(Radio Frequency Identification,RFID)是一種非接觸式的自動(dòng)識(shí)別技術(shù),它利用無線射頻方式進(jìn)行非接觸式雙向通信,能夠進(jìn)行目標(biāo)識(shí)別并交換數(shù)據(jù)[1]。隨著RFID技術(shù)的不斷發(fā)展,其應(yīng)用領(lǐng)域涉及零售業(yè)、服務(wù)業(yè)、制造業(yè)、物流業(yè)、信息產(chǎn)業(yè)、醫(yī)療和國防等[2-4]。在植物識(shí)別領(lǐng)域,RFID技術(shù)在名樹古木和苗木花卉栽培管理有較好的應(yīng)用[5-6]。本文主要解決在鄉(xiāng)土植物保護(hù)管理系統(tǒng)中應(yīng)用RFID技術(shù)對(duì)植物個(gè)體進(jìn)行識(shí)別的問題。
1.1 鄉(xiāng)土植物保護(hù)管理系統(tǒng)簡(jiǎn)介
鄉(xiāng)土植物管理系統(tǒng)的主要目標(biāo)是首先對(duì)鄉(xiāng)土植物的個(gè)體詳細(xì)數(shù)據(jù)進(jìn)行采集,建立植物檔案數(shù)據(jù)庫;在進(jìn)行現(xiàn)場(chǎng)巡檢和養(yǎng)護(hù)工作時(shí),攜帶便攜式設(shè)備如平板電腦等進(jìn)行相關(guān)工作數(shù)據(jù)的采集并與云服務(wù)器進(jìn)行數(shù)據(jù)同步,其工作原理如圖1所示。RFID主要用于植物個(gè)體的識(shí)別,并與系統(tǒng)其他功能模塊進(jìn)行數(shù)據(jù)通信,以實(shí)現(xiàn)對(duì)植物數(shù)據(jù)的管理。
1.2 RFID設(shè)備
鄉(xiāng)土植物管理系統(tǒng)需要通過USB接口或者藍(lán)牙接口連接讀卡器硬件,識(shí)別RFID標(biāo)簽并實(shí)現(xiàn)植物數(shù)據(jù)的讀取和寫入。選取的硬件設(shè)備包括采用有線方式連接的USB讀卡器(MR915讀卡器)和無線試連接的藍(lán)牙讀卡器(UHF高頻讀卡器),如圖2和圖3所示。
圖1 鄉(xiāng)土植物管理系統(tǒng)工作原理
圖2 有線讀卡器實(shí)物圖
圖3 無線讀卡器實(shí)物圖
1.3 需要解決的關(guān)鍵問題
為了提高系統(tǒng)的可移植性,使其可以應(yīng)用于不同類型的平板電腦,系統(tǒng)使用Java平臺(tái)開發(fā),開發(fā)過程需要解決的關(guān)鍵問題包括:
(1)設(shè)備驅(qū)動(dòng)的調(diào)用
系統(tǒng)使用Java平臺(tái)進(jìn)行開發(fā),而兩種讀卡器的底層驅(qū)動(dòng)程序均是動(dòng)態(tài)鏈接庫形式的DLL函數(shù)庫,因此需要決Java與底層驅(qū)動(dòng)之間的調(diào)用問題。
(2)設(shè)備的可擴(kuò)展性
目前系統(tǒng)選用兩種不同型號(hào)的讀卡器,并且根據(jù)需求,未來還會(huì)其它型號(hào)的讀卡器。因此,需要解決更換不同類型讀卡器時(shí)的問題,提高系統(tǒng)的可擴(kuò)展性和可維護(hù)性。
(3)提高讀卡操作的抗干擾性
系統(tǒng)主要應(yīng)用于野外環(huán)境的植物管理,在使用時(shí)會(huì)有很多外來干擾,系統(tǒng)應(yīng)用時(shí)會(huì)出現(xiàn)同一個(gè)區(qū)域內(nèi)會(huì)有較多標(biāo)簽或者有多個(gè)用戶在附近使用讀卡器。因此需要考慮系統(tǒng)數(shù)據(jù)傳輸過程的抗干擾性和可靠性問題。
2.1 植物標(biāo)簽的數(shù)據(jù)結(jié)構(gòu)
系統(tǒng)的整體設(shè)計(jì)方案中,RFID標(biāo)簽中需要存儲(chǔ)的數(shù)據(jù)包括兩項(xiàng):標(biāo)簽的唯一識(shí)別標(biāo)志和植物個(gè)體的唯一識(shí)別標(biāo)志。在數(shù)據(jù)的讀取和寫入操作中,數(shù)據(jù)是以二進(jìn)制數(shù)據(jù)流的形式進(jìn)行數(shù)據(jù)傳輸,因此數(shù)據(jù)結(jié)構(gòu)中設(shè)計(jì)了數(shù)據(jù)長(zhǎng)度。具體見表1。
根據(jù)EPC(電子產(chǎn)品代碼)標(biāo)準(zhǔn)協(xié)議,邏輯上RFID卡包括四個(gè)存儲(chǔ)體:保留內(nèi)存、EPC存儲(chǔ)器、TID存儲(chǔ)器和用戶存儲(chǔ)器。系統(tǒng)分別使用標(biāo)簽中的TID存儲(chǔ)區(qū)和用戶存儲(chǔ)器存儲(chǔ)上述數(shù)據(jù)。
表1 植物標(biāo)簽數(shù)據(jù)結(jié)構(gòu)
2.2 設(shè)備驅(qū)動(dòng)調(diào)用的實(shí)現(xiàn)
系統(tǒng)解決連接問題使用Java訪問本地代碼的JNA(Java Native Access)框架,它提供一組Java工具類在運(yùn)行期動(dòng)態(tài)訪問系統(tǒng)本地庫(如Windows的DLL)而不需要編寫任何Native/JNI代碼[7]。開發(fā)時(shí)需要在一個(gè)Java接口中描述目標(biāo)系統(tǒng)本地庫的函數(shù)與結(jié)構(gòu)[8]。表2列出了部分調(diào)用讀卡器驅(qū)動(dòng)的函數(shù)映射。
圖4 讀卡器應(yīng)用的類結(jié)構(gòu)圖
表2 JNA函數(shù)映射
2.3 讀卡器擴(kuò)展性實(shí)現(xiàn)
系統(tǒng)需求中提出需要解決兩種類型讀卡器應(yīng)用并考慮擴(kuò)展其他類型讀卡器。為解決該問題,采用工廠方法設(shè)計(jì)模式,將不同的讀卡器的共同特征進(jìn)行抽取,實(shí)現(xiàn)統(tǒng)一接口Reader代表抽象讀卡器,每種讀卡器的具體操作由實(shí)現(xiàn)了該接口的子類完成,圖4為類的結(jié)構(gòu)關(guān)系。這樣在更換讀卡器設(shè)備時(shí)可以降低代碼修改成本。
2.4 標(biāo)簽識(shí)別的實(shí)現(xiàn)
(1)防碰撞
系統(tǒng)運(yùn)行過程中可能存在多個(gè)讀卡器或多個(gè)標(biāo)簽同時(shí)工作,這些讀卡器和標(biāo)簽之間可能會(huì)互相造成干擾,這就造成了碰撞。
本文采用的防碰撞處理策略是設(shè)置一個(gè)Q參數(shù),其取值為0至15之間的整數(shù)。當(dāng)讀寫器要對(duì)標(biāo)簽進(jìn)行讀寫操作時(shí),讀寫器首先向所有的標(biāo)簽發(fā)送查詢指令,指令中包含一個(gè)參數(shù)Q,處于讀寫器射頻場(chǎng)中的標(biāo)簽收到此命令后便會(huì)產(chǎn)生0~21Q之間的隨機(jī)數(shù)作為其應(yīng)答時(shí)隙,并將此隨機(jī)數(shù)載入時(shí)隙計(jì)數(shù)器中。只有時(shí)隙計(jì)數(shù)器中的時(shí)隙為0的標(biāo)簽才會(huì)向讀寫器發(fā)送16位的隨機(jī)數(shù)作為應(yīng)答信息。
(2)標(biāo)簽識(shí)別
標(biāo)簽識(shí)別分為單步識(shí)別和循環(huán)識(shí)別兩種方式。循環(huán)識(shí)別是RFID在需要多次識(shí)別時(shí)使用的功能,需要解決以下幾個(gè)問題:
①采用線程機(jī)制循環(huán)讀取數(shù)據(jù)
通過繼承Thread類實(shí)現(xiàn)一個(gè)線程類,其中定義一個(gè)圖4中Reader接口類型的變量reader,根據(jù)工廠方法實(shí)例化該變量。線程的循環(huán)運(yùn)行通過一個(gè)狀態(tài)標(biāo)志變量readFlag控制,當(dāng)該變量為true時(shí),通過reader讀取并發(fā)送數(shù)據(jù)。識(shí)別結(jié)束后,設(shè)置readFlag變量為false。
②識(shí)別過程中的防碰撞
在循環(huán)識(shí)別的處理過程中,通過參數(shù)控制是否啟用2.4.1中說明的防碰撞的功能。
③讀取數(shù)據(jù)的處理
在循環(huán)識(shí)別標(biāo)簽過程中會(huì)不斷有數(shù)據(jù)讀出,為保證數(shù)據(jù)的完整性和一致性。系統(tǒng)讀取數(shù)據(jù)的傳輸使用消息隊(duì)列來實(shí)現(xiàn)。消息隊(duì)列是作為一個(gè)緩沖數(shù)據(jù)區(qū)的工具類出現(xiàn),其中定義了存儲(chǔ)數(shù)據(jù)的線性表和入隊(duì)及出隊(duì)函數(shù),通過范型定義允許系統(tǒng)各類數(shù)據(jù)對(duì)象在隊(duì)列中存取。
解決了以上幾個(gè)問題,在具體調(diào)用的時(shí)候只需要新建一個(gè)循環(huán)讀的線程,并且調(diào)用循環(huán)讀的方法傳遞相應(yīng)的參數(shù)。同時(shí)在前臺(tái)線程中定時(shí)檢索消息隊(duì)列并對(duì)消息隊(duì)列中的數(shù)據(jù)進(jìn)行處理。
單步識(shí)別每次只進(jìn)行一次讀操作,其實(shí)現(xiàn)相對(duì)簡(jiǎn)單。
2.5 數(shù)據(jù)讀取的實(shí)現(xiàn)
讀取功能是對(duì)標(biāo)簽卡數(shù)據(jù)進(jìn)行讀取,主要解決指定標(biāo)簽、不同存儲(chǔ)區(qū)的讀取、循環(huán)讀和十進(jìn)制讀出等問題。
①存儲(chǔ)區(qū)的指定
RFID標(biāo)簽卡的存儲(chǔ)區(qū)邏輯上可以區(qū)分為四部分,系統(tǒng)實(shí)現(xiàn)時(shí)參數(shù)bank的取值確定讀取的存儲(chǔ)區(qū)位置,具體設(shè)置是:0表示保留區(qū),1表表示CPC,2表示TID以及3表示USER。
②數(shù)據(jù)讀取
數(shù)據(jù)讀取也分為單步讀取和循環(huán)讀取,其實(shí)現(xiàn)方式與標(biāo)簽識(shí)別的類似。主要區(qū)別是在讀取數(shù)據(jù)之前需要進(jìn)行存儲(chǔ)區(qū)選擇的參數(shù)設(shè)置。在指定了標(biāo)簽、存儲(chǔ)區(qū)、是否十進(jìn)制讀取等參數(shù)后,循環(huán)讀取也需要進(jìn)行新建線程進(jìn)行讀取和需要使用消息隊(duì)列作為數(shù)據(jù)緩沖等。
2.6 數(shù)據(jù)寫入和擦除的實(shí)現(xiàn)
系統(tǒng)設(shè)計(jì)為只能對(duì)USER區(qū)的數(shù)據(jù)進(jìn)行寫操作。數(shù)據(jù)寫入的主要步驟包括:指定要寫入的標(biāo)簽;將待寫入數(shù)據(jù)轉(zhuǎn)換為16進(jìn)制;通過接口Reader和工廠實(shí)例化讀卡器對(duì)象reader;調(diào)用reader對(duì)象的寫入函數(shù)將數(shù)據(jù)寫入標(biāo)簽卡。
數(shù)據(jù)擦除功能與寫入功能實(shí)現(xiàn)基本一致,寫入的為空白數(shù)據(jù)。
進(jìn)行測(cè)試前需要將RFID讀卡器連接到平板電腦。無線讀卡器通過藍(lán)牙與電腦連接,在開啟讀卡器和電腦藍(lán)牙后進(jìn)行配對(duì),配對(duì)成功后連接完成。有線讀卡器連接的操作的過程比較簡(jiǎn)單,只需將讀卡器通過USB線連接電腦即可。
圖5是對(duì)標(biāo)簽識(shí)別功能測(cè)試的結(jié)果,從圖中可以看出標(biāo)簽的單步識(shí)別和循環(huán)識(shí)別均能正常工作。
圖5 標(biāo)簽識(shí)別測(cè)試結(jié)果圖
圖6是對(duì)標(biāo)簽各存儲(chǔ)區(qū)數(shù)據(jù)進(jìn)行讀取的測(cè)試結(jié)果,從圖中可以看出,對(duì)各存儲(chǔ)區(qū)數(shù)據(jù)進(jìn)行的單步讀取和循環(huán)讀取均能正常工作。
圖6 讀取數(shù)據(jù)測(cè)試結(jié)果圖
以上列出為主要功能的測(cè)試。全部模塊經(jīng)過測(cè)試驗(yàn)證,功能實(shí)現(xiàn)均與預(yù)期一致,能夠滿足鄉(xiāng)土植物管理系統(tǒng)的需要。
本文在Java平臺(tái)上使用JNA、線程、隊(duì)列等技術(shù)開發(fā)的RFID植物識(shí)別模塊,目前已經(jīng)應(yīng)用在東莞林科所的鄉(xiāng)土植物管理系統(tǒng)開發(fā)中,與系統(tǒng)的其他功能模塊,如數(shù)據(jù)采集、數(shù)據(jù)同步等協(xié)同工作正常。系統(tǒng)目前已經(jīng)在實(shí)際工作環(huán)境運(yùn)行了一年多時(shí)間,在現(xiàn)場(chǎng)工作中,基于RFID的植物識(shí)別極大地提高了工作效率,達(dá)到了預(yù)期的效果。
基于RFID的植物識(shí)別成功應(yīng)用的經(jīng)驗(yàn)將來可推廣到珍稀植物、古樹名木保護(hù)等系統(tǒng)的開發(fā)工作中。
[1]陳新河.無線射頻識(shí)別(RFID)技術(shù)發(fā)展綜述[J].信息技術(shù)與標(biāo)準(zhǔn)化,2005(7):20-24.
[2]吳歡歡,周建平,許燕等.RFID發(fā)展及其應(yīng)用綜述[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(12):203-206.
[3]肖瀟雨.RFID技術(shù)在供應(yīng)鏈管理中的應(yīng)用研究述評(píng)[J].物流工程與管理,2015,37(12):48-50.
[4]潘媛媛.物聯(lián)網(wǎng)技術(shù)在醫(yī)療護(hù)理系統(tǒng)中的應(yīng)用[J].實(shí)用醫(yī)院臨床雜志,2011(2):196-198.
[5]周朝,龐雄斌,萬勇.基于RFID的苗木識(shí)別管理系統(tǒng)的應(yīng)用[J].農(nóng)業(yè)網(wǎng)絡(luò)信息,2013(12):33-42.
[6]陸研,張紹文.基于RFID技術(shù)的名木古樹管理系統(tǒng)初探[J],2008(2):91-93.
[7]劉魁元,余凱鑫.基于JNA框架實(shí)現(xiàn)Java與讀寫器通信的研究[J].電子世界,2012(1):42-45.
[8]沈東良.使用JNA快速調(diào)用原生函數(shù)[J].程序員.2009(3):93-97.
Abstract:RFID based plant identification can effectively improve the efficiency of plant management.Introduces a development method for RFID,which uses JNA to call the local driver on Java platform,uses the factory method pattern to solve the problem of various types of card read?er,and the anti-collision and read data transmission problems were solved.The method is applied well in native plant management system.
Keywords:RFID;JNA;Plant Identification
Research and Implementation of Plant Identification Based on RFID
LI Zhi-ting1,LONG Tian-yang2,XU Qin-hua1,LIU Chuang-xin2,WU Zhen-biao1,SHEN DE-cai2
(1.Guangdong province Dongguan City Dalingshan Forest Park,Dongguan 523100;2.Dongguan Forestry Science Research Institute of Guangdong Province,Dongguan 523106)
1007-1423(2017)25-0077-05
10.3969/j.issn.1007-1423.2017.25.019
黎志庭(1981-),男,本科,助理工程師,從事領(lǐng)域?yàn)榱謽I(yè)信息方面的研究
2017-06-27
2017-08-30