文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)06-0034-03
在保障軍械裝備時(shí),,訓(xùn)練使用,、檢修、加裝改造等記錄用傳統(tǒng)手工操作,,管理人員必須對(duì)進(jìn)裝備名稱,、隨裝配套武器類(lèi)型及數(shù)量、出廠單位,、出廠日期以及其他眾多屬性進(jìn)行逐一登記,,不但工作效率低、而且容易出差錯(cuò),,成為制約工作進(jìn)度的瓶頸,。如果裝備信息管理運(yùn)用RFID標(biāo)簽取代紙質(zhì)履歷表,記錄裝備從出廠,、配備,、動(dòng)用、維修,、保管,、事故、加裝改造,、退役報(bào)廢等全生命周期的履歷信息,,手持讀寫(xiě)器讀取射頻標(biāo)簽及信息記錄裝置每日信息,可以幫助操作人員及時(shí)掌握裝備工作情況,,為維修保障人員提供信息支持,。
但不同于普通物流領(lǐng)域,由于裝備信息較為復(fù)雜,,單一普通標(biāo)簽難以勝任承載所需全部信息,。考慮經(jīng)濟(jì)和實(shí)用性,,采用不同頻率多標(biāo)簽方式才能較好滿足要求,。因此,本文針對(duì)裝備信息的RFID數(shù)據(jù)結(jié)構(gòu)重點(diǎn)進(jìn)行了分析,,并詳細(xì)研究了嵌入式讀寫(xiě)器內(nèi)部數(shù)據(jù)的存儲(chǔ)和管理,,以滿足軍械保障信息化需求,。
1 RFID數(shù)據(jù)模型研究
1.1 RFID數(shù)據(jù)特性
RFID數(shù)據(jù)模型是管理RFID數(shù)據(jù)的基礎(chǔ)。從總體上RFID應(yīng)用有著共同的需求特點(diǎn):
(1)識(shí)別:RFID標(biāo)簽唯一地標(biāo)識(shí)該物體,。
(2)位置:一個(gè)位置可以是一個(gè)地理位置,,也可以是有背景含義的特殊位置,如倉(cāng)庫(kù),、靶場(chǎng)等,。
(3)關(guān)系:RFID應(yīng)用的另一個(gè)關(guān)鍵概念是聚合,即對(duì)象之間形成的關(guān)系,。一種常見(jiàn)聚合情況是包含關(guān)系,,即在物體運(yùn)動(dòng)過(guò)程中,被包含的物體與外包裝物體有相同的運(yùn)動(dòng)路徑等特性,。另一個(gè)集合情況是協(xié)作,,即貼有標(biāo)簽的物體之間有一定的關(guān)系[1],如某型導(dǎo)彈射擊訓(xùn)練由發(fā)射車(chē)與檢測(cè)車(chē)共同完成,,則發(fā)射車(chē)與檢測(cè)車(chē)之間有協(xié)作關(guān)系,。
1.2 數(shù)據(jù)模型
本文重點(diǎn)是利用數(shù)據(jù)庫(kù)技術(shù)實(shí)現(xiàn)裝備數(shù)據(jù)信息的層次化管理。系統(tǒng)中涉及的數(shù)據(jù)主要有靜態(tài)數(shù)據(jù)和動(dòng)態(tài)數(shù)據(jù)兩種類(lèi)型,。
1.2.1 靜態(tài)數(shù)據(jù)
靜態(tài)數(shù)據(jù)是有關(guān)固定信息,、業(yè)務(wù)規(guī)則以及系統(tǒng)設(shè)置的數(shù)據(jù),不輕易隨時(shí)間變更[2],。在本系統(tǒng)中,,靜態(tài)數(shù)據(jù)主要包括:
(1)Objects:所有使用射頻標(biāo)簽進(jìn)行標(biāo)識(shí)的武器系統(tǒng),包括武器系統(tǒng)及隨裝配件的名稱,、型號(hào),、出廠單位、出產(chǎn)年份等信息,。
(2)Organizations:裝備在生命周期(出廠到退役報(bào)廢之間的時(shí)間)內(nèi)裝配變動(dòng)信息,,包括裝配單位、裝配時(shí)間,、戰(zhàn)斗序列等信息,。
(3)Actions:事務(wù)處理類(lèi)型。包括重大活動(dòng)記錄,、技術(shù)檢查,、維修、加裝改裝等信息,。
1.2.2 動(dòng)態(tài)數(shù)據(jù)
動(dòng)態(tài)數(shù)據(jù)反映了武器系統(tǒng)運(yùn)作中的事務(wù)過(guò)程,,與時(shí)間、空間密切相關(guān)。動(dòng)態(tài)數(shù)據(jù)主要包括:Arrangement,,用于描述裝備實(shí)體(Objects)與狀態(tài)的層次關(guān)系;ObjectOrganization,,用于描述裝備實(shí)體(Objects)在某時(shí)間內(nèi)的調(diào)撥,、調(diào)整;ActionItem,,用于描述裝備處理情況,。
1.2.3 數(shù)據(jù)模型的建立
如果有靜態(tài)關(guān)系,則根據(jù)ER模型的映射關(guān)系,,映射成表即可[3],。對(duì)于兩個(gè)實(shí)體之間的基于狀態(tài)的關(guān)系,則在兩個(gè)實(shí)體表的主鍵之間加上時(shí)間間隔(stime,etime)組成,,其中時(shí)間間隔代表了關(guān)系或者狀態(tài)存在的生命周期,。基于事件的動(dòng)態(tài)關(guān)系,,由映射在兩個(gè)表的主鍵加上時(shí)間戳屬性timestamp組成,,這個(gè)時(shí)間戳代表了時(shí)間發(fā)生的時(shí)間點(diǎn)。
2 基于嵌入式的RFID讀寫(xiě)器數(shù)據(jù)管理
2.1 系統(tǒng)的設(shè)計(jì)思路
根據(jù)以上分析,,數(shù)據(jù)來(lái)源主要分為兩類(lèi):一類(lèi)是固定的裝備身份信息,,這些信息是一般不會(huì)隨時(shí)間變化,數(shù)據(jù)量比較??;另一類(lèi)是動(dòng)態(tài)的裝備壽命信息,通常是記錄日常操作的起始時(shí)間和裝備調(diào)撥,、調(diào)整,,數(shù)據(jù)量稍大且需要重復(fù)讀寫(xiě)。
為此,,以某型車(chē)輛裝備為例,,采用一種13.56 MHz的無(wú)源標(biāo)簽存儲(chǔ)裝備身份信息,采用頻率為2.4 GHz的有源標(biāo)簽存儲(chǔ)動(dòng)態(tài)壽命信息,。本設(shè)計(jì)采用Windows CE作為操作系統(tǒng),,通過(guò)RFID射頻收發(fā)模塊讀取所需求的數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行解析,、提取,、存儲(chǔ),并構(gòu)建嵌入式SQLite數(shù)據(jù)庫(kù),,實(shí)現(xiàn)對(duì)數(shù)據(jù)的管理,。而用戶對(duì)存儲(chǔ)的數(shù)據(jù)進(jìn)行查詢修改等操作,最方便的方法就是在Web頁(yè)面里實(shí)現(xiàn),因此需要搭建一個(gè)Web服務(wù)器,,使用戶可以通過(guò)Web頁(yè)面來(lái)控制這些工作的完成并實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作訪問(wèn),。總體設(shè)計(jì)思路如圖1所示,。
圖中,,設(shè)備管理提供了統(tǒng)一的讀寫(xiě)器接口程序,可兼容性地控制多種類(lèi)型讀寫(xiě)器的工作,;數(shù)據(jù)管理完成了數(shù)據(jù)的過(guò)濾,、存儲(chǔ),并利用嵌入式Web服務(wù)器對(duì)數(shù)據(jù)進(jìn)行查詢和修改,;嵌入式Web服務(wù)器是嵌入式技術(shù)和網(wǎng)絡(luò)技術(shù)結(jié)合的產(chǎn)物,,把Internet中的Web服務(wù)器進(jìn)行一定的裁剪,嵌入到設(shè)備中,,從而可以利用嵌入式Web服務(wù)器對(duì)設(shè)備進(jìn)行操作,、管理。本文擬使用GoAhead WebServer,,它是一個(gè)源碼免費(fèi),、可以運(yùn)行在多個(gè)平臺(tái)的嵌入式Web服務(wù)器,并支持ASP,、嵌入式JavaScript和標(biāo)準(zhǔn)的CGI執(zhí)行,,能較好地滿足需求。
2.2 數(shù)據(jù)的解析和過(guò)濾
讀寫(xiě)器從標(biāo)簽讀取大量的未經(jīng)處理的數(shù)據(jù),,一般來(lái)說(shuō)讀取到的數(shù)據(jù)并非完全有用的標(biāo)簽數(shù)據(jù),,需要對(duì)其進(jìn)行提取、解析,,以得到有用的信息,。數(shù)據(jù)在傳輸過(guò)程中不可避免地會(huì)受到外界的干擾而發(fā)生錯(cuò)誤,因此數(shù)據(jù)必須進(jìn)行過(guò)濾,,將過(guò)濾后的數(shù)據(jù)再進(jìn)行存儲(chǔ)[4],。
標(biāo)簽數(shù)據(jù)一般都是二進(jìn)制編碼,讀取后需要將二進(jìn)制編碼數(shù)據(jù)轉(zhuǎn)換成unicode數(shù)據(jù),。標(biāo)簽數(shù)據(jù)的解析和過(guò)濾流程如圖2所示,。
在標(biāo)簽讀取過(guò)程中實(shí)現(xiàn)標(biāo)簽的二進(jìn)制位編碼到unicode編碼的轉(zhuǎn)換,在標(biāo)簽數(shù)據(jù)處理環(huán)節(jié)則根據(jù)轉(zhuǎn)換獲得的標(biāo)簽unicode編碼以及過(guò)濾條件對(duì)標(biāo)簽進(jìn)行過(guò)濾,,為信息應(yīng)用層提供有意義的標(biāo)簽信息,。
過(guò)濾規(guī)則可以通過(guò)Web頁(yè)面進(jìn)行設(shè)置,設(shè)置信息存儲(chǔ)到過(guò)濾規(guī)則配置文件中,。進(jìn)行過(guò)濾時(shí),,過(guò)濾器讀取配置文件并應(yīng)用于過(guò)濾規(guī)則,。
3 數(shù)據(jù)存儲(chǔ)與管理的實(shí)現(xiàn)
3.1 構(gòu)建嵌入式數(shù)據(jù)庫(kù)
SQLite3是輕型、免費(fèi)和開(kāi)源的嵌入式數(shù)據(jù)庫(kù),,支持絕大多數(shù)標(biāo)準(zhǔn)的SQL92語(yǔ)句,,工作速度快,可以滿足中間件數(shù)據(jù)處理的實(shí)時(shí)要求,。因此選用SQLite3數(shù)據(jù)庫(kù)在大小和功能方面是一個(gè)理想的折中,。
SQLite3嵌入式數(shù)據(jù)庫(kù)提供了源碼,在硬件平臺(tái)上對(duì)源碼進(jìn)行交叉編譯即可實(shí)現(xiàn)移植,。編譯后,生成了大小為93 KB的sqlite3可執(zhí)行文件和大小為991 KB的sqlite3動(dòng)態(tài)鏈接庫(kù)libsqlite3.so,。
3.2 數(shù)據(jù)模型在數(shù)據(jù)庫(kù)中的實(shí)現(xiàn)
嵌入式數(shù)據(jù)庫(kù)中以單個(gè)庫(kù)文件形式進(jìn)行數(shù)據(jù)存儲(chǔ),,數(shù)據(jù)庫(kù)文件可以在不同的操作系統(tǒng)平臺(tái)下使用而無(wú)需轉(zhuǎn)換。數(shù)據(jù)庫(kù)文件內(nèi)部采用表數(shù)據(jù)頁(yè)和索引數(shù)據(jù)頁(yè)兩種存儲(chǔ)結(jié)構(gòu)進(jìn)行組織,。用戶定義的臨時(shí)表和系統(tǒng)中的臨時(shí)表(用于排序,、分組等操作)以臨時(shí)數(shù)據(jù)庫(kù)文件形式進(jìn)行管理。
SQLite數(shù)據(jù)庫(kù)應(yīng)用體系結(jié)構(gòu)如圖3所示,。
在開(kāi)發(fā)板上,,使用上一步生成的sqlite3可執(zhí)行文件來(lái)生成本系統(tǒng)所需要的數(shù)據(jù)庫(kù)表。Sqlite3的數(shù)據(jù)庫(kù)與Access數(shù)據(jù)庫(kù)類(lèi)似都采用了單文件的模式,,為此生成了一個(gè)名為rfid的數(shù)據(jù)庫(kù)文件,,根據(jù)項(xiàng)目需求規(guī)劃必須的數(shù)據(jù)表。
直接在命令行下敲入“sqlite3 rfid;”即可生成rfid數(shù)據(jù)庫(kù),,并得到提示符“sqlite3〉”,,通過(guò)輸入SQL語(yǔ)句即可建立所需的表:
create table rfid(Number integer primary key, Objects varchar(),Organizations varchar(),Actions varchar(),ActionItem varchar(),ObjectOrganization varchar(),Arrangement varchar());
.quit;
這里只考慮了基本屬性,可以為數(shù)據(jù)表做擴(kuò)展表格實(shí)現(xiàn)其額外的屬性,。
參照SQL DML的語(yǔ)法,,該模型的邏輯結(jié)構(gòu)主要元素描述如下:
(1)Objects: Objects(EPC Primary Key, name, deseription),記錄武器系統(tǒng)及隨裝信息,。
(2)Organizations: Organizations(organizationID Primary Key,organization),,標(biāo)識(shí)裝備在生命周期內(nèi)裝配單位及編制序列。
(3)Actions: Actions(actionID Primary Key,actType),,標(biāo)識(shí)業(yè)務(wù)流程中的事務(wù)類(lèi)型,。其中,actionID為事務(wù)類(lèi)型標(biāo)識(shí)碼,;actType表示事務(wù)類(lèi)型的名稱,。
(4)Arrangement:Arrangement(ID Primary Key,EPC,,parentEPC,,QtyOfChild,organizationID,stime,,etime),,Arran-
gement關(guān)系是本數(shù)據(jù)模型的關(guān)鍵,反映了物品的物理層次關(guān)系,。其中,,parentEPC標(biāo)識(shí)關(guān)于該EPC的上一層次的EPC編碼;QtyOfChild記錄了由該EPC標(biāo)識(shí)的下一層次的物品數(shù)量,;stime和etime分別標(biāo)識(shí)該層次關(guān)系的發(fā)生和結(jié)束時(shí)間,。
(5)ActionItem:ActionItem(ID Primary Key,actionID,,EPC references Objects,,timestamp):ID標(biāo)識(shí)每個(gè)發(fā)生的事務(wù);timestamp為該事務(wù)發(fā)生的時(shí)間,。
(6)ObjectOrganization(ID Primary Key,EPC refferenees Objects, organizationID, timestamp):ID標(biāo)識(shí)裝備的調(diào)撥,、調(diào)整及編制戰(zhàn)斗序列的變化。
SQLite數(shù)據(jù)庫(kù)提供了豐富的C語(yǔ)言API接口函數(shù),,使得對(duì)數(shù)據(jù)庫(kù)的操作十分方便,。本系統(tǒng)只需要以下3個(gè)核心函數(shù)就可以實(shí)現(xiàn)連接數(shù)據(jù)庫(kù)、處理查詢等操作:
int sqlite3_open(const char*db,int mode,char* *errmsg);
int sqlite3_close(sqlite*db);
int sqlite3_exec(sqlite*db,char*sql,int(*callback) (void*,
int,char**,char**),void*parg,char**errmsg);
其中,,前2個(gè)函數(shù)用于打開(kāi)與關(guān)閉數(shù)據(jù)庫(kù),,第3個(gè)函數(shù)sqlite3_exec()用來(lái)處理SQL查詢,此函數(shù)的第2個(gè)參數(shù)用來(lái)處理一條或多條SQL語(yǔ)句,,如果是查詢(SELECT)語(yǔ)句,,則查詢結(jié)果的每一條記錄都必須調(diào)用第3個(gè)參數(shù)的Callback函數(shù),第4個(gè)參數(shù)則為Callback函數(shù)的第一個(gè)參數(shù)指針,;如果不是查詢語(yǔ)句,,則第3、4個(gè)參數(shù)為NULL,。所有SQL執(zhí)行完畢后返回0,,否則返回錯(cuò)誤代碼,可通過(guò)第5個(gè)參數(shù)值來(lái)查看詳細(xì)錯(cuò)誤信息,。
使用sqlite3_mprintf函數(shù)將數(shù)據(jù)段的值添加到SQL語(yǔ)句中,,然后通過(guò)sqlite3_exec函數(shù)執(zhí)行該SQL語(yǔ)句把標(biāo)簽數(shù)據(jù)插入到數(shù)據(jù)庫(kù)中。
3.3 數(shù)據(jù)的訪問(wèn)操作
GoAhead WebServer是一款面向嵌入式系統(tǒng)的Web服務(wù)器,,作為系統(tǒng)中數(shù)據(jù)轉(zhuǎn)發(fā)和模塊承載平臺(tái),。向Wince系統(tǒng)中移植比較簡(jiǎn)單,在Visual C++ 6.0打開(kāi)CE子目錄下的工作空間webs.dsw,,將生成的webs.exe和所需的Web頁(yè)面導(dǎo)入WinCE系統(tǒng)中相應(yīng)位置即可,。需要注意的是:要設(shè)置計(jì)算機(jī)系統(tǒng)環(huán)境變量Path,,使其包含include和lib,確保包含CE,、UEMF,、webs和UNICODE的特征值被定義在內(nèi)。
在使用GoAhead WebServer前,需要對(duì)GoAhead WebServer進(jìn)行配置:
(1)在瀏覽器輸入地址時(shí),服務(wù)器返回某一頁(yè)面,該頁(yè)面通過(guò)在main.c文件中的initWebs函數(shù)進(jìn)行設(shè)定,設(shè)定語(yǔ)句為:
websRedirec(wp,T("index.htm"));
(2)當(dāng)瀏覽器訪問(wèn)某一地址下的目錄時(shí),服務(wù)器將返回該目錄下的缺省頁(yè)面,通過(guò)main.c文件中的websHomePageHandler函數(shù)進(jìn)行設(shè)定,,設(shè)定語(yǔ)句為:
websSetDefaultPage(T("default.asp"));
用戶在頁(yè)面對(duì)過(guò)濾規(guī)則進(jìn)行配置后,,CGI程序?qū)⑴渲媒Y(jié)果寫(xiě)入配置文件filter.conf中。在進(jìn)行數(shù)據(jù)過(guò)濾時(shí),,過(guò)濾器將會(huì)讀取此配置文件得到相應(yīng)的過(guò)濾規(guī)則對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,。
首先使用C語(yǔ)言API調(diào)用sqlite3_open()打開(kāi)數(shù)據(jù)庫(kù),然后調(diào)用sqlite3_exec()函數(shù)來(lái)執(zhí)行SQL語(yǔ)句完成對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)更新等操作,,最后執(zhí)行sqlite3_close()關(guān)閉數(shù)據(jù)庫(kù),。
通常,CGI應(yīng)用程序?qū)?zhí)行結(jié)果輸出到標(biāo)準(zhǔn)輸出(stdout),,WebServer從CGI應(yīng)用程序中的標(biāo)準(zhǔn)輸出中讀取信息,并將這些信息返回給客戶端[5],。因此,,在程序中如果要將SQL查詢結(jié)果輸出給客戶。CGI應(yīng)用程序中可以使用prinf()函數(shù)將查詢結(jié)果以HTML的形式輸出到標(biāo)準(zhǔn)輸出,,進(jìn)而Web服務(wù)器向客戶端返回動(dòng)態(tài)頁(yè)面,,這樣就實(shí)現(xiàn)了用戶、WebServer與SQLite3嵌入式數(shù)據(jù)的交互,。
通過(guò)編譯,,webs.ere最后將以操作系統(tǒng)的一個(gè)子進(jìn)程運(yùn)行,可與操作系統(tǒng)內(nèi)的其他進(jìn)程進(jìn)行通信及數(shù)據(jù)傳輸,,從而實(shí)現(xiàn)操作系統(tǒng)內(nèi)部程序間的相互交互作用,。
本文研究了針對(duì)裝備信息的RFID數(shù)據(jù)結(jié)構(gòu)模型,使用SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)標(biāo)簽數(shù)據(jù)的存儲(chǔ),、過(guò)濾,,并設(shè)計(jì)了簡(jiǎn)單易用的Web界面,只需通過(guò)瀏覽器進(jìn)行簡(jiǎn)單的操作,,就可完成對(duì)過(guò)濾規(guī)則的設(shè)置以及與數(shù)據(jù)的交互等功能,。今后的工作是進(jìn)行更多的頁(yè)面優(yōu)化設(shè)計(jì),將使其更加有實(shí)際應(yīng)用價(jià)值,。
參考文獻(xiàn)
[1] ALFONSI B J.Privacy debat centers on radio frequency identification[J].Security & Privacy Magazine,,IEEE,2004,,2(2):12.
[2] 王霞.RFID數(shù)據(jù)存儲(chǔ)和管理技術(shù)綜述[J].計(jì)算機(jī)應(yīng)用與軟件,,2008,,25(12):173-176.
[3] PLATTNER H.A common database approach for oltp and olap using an in-memory column database[C]. In Proceedings of the 35th SIGMOD International Conference on Management of Data,SIGMOD,,09,,NewYork,NY,,USA,,ACM.2009:1-2.
[4] 喻劍.RFID中間件關(guān)鍵技術(shù)研究[D].廣州:華南理工大學(xué),2009.
[5] 張曦瑛,,柴志雷.嵌入式Web服務(wù)器中CGI的特點(diǎn)及實(shí)現(xiàn)[J].小型微型計(jì)算機(jī)系統(tǒng),,2003,24(11):47-48.