楊永生
(陜西省行政學(xué)院 計(jì)算機(jī)系,西安 710068)
射頻識(shí)別技術(shù)(Radio Frequency Identification,RFID)的應(yīng)用能夠大大提高企業(yè)工作效率、降低運(yùn)營(yíng)成本、提高企業(yè)的自動(dòng)化程度、增強(qiáng)企業(yè)競(jìng)爭(zhēng)力,因此RFID技術(shù)在物流管理中的應(yīng)用得以蓬勃發(fā)展[1],尤其當(dāng)世界頭號(hào)零售商沃爾瑪公司宣布大范圍使用RFID以及美國(guó)軍方宣布軍需物品需使用RFID進(jìn)行跟蹤、識(shí)別后,RFID的研究與應(yīng)用得到了極大的推動(dòng)[2]。中國(guó)的RFID技術(shù)和市場(chǎng)起步較晚,應(yīng)用前景卻異常巨大。因此,國(guó)內(nèi)學(xué)者對(duì)RFID的發(fā)展及其應(yīng)用進(jìn)行了大量的研究[3-4]。但由于其成本的原因,基于RFID技術(shù)的倉(cāng)儲(chǔ)管理系統(tǒng)還處于初期階段。據(jù)世界著名的咨詢機(jī)構(gòu)The Standish Group在一份研究報(bào)告顯示,由于采用了中間件技術(shù),應(yīng)用系統(tǒng)的總建設(shè)費(fèi)用可以減少50%左右[5]。中間件帶給應(yīng)用系統(tǒng)的不只是開(kāi)發(fā)的簡(jiǎn)單、開(kāi)發(fā)周期的縮短,也減少了系統(tǒng)維護(hù)、運(yùn)行和管理的工作量,還減少了硬件設(shè)備總體費(fèi)用的投入。因此中間件的研究得到廣泛的關(guān)注,目前國(guó)外比較知名的中間件廠商有IBM、Oracle、Microsoft、Sun等企業(yè)。國(guó)內(nèi)方面,在物聯(lián)網(wǎng)中間件和公共服務(wù)方面已進(jìn)行了一些工作,如中科院自動(dòng)化研究所開(kāi)發(fā)了RFID公共服務(wù)體系基礎(chǔ)架構(gòu)軟件和血液、食品、藥品可追溯管理中間件;華中科技大學(xué)開(kāi)發(fā)了支持多通信平臺(tái)的物聯(lián)網(wǎng)中間件產(chǎn)品Smarti;上海交通大學(xué)開(kāi)發(fā)了面向商業(yè)物流的數(shù)據(jù)管理與集成中間件平臺(tái)等[6]。
上述中間件設(shè)計(jì)方案大多是基于自己目前所研發(fā)的核心產(chǎn)品或技術(shù)的應(yīng)用,或者針對(duì)某一行業(yè)的特點(diǎn)而開(kāi)發(fā),有太大的依賴性和較小的擴(kuò)展性等問(wèn)題。本文針對(duì)物流倉(cāng)儲(chǔ)管理系統(tǒng)的特點(diǎn),設(shè)計(jì)了較為簡(jiǎn)單實(shí)用的中間件系統(tǒng),為物流倉(cāng)儲(chǔ)系統(tǒng)中間件的設(shè)計(jì)和進(jìn)一步的應(yīng)用提供參考。
中間件(Middleware)作為RFID技術(shù)的核心部分,是連接RFID硬件與企業(yè)應(yīng)用的軟件,是在RFID部署中收集數(shù)據(jù)的重要工具[8],已經(jīng)成為構(gòu)建RFID網(wǎng)絡(luò)分布式異構(gòu)信息系統(tǒng)不可缺少的關(guān)鍵技術(shù)。RFID中間件是一種面向消息的中間件,信息是以消息的形式、以異步的方式,從一個(gè)程序傳送到一個(gè)或多個(gè)應(yīng)用。應(yīng)用程序端使用中間件所提供的一組應(yīng)用程序接口(API),能與RFID閱讀器相連,從而讀取RFID標(biāo)簽數(shù)據(jù)。其功能不僅是傳遞信息,還必須考慮數(shù)據(jù)解譯、數(shù)據(jù)安全性、數(shù)據(jù)分發(fā)、錯(cuò)誤恢復(fù)等問(wèn)題。
圖1 RFID中間件的基本功能與架構(gòu)示意
RFID中間件扮演了RFID標(biāo)簽、閱讀器同應(yīng)用程序之間的中介角色,是RFID系統(tǒng)動(dòng)作的中樞,可以加速RFID關(guān)鍵應(yīng)用的開(kāi)發(fā)與實(shí)施。它的作用是為處于自己上層的應(yīng)用軟件提供運(yùn)行與開(kāi)發(fā)的環(huán)境,幫助用戶靈活、高效地開(kāi)發(fā)和集成復(fù)雜的應(yīng)用軟件。其基本功能結(jié)構(gòu)包含了與RFID前端硬件模塊(從RFID標(biāo)簽到RFID讀寫(xiě)器的數(shù)據(jù)資料自動(dòng)搜集)以及與后端數(shù)據(jù)庫(kù)與應(yīng)用軟件(如ERP、CRM、WMS、EPC和MIS等)之間的中間應(yīng)用軟件環(huán)境,它提供了業(yè)務(wù)過(guò)程管理、實(shí)時(shí)數(shù)據(jù)資料的過(guò)濾與匯集、事件管理、安全管理、數(shù)據(jù)的路由與集成以及讀寫(xiě)器的協(xié)同管理等多種功能與機(jī)制。基于RFID中間件的應(yīng)用模式架構(gòu)以及RFID中間件的基本結(jié)構(gòu)與功能如圖1所示。
從圖1可以發(fā)現(xiàn)RFID中間件最主要的功能是:1)操縱控制RFID讀寫(xiě)設(shè)備按照預(yù)定的方式工作,保證不同讀寫(xiě)設(shè)備之間很好地配合協(xié)調(diào)。2)按照一定的規(guī)則篩選過(guò)濾數(shù)據(jù),篩除大部分冗余數(shù)據(jù),將真正有效的數(shù)據(jù)通過(guò)合適的網(wǎng)絡(luò)傳送給后臺(tái)的應(yīng)用信息系統(tǒng)。3)能夠支持上層高端用戶的異構(gòu)應(yīng)用系統(tǒng)之間對(duì)RFID數(shù)據(jù)、事件的共享以及彼此業(yè)務(wù)流程之間的應(yīng)用協(xié)同。
采用RFID中間件可以有效地屏蔽RFID設(shè)備的多樣性和復(fù)雜性,消除不同來(lái)源的RFID標(biāo)簽同讀寫(xiě)器硬件設(shè)備與通信協(xié)議之間的特性以及其他的差別,能夠?yàn)楹笈_(tái)業(yè)務(wù)系統(tǒng)提供強(qiáng)大的支持,驅(qū)動(dòng)更廣泛和更豐富的RFID應(yīng)用。
RFID中間件不僅可以為應(yīng)用程序提供集成的功能,還要提供數(shù)據(jù)過(guò)濾功能以減少?gòu)淖x寫(xiě)器到應(yīng)用程序的數(shù)據(jù)量,同時(shí)它還要保證系統(tǒng)通信的穩(wěn)定性和及時(shí)性。筆者設(shè)計(jì)的中間件主要包括3大功能模塊:通信管理、數(shù)據(jù)管理和應(yīng)用程序接口。
2.1.1 模塊功能與結(jié)構(gòu)
數(shù)據(jù)通信模塊負(fù)責(zé)完成中間件與讀寫(xiě)器和數(shù)據(jù)庫(kù)之間信息的傳遞,而上層軟件不需要考慮具體的信息交換問(wèn)題,只關(guān)心如何實(shí)現(xiàn)自己的功能即可,使得程序的模塊化易于編寫(xiě)、調(diào)試和維護(hù)。通信管理模塊的結(jié)構(gòu)如圖2所示。
圖2 通信管理模塊結(jié)構(gòu)
通信管理模塊的主要功能是連接各種不同類(lèi)型的RFID讀寫(xiě)器并從中讀取電子標(biāo)簽信息。由于不同的廠商提供的RFID讀寫(xiě)標(biāo)準(zhǔn)不盡相同,因此該模塊的設(shè)計(jì)要具備有通用的讀寫(xiě)器接口來(lái)適配各種RFID閱讀器。筆者設(shè)計(jì)的通信管理模塊與讀寫(xiě)器的通信主要處理網(wǎng)口和串口2種方式,并支持其他自定義的通信方式。通信管理模塊連接到需要進(jìn)行讀取的RFID讀寫(xiě)器,并將從讀寫(xiě)器獲得的RFID標(biāo)簽信息傳送給中間件的數(shù)據(jù)管理模塊。建立數(shù)據(jù)連接之后要針對(duì)不同的RFID讀寫(xiě)器的底層通信協(xié)議建立相應(yīng)的類(lèi),并實(shí)現(xiàn)其中的命令函數(shù)。用類(lèi)的方式實(shí)現(xiàn),方便以后系統(tǒng)的升級(jí),當(dāng)加入一種新的連接方式時(shí),只需再加入一個(gè)實(shí)現(xiàn)該接口方式的通信類(lèi)就可以了,不需要重新開(kāi)發(fā)整個(gè)模塊,提高了系統(tǒng)的可擴(kuò)展性。
2.1.2 主要接口函數(shù)
通信管理模塊的主要接口函數(shù)如下所示:
1)打開(kāi)一個(gè)與通訊連接
Bool OpenConnect(int nComType,char*Param)
函數(shù)說(shuō)明:打開(kāi)一個(gè)類(lèi)型為 nComType的連接,參數(shù)為Param。若成功則返回True,否則返回False。
2)關(guān)閉一個(gè)通訊連接
Bool CloseConnect(long hHandle)
函數(shù)說(shuō)明:關(guān)閉句柄為hHandle的連接,若成功則返回True,否則返回False。
3)從通訊連接發(fā)送數(shù)據(jù)
WriteConnect(long hHandle,BYTE*byBuffer,int nSize,const char*strToIp=NULL,int nToPort=0,BOOL isBroadcast=FALSE)
函數(shù)說(shuō)明:將byBuffer中的nSize個(gè)數(shù)據(jù),發(fā)送到句柄為hHandle的連接中,返回發(fā)送的數(shù)據(jù)個(gè)數(shù)。
4)從通訊連接接收數(shù)據(jù)
ReadConnect(long hHandle,BYTE*byBuffer,int nSize,char*stripFrom=NULL,int*nPortFrom=NULL)
函數(shù)說(shuō)明:從句柄為hHandle的連接中讀取nSize個(gè)數(shù)據(jù)到byBuffer中。
5)讀標(biāo)簽數(shù)據(jù)
ReadTag(long hConnect,BYTE byAddr,BYTE byMode,char*chUID,BYTE byBeginBlock,BYTE byBlocks,BYTE &byDB_N,BYTE &byDB_Size,char*chData,BYTE byDataFormat)
函數(shù)說(shuō)明:提供中間讀取讀寫(xiě)器中標(biāo)簽數(shù)據(jù)的接口,按byMode方式根據(jù)byAddr地址,從byBeginBlock開(kāi)始讀取chUID的標(biāo)簽數(shù)據(jù),根據(jù)byDataFormat的格式,將讀取到的數(shù)據(jù)存儲(chǔ)到相應(yīng)的數(shù)據(jù)庫(kù)中。
6)寫(xiě)標(biāo)簽數(shù)據(jù)
WriteTag(long hConnect,BYTE byAddr,BYTE byMode,char*chUID,BYTE byBeginBlock,char*chWriteData,BYTE byDataFormat)
函數(shù)說(shuō)明:實(shí)現(xiàn)中間向標(biāo)簽中寫(xiě)數(shù)據(jù)的接口,按照byAddr的地址,以byMode模式根據(jù)byDataFormat的格式向chUID的標(biāo)簽中寫(xiě)入chWriteData中的數(shù)據(jù)。
7)數(shù)據(jù)庫(kù)連接
Connection2DB(object sender,EventArgs e)
函數(shù)說(shuō)明:該函數(shù)實(shí)現(xiàn)對(duì)后臺(tái)數(shù)據(jù)庫(kù)的連接操作。
2.2.1 模塊結(jié)構(gòu)和功能
本模塊將設(shè)備和從讀寫(xiě)器采集的標(biāo)簽信息都當(dāng)作數(shù)據(jù)來(lái)對(duì)待,RFID中間件的信息管理模塊的主要功能是對(duì)從RFID硬件接口模塊傳遞過(guò)來(lái)的電子標(biāo)簽信息進(jìn)行處理,包括對(duì)電子標(biāo)簽信息進(jìn)行過(guò)濾、篩選和存儲(chǔ)。由于在讀寫(xiě)器的可讀范圍內(nèi),電子標(biāo)簽在某個(gè)時(shí)期內(nèi)會(huì)被閱讀器多次讀到,這會(huì)造成信息重復(fù),因此數(shù)據(jù)管理模塊必須能夠?qū)χ貜?fù)讀到的信息進(jìn)行“清理”,以防止同一信息被多次存儲(chǔ)。
另一方面數(shù)據(jù)管理模塊還負(fù)責(zé)對(duì)RFID系統(tǒng)中讀寫(xiě)器信息的維護(hù),以確保每個(gè)設(shè)備都正常工作。該模塊通過(guò)調(diào)用通信管理模塊中的相關(guān)函數(shù)可以進(jìn)行設(shè)備狀態(tài)和相關(guān)參數(shù)的讀寫(xiě)。數(shù)據(jù)管理模塊的結(jié)構(gòu)見(jiàn)圖3。
2.2.2 主要接口函數(shù)
數(shù)據(jù)管理模塊的主要接口函數(shù)如下所示:
1)設(shè)置讀取頻率
圖3 數(shù)據(jù)管理模塊結(jié)構(gòu)
SetReadFrequency(DataTime Interval)
函數(shù)說(shuō)明:定義一個(gè)Interval的時(shí)間間隔,在此間隔內(nèi)同一讀寫(xiě)器讀到的標(biāo)簽信息表示是相同的讀標(biāo)簽事件。
2)數(shù)據(jù)過(guò)濾
DataFilter(BYTE*SourceBuffer,BYTE*TargetBuffer,char*FilterMethod)
函數(shù)說(shuō)明:利用FilterMethod算法,將SourceBuffer中的數(shù)據(jù)進(jìn)行過(guò)濾,結(jié)果存儲(chǔ)到TargetBuffer中。
3)數(shù)據(jù)存儲(chǔ)
SaveData2DB(struKey& key,BYTE*dataBuffer,short*nNum=NULL,BOOL Result=FALSE)
函數(shù)說(shuō)明:根據(jù)key,向數(shù)據(jù)庫(kù)中寫(xiě)入dataBuffer中數(shù)據(jù),根據(jù)Result確定操作的結(jié)果是否成功。
4)設(shè)備狀態(tài)監(jiān)控
GetDeviceStatus(char*devMacAddr,char*devIp,char*devStatus)
函數(shù)說(shuō)明:函數(shù)實(shí)現(xiàn)發(fā)送命令到指定地址的設(shè)備,返回設(shè)備的運(yùn)行狀態(tài)。
5)設(shè)備參數(shù)讀取
GetDevicePara(char*devMacAddr,char*devIp,char*dev_Tye,Struct Dev_Para devicePara)
函數(shù)說(shuō)明:從指定的地址,按設(shè)備的類(lèi)型讀取相應(yīng)的參數(shù)。
6)設(shè)備參數(shù)設(shè)定
SetDevicePara(char*devMacAddr,char*devIp,char*dev_Tye,Struct Dev_Para devicePara)
函數(shù)說(shuō)明:根據(jù)指定的地址,按設(shè)備的類(lèi)型設(shè)置相應(yīng)的參數(shù)。
應(yīng)用程序接口模塊主要處理RFID中間件與其他企業(yè)應(yīng)用系統(tǒng)之間的集成問(wèn)題。通過(guò)相關(guān)的接口,能夠?qū)?shù)據(jù)信息從RFID中間件傳遞到其他的應(yīng)用系統(tǒng)中,從而最終實(shí)現(xiàn)企業(yè)信息的集成。企業(yè)應(yīng)用系統(tǒng)接口起的作用就是將RFID中間件的信息格式與企業(yè)應(yīng)用系統(tǒng)的信息格式統(tǒng)一起來(lái)。通過(guò)對(duì)企業(yè)的指令信息進(jìn)行翻譯,再將它傳遞給應(yīng)用程序管理模塊。將從應(yīng)用程序管理模塊得到的標(biāo)簽信息編碼為企業(yè)應(yīng)用系統(tǒng)可以接收的格式。
應(yīng)用程序接口要達(dá)到如下要求:
1)跨系統(tǒng)、平臺(tái),無(wú)論應(yīng)用系統(tǒng)是在何種系統(tǒng)上運(yùn)行的,可以對(duì)接收到的標(biāo)簽數(shù)據(jù)進(jìn)行解析;
2)跨語(yǔ)言,無(wú)論應(yīng)用系統(tǒng)將要用何種語(yǔ)言開(kāi)發(fā),可以對(duì)中間件提供的應(yīng)用程序接口進(jìn)行訪問(wèn)。
使用中間件有助于減輕企業(yè)二次開(kāi)發(fā)時(shí)的負(fù)擔(dān),使企業(yè)方便升級(jí)現(xiàn)有軟件系統(tǒng),同時(shí)能保證軟件系統(tǒng)的相對(duì)穩(wěn)定,及對(duì)軟件系統(tǒng)的功能擴(kuò)展,簡(jiǎn)化了開(kāi)發(fā)的復(fù)雜性。本模塊設(shè)計(jì)要實(shí)現(xiàn)的Web訪問(wèn)接口、其他應(yīng)用系統(tǒng)開(kāi)發(fā)接口和Web Service服務(wù)接口。
RFID中間件是RFID技術(shù)的核心,在倉(cāng)儲(chǔ)管理系統(tǒng)中起到了承上啟下的作用,可直接對(duì)讀寫(xiě)器采集數(shù)據(jù)信息,并提供多通信平臺(tái)數(shù)據(jù)訪問(wèn)接口。本文針對(duì)中間件在倉(cāng)儲(chǔ)管理系統(tǒng)中的3個(gè)主要作用:實(shí)現(xiàn)對(duì)閱讀器的管理、對(duì)所采集的數(shù)據(jù)進(jìn)行過(guò)濾和倉(cāng)儲(chǔ)并提供上層應(yīng)用程序接口,對(duì)中間件進(jìn)行了設(shè)計(jì)開(kāi)發(fā),以求實(shí)現(xiàn)中間件的簡(jiǎn)單適應(yīng)性,為基于RFID技術(shù)的倉(cāng)儲(chǔ)管理系統(tǒng)的設(shè)計(jì)便捷開(kāi)發(fā)提供參考。
[1]王麗亞.物流信息系統(tǒng)與應(yīng)用案例[M].北京:科學(xué)出版社,2007:20-36.
[2]游戰(zhàn)清,李蘇劍.無(wú)線射頻識(shí)別技術(shù)(RFID)原理與應(yīng)用[M].北京:電子工業(yè)出版社,2004:8-21.
[3]李波,劉有源.基于RFID的貨場(chǎng)物流自動(dòng)調(diào)配系統(tǒng)的研究[J].物流技術(shù),2003(3):76-78.
[4]龐娟.RFID與倉(cāng)儲(chǔ)管理系統(tǒng)的應(yīng)用結(jié)合[J].中國(guó)儲(chǔ)運(yùn),2004(5):47-48.
[5]蕭榮興,蘇偉仁,許育嘉.RFID技術(shù)動(dòng)作的神經(jīng)中樞:RFID中間件[J].信息與電腦,2005(9):35-37.
[6]寧煥生,張彥.RFID與物聯(lián)網(wǎng):射頻、中間件、解析與服務(wù)[M].北京:電子工業(yè)出版社,2008:76-89.
[7]劉發(fā)貴,蔣瑞林,胡耀民.RFID中間件及其倉(cāng)儲(chǔ)管理的應(yīng)用[J].計(jì)算機(jī)工程,2006,32(13):272-276.
[8]CHOW H K H,CHOY K L,LEE W B,et al.Design of a RFID case-based resource management system for warehouse operations[J].Expert Systems with Applications,2006,30(4):561-576.