RFID開發(fā)介紹—Edge Server (2)
上篇文章中我們簡單介紹了BEA Edge Server的安裝、使用和簡單的標(biāo)簽讀、寫過程。接下來我們介紹Edge Server中的一些其他讀寫方式和工作流模塊,大家可以根據(jù)實際情況,在此基礎(chǔ)上開發(fā)自己的應(yīng)用。
一、關(guān)于Immediate讀取方式的更多說明
1、事件周期和可靠性
有很多原因會造成讀卡器不能在一個讀周期內(nèi)檢測到標(biāo)簽,可能是因為RFID標(biāo)簽本身的不可靠特性,也有可能是在像托盤這樣的大容器負(fù)載很多標(biāo)簽緩慢通過讀卡器時,有標(biāo)簽并沒有產(chǎn)生ALE事件。通過ALE,我們配置一個事件周期包括多個讀周期,這樣就能提高所有的標(biāo)簽都被包含在結(jié)果報告中的概率。
我們可以通過下面的實驗來模擬讀不到某些標(biāo)簽的現(xiàn)象,并且通過配置ECSpec中的durationReadCycles來使一個事件周期包括多個讀周期,以提高讀卡成功率。
- 打開兩個讀卡模擬器,在上一篇文章有操作說明。在其中一個讀卡模擬器中設(shè)置“可靠性”參數(shù)為50%:
- 重復(fù)運行ImmediateSample程序,觀察運行結(jié)果,會發(fā)現(xiàn)并不是每次都可以讀到所有標(biāo)簽。
- 使用ECSpec編輯器導(dǎo)入ECSpec.xml文件,并且定位到durationReadCycles參數(shù),將當(dāng)前值1修改為10。導(dǎo)出 ECSpec 到<edge_home>samplesImmediateSample 目錄下,覆蓋原有的文件。
- 重新運行ImmediateSample,觀察運行結(jié)果,會發(fā)現(xiàn)每次都可以讀到所有標(biāo)簽。
2、復(fù)合讀卡器
可以通過管理控制臺定義“復(fù)合讀卡器”,復(fù)合讀卡器可以包含一個活著多個邏輯讀卡器。使用復(fù)合讀卡器而不是在ECSpec中定義多個邏輯讀卡器帶來的好處是復(fù)合讀卡器可以是業(yè)務(wù)上下文相關(guān)的,而不用考慮具體的讀卡器,例如可以將復(fù)合讀卡器命名為“DockDoor21”并且其中包含“ConnecTerra1”, “ConnecTerra2”等一組邏輯讀卡器,這樣在應(yīng)用程序的ECSpec中就只要按照“DockDoor21”使用就可以,而不用考慮是不是“ConnecTerra1”, “ConnecTerra2”等等。
- 打開管理控制臺,在設(shè)備瀏覽器中選擇“Composite Readers”,然后在右邊窗口選擇“New”:
- 配置一個如下的,包含ConnecTerra2 和ConnecTerra4的復(fù)合讀卡器CompositeReader1:
- 在第二個讀卡模擬器的第二個天線的配置中,將每個EPC值增加1,例如
gid-64-i.38000.171.1 應(yīng)該改為gid-64-i.38000.172.1 :
- 使用管理控制臺的測試功能進(jìn)行測試:
- 選擇讀卡器為 CompositeReader1,默認(rèn)在選擇后測試就開始,可以選擇左下角的開始、停止按鈕控制測試。觀察測試結(jié)果,可以看到14個標(biāo)簽,其中7個來自于ConnecTerra2,7個是ConnecTerra4的,如果此時讀卡模擬其中的“可靠性”參數(shù)還是設(shè)置為50%的話,可以看到某些EPC旁邊有紅色的“X”,當(dāng)可靠性提高的100%這些警告標(biāo)志就會消失。
3、不同的邊界條件
ALE規(guī)范允許設(shè)置不同的邊界條件來控制事件周期的開始和結(jié)束。最基本的邊界條件就是指定持續(xù)時間,如我們在前面做過的實驗,指定持續(xù)5000ms或者包含10個讀周期。此外,事件周期也可以是被外界事件所觸發(fā)的。
其中一個很有意思并且很有用的邊界條件是稱為“穩(wěn)定集合間隔時間”,穩(wěn)定集合間隔時間是用來指定一段時間,在這段時間的讀周期里面再沒有新的標(biāo)簽出現(xiàn),這是事件周期就算是結(jié)束。
下面的圖可以用來說明穩(wěn)定集合間隔時間的概念。該圖表示一些RFID標(biāo)簽會通過一個假想的讀卡通道,例如一個叉車的托盤中有8個貼了RFID標(biāo)簽的物件要通過倉庫大門。當(dāng)叉車通過大門的時候,在任何讀周期都可能會檢測到不同的RFID標(biāo)簽。例如,在第一個讀周期檢測到了EPC #1 and EPC #2,在第三個讀周期檢測到了EPC #1 and EPC #5,……
在經(jīng)過一段持續(xù)的讀周期后,所有的8個標(biāo)簽就都至少被檢測到一次了。這樣讀卡器不會再檢測到新的標(biāo)簽出現(xiàn),在這樣的狀態(tài)持續(xù)“穩(wěn)定集合間隔時間”后,就會生成ECReport。如下圖中,每個讀周期的時間設(shè)為1000ms,“穩(wěn)定集合間隔時間”設(shè)為4000ms。
在第一個讀周期,檢測到EPC #1 和 EPC #2兩個標(biāo)簽。因為這個連個新檢測到的標(biāo)簽,所以此時Edge Server會開始一個持續(xù)時間為4000 ms的定時器,即“穩(wěn)定集合間隔時間”。如果在接下來的4000 ms的定時中沒有檢測到新的標(biāo)簽,Edge Server就會產(chǎn)生ECReport并且返回給應(yīng)用程序。
然而在第二個讀周期,又有一個新的標(biāo)簽EPC #5被檢測到。因為在“穩(wěn)定集合間隔時間”內(nèi)有新的標(biāo)簽被檢測到,定時器復(fù)位,即重新開始計時4000 ms。類似的,在第四個和第六個讀周期又出現(xiàn)了新的標(biāo)簽,所以定時器都被復(fù)位。
在第八個讀周期中,最后一個新的標(biāo)簽EPC #6被檢測到。在接下來的4個讀周期中,不再有新的標(biāo)簽出現(xiàn)。所以事件周期結(jié)束,并且返回生成的ECReport。
下面我們來看看在BEA Edge Server中如何配置和使用這樣的邊界條件:
- 使用管理控制臺重新導(dǎo)入<edge_home>samplesImmediateSample 目錄下面的ECSpec。選擇CompositeReader1作為邏輯讀卡器,設(shè)置“Stable Set Interval”為15000 ms。
- 接下來將ConnecTerra2和ConnecTerra4的所有標(biāo)簽都去除選中,其中ConnecTerra2是第一個模擬器的第二個天線,ConnecTerra4是第二個模擬器的第二個天線。
- 開始運行ImmediateSample,每3到4秒選中一個去掉的EPC,直到將所有的14個EPC都選中。在選中所有EPC后大約15秒,事件周期會結(jié)束。
- 分析命令行窗口中產(chǎn)生的報告,注意其中的terminationCondition和totalMilliseconds值??梢詤⒖既缦翬CReports:
Immediate Sample, XML-based sending request to Edge Server... ...received response. Received the following ECReports: <ale:ECReports ALEID="SAVANT_ID" creationDate="2006-08-13T04:01:56.239Z" date="2 006-08-13T04:01:56.239Z" schemaURL="http://schemas.connecterra.com/EPCglobal/ale -1_0.xsd" schemaVersion="1" specName="=89" terminationCondition="STABLE_SET" totalMilliseconds="40359" xmlns:ale="urn:epcglobal:ale:xsd:1" xmlns:aleex t="http://schemas.connecterra.com/EPCglobal-extensions/ale"> <reports> <report reportName="ImmediateSample Report"> <group> <groupList> <member> <tag>urn:epc:tag:gid-64-i:38000.172.1</tag> </member> <member> ………… <member> <tag>urn:epc:tag:gid-64-i:38000.4971.7</tag> </member> </groupList> <groupCount> <count>14</count> </groupCount> </group> <aleext:applicationData></aleext:applicationData> </report> </reports> <aleext:applicationData>Application specific data can go here</aleext:applicati onData> <aleext:failedLogicalReaders/> <aleext:physicalReaders> <aleext:physicalReader>SimReadr2</aleext:physicalReader> <aleext:physicalReader>SimReadr</aleext:physicalReader> </aleext:physicalReaders> <aleext:totalReadCycles>150</aleext:totalReadCycles> </ale:ECReports>
- 也可以使用ECSpec的測試功能來運行上述的測試。
二、用subscribe方式讀取標(biāo)簽信息
1、運行Subscribe示例
Subscribe示例是使用ALE的“subscribe”方式實現(xiàn)異步報告發(fā)布,同時也展現(xiàn)了一起ALE API中的其它可管理方式。
它和“Immediate”示例不同的地方是:
- 可以定義多個ECSpecs,每個都有各自的名字
- 使用subscribe命令,給“事件周期”添加一個或者多個“訂購者”,來獲取報告
- 在定義“事件周期”和“訂購者”之后,Edge Server執(zhí)行“事件周期”,并且異步的給“訂購者”返回報告
具體操作步驟如下:
- 打開讀卡模擬器、Edge Sever和管理控制臺
- 打開資源管理器,瀏覽目錄 <edge_home>samples SubscribeSample.
- 修改run.bat
set EDGEHOST=localhost
set EDGEPORT=6060
- 點擊run.bat,注意到命令行窗口顯示的命令行參數(shù)使用方法
- 使用ECSpec editor導(dǎo)入SubscribeSample 目錄內(nèi)的ECSpec.xml
- 導(dǎo)入成功后,選擇File->Deploy As,部署一個新的叫做“MengSpec”的ECSpec
- 再部署一個叫做“Meng2Spec”的ECSpec
- 在命令行輸入如下命令:
>run subscribe Meng2Spec console:test
- 看到輸出:
Target ALE Service: http://localhost:6060/axis/services/EPCglobalALEService
ubscribing notification handler for spec Meng2Spec in Edge Server.
- 觀察管理控制臺的變化:
- 運行以下命令可以停止發(fā)布報告:
>run.bat unsubscribe Meng2Spec console:test
由于SubscribeSample的代碼相對比較冗長,限于篇幅,本文不在這里進(jìn)行詳細(xì)的分析。讀者可以自己參看代碼和相應(yīng)的注釋,尤其注意其中的非immediate方式的處理過程和所調(diào)用的ALE API。
2、報告和報告發(fā)送方式
BEA Edge Server 支持很多種報告發(fā)送方式,包括命令行方式、文件系統(tǒng)、HTTP和TCP等。前面我們已經(jīng)看到使用命令行方式,下面以文件系統(tǒng)為例展示其它的報告發(fā)送方式。
- 首先創(chuàng)建兩個臨時目錄:
>mkdir c: emple1
>mkdir c: emple2
- 執(zhí)行如下命令:
>run.bat subscribe MengSpec file:///c:/temp/ale1
- 執(zhí)行如下命令:
>run.bat subscribe Meng2Spec file:///c:/temp/ale2/file.txt
- 在運行幾秒鐘以后, unsubscribe 上述的ECSpecs (MengSpec and Meng2Spec).
>run.bat unsubscribe MengSpec file:///c:/temp/ale1
>run.bat unsubscribe Meng2Spec file:///c:/temp/ale2/file.txt
- 察看這兩個臨時目錄下面的內(nèi)容。在ale1目錄下,由于在命令行指定的是目錄,所以不同的ECReports被保存在不同的文件中,而在ale2目錄下,ECReports被保存在同一個在命令行指定了名稱的文件中。
三、Edge Server和工作流
BEA Edge Server 提供可配置的工作流模塊,使用戶可以快速配置中間件來處理RFID部署環(huán)境中的通用物料運輸工作流。下面我們討論一個比較特殊的工作流—有方向工作流。
有方向工作流的思想非常簡單:用戶或者說是應(yīng)用程序可能會需要了解一個標(biāo)簽移動的方向,例如一個貼有標(biāo)簽的商品正在從倉庫移動向商場貨架。有方向工作流模塊記錄附加了時戳的流動方向,并且可以通過配置將該數(shù)據(jù)作為一個ECReport發(fā)送給企業(yè)中央服務(wù)器。
一個有方向的工作流最少需要兩個讀卡器,然后由標(biāo)簽先通過其中一個讀卡器后通過另外一個讀卡器而推斷出其流動方向。在實際部署中,會有很多異常情況導(dǎo)致方向推斷過程出錯,例如兩個讀卡器同時讀到同一個標(biāo)簽或者在一個讀卡器讀到該卡后,另一個讀卡器一直沒有檢測到該卡。
限于文章篇幅,大家可以參考下面鏈接的示例來建立自己的工作流:http://edocs.bea.com/rfid/edge_server/docs21/workflow_reference/config_use.html#wp424256
在這篇文章中,我們介紹了Edge Server中Immediate方式的一些更復(fù)雜得配置、一些其他讀寫方式和工作流模塊。限于作者的水平和文章的篇幅,沒有能夠更多深入探討和分析,希望能起到讓大家入門和上手的效果吧。大家在實際項目中,可以根據(jù)具體的需求情況,在本文介紹的基礎(chǔ)上開發(fā)自己的應(yīng)用程序。如果需要對BEA Edge Server體系結(jié)構(gòu)有更完整地認(rèn)識或者需要能具體深入地了解該產(chǎn)品的話,可以參考BEA的文檔:http://edocs.bea.com/rfid/edge_server/docs21/