馮忠嶺,童英華
(1.青海師范大學 物理系,青海 西寧 810008;2.青海師范大學 計算機學院,青海 西寧 810008)
物流在整個企業的供應鏈中占有非常重要的比重。通過RFID的批量識別,實現物流的出庫,入庫,和分揀流程。通過GPS定位系統,實時獲取車輛在途信息。通過服務器和數據中心的實時數據分析和報表功能,可能掌握企業資源的動態變化。智能物流系統大幅提升整個供應鏈的效率。
在本設計中采用固定式RFID的讀卡器來采集信息,由串口發送至ARM11為核心的數據處理終端進行處理。因此該系統分為兩個部分。
第一部分:RFID電子標簽信息的采集,主要是選擇固定式的讀卡器來識別RFID標簽信息并發向終端;
第二部分:數據采集,該部分以ARM11為核心處理器的數據處理終端,在終端上搭載Linux操作系統,并安裝有數據庫SQLite和QT/E來進行數據的采集和存儲。
本系統的實現依賴于以下4個功能模塊:1)RFID信息的采集;2)串口數據的實時讀取;3)SQLite 數據的操作;4)Qt/E用戶界面的設計。
2.1.1 RFID電子標簽
RFID電子標簽分為被動標簽(Passive tags)和主動標簽(Active tags)兩種。主動標簽自身帶有電池供電,讀/寫距離較遠,同時體積較大,與被動標簽相比成本更高,也稱為有源標簽。被動標簽由閱讀器產生的磁場中獲得工作所需的能量,成本很低并具有很長的使用壽命,比主動標簽更小也更輕,讀寫距離則較近,也稱為無源標簽。一般來說,無源標簽是取代條形碼標簽的主要發展方向,有源標簽因為其長距離識別的優勢,主要應用于大型的高速運動物體的標識識別之上。如機動車的跟蹤和識別、動物或人類身份的跟蹤和識別。下面主要是以無源標簽為例介紹其原理和性能的。
RFID電子標簽由天線和專用芯片組成,天線是在塑料片基上鍍上的銅膜線圈,在塑料基片上還嵌有體積非常小的集成電路芯片,在這個集成電路芯片中有高速的射頻接口,控制單元,EEPROM 3個模塊組成。如圖1所示。

圖1 RFID電子標簽工作原理圖Fig.1 RFID electronic tag working principle diagram
2.1.2 電子標簽識別系統
一個真正的RFID電子標簽識別系統至少應包含電子標簽、閱讀器、數據處理和存儲的設備以及系統軟件。通常閱讀器與電腦相連,所讀取的標簽信息被傳送到電腦上進行下一步處理。閱讀器通過天線發送出一定頻率的射頻信號,當標簽進入這一定頻率的射頻信號磁場時產生感應電流從而獲得電能,產生電壓供給電子標簽內集成電路工作,并通過自身的RFID電子標簽天線發送出自身編碼等信息,由閱讀器接收天線接收讀取并解碼后送至電腦主機進行相關處理。
2.1.3 射頻讀卡模塊
本設計采用的讀卡器是TX125系列射頻讀卡模塊。TX125系列非接觸 IC卡射頻讀卡模塊采用 125K射頻基站。當有卡靠近模塊時,模塊會以韋根或 UART方式輸出ID卡卡號,用戶僅需簡單的讀取即可。該讀卡模塊完全支持EM、TEMIC、TK及其兼容卡片的操作。
數據格式:6字節數據,高位在前,格式為5字節數據+1字節校驗和(異或和)。 例如:卡號數據為0B00D5F0C7,則輸出為0x0B 0x00 0xD5 0xF0 0xC7 0xE9(校驗和計算:0x0B^0x00^0xD5^0xF0^0xC7=0xE9)。第一個字節0x0B一般是廠家碼。中間4個字節0x00 0xD5 0xF0 0xC7是卡片的序列號。一般卡片上印刷的都是 10進制碼。例如:001402807 213 61639。上面的數據可以通過轉換得到。轉換方式如下:將中間 4個字節卡號0x00D5F0C7轉換為十進制,即得001402807;將卡號的第二字節0xD5轉換為十進制,即得213,將卡號的最后兩字節0xF0C7轉換為十進制,即得61639。
在串口方式下,可工作在主動與被動模式。主動模式:當有卡進入該射頻區域內時,主動發出以上格式的卡號數據。被動模式:CLK的下降沿觸發卡號的輸出,格式為以上數據格式。操作方法為:在準備讀取卡號之前,打開串口中斷并啟動超時定時器(80 ms),將一直保持高電平的CLK置低電平,產生下降沿并一直保持低電平,等待卡號數據接收,若接收到卡號后存儲待用,若在等待過程中無數據接收,且超時定時器已經溢出,則表示本次讀取卡號失敗;無論成功與失敗最后都將CLK重新置高電平,進入待機以便下一次讀取卡號。
串口通訊協議,就是讀卡模塊以何種格式把讀取到的卡號發送出來。TX125支持韋根接口和串口兩種協議。UART接口一幀的數據格式為:1個起始位、8個數據位、無奇偶校驗位、1個停止位。波特率可選擇9 600 bps或者 19 200 bps。在本設計中連接6 410網關設備的/dev/ttySAC1串口設備,選擇設置波特率為9 600。
采用多線程的方式等待RFID刷寫讀卡器,主要函數:pthread_create (&th_kb,NULL,KeyBoardPthread,0); pthread_create(&rf_rev, NULL, RFIDRevPthread, 0)。 建立兩個線程,第一個是以鍵盤輸入的方式讀寫RFID信息,第二個線程的功能是監控串口/dev/ttySAC1中的信息,已實現實時的捕捉刷寫RFID標簽信息。
在linux操作系統中,對外設的訪問往往都是使用open()函數,以打開文件的方式讀取數據。在本設計中對串口數據的讀取也正是通過open()函數打開/dev/ttySAC1這一串口驅動文件,獲取由讀卡器發送給ARM11主核心板的數據,實現函數為 open(/dev/ttySAC1, O_RDWR|O_NOCTTY),標志位為O_RDWR|O_NOCTTY,意義是系統以可讀寫的方式打開文件,如果欲打開的文件為終端設備時,則不會將該終端當成進程控制終端。
在打開串口文件之前,我們要對串口進行相應的設置,具體步驟有以下幾步:串口屬性的設置,保存原先串口配置,激活選項,設置波特率,設置字符大小,設置校驗,設置停止位,設置最少字符與等待時間,清楚串口緩沖,激活配置。設置由以下結構體實現:
struct termios{
tcflag_t c_iflag; /*input flags*/
tcflag_t c_oflag; /*output flags*/
tcflag_t c_cflag; /*control flags*/
Tcflag_t c_lflag; /*local flags*/
cc_t c_cc[NCCS]; /*control characters*/
};
成功打開驅動文件后,需要做的就是使用read()函數來讀出讀卡器發送的信號,以判別
貨品的類型,將其信息準確的存入到數據庫。Read()函數的函數原型為 read(int fd,void*buf,size_t count), read()實現的功能是從參數fd所指的文件傳送count個字節到buf指針所指的內存中。讀出的數據將存入buf中,作為識別RFID標簽的依據。
在嵌入式設備上使用的數據庫有很多,比如MySQL。本設計選擇的是更為簡便的數據庫SQLite。本設計中建立的是一個物流商品信息的數據庫系統,包含的信息有:商品的名字(char型),商品的 ID 號(char型)以及商品的價格(int型)。這些信息都將被存放在table merchandise中。
當代表商品的RFID標簽第一次刷寫讀卡器的時候,系統將根據它的標簽標號,唯一確定它的商品名、商品ID號以及價格,并把這些消息一次性寫入到表merchandise中。已經存入庫中的商品RFID標簽再次刷寫讀卡器的時候,將作為該商品的出庫操作,系統將自動的刪除該商品在數據庫中的信息。
在數據的管理部分,充分利用SQLite提供的便捷有效的API函數 :sqlite3_open(), sqlite3_exec()和 sqlite3_close()等,打開和操作數據庫文件。
在商品的整個入庫、出庫的操作中,數據的錄入和刪除將是由系統自動完成,免去了人為的操作,大大提高了倉庫管理的效率,減少了人力資源。
QT/E即Qt Embedded是挪威Trolletch公司的圖形化界面開發工具。Qt的嵌入式版本,擁有較高的運行效率,而且整體采用面向對象編程,擁有良好的體系架構和編程模式。在系統設計時,為了使管理人員更好地管理倉庫物品的信息,在開發板上配備了一個4.2寸的觸摸屏,來提供良好的UI界面,以便觀察數據庫內的存貨信息。
在本設計中,選擇QT來開發UI界面。在主界面中,加入了一個Table View控件,用來綁定SQLite數據庫文件rfid_sqlite.db。在開發過程中,添加頭文件“QSqlDatabase”,這是Qt用來連接數據庫所必備的頭文件,該頭文件下包含了很多的函數來操作數據庫,將數據信息呈現給用戶。語句QSqlDatabase db=QSqlDatabase::addDatabase(“QSQLITE”),指明了Qt所需要連接的數據庫類型為SQLite,接著再通過db.setDatabaseName(“rfid_sqlite.db”)來打開鏈接系統所需要的數據庫,默認路徑為當前文件夾,顯示結果如圖2所示。

圖2 智能物流管理的QT圖形用戶界面Fig.2 Intelligent logistics management QT graphical user interface
本設計的目的是通過RFID的批量識別,實現物流的出庫、入庫和分揀流程。通過服務器和數據中心的實時數據分析和報表功能,掌握企業資源的動態變化。本系統中選擇使用固定式的低頻率的讀卡器,來實現商品信息的錄入與刪除,模擬了四種不同的商品:A,B,C,D,對應相應的商品 ID。商品入庫的時候,依此把RFID標簽放在讀卡器上進行刷寫,終端部分通過對串口/dev/ttySAC1的實時監測,當數據刷寫的時候,在RFID標簽ID鑒別的函數體內,以ID號為判別依據,調用數據庫操作文件sqlite.c中定義好的函數體sqliteDB_opt_add(char*name,char*id,int price)錄入商品信息;在商品出庫時,再次刷寫需要出入庫的RFID標簽,系統將自動識別該商品的刷寫次數,來鑒別其操作方式是出庫還是入庫。當判斷出是第二次刷寫時,將調用函數體sqliteDB_opt_delete_by_id(char*id),從數據庫中刪除該商品的信息,以達到數據出庫的操作。標簽的首次刷寫視為商品的入庫,第二次刷寫視為出庫操作,這一信息的錄入與刪除,用戶可以從UI界面的Table View控件內實時觀察到。
本設計以ARM 11微處理器為核心,結合了Linux操作系統和TX125系列射頻讀卡模塊實現了智能物流的貨品管理系統。重點實現了在嵌入式設備系統中進行數據庫的開發以及UI用戶界面等的開發和移植。經實驗證明,該系統實現了物品出庫和入庫的管理功能,方便實用。充分凸顯了RFID技術在當下有著較強的實用性,更體現了嵌入式系統給日常生活帶來了的極大便利,為物流行業帶了很大的收效。本設計還有很多需要繼續完善的地方,如要給每個物品加上GPS定位,以實現客戶和物流公司對物品流向的監測。
[1]顧煊,王東,盛煥燁.RFID定位管理系統設計與實現[J].微計算機信息,2008(26):65-68.GU Xuan,WANG Dong,SHENG Huan-ye.The design and implementation of the RFID locating management system[J].Microcomputer Information,2008(26):65-68.
[2]劉發貴,蔣瑞林,胡耀民.RFID中間件及其倉儲管理的應用[J].計算機工程,2006,32(13):272-276.LIU Fa-gui,JIANG Rui-lin,HU Yao-min.RFID middleware and its application in warehouse management[J].Computer Engineering,2006,32(13):272-276.
[3]歐廣宇,劉輝.RFID技術及其在物流企業的應用[J].計算機技術與發展,2008,18(6):164-170.OU Guang-yu,LIU Hui.RFID and its application in logistics[J].Computer Technology and Development,2008,18 (6):164-170.
[4]曾煉成,傅卓軍.標簽可重用的倉儲管理系UHF RFID閱讀器設計[J].單片機與嵌入式系統應用,2011,11(9):49-52.ZENG Lian-cheng,FU Zhuo-jun.UHF RFID reader for warehouse management system with reusable tags[J].Microcontrollers&Embedded Systems,2011,11(9):49-52.
[5]邱忠賽,何濤,盛螢峰.基業RFID的物流倉儲管理系統設計[J].商場現代化,2011(1):634-635.QIU Zhong-sai,HE Tao,SHENG Ying-feng.The design of logistics warehouse management system based on RFID[J].Market Modernization,2011(1):634-635.
[6]羅清堯,熊本海,楊亮,等.基于超高頻RFID的生豬屠宰數據采集方案[J].農業工程學報,2011(2):370-375.LUO Qing-yao,XIONG Ben-hai,YANG Liang,et al.Solution of data collection of swine slaughter based on ultrahigh frequency RFID[J].Transactions of the Chinese Society of Agricultural Engineering,2011(2):370-375.