楊永生
(陜西省行政學院 計算機系,西安 710068)
射頻識別技術(Radio Frequency Identification,RFID)的應用能夠大大提高企業工作效率、降低運營成本、提高企業的自動化程度、增強企業競爭力,因此RFID技術在物流管理中的應用得以蓬勃發展[1],尤其當世界頭號零售商沃爾瑪公司宣布大范圍使用RFID以及美國軍方宣布軍需物品需使用RFID進行跟蹤、識別后,RFID的研究與應用得到了極大的推動[2]。中國的RFID技術和市場起步較晚,應用前景卻異常巨大。因此,國內學者對RFID的發展及其應用進行了大量的研究[3-4]。但由于其成本的原因,基于RFID技術的倉儲管理系統還處于初期階段。據世界著名的咨詢機構The Standish Group在一份研究報告顯示,由于采用了中間件技術,應用系統的總建設費用可以減少50%左右[5]。中間件帶給應用系統的不只是開發的簡單、開發周期的縮短,也減少了系統維護、運行和管理的工作量,還減少了硬件設備總體費用的投入。因此中間件的研究得到廣泛的關注,目前國外比較知名的中間件廠商有IBM、Oracle、Microsoft、Sun等企業。國內方面,在物聯網中間件和公共服務方面已進行了一些工作,如中科院自動化研究所開發了RFID公共服務體系基礎架構軟件和血液、食品、藥品可追溯管理中間件;華中科技大學開發了支持多通信平臺的物聯網中間件產品Smarti;上海交通大學開發了面向商業物流的數據管理與集成中間件平臺等[6]。
上述中間件設計方案大多是基于自己目前所研發的核心產品或技術的應用,或者針對某一行業的特點而開發,有太大的依賴性和較小的擴展性等問題。本文針對物流倉儲管理系統的特點,設計了較為簡單實用的中間件系統,為物流倉儲系統中間件的設計和進一步的應用提供參考。
中間件(Middleware)作為RFID技術的核心部分,是連接RFID硬件與企業應用的軟件,是在RFID部署中收集數據的重要工具[8],已經成為構建RFID網絡分布式異構信息系統不可缺少的關鍵技術。RFID中間件是一種面向消息的中間件,信息是以消息的形式、以異步的方式,從一個程序傳送到一個或多個應用。應用程序端使用中間件所提供的一組應用程序接口(API),能與RFID閱讀器相連,從而讀取RFID標簽數據。其功能不僅是傳遞信息,還必須考慮數據解譯、數據安全性、數據分發、錯誤恢復等問題。

圖1 RFID中間件的基本功能與架構示意
RFID中間件扮演了RFID標簽、閱讀器同應用程序之間的中介角色,是RFID系統動作的中樞,可以加速RFID關鍵應用的開發與實施。它的作用是為處于自己上層的應用軟件提供運行與開發的環境,幫助用戶靈活、高效地開發和集成復雜的應用軟件。其基本功能結構包含了與RFID前端硬件模塊(從RFID標簽到RFID讀寫器的數據資料自動搜集)以及與后端數據庫與應用軟件(如ERP、CRM、WMS、EPC和MIS等)之間的中間應用軟件環境,它提供了業務過程管理、實時數據資料的過濾與匯集、事件管理、安全管理、數據的路由與集成以及讀寫器的協同管理等多種功能與機制。基于RFID中間件的應用模式架構以及RFID中間件的基本結構與功能如圖1所示。
從圖1可以發現RFID中間件最主要的功能是:1)操縱控制RFID讀寫設備按照預定的方式工作,保證不同讀寫設備之間很好地配合協調。2)按照一定的規則篩選過濾數據,篩除大部分冗余數據,將真正有效的數據通過合適的網絡傳送給后臺的應用信息系統。3)能夠支持上層高端用戶的異構應用系統之間對RFID數據、事件的共享以及彼此業務流程之間的應用協同。
采用RFID中間件可以有效地屏蔽RFID設備的多樣性和復雜性,消除不同來源的RFID標簽同讀寫器硬件設備與通信協議之間的特性以及其他的差別,能夠為后臺業務系統提供強大的支持,驅動更廣泛和更豐富的RFID應用。
RFID中間件不僅可以為應用程序提供集成的功能,還要提供數據過濾功能以減少從讀寫器到應用程序的數據量,同時它還要保證系統通信的穩定性和及時性。筆者設計的中間件主要包括3大功能模塊:通信管理、數據管理和應用程序接口。
2.1.1 模塊功能與結構
數據通信模塊負責完成中間件與讀寫器和數據庫之間信息的傳遞,而上層軟件不需要考慮具體的信息交換問題,只關心如何實現自己的功能即可,使得程序的模塊化易于編寫、調試和維護。通信管理模塊的結構如圖2所示。

圖2 通信管理模塊結構
通信管理模塊的主要功能是連接各種不同類型的RFID讀寫器并從中讀取電子標簽信息。由于不同的廠商提供的RFID讀寫標準不盡相同,因此該模塊的設計要具備有通用的讀寫器接口來適配各種RFID閱讀器。筆者設計的通信管理模塊與讀寫器的通信主要處理網口和串口2種方式,并支持其他自定義的通信方式。通信管理模塊連接到需要進行讀取的RFID讀寫器,并將從讀寫器獲得的RFID標簽信息傳送給中間件的數據管理模塊。建立數據連接之后要針對不同的RFID讀寫器的底層通信協議建立相應的類,并實現其中的命令函數。用類的方式實現,方便以后系統的升級,當加入一種新的連接方式時,只需再加入一個實現該接口方式的通信類就可以了,不需要重新開發整個模塊,提高了系統的可擴展性。
2.1.2 主要接口函數
通信管理模塊的主要接口函數如下所示:
1)打開一個與通訊連接
Bool OpenConnect(int nComType,char*Param)
函數說明:打開一個類型為 nComType的連接,參數為Param。若成功則返回True,否則返回False。
2)關閉一個通訊連接
Bool CloseConnect(long hHandle)
函數說明:關閉句柄為hHandle的連接,若成功則返回True,否則返回False。
3)從通訊連接發送數據
WriteConnect(long hHandle,BYTE*byBuffer,int nSize,const char*strToIp=NULL,int nToPort=0,BOOL isBroadcast=FALSE)
函數說明:將byBuffer中的nSize個數據,發送到句柄為hHandle的連接中,返回發送的數據個數。
4)從通訊連接接收數據
ReadConnect(long hHandle,BYTE*byBuffer,int nSize,char*stripFrom=NULL,int*nPortFrom=NULL)
函數說明:從句柄為hHandle的連接中讀取nSize個數據到byBuffer中。
5)讀標簽數據
ReadTag(long hConnect,BYTE byAddr,BYTE byMode,char*chUID,BYTE byBeginBlock,BYTE byBlocks,BYTE &byDB_N,BYTE &byDB_Size,char*chData,BYTE byDataFormat)
函數說明:提供中間讀取讀寫器中標簽數據的接口,按byMode方式根據byAddr地址,從byBeginBlock開始讀取chUID的標簽數據,根據byDataFormat的格式,將讀取到的數據存儲到相應的數據庫中。
6)寫標簽數據
WriteTag(long hConnect,BYTE byAddr,BYTE byMode,char*chUID,BYTE byBeginBlock,char*chWriteData,BYTE byDataFormat)
函數說明:實現中間向標簽中寫數據的接口,按照byAddr的地址,以byMode模式根據byDataFormat的格式向chUID的標簽中寫入chWriteData中的數據。
7)數據庫連接
Connection2DB(object sender,EventArgs e)
函數說明:該函數實現對后臺數據庫的連接操作。
2.2.1 模塊結構和功能
本模塊將設備和從讀寫器采集的標簽信息都當作數據來對待,RFID中間件的信息管理模塊的主要功能是對從RFID硬件接口模塊傳遞過來的電子標簽信息進行處理,包括對電子標簽信息進行過濾、篩選和存儲。由于在讀寫器的可讀范圍內,電子標簽在某個時期內會被閱讀器多次讀到,這會造成信息重復,因此數據管理模塊必須能夠對重復讀到的信息進行“清理”,以防止同一信息被多次存儲。
另一方面數據管理模塊還負責對RFID系統中讀寫器信息的維護,以確保每個設備都正常工作。該模塊通過調用通信管理模塊中的相關函數可以進行設備狀態和相關參數的讀寫。數據管理模塊的結構見圖3。
2.2.2 主要接口函數
數據管理模塊的主要接口函數如下所示:
1)設置讀取頻率

圖3 數據管理模塊結構
SetReadFrequency(DataTime Interval)
函數說明:定義一個Interval的時間間隔,在此間隔內同一讀寫器讀到的標簽信息表示是相同的讀標簽事件。
2)數據過濾
DataFilter(BYTE*SourceBuffer,BYTE*TargetBuffer,char*FilterMethod)
函數說明:利用FilterMethod算法,將SourceBuffer中的數據進行過濾,結果存儲到TargetBuffer中。
3)數據存儲
SaveData2DB(struKey& key,BYTE*dataBuffer,short*nNum=NULL,BOOL Result=FALSE)
函數說明:根據key,向數據庫中寫入dataBuffer中數據,根據Result確定操作的結果是否成功。
4)設備狀態監控
GetDeviceStatus(char*devMacAddr,char*devIp,char*devStatus)
函數說明:函數實現發送命令到指定地址的設備,返回設備的運行狀態。
5)設備參數讀取
GetDevicePara(char*devMacAddr,char*devIp,char*dev_Tye,Struct Dev_Para devicePara)
函數說明:從指定的地址,按設備的類型讀取相應的參數。
6)設備參數設定
SetDevicePara(char*devMacAddr,char*devIp,char*dev_Tye,Struct Dev_Para devicePara)
函數說明:根據指定的地址,按設備的類型設置相應的參數。
應用程序接口模塊主要處理RFID中間件與其他企業應用系統之間的集成問題。通過相關的接口,能夠將數據信息從RFID中間件傳遞到其他的應用系統中,從而最終實現企業信息的集成。企業應用系統接口起的作用就是將RFID中間件的信息格式與企業應用系統的信息格式統一起來。通過對企業的指令信息進行翻譯,再將它傳遞給應用程序管理模塊。將從應用程序管理模塊得到的標簽信息編碼為企業應用系統可以接收的格式。
應用程序接口要達到如下要求:
1)跨系統、平臺,無論應用系統是在何種系統上運行的,可以對接收到的標簽數據進行解析;
2)跨語言,無論應用系統將要用何種語言開發,可以對中間件提供的應用程序接口進行訪問。
使用中間件有助于減輕企業二次開發時的負擔,使企業方便升級現有軟件系統,同時能保證軟件系統的相對穩定,及對軟件系統的功能擴展,簡化了開發的復雜性。本模塊設計要實現的Web訪問接口、其他應用系統開發接口和Web Service服務接口。
RFID中間件是RFID技術的核心,在倉儲管理系統中起到了承上啟下的作用,可直接對讀寫器采集數據信息,并提供多通信平臺數據訪問接口。本文針對中間件在倉儲管理系統中的3個主要作用:實現對閱讀器的管理、對所采集的數據進行過濾和倉儲并提供上層應用程序接口,對中間件進行了設計開發,以求實現中間件的簡單適應性,為基于RFID技術的倉儲管理系統的設計便捷開發提供參考。
[1]王麗亞.物流信息系統與應用案例[M].北京:科學出版社,2007:20-36.
[2]游戰清,李蘇劍.無線射頻識別技術(RFID)原理與應用[M].北京:電子工業出版社,2004:8-21.
[3]李波,劉有源.基于RFID的貨場物流自動調配系統的研究[J].物流技術,2003(3):76-78.
[4]龐娟.RFID與倉儲管理系統的應用結合[J].中國儲運,2004(5):47-48.
[5]蕭榮興,蘇偉仁,許育嘉.RFID技術動作的神經中樞:RFID中間件[J].信息與電腦,2005(9):35-37.
[6]寧煥生,張彥.RFID與物聯網:射頻、中間件、解析與服務[M].北京:電子工業出版社,2008:76-89.
[7]劉發貴,蔣瑞林,胡耀民.RFID中間件及其倉儲管理的應用[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.