夏曉雨,馮思玲
(1.桂林電子科技大學國防生學院,桂林 541000;2.海南大學信息與通信工程學院,???570100)
近年來物聯(lián)網(wǎng)作為繼計算機、互聯(lián)網(wǎng)與移動通信網(wǎng)絡(luò)之后的又一次世界信息產(chǎn)業(yè)革命而得到了快速的發(fā)展,越來越多的物聯(lián)網(wǎng)設(shè)備應(yīng)用于我們的日常生活中,給人們帶來了極大的便利,各式各樣的傳感器滲入已經(jīng)我們生活的各個角落,但是在一些傳統(tǒng)行業(yè)里物聯(lián)網(wǎng)的發(fā)展卻有些緩慢,例如在圖書館內(nèi),目前的圖書館內(nèi)圖書的清點與錯架整理都需要人工來完成[1]。在智能社會的今天,我們所做的工作就是將需要多次重復(fù)勞動交給機器,以減少人工的使用,將勞動者從枯燥的重復(fù)勞動解放出來,使勞動者有更多的精力去投入到人的身心健康發(fā)展中。但目前對圖書定位的研究并不豐富,其中有一部分是基于條形碼∕二維碼的圖像識別圖書定位系統(tǒng),條形碼∕二維碼是一種應(yīng)用十分廣泛的自動識別技術(shù),但是目前圖像識別技術(shù)發(fā)展仍然不夠完善并且圖像識別技術(shù)無法對那些識別部分污損或破損的書籍進行識別,并且如果有讀者擋在識別用的攝像頭前極易造成識別誤差,而RFID 與之相比優(yōu)勢十分明顯:不需要光源,甚至可以透過外部材料讀取數(shù)據(jù);使用壽命長,能在惡劣環(huán)境下工作;能夠輕易嵌入或附著在不同形狀、類型的產(chǎn)品[2]。使用RFID 技術(shù)的一些研究使用的是高頻和低頻RFID 進行定位,高頻和低頻RFID 由于頻率不高導(dǎo)致在多標簽環(huán)境下,識別速度較慢,識別的錯誤率過高,而且識別距離較短,且大多數(shù)圖書館都設(shè)置有基于特高頻RFID 的自助圖書借閱系統(tǒng)和電子防竊圍欄,在應(yīng)用時并不需要進行更換,能夠在現(xiàn)有硬件基礎(chǔ)上改造來達到目的,經(jīng)濟上具有較強的可行性。
無線電的射頻可以根據(jù)頻率和它的波長分成不同的波段,而特高頻(Ultra High Frequency)。處于波長為1m~1mm 的微波頻段,其頻率范圍為 300MHz 到3GHz。在中國其工作頻率被定義為 800MHz~900MHz。ISO 18000-6C∕EPC C1G2 是國際標準化組織為特高頻RFID 制定的標準細則,其中詳細規(guī)定了特高頻RFID 的防碰撞算法。標簽與閱讀器經(jīng)過無線信道進行數(shù)據(jù)信息交互啊,多個信號會在信道中交疊互相影響,導(dǎo)致標簽信息無法正確讀取,即發(fā)生碰撞。特高頻相比于高頻與低頻RFID 的最大優(yōu)勢就是其規(guī)定了多標簽時的防碰撞算法使其具有在短時間內(nèi)多標簽識別的能力。這對于圖書的識別與定位是極為重要的。
天線在標簽和閱讀器間傳遞射頻信號。它一方面給無源的電子標簽提供電能,另一方面也通過它接收電子標簽,上發(fā)出的信息,它也可向電子標簽發(fā)射寫入的信息[3]。這個天線有兩個個屬性首先它是線極化天線,再者它是定向天線。
天線的線極化(Omnidirectional Antenna)方式簡單來說,像太陽光形成的影子一樣,當收信天線和極化方向一樣的時候,這個影子最大感應(yīng)出的信號最強,而圓極化,無論收信天線的極化方向怎樣改變,電磁波在任何方向上形成的影子都是一樣的,所感應(yīng)出的信號也都是相同的。
全向天線(Omnidirectional Antenna)其發(fā)射電磁波在空間中可以看成一個球面,可以向各個方向發(fā)送。
定向天線(Directional Antenna)顧名思義,它向特定的方向發(fā)射和接收的電磁波,并且發(fā)送的是圓錐型電磁波,因為電磁波都集中起來,增益比較高,而對于本設(shè)計來講能夠防止旁邊的書架產(chǎn)生的影響。
ISO∕IEC 18000-6C 通信協(xié)議定義了 RFID 系統(tǒng)操作的物理要求和邏輯要求,RFID 的防碰撞有硬件和軟件兩種方法,其中在硬件中共有四種分別是:空分多址(SDMA)、頻分多址(FDMA)、時分多址(TDMA)、碼分多址(CDMA),這些技術(shù)的優(yōu)點是時間延遲小,但是會大大增加系統(tǒng)的成本和復(fù)雜程度,另一種軟件的方法,一是使用根據(jù)曼徹斯特編碼的二進制算法和它的改進后的算法,二是通過隨機數(shù)產(chǎn)生器產(chǎn)生隨機數(shù)的隨機時隙算法和它的改進算法,這雖然會帶來時間延遲的增加,但是由于成本低,便于修改,實現(xiàn)起來系統(tǒng)的復(fù)雜程度較低。故我們所用的基于ISO 18000-6C 標準的閱讀器和標簽是通過隨機數(shù)產(chǎn)生器產(chǎn)生隨機數(shù)的隨機時隙算法來實現(xiàn)防碰撞。
如果將整個系統(tǒng)進行抽象,整個系統(tǒng)可以分為三個部分:部署在書架上的超高頻RFID 傳感器、上位機和相關(guān)程序,數(shù)據(jù)庫和網(wǎng)頁服務(wù)器。工作流程如圖1所示:
(1)上位機程序通過輪詢部署在書架上的超高頻RFID 傳感器將書架信息緩存在上位機臨時數(shù)據(jù)表中,等待處理。
(2)上位機程序?qū)⑴R時數(shù)據(jù)表中的數(shù)據(jù)寫入數(shù)據(jù)庫,并操作數(shù)據(jù)庫對其進行處理。
(3)基于數(shù)據(jù)庫數(shù)據(jù)向管理員或讀者通過上位機程序或Web 網(wǎng)頁展示圖書信息和狀態(tài)。
圖1 系統(tǒng)工作流程
(1)傳感器連接情況模塊
本模塊使用傳感器商家配套的動態(tài)鏈接庫制作,分 別 名 為 RFID_Reader_Cmds.dll 和 RFID_Reader_Com.dll,根據(jù)說明文檔,取得從串口發(fā)送回上位機的信息的方法由 SP 類 GetInstance().GetPortNames()方法實現(xiàn),配合WinForm 模板內(nèi)的ListView 控件能夠提供傳感器的連接情況如圖2-圖3 所示。
圖2 傳感器列表初始狀態(tài)
圖3 已連接傳感器時狀態(tài)
代碼如下所示:
(2)循環(huán)識別模塊
在系統(tǒng)運行過程中需要進行輪詢傳感器并將數(shù)據(jù)與初始數(shù)據(jù)對比,但配套程序給的輪詢指令并不合適,問題主要有兩點,第一,多次輪詢的次數(shù)有限制,只能由0-65535 次中選擇。第二,多次輪詢指令只能設(shè)置輪詢次數(shù),并不能改變輪詢的時間間隔,傳感器中內(nèi)置的MCU 只關(guān)心收到的命令次數(shù)并不關(guān)心時間間隔。且MCU 中的固件是閉源的,并不能更改它內(nèi)部的程序邏輯,需要使用WinForm 里面 System.Windows.Form.Timer 方法,這個方法本質(zhì)上是一個定時器,在用戶規(guī)定的時間間隔重復(fù)的執(zhí)行某個命令,代碼如下:
(3)數(shù)據(jù)消抖模塊
在系統(tǒng)測試時經(jīng)常出現(xiàn)標簽誤識別的狀況,這是由于傳感器產(chǎn)生了抖動,根據(jù)多次測試,當連續(xù)識別5次后,只會得到1-2 次錯誤標簽,根據(jù)測試結(jié)果用代碼構(gòu)建了數(shù)據(jù)消抖程序,它的工作流程如圖4 所示。在消抖程序中使用了一個臨時表,輪詢傳感器五次并記錄接收到標簽的次數(shù),將次數(shù)小于3 的數(shù)據(jù)保留。其余刪去,主要代碼如下:
圖4 數(shù)據(jù)消抖工作流程
(1)數(shù)據(jù)庫設(shè)計
本設(shè)計的數(shù)據(jù)庫共有五個表,分別為Read_First、Read_noton、Read_Refresh、Read_Wrong、Read_stable,其中Read_stable 表儲存圖書館內(nèi)所有登記在冊的圖書,表Read_First 表作為圖書離架定位基礎(chǔ)表,基礎(chǔ)表將在每次開始運行時重新寫入,與從傳感器傳來的目前的在架圖書信息進行比對,來獲得錯架圖書和離架圖書的信息。
表Read_Refresh 臨時儲存這一次閱讀器查詢的結(jié)果,表內(nèi)的數(shù)據(jù)與Read_First 表比對得到錯架圖書,和離架圖書的信息,并在獲得的信息儲存完畢后,于下一次讀取之前清空,防止下一次寫入時發(fā)生數(shù)據(jù)錯誤。
表 Read_noton 通 過 比 對 表 Read_First 和 表Read_Refresh 的EPC 列的不同獲得離架圖書并將EPC存入數(shù)據(jù)庫。
表 Read_Wrong 通過比對表 Read_First 和表Read_Refresh 中PORT 列不同而EPC 相同這兩個約束條件找出錯架圖書并將EPC 存入數(shù)據(jù)庫。
(2)數(shù)據(jù)處理
為了將數(shù)據(jù)庫中的數(shù)據(jù)處理,在上位機程序中嵌入SQL 語句在獲取信息的同時進行處理。部分代碼如下:
(3)網(wǎng)頁服務(wù)器設(shè)計
本設(shè)計選擇使用MVC 模式作為Web 的架構(gòu)模式,MVC 由模型、視圖、控制器的英文的第一個字母的縮寫構(gòu)成。不同于以往的其他模式,MCV 將元素按照模型、視圖、控制器分開,它把原來混在一起的各個元素分開把復(fù)雜的程序簡化,而且對于大型的項目能夠更好地將開發(fā)人員專注與一個組件,而不需要太多關(guān)注其他的部分。本文僅展示模型與控制器的初始化
(1)模型的初始化
在本設(shè)計生成了一個MVC 的模板以后,為了更清楚的分開各個元素,在它的模型的基礎(chǔ)上又分出了WebModel 模型并且作為類庫添加到解決方案中,并且由于要和數(shù)據(jù)庫交換數(shù)據(jù)所以按照數(shù)據(jù)庫的結(jié)構(gòu)來構(gòu)建模板中的模型,在這里使用System.Data.Sqlclient 的庫訪問數(shù)據(jù)庫,在初始化完WebModel 后也要在項目里初始化一個Model 與它對應(yīng)。
(2)控制器的初始化
同模型一樣將控制器的操作邏輯作為類庫寫在項目的外部,由于模型只是與數(shù)據(jù)庫交流,只獲得數(shù)據(jù),并不對數(shù)據(jù)進行處理,而處理的工作就交給了控制器來完成,并且它和數(shù)據(jù)的實體沒有關(guān)系。部分代碼如下:
固定在書架上的天線與傳感器如圖5 所示,圖中三本書作為測試之用,圖6 為上位機程序主界面,其可用操作
為:
圖5 固定在書架上的天線
圖6 上位機程序初始化界面
(1)定位書籍將目前在架圖書寫入Read_First 表
(2)開始輪詢傳感器并將數(shù)據(jù)存入數(shù)據(jù)庫處理
(3)進行快速盤點,并在上位機程序中展示,可選擇刪除或者導(dǎo)入數(shù)據(jù)庫
(4)向讀者展示圖書情況如圖7 所示
(5)進行錯架識別如圖8 所示
圖7 Web網(wǎng)頁
圖8 錯架識別模塊
本文給出了一種基于超高頻RFID 的圖書定位系統(tǒng),該系統(tǒng)可用于解決圖書館內(nèi)存在的對圖書在架與錯架信息識別的低效的問題,具有一定的實際意義。用C#語言實現(xiàn)上位程序使得其兼容性有效提高并由利于圖書館根據(jù)自身情況進行二次開發(fā),進一步提高圖書使館的信息化水平。