新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 無線射頻識別RFID中間件技術

        無線射頻識別RFID中間件技術

        作者: 時間:2010-10-20 來源:網絡 收藏

          (RFID)技術是一種快速、實時、準確的信息采集與處理技術,通過射頻信號對實體對象進行唯一有效的標識,可廣泛應用于生產、零售、物流、交通、醫療、國防、畜牧、采礦等各個行業。

          基本的RFID系統一般由3部分組成:以及應用支撐軟件。是應用支撐軟件的一個重要組成部分,是銜接硬件設備如和企業應用軟件如企業資源規劃(ERP)、客戶關系管理(CRM)等的橋梁。的主要任務是對傳來的與相關的數據進行過濾、匯總、計算、分組,減少從閱讀器傳往企業應用的大量原始數據、生成加入了語意解釋的事件數據。可以說,是RFID系統的“神經中樞”。

          對于RFID中間件的設計,有諸多問題需要考慮,如:如何實現軟件的諸多質量屬性、如何實現中間件與硬件設備的隔離、如何處理與設備管理功能的關系、如何實現高性能的數據處理等等。

          1 RFID網絡框架結構

          網絡的框架結構如圖1所示。

          標簽數據經過中間件的分組、過濾等處理上報給應用系統;應用系統負責事件數據的持久化存儲,以及標簽綁定的業務信息的管理。

          RFID系統共享公共服務平臺提供根節點對象名稱服務(ONS)、企業應用鑒權管理、標簽信息發現和企業授權碼管理等公共服務。其中,根節點ONS連同所有企業級RFID系統的內部ONS,組成一個ONS樹,任何一個標簽都可以在ONS樹上找到標簽所對應的標簽信息庫的地址,即可以進一步訪問到標簽對應的詳細信息。

          2 中間件功能及實現原理

          一言蔽之,中間件的功能就是接受應用系統的請求,對指定的一個或者多個閱讀器發起操作命令如標簽清點、標簽標識數據寫入、標簽用戶數據區讀寫、標簽數據加鎖、標簽殺死等,并接收、處理、向后臺應用系統上報結果數據。

          其中,標簽清點是最為基本、也是應用最為廣泛的功能。

          2.1標簽清點功能概述

          標簽清點的工作流程可簡單描述為:

          應用系統以規則的形式定義對標簽數據的需求,規則由應用系統向中間件提出,由中間件維護。規則中定義了:需要哪些閱讀器的清點數據,標簽數據上報周期(事件周期)的開始和結束條件,標簽數據如何過濾,標簽數據如何分組,上報數據為原始清點數據、新增標簽數據還是新減標簽數據,標簽數據包含哪些原始數據等。

          應用系統指定某項規則,向中間件提出對標簽數據的預訂。

          中間件根據應用系統對標簽數據的預訂情況,適時啟動事件周期,并向閱讀器下發標簽清點命令。

          閱讀器將一定時間周期(讀取周期)中清點到的數據,發送給中間件。讀取周期可由中間件與閱讀器制定私下協商確定。

          中間件接由收閱讀器上報的數據。

          中間件根據規則的定義,對接收數據做過濾、分組、累加等操作,并在事件周期結束時,按照規則的要求生成數據結果報告,發送給規則的預訂者。過濾過程可去除重復數據、應用系統不感興趣的數據,大大降低了組件間的傳輸數據量。

          此流程可參見圖2。

          此處,需要說明一下邏輯閱讀器的概念。

          中間件將事件源抽象為一個邏輯概念——邏輯閱讀器,一個邏輯閱讀器可以包含多個物理閱讀,甚至可更細化為包含多個物理閱讀器的多個天線。

          邏輯閱讀器的劃分可以根據實際的系統部署情況來確定,比如,某一個倉庫兩個出口部署了4個閱讀器,可根據需要將這4個閱讀器配置成為一個邏輯閱讀器,不妨命名為“倉庫出口”。應用系統在需要倉庫出口的標簽數據時,可基于這個邏輯閱讀器下發清點命令,而邏輯閱讀器名稱作為部分應用程序接口(API)調用的參數。

          2.2標簽清點實現原理

          如前所述,規則是整個中間件功能的關鍵元素。規則相當于應用系統發給中間件的訂貨單,定義了對貨品(標簽數據)的時間(事件周期)和規格(如何過濾、如何分組、報告樣式等)的要求,原理描述部分參考EPCglobal相關內容[1]。

          規則、報告有自身的信息模型,表征其承載的信息,同時,規則擁有其自身的狀態機模型。在接受應用系統的長期預訂、單次預訂時,這些預訂操作會激發規則的狀態變遷,如從“未被請求”狀態躍遷到“已被請求”狀態。

          規則由應用系統通過API定義。

          (1) 規則信息模型

          規則信息模型的描述采用了統一建模語言(UML),如圖3所示。

          在面向對象的語境中,規則可表征為一個類(ECSpec)。從信息模型描述中可看出,一個規則類,與其他多個類具有關聯關系,或者說擁有如下屬性:一個或者多個邏輯閱讀器的列表(readers)、事件周期邊界定義(boundaries)、一個或者多個報告的定義(reportSpecs)、是否在報告中包含規則本身的標記(includeSpecInReports)。

          (2) 報告信息模型

          與規則信息模型類似,報告信息模型如圖4所示。

          其中,事件報告組類(ECReports)擁有如下屬性:規則名稱(specName)、時間上報時間(date)、事件周期時長(totalMilliseconds)、事件周期結束條件(terminationCondition)、規則定義類實例(spec)、一個或者多個報告類的實例列表(reports)。

          報告類(ECReport)中包含了具體的標簽數據信息。

          (3) 標簽清點API

          應用系統下發的定義規則、預訂數據等請求,以調用中間件提供的API的方式完成。API調用過程可采用Java RMI、SOAP等相關具體技術實現,其中最重要的API參見表1。

          其中,poll操作相當于subscribe操作收到一個事件周期的數據之后調用unsubscribe操作;immediate操作相當于define操作定義規則之后,調用poll操作,然后調用undefine操作。

          (4) 規則狀態機模型

          規則從其定義開始,可能存在于3種狀態:未被請求狀態(Unrequested)、已被請求狀態(Requested)、激活狀態(Active)。

          當規則創建之后,還沒有被任何客戶端(即應用系統)預訂,規則處于Unrequested狀態;對規則的第一個預訂動作將使規則躍遷到Requested狀態;當事件周期開始條件滿足時,規則進入Active狀態;當事件周期結束條件滿足時,如果規則存在預訂者,則躍遷到Requested狀態,否則躍遷到Unrequested狀態。3 中間件系統架構

          中間件系統作為一個軟件系統(或稱組件),在實現一定功能、性能要求之外,可理解性、可擴展性、可修改性(或稱可重構性)、可插入性、可重用性等質量屬性都將作為軟件設計的要求被提出來。

          近十余年來,面向對象思想幾乎全面占領軟件設計領域,成為最主流的分析、設計方法。而近數年來,對設計模式的研究也已日臻完善,模式幾乎已成為一種“更高級編程語言”(相比于Java、C++等高級編程語言)被廣泛應用。

          面向對象思想、設計模式都是以實現軟件的可理解、可擴展、可修改、可插入、可重用等目標為己任的,本文也將應用面向對象思想、參考模式語言,對中間件的軟件架構做一個初步的探討,下文的例子如涉及高級編程語言,均采用Java語言[2]。

          3.1封裝、隔離處理流程中的各個節點

          將中間件的業務流程中的各個節點分作不同模塊處理,可以獲得封裝、高內聚、低耦合等優勢,參見圖5。

          其中,報告上傳模塊,負責實現不同類型的報告上傳方式,如HTTP、JMS等;API接口模塊,負責隔離應用系統和中間件核心業務邏輯處理模塊,向應用系統提供中間件API接口;中間件核心業務邏輯處理模塊,負責中間件核心業務,包括數據接收過濾、數據分組、報告生成、規則對象的狀態跳轉等;閱讀器通信模塊,負責中間件系統與閱讀器的通信。

          3.2門面模式、工廠模式對外部暴露API接口

          為了避免后臺應用系統,即中間件的客戶端過分耦合,采用門面模式(Facade)對系統內部、外部實現清晰的隔離。處理流程可參見圖6所示的序列圖。客戶端僅僅與Facade類建立聯系,如果Facade接口定義得足夠清晰,客戶端可以對中間件的內部實現一無所知,這體現了面向對象中的封裝性。

          類的設計參見源代碼示例,從中可以看出,采用簡單工廠模式(Simple Factory)能夠在客戶端不知情的情況下,靈活地替換API實現類的版本。中間件API接口清晰地定義了中間件提供的操作,客戶端只須知道工廠類(APIFactory)能夠得到中間件API接口的實例即可。

          中間件API接口MiddlewareAPI:

          publicinterfaceMiddlewareAPI{

          void define(String specName, ECSpec spec);

          void undefine(String specName);

          void subscribe(String specName, String uri);

          void unsubscribe(String specName, String uri);

          EPCReports poll(String specName);

          EPCReports immediate(ECSpec spec);

          }

          工廠類APIFactory:

          publicclassAPIFactory{

          publicstaticMiddlewareAPIgetAPIInstance(){

          }

          }

          API的實現類A:

          publicclassClient{

          publicstaticvoidmain(String[] args) {

          MiddlewareAPI api = APIFactory.getAPIInstance();

          api.define("a new spec", new EPCSpec());

          }

          }


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 碌曲县| 健康| 平顺县| 油尖旺区| 东丽区| 宜都市| 偃师市| 商水县| 洮南市| 景洪市| 清徐县| 凤台县| 万州区| 万源市| 博客| 本溪| 固阳县| 依安县| 聊城市| 获嘉县| 金寨县| 南陵县| 虎林市| 桃园市| 黔西县| 宁远县| 台州市| 石家庄市| 元阳县| 天峨县| 新余市| 馆陶县| 常宁市| 栾川县| 温宿县| 商城县| 威信县| 社会| 南皮县| 宁化县| 铜梁县|