基于RFID的農(nóng)產(chǎn)品生產(chǎn)線讀寫器設(shè)計
圖4 軟件系統(tǒng)工作流程
1、嵌入式數(shù)據(jù)庫操作模塊
在本項目中使用了Sqlite3 作為系統(tǒng)的嵌入式數(shù)據(jù)庫。嵌入式數(shù)據(jù)庫是整個系統(tǒng)的重要組成部分, 主要負(fù)擔(dān)了采集基本數(shù)據(jù)的本地存儲, 條碼閱讀信息的初步存儲和快速查詢, 工作日志的保存, 還能和網(wǎng)絡(luò)通信模塊配合實現(xiàn)網(wǎng)絡(luò)主/ 從數(shù)據(jù)庫的同步, 在主服務(wù)器崩潰的情況下, 依然可以通過整理所有嵌入式數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行大部分?jǐn)?shù)據(jù)的恢復(fù), 增加了系統(tǒng)的可靠性, 此數(shù)據(jù)庫采用了單數(shù)據(jù)文件設(shè)計, 能夠支持大部分SQL 92標(biāo)準(zhǔn)的數(shù)據(jù)庫操作語句, 支持事務(wù)功能, 通過擴(kuò)展網(wǎng)絡(luò)操作接口函數(shù), 達(dá)到了和后臺數(shù)據(jù)庫進(jìn)行通信和交換數(shù)據(jù)的目的。
2、網(wǎng)絡(luò)通信模塊
本系統(tǒng)的特色就是通過嵌入式Linux 操作系統(tǒng)的網(wǎng)絡(luò)底層支持, 以多種網(wǎng)絡(luò)傳輸途徑, 將數(shù)據(jù)和后臺數(shù)據(jù)服務(wù)器進(jìn)行數(shù)據(jù)傳輸。在本系統(tǒng)的網(wǎng)絡(luò)部分設(shè)計中, 在局域網(wǎng)內(nèi)利用Linux 系統(tǒng)的提供的TCP/IP 協(xié)議支持, 在編程中采用了動態(tài)與服務(wù)器建立連接的方法, 在讀取到標(biāo)簽信息并解碼出有效信息的時候, 向服務(wù)器相應(yīng)端口發(fā)送相應(yīng)的Socket 請求信息, 服務(wù)器端接受到請求后建立連接并新建Socket 端口來和終端進(jìn)行通信; 只有在讀取數(shù)據(jù)的時候數(shù)據(jù)庫和終端間才產(chǎn)生數(shù)據(jù)傳輸和占用服務(wù)器端資源, 從而降低了網(wǎng)絡(luò)占有率和服務(wù)器端的負(fù)荷, 提高了網(wǎng)絡(luò)通信的效率。
3、RFID 協(xié)議解析模塊
協(xié)議解析模塊負(fù)責(zé)將發(fā)送的命令參數(shù)加入包頭等信息,并將收到的標(biāo)簽回傳的信息進(jìn)行解包, 通過對信息的解包, 能夠得到盤存或讀寫的相關(guān)信息。MPR6000 支持的RFID Gen2命令包括Read, Write, Kill , Erase, Lock。命令都由一個字符串構(gòu)成, 其結(jié)構(gòu)如下:
SOF> Node> Length> Status> Payload> CRC>
分別由開始幀、節(jié)點、總長度、狀態(tài)、標(biāo)簽信息、CRC 這幾部分組成。
舉例來說, Gen2 盤點命令的操作碼為01h, 操作會返回在讀寫域內(nèi)全部的符合讀取條件的Gen2 標(biāo)簽, 而經(jīng)過反碰撞模塊處理后, 得到的數(shù)據(jù)幀由標(biāo)簽信息和盤存總結(jié)兩部分組成:
即 回復(fù)信息>= [ 標(biāo)簽回復(fù)>] 盤存總結(jié)>
標(biāo)簽回復(fù)> = EPC> 訪問回復(fù)>
EPC> = 標(biāo)簽ID 長度> 協(xié)議控制字> 標(biāo)簽ID>
舉例, 當(dāng)使用天線B 并且RF 的功率為22 時, 讀取所有SL 為NOT SET, S3 flag 為A 的Gen2 標(biāo)簽, 此時的起始Q 為1( 即2 個時隙) 。
60 01 01 16 02 03 00 01
如果當(dāng)前射頻范圍內(nèi)的標(biāo)簽有一個64 位的Gen2 標(biāo)簽1的ID 為“ 0102 0304 0506 0708”。
而且有一個96 位Gen2 標(biāo)簽2 的ID 為“ 1211 1009 08070605 0403 0201”。
可能讀寫模塊會收到這樣一個包, 完整內(nèi)容如下:
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
現(xiàn)在對這個包進(jìn)行解析, 根據(jù)協(xié)議規(guī)定 接受包> = [標(biāo)簽回復(fù)>] 盤存總結(jié)>
= [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>
標(biāo)簽1 回復(fù)> = 標(biāo)簽1 ID 長度> 協(xié)議控制字> 標(biāo)簽1 ID>
標(biāo)簽1 ID 長度> = 04> = 4- word = 64 Bit 標(biāo)簽ID
協(xié)議控制字> = 28 00>, 從而得出 標(biāo)簽1 ID> =0102 0304 0506 0708>
標(biāo)簽2 回復(fù)> = 標(biāo)簽2 ID 長度> 協(xié)議控制字> 標(biāo)簽2 ID>
標(biāo)簽1 ID 長度> = 06> = 6- word = 96 Bit 標(biāo)簽ID
協(xié)議控制字> = 30 00>, 得出 標(biāo)簽2 ID> = 1211 1009 0807 0605 0403 0201>
而又有 盤存總結(jié)>= 標(biāo)簽數(shù)> 時隙數(shù)>EPC CRC 錯誤> 回復(fù)CRC 錯誤> 沖突次數(shù)> 通信輪數(shù)>
所以得到 標(biāo)簽數(shù)> = 2, 時隙數(shù)> = 22, EPC CRC 錯誤> = 1, 回復(fù)CRC 錯誤> = 0, 沖突次數(shù)> = 2, 通信輪數(shù)> = 9
在提取標(biāo)簽信息后, 則可以將所獲得的標(biāo)簽信息送到嵌入式數(shù)據(jù)庫模塊進(jìn)行本地暫存, 同時通過網(wǎng)絡(luò)模塊上傳至后臺服務(wù)器做記錄, 中間的接口函數(shù)部分就不詳細(xì)給出了。
四、總結(jié)與展望
本文中描述的嵌入式RFID 終端讀取器, 在農(nóng)業(yè)產(chǎn)品包裝生產(chǎn)線中進(jìn)行了實用, 基本滿足了生產(chǎn)線RFID 系統(tǒng)對前端RFID 標(biāo)簽數(shù)據(jù)采集、處理、通信方面的要求, 在功能上和穩(wěn)定性方面已經(jīng)能夠替代專用RF 讀寫器, 因為采用了免費的開源Linux 操作系統(tǒng)和開源數(shù)據(jù)庫Sqlite , 大大降低了總體成本, 特別適合在成本敏感系數(shù)高的農(nóng)產(chǎn)品生產(chǎn)和監(jiān)控中使用。
評論