【安防知識網(wǎng)】主要介紹一種射頻IC卡就貨場事務管理的硬件和軟件設計。硬件設計方面簡述系統(tǒng)結(jié)構(gòu);軟件方面給出了開發(fā)環(huán)境.設計架構(gòu)和關鍵代碼。數(shù)據(jù)庫服務器采用SQLServer。靈活的C/S結(jié)構(gòu)使得系統(tǒng)擴充很容易。
1、引言
如何對大型貨場中的貨物進行管理,是一個非常關鍵的問題本文介紹了一種對貨物進入貨場進行驗證和查收的解決方案。即:使用手持電腦與遠程數(shù)據(jù)服務器聯(lián)系,對貨物進行管理。
2、系統(tǒng)總體方案
本系統(tǒng)采用美國HP公司的SI850射頻識別IC卡讀寫器、HP掌上電腦、HP射頻卡、無線接收裝置、以太網(wǎng)絡開發(fā)貨場管理系統(tǒng)系統(tǒng)具有目標識別、身份驗證、數(shù)據(jù)采集、數(shù)據(jù)加密和數(shù)據(jù)庫管理的功能。系統(tǒng)由掌上電腦、與掌上電腦匹配的讀寫卡器、本地服務器、數(shù)據(jù)庫管理系統(tǒng)、掌上電腦和數(shù)據(jù)庫管理微機及本地服務器的通訊系統(tǒng)部分組成。本地主機與掌上電腦之間的通信采用TCP/IP協(xié)議。采用C/S模式。本地服務器和數(shù)據(jù)庫服務器之問用基于以太網(wǎng)的ADO接口進行數(shù)據(jù)交流。
本系統(tǒng)主要目的是對物流運輸行業(yè)中的貨場部分進行管理,當有車輛到達時。如網(wǎng)絡連通.使用車輛所帶的IC卡查詢遠程數(shù)據(jù)庫.如網(wǎng)絡不通.則讀出IC卡中的物料清單.并將貨物清單顯示在掌上電腦上.供貨場管理人員審核,如無誤.則將貨物已到貨場信息寫入數(shù)據(jù)庫服務器.并寫入IC卡.通過使用IC卡的方式.管理物流問題,具體流程如圖1所示。
[nextpage]3、系統(tǒng)硬件結(jié)構(gòu)
系統(tǒng)由遠程數(shù)據(jù)服務器,本地服務器,若干掌上電腦及讀卡器組成。如圖2所示。若干個掌上電腦通過無線通訊網(wǎng)絡與本地服務器通訊.本地服務器與遠程數(shù)據(jù)庫服務器使用以太網(wǎng)通訊。
4、軟件結(jié)構(gòu)
掌上電腦使用微軟WINCE操作系統(tǒng).該客戶端軟件使用EVC4.0為開發(fā)工具.使用PocketPC2003SDK庫.本地服務器程序使用VC6.0開發(fā).數(shù)據(jù)庫服務器使用SQLServer為數(shù)據(jù)庫平臺,通訊都采用TCP,中的面向連接的服務。其中掌上電腦與本地服務器之間通訊采用無線通訊。掌上電腦使用紅外端口。而本地服務器采用無線網(wǎng)卡。本地服務器與數(shù)據(jù)庫服務器通訊使用以太網(wǎng)。
1.掌上電腦軟件
掌上電腦軟件分為兩部份。第一部分為讀,寫卡軟件。第二部分為無線通訊部分.無線通訊與普通通訊軟件沒有任何區(qū)別,系統(tǒng)底層屏蔽了有線與無線的通訊差異,都采用WINSOCKET通訊。
(1)讀寫卡部份
HP公司提供了掌上電腦的讀寫器.并將掌上電腦安裝在其中。通過這一單元來進行卡的讀寫。編寫卡讀寫軟件時,只須將隨讀寫器一起提供的動態(tài)連接庫安裝到臺式機上,并且連接到EVC4、0的工程內(nèi)。對于此動態(tài)連接庫來說。常用的函數(shù)有四個:
第一個函數(shù)用來打開與讀寫器的連接。第一個參數(shù)為返回的句柄hCom.
第二個參數(shù)為用來通訊的端口??梢栽O為“COM1:”到“COM9”中的一個。第二個函數(shù)用來關閉打開的句柄。[nextpage]
第三個函數(shù)用來向卡中寫入一個32位整數(shù).hCom為端口句柄,word為寫入整數(shù)的地址。data為寫入的32位整形數(shù)據(jù)。標志flags一般設為0。
第四個函數(shù)用來從卡中讀人數(shù)據(jù),*data為指向讀人的整形數(shù)據(jù)的指針。word_start為讀人數(shù)據(jù)的起始地址,word_length要讀入的數(shù)據(jù)個數(shù).flags同上。使用這些函數(shù)時應按如下步驟:首先用RFIDOpen打開一個與讀寫器相連的端口.并獲得一個句柄:接著用SaharaWfitdSaharaRead讀寫卡;讀寫完畢后用RHDCIose關閉端口以釋放資源。必須注意的是打開通訊口時必須用一個循環(huán)從Com1開始向上試探。如果某個口被成功打開(返回值為scs_OK)時退出循環(huán)。另外須注意讀寫卡時可能會出錯.所以用循環(huán)讀取,如果成功則退出,否則等待100豪秒后繼續(xù)讀寫.如果讀寫循環(huán)次數(shù)用完還未成功,則寫錯誤日志并退出。
(2)通訊程序
掌上電腦通訊軟件為客戶端軟件.所以在這里主動與本地服務器通訊。遵循以下步驟:
第一根據(jù)本地服務器的IP地址和給定的端口打開一個與服務器的連接。
第二根據(jù)協(xié)議類型使用此連接向本地主機發(fā)送協(xié)議數(shù)據(jù),或從本地主機接收數(shù)據(jù)。進行數(shù)據(jù)傳輸。
第三完成流程后斷開連接.以釋放本地服務器和掌上電腦資源。
從掌上電腦打開與本地服務器的連接使用TCP/IP協(xié)議.雖然使用無線網(wǎng)卡與本地服務器通訊.由于系統(tǒng)屏蔽了無線通訊與有線通訊的差別,所以對程序員來說是透明的,無線通訊與有線通訊是一樣的接口,沒有任何區(qū)別。每次發(fā)送或接收的數(shù)據(jù)類型都是BYTE型的,所以當接收到一定數(shù)量的數(shù)據(jù)后。都將其轉(zhuǎn)換為相應的數(shù)據(jù)結(jié)構(gòu)。關鍵代碼如下:
打開連接的關鍵代碼:
以上代碼中m_psecket是Csecket派生類的對象.[nextpage]
2.本地服務器端的程序
本地服務器端的程序由以下兩功能.一是建立一個監(jiān)聽服務線程.用于接收掌上電腦端的連接請求。二是接收到掌上電腦的連接請求后。建立一個單獨的線程用于和掌上電腦進行通訊,并且和遠程服務器進行通訊。處理數(shù)據(jù)流動。
(1)監(jiān)聽服務線程
本地服務器軟件啟動后。首先建立監(jiān)聽服務線程。用于監(jiān)聽掌上電腦的連接請求.即用來啟動服務程序.在本軟件中是通過菜單來啟動的.建立一個新的線程使用函數(shù)AfxBeginThread(Re.ceiveSeivice。&data)來實現(xiàn),第一個參數(shù)為線程函數(shù)的執(zhí)行體的函數(shù)名。第二個參數(shù)為傳遞給此線程的數(shù)據(jù)結(jié)構(gòu)。用于向該線程給出一些具體的數(shù)據(jù).成功執(zhí)行此函數(shù)后.線程函數(shù)便獨立于主程序運行.直至正常退出或被異常中斷.以下是關鍵代碼:
以上代碼顯示在服務線程中接收到客戶請求后。啟動客戶線程的流程。[nextpage]
(2)客戶線程
客戶線程啟動后.根據(jù)接收到的套接字句柄建立新的套接字,與掌上電腦端進行通訊,接受協(xié)議數(shù)據(jù),根據(jù)協(xié)議數(shù)據(jù)要同遠程數(shù)據(jù)庫或掌上電腦端進行數(shù)據(jù)交流.同遠程數(shù)據(jù)庫服務器進行數(shù)據(jù)交換是采用ADO組件.以下是關鍵代碼:
3.遠程數(shù)據(jù)庫服務器
遠程數(shù)據(jù)庫服務器使用SQLServer20o0作為數(shù)據(jù)庫平臺.建立數(shù)據(jù)庫.并向本地服務器提供數(shù)據(jù)。