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