一、研究背景及設計
RFID 是射頻識別技術(Radio Frequency Identification)的英文縮寫, 射頻識別技術是一種非接觸式的自動識別技術, 它使用射頻電磁波通過空間耦合(交變磁場或電磁場)在閱讀器和要進行識別、分類和跟蹤的移動物品( 物品上附著有RFID 標簽)之間實現無接觸信息傳遞并通過所傳遞的信息達到識別目的的技術。RFID 是一種自動識別和數據捕獲技術, 可以提供無人看管的自動監視與報告作業。
RFID 閱讀器的工作原理如下: 閱讀器通過天線發送出一定頻率的射頻信號, 當標簽進入磁場時產生感應電流從而獲得能量, 發送出自身編碼和相關信息被讀取器讀取并解碼后送回到計算機中進行有關處理。識別工作無須人工干預, 可工作于各種惡劣環境。高性能的RFID 讀寫器可以同時識別多個物體[1]。在農業生產中, 目前RFID 的使用范圍也逐漸擴大, 隨著世界上發達國家的食品檢驗檢疫制度日益嚴格, 目前國外對動物的管理中已經開始廣泛使用RFID 技術, 而在國內的某些超市中, 也對顧客提供了對凈菜等高檔農業產品使用RFID 標簽查詢產地和日期等基本的附加功能, 可以預見, 在未來RFID 必然在產品回溯, 質量監察等方面發揮更多的作用。在本系統的設計思路見圖1 使用了高性能的遵循RFIDGEN2 協議的讀寫模塊和RFID 標簽, 直接在本地完成復雜的標簽讀取, 標簽反碰撞計算, 信息提取和數據保存等工作, 僅將有效信息通過網絡傳輸給后臺服務器, 這樣就大大降低了網絡通信的開銷, 降低了服務器的資源占用, 從而提高了系統整體的運行效率, 提高了穩定性, 增加了業務的靈活性。
圖1 RFID 技術應用于農業產品包裝線總體示意圖
二、系統的硬件設計
圖2 射頻模塊與CPU 接口
基于高可靠性和低成本的考慮, 本系統使用了基于S344B0 的嵌入式CPU 和WJ 6000 射頻模塊為基礎, 配合USB、Realtek 網卡、SDRAM 等芯片組成了核心系統, 其中關鍵的射頻模塊與CPU 接口如圖2。
三、系統的軟件系統設計
系統的整個軟件系統模塊關系如圖3 所示:
圖3 系統總體軟件模塊示意圖
操作系統采用uClinux 系統作為操作系統, 用來管理各類硬件和提供軟件運行平臺。由驅動層提供各類設備諸如以太網, 串口, USB 存儲器, 狀態燈等設備的驅動。網絡通信模塊負責將處理得來的標簽信息回傳到后臺服務器, 同時也可以根據后臺服務器的命令來控制主控模塊參數從而改變工作模式。嵌入式數據庫控制模塊負責將系統保存系統的工作日志, 并將讀取到的標簽和相關數據保存到本地數據庫, 以備以后的查詢。協議解析模塊負責對受到數據通信包進行協議解析, 取出有效的標簽數據, 并進行標簽反碰撞操作, 處理各類干擾問題, 保證受到標簽數據的完整性, 也是整個軟件體系的核心部分。RFID 讀取系統軟件工作流程:
圖4 軟件系統工作流程
1、嵌入式數據庫操作模塊
在本項目中使用了Sqlite3 作為系統的嵌入式數據庫。嵌入式數據庫是整個系統的重要組成部分, 主要負擔了采集基本數據的本地存儲, 條碼閱讀信息的初步存儲和快速查詢, 工作日志的保存, 還能和網絡通信模塊配合實現網絡主/ 從數據庫的同步, 在主服務器崩潰的情況下, 依然可以通過整理所有嵌入式數據庫的數據進行大部分數據的恢復, 增加了系統的可靠性, 此數據庫采用了單數據文件設計, 能夠支持大部分SQL 92標準的數據庫操作語句, 支持事務功能, 通過擴展網絡操作接口函數, 達到了和后臺數據庫進行通信和交換數據的目的。
2、網絡通信模塊
本系統的特色就是通過嵌入式Linux 操作系統的網絡底層支持, 以多種網絡傳輸途徑, 將數據和后臺數據服務器進行數據傳輸。在本系統的網絡部分設計中, 在局域網內利用Linux 系統的提供的TCP/IP 協議支持, 在編程中采用了動態與服務器建立連接的方法, 在讀取到標簽信息并解碼出有效信息的時候, 向服務器相應端口發送相應的Socket 請求信息, 服務器端接受到請求后建立連接并新建Socket 端口來和終端進行通信; 只有在讀取數據的時候數據庫和終端間才產生數據傳輸和占用服務器端資源, 從而降低了網絡占有率和服務器端的負荷, 提高了網絡通信的效率。
3、RFID 協議解析模塊
協議解析模塊負責將發送的命令參數加入包頭等信息,并將收到的標簽回傳的信息進行解包, 通過對信息的解包, 能夠得到盤存或讀寫的相關信息。MPR6000 支持的RFID Gen2命令包括Read, Write, Kill , Erase, Lock。命令都由一個字符串構成, 其結構如下:
分別由開始幀、節點、總長度、狀態、標簽信息、CRC 這幾部分組成。
舉例來說, Gen2 盤點命令的操作碼為01h, 操作會返回在讀寫域內全部的符合讀取條件的Gen2 標簽, 而經過反碰撞模塊處理后, 得到的數據幀由標簽信息和盤存總結兩部分組成:
即< 回復信息>= [< 標簽回復>]< 盤存總結>
可能讀寫模塊會收到這樣一個包, 完整內容如下:
< 標簽1 回復> = < 標簽1 ID 長度> < 協議控制字> <標簽1 ID>
< 標簽1 ID 長度> = <06> = 6- word = 96 Bit 標簽ID
而又有< 盤存總結>=< 標簽數>< 時隙數>
在提取標簽信息后, 則可以將所獲得的標簽信息送到嵌入式數據庫模塊進行本地暫存, 同時通過網絡模塊上傳至后臺服務器做記錄, 中間的接口函數部分就不詳細給出了。
四、總結與展望
本文中描述的嵌入式RFID 終端讀取器, 在農業產品包裝生產線中進行了實用, 基本滿足了生產線RFID 系統對前端RFID 標簽數據采集、處理、通信方面的要求, 在功能上和穩定性方面已經能夠替代專用RF 讀寫器, 因為采用了免費的開源Linux 操作系統和開源數據庫Sqlite , 大大降低了總體成本, 特別適合在成本敏感系數高的農產品生產和監控中使用。
< 標簽回復> =
舉例, 當使用天線B 并且RF 的功率為22 時, 讀取所有SL 為NOT SET, S3 flag 為A 的Gen2 標簽, 此時的起始Q 為1( 即2 個時隙) 。
60 01 01 16 02 03 00 01
如果當前射頻范圍內的標簽有一個64 位的Gen2 標簽1的ID 為“ 0102 0304 0506 0708”。
而且有一個96 位Gen2 標簽2 的ID 為“ 1211 1009 08070605 0403 0201”。
04 28 00 01 02 03 04 05 06 07 08 07 08 30 00 12 11 10 09 08 07 06 05 04 03 02 01 00 02 00 16 00 01 00 00 00 02 00 09
現在對這個包進行解析, 根據協議規定< 接受包> = [<標簽回復>] < 盤存總結>
= [<04 28 00 01 02 03 04 05 06 07 08> <07 08 30 00 12 11 10 09 08 07 06 05 04 03 02 01>] < 00 02 00 16 00 01 00 00 00 02 00 09>
< 標簽1 ID 長度> = <04> = 4- word = 64 Bit 標簽ID
< 協議控制字> = <28 00>, 從而得出< 標簽1 ID> =<0102 0304 0506 0708>
< 標簽2 回復> = < 標簽2 ID 長度> < 協議控制字> <標簽2 ID>
< 協議控制字> = <30 00>, 得出< 標簽2 ID> = <1211 1009 0807 0605 0403 0201>
所以得到< 標簽數> = 2, < 時隙數> = 22,