物聯傳媒 旗下網站
登錄 注冊
RFID世界網 >  技術文章  >  其他  >  正文

RFID開發介紹—Edge Server (2)

作者:BEA公司  孟和
來源:RFID世界網
日期:2006-09-07 10:18:28
摘要:上篇文章中我們簡單介紹了BEA Edge Server的安裝、使用和簡單的標簽讀、寫過程。接下來我們介紹Edge Server中的一些其他讀寫方式和工作流模塊,大家可以根據實際情況,在此基礎上開發自己的應用。

上篇文章中我們簡單介紹了BEA Edge Server的安裝、使用和簡單的標簽讀、寫過程。接下來我們介紹Edge Server中的一些其他讀寫方式和工作流模塊,大家可以根據實際情況,在此基礎上開發自己的應用。

一、關于Immediate讀取方式的更多說明

1、事件周期和可靠性

有很多原因會造成讀卡器不能在一個讀周期內檢測到標簽,可能是因為RFID標簽本身的不可靠特性,也有可能是在像托盤這樣的大容器負載很多標簽緩慢通過讀卡器時,有標簽并沒有產生ALE事件。通過ALE,我們配置一個事件周期包括多個讀周期,這樣就能提高所有的標簽都被包含在結果報告中的概率。

我們可以通過下面的實驗來模擬讀不到某些標簽的現象,并且通過配置ECSpec中的durationReadCycles來使一個事件周期包括多個讀周期,以提高讀卡成功率。

  1. 打開兩個讀卡模擬器,在上一篇文章有操作說明。在其中一個讀卡模擬器中設置“可靠性”參數為50%:

    圖1

  2. 重復運行ImmediateSample程序,觀察運行結果,會發現并不是每次都可以讀到所有標簽。
  3. 使用ECSpec編輯器導入ECSpec.xml文件,并且定位到durationReadCycles參數,將當前值1修改為10。導出 ECSpec 到<edge_home>samplesImmediateSample 目錄下,覆蓋原有的文件。

    圖2

  4. 重新運行ImmediateSample,觀察運行結果,會發現每次都可以讀到所有標簽。

2、復合讀卡器

可以通過管理控制臺定義“復合讀卡器”,復合讀卡器可以包含一個活著多個邏輯讀卡器。使用復合讀卡器而不是在ECSpec中定義多個邏輯讀卡器帶來的好處是復合讀卡器可以是業務上下文相關的,而不用考慮具體的讀卡器,例如可以將復合讀卡器命名為“DockDoor21”并且其中包含“ConnecTerra1”, “ConnecTerra2”等一組邏輯讀卡器,這樣在應用程序的ECSpec中就只要按照“DockDoor21”使用就可以,而不用考慮是不是“ConnecTerra1”, “ConnecTerra2”等等。

  1. 打開管理控制臺,在設備瀏覽器中選擇“Composite Readers”,然后在右邊窗口選擇“New”:

    圖3

  2. 配置一個如下的,包含ConnecTerra2 和ConnecTerra4的復合讀卡器CompositeReader1:

    圖4

  3. 在第二個讀卡模擬器的第二個天線的配置中,將每個EPC值增加1,例如

    gid-64-i.38000.171.1 應該改為gid-64-i.38000.172.1 :

    圖5

  4. 使用管理控制臺的測試功能進行測試:

    圖6

  5. 選擇讀卡器為 CompositeReader1,默認在選擇后測試就開始,可以選擇左下角的開始、停止按鈕控制測試。觀察測試結果,可以看到14個標簽,其中7個來自于ConnecTerra2,7個是ConnecTerra4的,如果此時讀卡模擬其中的“可靠性”參數還是設置為50%的話,可以看到某些EPC旁邊有紅色的“X”,當可靠性提高的100%這些警告標志就會消失。

    圖7

3、不同的邊界條件

ALE規范允許設置不同的邊界條件來控制事件周期的開始和結束。最基本的邊界條件就是指定持續時間,如我們在前面做過的實驗,指定持續5000ms或者包含10個讀周期。此外,事件周期也可以是被外界事件所觸發的。

其中一個很有意思并且很有用的邊界條件是稱為“穩定集合間隔時間”,穩定集合間隔時間是用來指定一段時間,在這段時間的讀周期里面再沒有新的標簽出現,這是事件周期就算是結束。

下面的圖可以用來說明穩定集合間隔時間的概念。該圖表示一些RFID標簽會通過一個假想的讀卡通道,例如一個叉車的托盤中有8個貼了RFID標簽的物件要通過倉庫大門。當叉車通過大門的時候,在任何讀周期都可能會檢測到不同的RFID標簽。例如,在第一個讀周期檢測到了EPC #1 and EPC #2,在第三個讀周期檢測到了EPC #1 and EPC #5,……

在經過一段持續的讀周期后,所有的8個標簽就都至少被檢測到一次了。這樣讀卡器不會再檢測到新的標簽出現,在這樣的狀態持續“穩定集合間隔時間”后,就會生成ECReport。如下圖中,每個讀周期的時間設為1000ms,“穩定集合間隔時間”設為4000ms。

圖8

在第一個讀周期,檢測到EPC #1 和 EPC #2兩個標簽。因為這個連個新檢測到的標簽,所以此時Edge Server會開始一個持續時間為4000 ms的定時器,即“穩定集合間隔時間”。如果在接下來的4000 ms的定時中沒有檢測到新的標簽,Edge Server就會產生ECReport并且返回給應用程序。

然而在第二個讀周期,又有一個新的標簽EPC #5被檢測到。因為在“穩定集合間隔時間”內有新的標簽被檢測到,定時器復位,即重新開始計時4000 ms。類似的,在第四個和第六個讀周期又出現了新的標簽,所以定時器都被復位。

在第八個讀周期中,最后一個新的標簽EPC #6被檢測到。在接下來的4個讀周期中,不再有新的標簽出現。所以事件周期結束,并且返回生成的ECReport。

下面我們來看看在BEA Edge Server中如何配置和使用這樣的邊界條件:

  1. 使用管理控制臺重新導入<edge_home>samplesImmediateSample 目錄下面的ECSpec。選擇CompositeReader1作為邏輯讀卡器,設置“Stable Set Interval”為15000 ms。

    圖9

  2. 接下來將ConnecTerra2和ConnecTerra4的所有標簽都去除選中,其中ConnecTerra2是第一個模擬器的第二個天線,ConnecTerra4是第二個模擬器的第二個天線。

    圖10

  3. 開始運行ImmediateSample,每3到4秒選中一個去掉的EPC,直到將所有的14個EPC都選中。在選中所有EPC后大約15秒,事件周期會結束。
  4. 分析命令行窗口中產生的報告,注意其中的terminationCondition和totalMilliseconds值。可以參考如下ECReports:
    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>
    
  5. 也可以使用ECSpec的測試功能來運行上述的測試。

    圖11

二、用subscribe方式讀取標簽信息

1、運行Subscribe示例

Subscribe示例是使用ALE的“subscribe”方式實現異步報告發布,同時也展現了一起ALE API中的其它可管理方式。

它和“Immediate”示例不同的地方是:

  • 可以定義多個ECSpecs,每個都有各自的名字
  • 使用subscribe命令,給“事件周期”添加一個或者多個“訂購者”,來獲取報告
  • 在定義“事件周期”和“訂購者”之后,Edge Server執行“事件周期”,并且異步的給“訂購者”返回報告

具體操作步驟如下:

  1. 打開讀卡模擬器、Edge Sever和管理控制臺
  2. 打開資源管理器,瀏覽目錄 <edge_home>samples SubscribeSample.
  3. 修改run.bat

    set EDGEHOST=localhost

    set EDGEPORT=6060

  4. 點擊run.bat,注意到命令行窗口顯示的命令行參數使用方法
  5. 使用ECSpec editor導入SubscribeSample 目錄內的ECSpec.xml
  6. 導入成功后,選擇File->Deploy As,部署一個新的叫做“MengSpec”的ECSpec
  7. 再部署一個叫做“Meng2Spec”的ECSpec
  8. 在命令行輸入如下命令:

    >run subscribe Meng2Spec console:test

  9. 看到輸出:

    Target ALE Service: http://localhost:6060/axis/services/EPCglobalALEService

    ubscribing notification handler for spec Meng2Spec in Edge Server.

  10. 觀察管理控制臺的變化:

    圖12

  11. 運行以下命令可以停止發布報告:

    >run.bat unsubscribe Meng2Spec console:test

    由于SubscribeSample的代碼相對比較冗長,限于篇幅,本文不在這里進行詳細的分析。讀者可以自己參看代碼和相應的注釋,尤其注意其中的非immediate方式的處理過程和所調用的ALE API。

2、報告和報告發送方式

BEA Edge Server 支持很多種報告發送方式,包括命令行方式、文件系統、HTTP和TCP等。前面我們已經看到使用命令行方式,下面以文件系統為例展示其它的報告發送方式。

  1. 首先創建兩個臨時目錄:

    >mkdir c: emple1

    >mkdir c: emple2

  2. 執行如下命令:

    >run.bat subscribe MengSpec file:///c:/temp/ale1

  3. 執行如下命令:

    >run.bat subscribe Meng2Spec file:///c:/temp/ale2/file.txt

  4. 在運行幾秒鐘以后, unsubscribe 上述的ECSpecs (MengSpec and Meng2Spec).

    >run.bat unsubscribe MengSpec file:///c:/temp/ale1

    >run.bat unsubscribe Meng2Spec file:///c:/temp/ale2/file.txt

  5. 察看這兩個臨時目錄下面的內容。在ale1目錄下,由于在命令行指定的是目錄,所以不同的ECReports被保存在不同的文件中,而在ale2目錄下,ECReports被保存在同一個在命令行指定了名稱的文件中。

三、Edge Server和工作流

BEA Edge Server 提供可配置的工作流模塊,使用戶可以快速配置中間件來處理RFID部署環境中的通用物料運輸工作流。下面我們討論一個比較特殊的工作流—有方向工作流。

有方向工作流的思想非常簡單:用戶或者說是應用程序可能會需要了解一個標簽移動的方向,例如一個貼有標簽的商品正在從倉庫移動向商場貨架。有方向工作流模塊記錄附加了時戳的流動方向,并且可以通過配置將該數據作為一個ECReport發送給企業中央服務器。

一個有方向的工作流最少需要兩個讀卡器,然后由標簽先通過其中一個讀卡器后通過另外一個讀卡器而推斷出其流動方向。在實際部署中,會有很多異常情況導致方向推斷過程出錯,例如兩個讀卡器同時讀到同一個標簽或者在一個讀卡器讀到該卡后,另一個讀卡器一直沒有檢測到該卡。

限于文章篇幅,大家可以參考下面鏈接的示例來建立自己的工作流:http://edocs.bea.com/rfid/edge_server/docs21/workflow_reference/config_use.html#wp424256

在這篇文章中,我們介紹了Edge Server中Immediate方式的一些更復雜得配置、一些其他讀寫方式和工作流模塊。限于作者的水平和文章的篇幅,沒有能夠更多深入探討和分析,希望能起到讓大家入門和上手的效果吧。大家在實際項目中,可以根據具體的需求情況,在本文介紹的基礎上開發自己的應用程序。如果需要對BEA Edge Server體系結構有更完整地認識或者需要能具體深入地了解該產品的話,可以參考BEA的文檔:http://edocs.bea.com/rfid/edge_server/docs21/