楊 臻 張光會 李仁發(fā)
1(鄭州師范學(xué)院信息科學(xué)與技術(shù)學(xué)院 河南 鄭州 450044)
2(湖南大學(xué)信息科學(xué)與工程學(xué)院 湖南 長沙 410082 )
?
物聯(lián)網(wǎng)中基于EPCglobal的RFID標簽處理中間件的研究
楊臻1張光會2李仁發(fā)2
1(鄭州師范學(xué)院信息科學(xué)與技術(shù)學(xué)院河南 鄭州 450044)
2(湖南大學(xué)信息科學(xué)與工程學(xué)院湖南 長沙 410082 )
摘要為了解決物聯(lián)網(wǎng)中EPCglobal框架中不同標簽信息的處理問題,以及EPC標簽和傳統(tǒng)條碼的數(shù)據(jù)兼容問題,提出一種基于EPCglobal框架的標簽信息處理中間件。通過對標簽存儲結(jié)構(gòu)和編碼的研究,設(shè)計二進制EPC編碼、EPC URI(Uniform Resource Identifier)和GS1條碼的互相轉(zhuǎn)換模塊。采用對標簽軟硬件過濾的方法和對標簽事件生成的研究,完善并實現(xiàn)EPCglobal標簽處理中間件。測試結(jié)果表明,中間件很好地解決了從底層標簽讀取到標簽事件生成上報整個流程的處理問題,在物聯(lián)網(wǎng)中更全面、更兼容。
關(guān)鍵詞物聯(lián)網(wǎng)RFID標簽EPCglobal中間件
STUDY ON RFID TAGS PROCESSING MIDDLEWARE BASED ON EPCGLOBAL IN INTERNET OF THINGS
Yang Zhen1Zhang Guanghui2Li Renfa2
1(School of Information Science and Technology,Zhengzhou Normal University,Zhengzhou 450044,Henan,China)2(School of Information Science and Engineering,Hunan University,Changsha 410082,Hunan,China)
AbstractIn order to solve the problems of different tags information processing in EPCglobal framework and data compatibility between EPC tags and traditional bar codes, a tag information processing mechanism based on the EPCglobal framework was proposed. Through the study on the structure and coding of tag storage structure, we designed an interchangeable coding module for binary EPC encoding, EPC URI (uniform resource identifier) and GS1 bar codes. By using the method of the hardware and software filtering on tags and studying the tag events generation, we improved and implemented the EPCglobal tag processing middleware. Test results showed that the middleware well solved the whole flow processing from the underlying tags reading to tag events generation and reporting. It was more comprehensive and compatible in favour of the development of Internet of things.
KeywordsIoTRFID tagEPCgloalMiddleware
0引言
近年來隨著國家提出“感知中國”的理念,物聯(lián)網(wǎng)技術(shù)得到飛速發(fā)展。RFID技術(shù)作為物聯(lián)網(wǎng)技術(shù)的重要組成部分,其應(yīng)用也越來越廣泛[1]。目前,RFID技術(shù)在物流追蹤、公司門禁、資產(chǎn)管理、商品零售、防偽識別、航空航天等多個領(lǐng)域得到應(yīng)用。超高頻(UHF)標簽因其讀寫速度快、儲存容量大、防沖突能力強等優(yōu)點,其在市場上的占有率越來越高[2]。2004年,EPCglobal組織提出了UHF GEN2協(xié)議標準[3],該標準作為一個開放的標準,促進了標簽尺寸減小與存儲量擴展,推動了不同規(guī)格的標簽和讀寫器的應(yīng)用。
由于RFID技術(shù)的廣泛應(yīng)用,其帶來的不同標簽的信息處理問題逐漸顯露。對此,EPCglobal組織提出了EPCglobal標準框架[4],并提出了標簽編碼轉(zhuǎn)換標準TDS(Tag Data Standard)[5]和EPC信息處理模塊ALE(Application Level Events)[6]。在實現(xiàn)標簽信息處理功能時,如何完成從底層到應(yīng)用層的標簽信息處理,實現(xiàn)不同組別、不同類型的標簽捕獲,將成為EPCgloal框架更廣泛應(yīng)用的前提。同時,在各行業(yè)中存在EPC標簽與傳統(tǒng)GS1條碼并存的情況,傳統(tǒng)條形碼應(yīng)用者希望通過EPC信息的共享服務(wù)、域名服務(wù)乃至以后的云存儲服務(wù),加快產(chǎn)業(yè)的信息化。EPC標簽的應(yīng)用需要一個過渡的過程,EPCglobal框架實現(xiàn)了EPC和傳統(tǒng)條形碼在編碼上的兼容,但在輸入端并未實現(xiàn)條碼體系的軟硬件無縫過渡到EPC信息體系,這在一定程度上阻礙了EPCglobal框架的快速應(yīng)用。
目前國內(nèi)外相關(guān)研究也意識到了EPCglobal框架的局限性。Sun、IBM都開發(fā)了自有的RFID信息處理中間件,另外UCLAWINMEC RFID實驗室、Bea Web Logic也都新設(shè)計了RFID中間件。但是IBM的RFID中間件設(shè)計大多基于自身所研發(fā)的產(chǎn)品,有太大的依賴性。其他幾種中間件功能較為單薄,難處理多種類型標簽和復(fù)雜的事件。國內(nèi)相關(guān)研究也剛剛起步。文獻[7,8]通過基于EPCglobal框架編寫適配器的方式,能夠整合目前各類RFID讀寫器,處理不同的RFID標簽,但由于新讀寫器的不斷涌現(xiàn),硬件適配器很難含蓋所有讀寫器,且EPCglobal的適配器不能兼容GS1條形碼讀寫器。文獻[9]提出了編碼轉(zhuǎn)換來兼容條形碼,該方法不需要更改現(xiàn)有設(shè)備,但是其方法主要針對GTIN編碼,具有局限性。
針對以上問題,考慮EPCglobal是目前最權(quán)威的EPC應(yīng)用框架,本文對EPCglobal的標簽處理中間件進行了研究,根據(jù)標簽結(jié)構(gòu)和編碼的規(guī)則,完善編碼轉(zhuǎn)換機制,實現(xiàn)EPC標簽信息與傳統(tǒng)條碼的兼容;同時,進一步完善標簽過濾和上報機制,最終實現(xiàn)更全面、更兼容的標簽處理機制。
1背景知識
1.1標簽存儲結(jié)構(gòu)研究
標簽的存儲區(qū)分為EPC區(qū)、User區(qū)、TID區(qū)和Reserved區(qū),如圖1所示。
圖1 標簽存儲結(jié)構(gòu)
EPC區(qū)包含在00h至0Fh存儲位置的CRC-16、在10h至1Fh存儲地址的協(xié)議-控制(PC)位和在20h開始的EPC。EPC字段是該區(qū)最重要的部分,EPC碼提供對實體對象的全球惟一標識。標簽處理中間件主要處理標簽的EPC數(shù)據(jù),并根據(jù)EPC中不同位置的特定含義進行編碼、轉(zhuǎn)碼、過濾。
1.2標簽編碼研究
EPCglobal框架的TDS模塊規(guī)定了EPC標簽的編碼結(jié)構(gòu)。EPC編碼主要分為兩種形式,即二進制EPC標簽碼和EPC URI編碼。
二進制EPC編碼是標簽中EPC碼的表示形式,以96位編碼最為常見,96位EPC編碼主要有頭部、過濾碼、分區(qū)碼、廠商碼、類別碼、序列碼這幾個字段。頭部指示編碼的類型和長度,過濾碼可以設(shè)置不同的值作為過濾條件。
EPC URI編碼是TDS規(guī)定的EPCglobal上層應(yīng)用的編碼方式。常用的單個標簽的EPC URI有EPC Tag URI和EPC Pure URI。它們都通過打點的形式來劃分各個區(qū)段,這類似于傳統(tǒng)IP網(wǎng)絡(luò)中,IP地址的劃分方式。兩種EPC URI的區(qū)別在于,EPC Tag URI包含了過濾碼這樣的標簽控制信息,其和EPC URI是可以互相轉(zhuǎn)換的,在配置ALE時決定采用哪種EPC URI的形式。EPCglobal標準規(guī)定了二進制EPC和十進制EPC URI之間的映射關(guān)系,如圖2所示。二進制EPC頭部字段映射為EPC URI的編碼類型字段;二進制的過濾碼字段映射為EPC Tag URI的過濾碼字段,而EPC Pure URI不包含該字段;分區(qū)碼由于規(guī)定的是二進制標簽內(nèi)部的區(qū)段劃分,故不用參與映射;廠商碼、類別碼、序列碼在二進制EPC和EPC URI中都存在,故將每段映射到對應(yīng)的區(qū)域即可。
圖2 二進制EPC與EPC URI的映射關(guān)系
2標簽信息處理中間件設(shè)計
2.1標簽信息處理流程改進
圖3 標簽信息處理流程
為了使得EPC標簽與傳統(tǒng)條碼信息兼容,讓應(yīng)用傳統(tǒng)GS1條碼的使用者,也能夠參與到信息的共享,在原有EPCglobal框架的基礎(chǔ)上,我們設(shè)計了如圖3所示的標簽信息處理流程。
根據(jù)EPCglobal框架,EPC標簽信息由讀寫器讀取后,將上傳至ALE 模塊,ALE模塊過濾并選擇符合條件的標簽。過濾標簽后,將標簽信息組成為應(yīng)用層需要的標簽事件[10],供上層應(yīng)用存儲和使用。捕獲應(yīng)用將新生成的標簽事件存儲進EPCIS(EPC Information Services)數(shù)據(jù)庫,EPCIS只存儲EPC Pure URI。上層應(yīng)用將從EPCIS里獲取標簽事件信息,并實現(xiàn)多種功能。
由于傳統(tǒng)的GS1條碼多用十進制表示,其讀寫設(shè)備和編碼方式和EPC標簽不同。所以,本文設(shè)計了兩種方式對GS1條碼兼容。一種方式是通過紅外條碼讀寫器,將讀到的GS1條碼信息轉(zhuǎn)成EPC標簽信息,并寫入到EPC標簽中。為此我們專門開發(fā)了GS1碼轉(zhuǎn)EPC碼的轉(zhuǎn)碼模塊。轉(zhuǎn)碼模塊收錄了目前常見的GS1條碼和EPC碼間的映射關(guān)系,自動根據(jù)條碼信息進行無縫轉(zhuǎn)換。另一種方式是將紅外條碼讀寫器讀到的信息直接傳給ALE模塊。TDS模塊規(guī)定了GS1條碼和EPC URI之間的轉(zhuǎn)換標準。我們可以對ALE模塊進行修改,用于過濾和判別GS1條碼。
2.2標簽編碼轉(zhuǎn)換
由于GS1十進制條碼和EPC編碼方式不同,因此需要編碼轉(zhuǎn)換。由于EPC標簽編碼和GS1編碼類型眾多,為了說明問題,本節(jié)采用EPC編碼中的Sgtin-96編碼代表EPC碼,相對應(yīng)地采用GS1條碼中的GTIN[11]碼來對編碼轉(zhuǎn)換進行說明。
2.2.1GS1條碼與EPC URI之間轉(zhuǎn)換
TDS模塊規(guī)定了GS1條碼和EPC URI之間的轉(zhuǎn)換關(guān)系。由于GS1條碼的應(yīng)用領(lǐng)域不同,其編碼的風格和轉(zhuǎn)換方式也不同,以GTIN編碼為例的轉(zhuǎn)換關(guān)系如圖4所示。如果EPC URI對應(yīng)的GS1碼無序列號,則轉(zhuǎn)換時需要去掉序列號。相應(yīng)地,無序列號的GS1碼轉(zhuǎn)為EPC URI時需加上序列號。對于每個區(qū)段有長度要求的GS1碼,不足長度的要在每段前補0。本文將該編碼轉(zhuǎn)換應(yīng)用在紅外讀寫器直接讀取GS1條碼上報給ALE模塊的方式中,只需在ALE模塊接收的標簽信息中,增加對GS1條碼的判斷即可。
圖4 GS1條碼與EPC URI的映射關(guān)系
2.2.2GS1條碼與二進制EPC之間轉(zhuǎn)換
GS1碼與二進制EPC 的轉(zhuǎn)換并無標準規(guī)定。當GS1碼轉(zhuǎn)換為二進制EPC碼時,可以先將其轉(zhuǎn)換為EPC URI 再轉(zhuǎn)換為二進制EPC碼,也可以按照二進制EPC碼和GS1碼之間的關(guān)系,設(shè)計轉(zhuǎn)碼規(guī)則。本文根據(jù)二進制EPC和GS1碼間的關(guān)系,開發(fā)了轉(zhuǎn)碼模塊,實現(xiàn)了GS1碼與二進制EPC的互相轉(zhuǎn)換,如圖5所示。無序列號的GS1碼轉(zhuǎn)成二進制EPC碼前,要為其加上一個序列號,該序列號可以由轉(zhuǎn)碼模塊根據(jù)實際轉(zhuǎn)換的數(shù)目遞增處理。
圖5 GS1條碼與二進制EPC的映射關(guān)系
2.3標簽過濾
基于EPCglobal的規(guī)范,我們設(shè)計了硬件過濾和軟件過濾結(jié)合的方式。硬件過濾即通過控制讀寫器讀取符合條件的標簽。軟件過濾即在中間件處理過程中,通過編程對已讀取的標簽信息進行選擇性地上報。
硬件過濾通過對標簽的掩碼(mask)、會話(session),已盤標記(target)三個參數(shù)的設(shè)置完成。
掩碼是標簽四個存儲區(qū)的某一段編碼。通過控制讀寫器調(diào)用API[12],可以設(shè)置掩碼的區(qū)地址(四個存儲區(qū)中的一個)、起始偏移地址(offset)和掩碼長度(count)。對該段掩碼設(shè)定固定值后,讀命令只能讀取和該區(qū)段位置掩碼值一致的標簽,而過濾掉不符合掩碼的標簽。
讀寫器對標簽設(shè)置了四種會話,即session 0,1,2,3。會話用于對標簽群進行分組,其可以用于大量標簽盤點時的異步處理,防止多標簽沖突;也可以用于過濾掉不處于操作會話的標簽。每一張標簽在一個盤點周期內(nèi),只能參加其中的一個會話。在每一個盤點會話中,標簽為每個會話維持獨立的已盤標記。每個已盤標記有兩個值A(chǔ)和B,各盤存周期開始時,讀寫器選擇盤點A或B標簽,將其存入四個會話中的某一個會話。該會話結(jié)束后,已盤標記會自動從A切換到B,或從B切換到A。通過設(shè)定target參數(shù),選擇A或B開始盤點,并結(jié)合掩碼與會話設(shè)定,完成多條件過濾。
軟件過濾通過標簽EPC區(qū)的過濾值來過濾。Epcglobal的TDS模塊規(guī)定了每一種EPC編碼的過濾碼的編碼。參照標準,在ALE模塊中,用戶可以設(shè)定特定的過濾值以選擇符合條件的EPC碼。每一個盤點周期內(nèi),在讀寫器讀寫范圍內(nèi)的標簽可能會被多次讀取,ALE模塊對重復(fù)的EPC碼進行了去重,保證了EPC事件的唯一性。由于軟件過濾的靈活性,用戶還可以在上層利用字符串函數(shù)進一步過濾。
2.4標簽事件生成與上報
圖6 標簽事件生成與上報流程
一個標簽事件包含了該標簽的EPC號、收集的時間、地點、設(shè)備等信息。上層應(yīng)用會對標簽事件進行訂閱,并定義標簽事件的規(guī)則,以收集其想要的標簽事件。過濾與選擇服務(wù)器定義了標簽事件周期Eventcycle[13],其規(guī)定了處理標簽的周期。
上層應(yīng)用可以從標簽群報告中篩選標簽,并以標簽事件的形式將信息存入EPCIS中。標簽事件生成與上報流程如圖6所示。
3功能實現(xiàn)
3.1編碼轉(zhuǎn)換
根據(jù)2.2節(jié)中編碼轉(zhuǎn)換原則,編程實現(xiàn)編碼轉(zhuǎn)換。方法GS1ToPURI(String GS1)實現(xiàn)GS1碼到EPC Pure URI的編碼轉(zhuǎn)換,方法GS1ToBin(String GS1)實現(xiàn)GS1碼到二進制EPC碼的轉(zhuǎn)換。由于每種編碼的編碼規(guī)則不同,首先根據(jù)傳入的GS1條碼字符串的長度,通過switch結(jié)構(gòu)進行分類,對于同樣長度的GS1條碼,再通過特征碼逐一進行判斷和轉(zhuǎn)換,例如國內(nèi)ISBN的前綴碼是“978”或“979”,GTIN-13的國家碼是“690”或“690”,這些都可以作為特征碼判斷特定的編碼類型,從而分別進行處理。GS1碼轉(zhuǎn)EPC pure URI舉例代碼如下所示:
switch(size){
case 8: //GTIN-8
URI=″urn:epc:id:sgtin:00000″+GS1.substring(0,3)+″.0″+GS1.substring(3,7);
break;
case 12: //GTIN-12
URI=″urn:epc:id:sgtin:″+GS1.substring(0,6)+″.0″+GS1.substring(6,12);
break;
case17:
prefixcode=GS1.substring(0,3);
if((prefixcode.equals(″978″))||(prefixcode.equals(″979″)))
//ISBN
……
由于GS1條碼和EPC URI是十進制字符串,而標簽存儲的是二進制EPC,并習慣以十六進制展示,所以編碼轉(zhuǎn)換中,存在十進制、十六進制、二進制之間的進制轉(zhuǎn)換。作為公用的方法,我們在每次編碼轉(zhuǎn)換時,可以調(diào)用進制轉(zhuǎn)換方法,以方便寫入標簽或展示。二進制轉(zhuǎn)十進制代碼如下所示:
private static String BinToDecimal(String binary) {
double d=0;
int length=binary.length();
for (int i = 0; i if((binary.substring(i,i+1)).equals(″1″)) { d+=Math.pow(2,(length-i-1)); } } return String.format(″%1.0f″,d); } 3.2標簽過濾 硬件過濾通過調(diào)用RFID讀寫器的API來實現(xiàn)控制,以impinj的R2000模塊為例,首先調(diào)用RFID_18K6CSet Post Match Criteria()方法對標簽進行分組,該方法保證讀寫器應(yīng)用在進行標簽射頻通信前,對標簽進行過濾,再通過調(diào)用方法RFID_18K6CSetQueryTagGroup()實現(xiàn)對特定標簽組的訪問: (1) 掩碼:RFID_18K6C_SINGULATION_MASK結(jié)構(gòu)體規(guī)定了掩碼的長度,起始位和mask數(shù)組。mask數(shù)組是字節(jié)數(shù)組,通過對數(shù)組每個單元的設(shè)定規(guī)定該數(shù)組單元的掩碼值,如設(shè)mask[0]=0011.XXXX,即不關(guān)心首字節(jié)的低四位,而高四位為3。 (2) 會話:RFID_18K6C_TAG_GROUP結(jié)構(gòu)體定義了會話, RFID_18K6C_INVENTORY_SESSION參數(shù)設(shè)定了標簽的會話標記,從S0至S3,共四種。 (3) 已盤標記:RFID_18K6C_TAG_GROUP結(jié)構(gòu)體定義了已盤標記,調(diào)用時設(shè)定為A或B即可。 掩碼設(shè)置核心代碼如下所示: singulationMsak.count=96; singulationMsak.offset=0; for(int i=0;i<62;i++) singulationMsak.mask[i]=mask[i]; singulationCriterion[0].match=1; singulationCriterion[0].mask=singulationMsak; singulationCriteria.countCriteria=1; singulationCriteria.pCriteria=singulationCriterion; status = RFID_18K6CSetPostMatchCriteria(hHandle, &singulationCriteria, 0); 掩碼長度count可以設(shè)置范圍為0至最大標簽存儲區(qū)長度,offset為掩碼起始位。mask數(shù)組用來傳入每個標簽的掩碼,本文將match參數(shù)設(shè)為1,表示功能操作要先符合掩碼。最后調(diào)用RFID_18K6CSetPostMatchCriteria方法實現(xiàn)掩碼過濾。 軟件過濾通過設(shè)定fiter值或通過字符串過濾方法實現(xiàn)。 如利用String類的Startswith()方法通過過濾標簽開頭信息來區(qū)分不同標簽類別;利用Substring()方法過濾特定位置特定特征的標簽等。 3.3事件上報與捕獲 讀取到標簽數(shù)據(jù)后,ALE模塊對標簽進行事件封裝,供上層捕獲應(yīng)用。在生成事件和上報過程前,我們需要對ALE模塊進行配置。 我們使用ALE模塊中的fc-client配置邏輯讀寫器和事件周期,并通過XML注入[14]的方式,規(guī)定事件周期的具體內(nèi)容,XML代碼如下: ……