??? RFID 讀取系統(tǒng)軟件工作流程:
?
?
圖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)如下:
???
??? 分別由開(kāi)始幀、節(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ù)> =
???
??? 舉例, 當(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ù)>
??? 所以得到< 標(biāo)簽數(shù)> = 2, < 時(shí)隙數(shù)> = 22,
??? 在提取標(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)的開(kāi)源Linux 操作系統(tǒng)和開(kāi)源數(shù)據(jù)庫(kù)Sqlite , 大大降低了總體成本, 特別適合在成本敏感系數(shù)高的農(nóng)產(chǎn)品生產(chǎn)和監(jiān)控中使用。
評(píng)論