摘要:針對(duì)當(dāng)前高校中機(jī)房管理的現(xiàn)狀,提出了一種新的管理方法,利用USB接口實(shí)現(xiàn)公共機(jī)房的無人化管理。為了實(shí)現(xiàn)無人化管理,首先設(shè)計(jì)一塊基于USB接口的智能上機(jī)卡,然后設(shè)計(jì)出該設(shè)備在PC機(jī)上的驅(qū)動(dòng)程序。在此基礎(chǔ)上,設(shè)計(jì)出在PC機(jī)上管理和使用該設(shè)備的監(jiān)控程序以及管理程序。文章著重討論了上機(jī)卡的硬件設(shè)計(jì)和上機(jī)卡內(nèi)部的固件程序設(shè)計(jì)。
關(guān)鍵詞:USB接口;公共機(jī)房管理;USB設(shè)備;USB固件程序;EEPROM
0引言
當(dāng)前,公共機(jī)房管理分為有人管理和無人管理兩大類。無人管理的方式主要有以下兩種:
lc卡控制方式。Ic卡控制系統(tǒng)是在每臺(tái)計(jì)算機(jī)上加一個(gè)Ic卡控制模塊,使用者在使用計(jì)算機(jī)的時(shí)候,必須將Ic卡插入控制模塊,下機(jī)的時(shí)候拔卡。這種方式穩(wěn)定性好、連續(xù)性高。但是成本高,因?yàn)橐黾右粋€(gè)IC卡控制模塊;PC機(jī)負(fù)擔(dān)加重,因?yàn)橛?jì)費(fèi)是通過PC機(jī)進(jìn)行的;且卡內(nèi)信息可能會(huì)被人修改,安全性差。
網(wǎng)絡(luò)計(jì)費(fèi)服務(wù)方式。網(wǎng)絡(luò)計(jì)費(fèi)服務(wù)方式的機(jī)房管理系統(tǒng)是用戶在上機(jī)時(shí)輸入用戶名和密碼,驗(yàn)證身份后上機(jī),下機(jī)時(shí)根據(jù)上機(jī)和下機(jī)的時(shí)間差記費(fèi)。這種方式實(shí)質(zhì)上依靠—個(gè)網(wǎng)絡(luò)計(jì)費(fèi)數(shù)據(jù)庫,安全性不好,而網(wǎng)絡(luò)不通時(shí)無法進(jìn)行上機(jī)計(jì)費(fèi)服務(wù)。
針對(duì)上述情況,本文提出了利用USB接口進(jìn)行無人化管理的方法:利用當(dāng)前PC機(jī)都具有的USB接口,設(shè)計(jì)出可以自動(dòng)管理上機(jī)計(jì)費(fèi)服務(wù)的USB設(shè)備,實(shí)現(xiàn)機(jī)房的自動(dòng)管理。這種USB設(shè)備,稱為USB上機(jī)卡。
1上機(jī)卡的使用方法
在本系統(tǒng)中,用戶的所有相關(guān)信息存放在自己的卡里,而且這個(gè)卡和PC機(jī)的接口是USB接口,故稱USB上機(jī)卡。USB接口是PC機(jī)本身就有的,不需要額外的設(shè)備。
將用戶的費(fèi)用計(jì)算等處理由USB上機(jī)卡本身實(shí)現(xiàn),這樣,既減輕了PC機(jī)的負(fù)擔(dān),又可以防止某些使用者更改PC機(jī)程序和數(shù)據(jù)。而且,由于USB接口本身可以提供電源,所以,USB上機(jī)卡不需要額外的電源。
使用USB上機(jī)卡的上機(jī)流程如圖l所示。
系統(tǒng)功能結(jié)構(gòu)如圖2所示。其中,系統(tǒng)管理、卡務(wù)管理和統(tǒng)計(jì)查詢模塊由一臺(tái)管理機(jī)負(fù)責(zé)。管理機(jī)無須和用戶機(jī)相連接,即管理員不用去管學(xué)生何時(shí)上下機(jī),因?yàn)橛涗浬舷聶C(jī)時(shí)間和計(jì)費(fèi)處理全部由上機(jī)卡自動(dòng)完成。管理員也不用擔(dān)心使用者逃費(fèi)問題,因?yàn)橹挥挟?dāng)使用者將上機(jī)卡插入U(xiǎn)SB接口且卡內(nèi)余額大于下限值時(shí),鍵盤、鼠標(biāo)才處于可用狀態(tài),否則鍵盤和鼠標(biāo)處于加鎖狀態(tài)。在PC機(jī)端只要安裝一個(gè)小的監(jiān)控程序即可,該監(jiān)控程序主要用于檢測上機(jī)卡與計(jì)算機(jī)的連接情況、卡內(nèi)余額是否大于下限值,對(duì)鍵盤和鼠標(biāo)進(jìn)行加鎖或解鎖。當(dāng)使用者開始上機(jī)后,上機(jī)卡記錄開始上機(jī)的時(shí)間,之后則每隔一段時(shí)間刷新一次卡內(nèi)余額和機(jī)時(shí)數(shù)(即本次上機(jī)時(shí)間數(shù),以分鐘為單位)。如果使用者強(qiáng)行關(guān)閉監(jiān)控程序,PC機(jī)會(huì)立刻重啟,又重新運(yùn)行監(jiān)控程序。
2硬件設(shè)計(jì)原理
上機(jī)卡使用USB接口和PC機(jī)或收費(fèi)使用的工具相連,所以上機(jī)卡本身就是一個(gè)USB設(shè)備。它必須包含一個(gè)具有USB設(shè)備接口功能的芯片。同時(shí),上機(jī)卡本身有一定的處理能力。因?yàn)樘幚聿粫?huì)太復(fù)雜,所以,它只需擁有一個(gè)8位的單片機(jī)就足夠了。上機(jī)卡還必須能保存一些數(shù)據(jù),做到掉電不丟失。由于數(shù)據(jù)量不大,使用一個(gè)EEPROM就可以了。整個(gè)上機(jī)卡的硬件原理圖如圖3所示。
圖3中,P89C52是一個(gè)8位的單片機(jī),是上機(jī)卡的核心芯片,用于各種信息的處理。P89C52是一個(gè)標(biāo)準(zhǔn)的80C52型單片機(jī),包含了片內(nèi)256個(gè)字節(jié)RAM,64K的FLASH,固件程序完全可以設(shè)置在芯片內(nèi)部,不需要額外的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,可以簡化整個(gè)電路設(shè)計(jì),還可以節(jié)約功耗。
CAT24WC64是一個(gè)64Kb的EEPROM,主要是存儲(chǔ)用戶的信息。單片機(jī)從CAT24WC64中讀出數(shù)據(jù),將處理過的信息存回CAT24WC64。CAT24WC64是一個(gè)擁有FC從設(shè)備功能的器件。在這里,將單片機(jī)的P1.0和P1.1這兩個(gè)引腳作為SDA和SCL線和CAT24WC64進(jìn)行數(shù)據(jù)交換。12C總線和EEPROM的使用可參考文獻(xiàn)。
D12是菲利浦公司生產(chǎn)的PDIUSBDl2產(chǎn)品的簡稱,它被用作USB接口。PDIUSBDl2完全符合USBI.1的規(guī)范。它通過8根數(shù)據(jù)線和單片機(jī)相連,用于和單片機(jī)交換數(shù)據(jù)。關(guān)于PDIUSBDl2的使用,可以參考文獻(xiàn)[2,3]。
由于USB接口本身可以提供電源,上機(jī)卡不需要另外的電源。
3上機(jī)卡的固件程序設(shè)計(jì)
智能卡的固件程序主要分三個(gè)模塊:USB基本功能實(shí)現(xiàn)模塊,EEPROM的訪問模塊,卡的計(jì)費(fèi)管理模塊。其中前兩個(gè)模塊是獨(dú)立的,而第三個(gè)模塊的實(shí)現(xiàn)依賴于前兩個(gè)模塊,如圖4。
3.1 USB基本功能實(shí)現(xiàn)模塊
USB基本功能模塊利用D12接口芯片的功能,完成USB設(shè)備的一些基本功能。比如USB接口初始化,USB設(shè)備的地址獲取,和主機(jī)配合完成枚舉功能、和主機(jī)側(cè)的數(shù)據(jù)傳送等。這部分程序比較復(fù)雜,感興趣的讀者可以參看和D12編程有關(guān)的資料(文獻(xiàn)[3])。由于本系統(tǒng)的USB數(shù)據(jù)傳送不需要同步數(shù)據(jù)傳送方式,所以模塊的功能可以簡化。
3.2 EEPROM訪問模塊
在本系統(tǒng)中,采用軟件的方法來生成I℃的時(shí)序,從而達(dá)到控制EEPROM的目的。
這個(gè)模塊主要有以下函數(shù)構(gòu)成:起動(dòng)總線函數(shù)、結(jié)束總線函數(shù)、字節(jié)數(shù)據(jù)發(fā)送函數(shù)、字節(jié)數(shù)據(jù)接收函數(shù)、應(yīng)答函數(shù)、向EEPROM特定地址發(fā)送單字節(jié)函數(shù)、向EEPROM發(fā)送多字節(jié)數(shù)據(jù)函數(shù)、從EEPROM特定地址讀單字節(jié)數(shù)據(jù)函數(shù)、從EEPROM讀多字節(jié)數(shù)據(jù)函數(shù)。
通過這九個(gè)函數(shù),就可以實(shí)現(xiàn)對(duì)EEPROM任意地址的所有讀寫操作了。關(guān)于這些函數(shù)的實(shí)現(xiàn)原理可以參考相關(guān)文獻(xiàn)。
3.3計(jì)費(fèi)管理模塊
3.3.1計(jì)費(fèi)管理模塊的功能實(shí)現(xiàn)
計(jì)費(fèi)管理在前面兩個(gè)模塊的基礎(chǔ)上,實(shí)現(xiàn)了對(duì)用戶上機(jī)的計(jì)費(fèi)管理。其功能分為以下幾個(gè)部分。
上機(jī)卡的卡號(hào)設(shè)置:主機(jī)向上機(jī)卡發(fā)送6個(gè)字節(jié)的數(shù)據(jù),這六個(gè)字節(jié)是新卡號(hào)。得到新卡號(hào)后,要對(duì)卡號(hào)的有效性進(jìn)行判斷。如果無效則向主機(jī)返回?zé)o效命令。如果有效,就向EEPROM的卡號(hào)信息區(qū)寫入新的卡號(hào),然后應(yīng)答主機(jī)。
卡號(hào)的正確性按下面規(guī)則判斷??ㄌ?hào)總共有六個(gè)字節(jié),假設(shè)為a[0l-a[5],其中a[0la[1]的值是可以任意的,可以認(rèn)為是序列值。假設(shè)a[0]a[1]形成了一個(gè)字整數(shù)A,a[21~a[5]形成了一個(gè)雙字整數(shù)B,判斷B是否為k2*A2+kl*Al+k0 mod 2,其中l(wèi)(2和k1和k0都是小于2的整數(shù)常數(shù)。如果正確,說明卡號(hào)是正確的,否則有錯(cuò)誤。主機(jī)傳送卡號(hào)的時(shí)候,也應(yīng)該用這種方法生成a[21-a[5]這四個(gè)字節(jié)。
上機(jī)卡的卡號(hào)獲?。荷蠙C(jī)卡接收到卡號(hào)獲取請(qǐng)求后,本模塊從EEPROM中讀出卡號(hào),放入一個(gè)六字節(jié)的數(shù)組中。然后通過USB接口,向PC機(jī)發(fā)送一個(gè)應(yīng)答數(shù)據(jù)包,其內(nèi)容就是這個(gè)六個(gè)字節(jié)的卡號(hào)。
計(jì)時(shí)服務(wù)啟動(dòng):當(dāng)上機(jī)卡得到一個(gè)請(qǐng)求計(jì)時(shí)服務(wù)事件請(qǐng)求后,首先判斷該請(qǐng)求中是否有一個(gè)特定的服務(wù)號(hào),如果沒有就按出錯(cuò)處理。進(jìn)入服務(wù)啟動(dòng),延遲五分鐘后,建立一條上機(jī)記錄,共七個(gè)字節(jié)。三個(gè)字節(jié)表示日期,兩個(gè)字節(jié)表示上機(jī)時(shí)間,兩個(gè)字節(jié)表示下機(jī)時(shí)間,這時(shí),兩個(gè)時(shí)間同為當(dāng)前時(shí)間,時(shí)間以分為單位。然后從EEPROM中獲取剩余金額和費(fèi)率,并從剩余金額中減去費(fèi)率值,再啟動(dòng)一個(gè)定時(shí)器,給主機(jī)一個(gè)應(yīng)答。
上機(jī)計(jì)費(fèi)功能:當(dāng)計(jì)時(shí)服務(wù)的定時(shí)器啟動(dòng)后,每隔15分鐘就從剩余金額中減去費(fèi)率值,并更新當(dāng)前新增的上機(jī)記錄中的下機(jī)時(shí)間。如果剩余金額小于等于O,就用特定指令切斷USB接口的軟連接。而對(duì)于主機(jī)來說,切斷軟連接等于是從主機(jī)中將卡拔出。
通過上面兩個(gè)功能的分析,可以發(fā)現(xiàn)上機(jī)卡的計(jì)費(fèi)規(guī)則如下:上機(jī)不足五分鐘的不收費(fèi)。五分鐘后以每一刻鐘為單位進(jìn)行收費(fèi),不足一刻鐘按照一刻鐘計(jì)算。
15分鐘定時(shí)很長,直接在定時(shí)器上設(shè)置這么長的定時(shí)是不可能的。這里給定時(shí)器設(shè)置的定時(shí)長度是10毫秒,然后在定時(shí)器中斷處理程序中設(shè)置一個(gè)初始為0的計(jì)數(shù)器,每次中斷計(jì)數(shù)器加1,當(dāng)計(jì)數(shù)器等于90000時(shí),就認(rèn)為是過了15分鐘。
停止計(jì)時(shí)功能:上機(jī)卡得到一個(gè)主機(jī)發(fā)來的停止計(jì)時(shí)服務(wù)的要求,就將已經(jīng)啟動(dòng)的定時(shí)器停止,然后向主機(jī)發(fā)送應(yīng)答。
充值功能:當(dāng)上機(jī)卡從主機(jī)得到一個(gè)申請(qǐng)充值請(qǐng)求的數(shù)據(jù)包時(shí),就啟動(dòng)一個(gè)充值服務(wù)過程,判斷該數(shù)據(jù)是否合法。判斷的依據(jù)是這個(gè)數(shù)據(jù)包長度必須是三個(gè)字節(jié),且第三個(gè)字節(jié)是卡號(hào)的第二個(gè)字節(jié)。如果合法,就讀取原有的金額再加上新充值的金額,并將新的金額寫入EEPROM中剩余金額數(shù)據(jù)區(qū)。
不論是充值服務(wù)還是上機(jī)計(jì)費(fèi)的過程中,上機(jī)卡可能和主機(jī)突然失去連接并掉電,這樣向EEPROM寫數(shù)據(jù)會(huì)發(fā)生錯(cuò)誤,而這種錯(cuò)誤會(huì)讓卡內(nèi)的金額變得不可捉摸,結(jié)果可能是災(zāi)難性的。所以,這里用了兩個(gè)備用剩余金額數(shù)據(jù)區(qū)的方法來解決這個(gè)問題。
上機(jī)卡向EEPROM寫新的剩余金額數(shù)據(jù)的方法是,將新的金額按順序?qū)懭隕EPROM中備用剩余金額數(shù)據(jù)區(qū)l,備用剩余金額數(shù)據(jù)區(qū)2和剩余金額數(shù)據(jù)區(qū),然后將EEPROM中備用剩余金額數(shù)據(jù)區(qū)1和2清O。這里的備用剩余金額數(shù)據(jù)區(qū)l和2在正常情況下都是0。
剩余金額數(shù)據(jù)恢復(fù)功能:如上所述,由于會(huì)發(fā)生寫數(shù)據(jù)錯(cuò)誤,所以在每次上機(jī)卡插入主機(jī)后,自動(dòng)進(jìn)行一次剩余金額數(shù)據(jù)恢復(fù)的操作。充值后,也應(yīng)該進(jìn)行一次這樣的操作。實(shí)現(xiàn)這個(gè)功能的原理是,從EEPROM將剩余金額數(shù)據(jù)和備用剩余金額數(shù)據(jù)1和備用剩余金額數(shù)據(jù)2讀出,如果備用剩余金額數(shù)據(jù)1和備用剩余金額數(shù)據(jù)2數(shù)據(jù)相等且不是0,就將備用剩余金額數(shù)據(jù)l的值寫入剩余金額數(shù)據(jù)區(qū),否則剩余金額數(shù)據(jù)不變。最后將備用剩余金額數(shù)據(jù)區(qū)l和備用剩余金額數(shù)據(jù)區(qū)2清0。
向管理主機(jī)傳送上機(jī)記錄功能:上機(jī)卡向管理主機(jī)傳送所有的上機(jī)記錄,傳送結(jié)束后,將所有記錄清0。傳送記錄的過程是先傳送記錄數(shù),后按順序?qū)⑺杏涗浺粭l一條傳送給管理主機(jī)。
3.3.2計(jì)費(fèi)管理模塊和主機(jī)的通信設(shè)計(jì)
計(jì)費(fèi)管理模塊利用USB接口和主機(jī)進(jìn)行數(shù)據(jù)通信,根據(jù)和主機(jī)的通信內(nèi)容,執(zhí)行特定的過程,以完成上述功能。整個(gè)模塊可以按一個(gè)簡單的數(shù)據(jù)包接收事件驅(qū)動(dòng)機(jī)制來設(shè)計(jì)。
所有通信都是主機(jī)主動(dòng)發(fā)起的,上機(jī)卡只進(jìn)行應(yīng)答。主機(jī)在規(guī)定時(shí)間內(nèi)收不到應(yīng)答,就認(rèn)為這次操作失敗。主機(jī)發(fā)送給上機(jī)卡的數(shù)據(jù)包的第一個(gè)字節(jié)表明了這個(gè)數(shù)據(jù)包的類型,稱為事件號(hào)。根據(jù)整個(gè)模塊的功能,事件號(hào)有如下幾種:
獲取卡號(hào)請(qǐng)求事件對(duì)應(yīng)的數(shù)據(jù)包沒有內(nèi)容。應(yīng)答信息中包含六個(gè)字節(jié)的卡號(hào)。
設(shè)置卡號(hào)請(qǐng)求事件對(duì)應(yīng)的數(shù)據(jù)包有六個(gè)字節(jié),用來表示卡號(hào)。應(yīng)答信息中不包含數(shù)據(jù)。
請(qǐng)求計(jì)時(shí)服務(wù)事件對(duì)應(yīng)的數(shù)據(jù)包是六個(gè)字節(jié),第一個(gè)字節(jié)表示計(jì)時(shí)服務(wù)號(hào),后五個(gè)字節(jié)表示當(dāng)前日期和時(shí)間,分為單位。應(yīng)答信息中不包含數(shù)據(jù)。
停止計(jì)時(shí)服務(wù)事件對(duì)應(yīng)的數(shù)據(jù)包是一個(gè)字節(jié),表示計(jì)時(shí)服務(wù)號(hào)。應(yīng)答信息中不包含數(shù)據(jù)。
設(shè)置計(jì)時(shí)服務(wù)費(fèi)車事件對(duì)應(yīng)的數(shù)據(jù)包是兩個(gè)字節(jié),第一個(gè)字節(jié)表示計(jì)時(shí)服務(wù)號(hào),第二個(gè)字節(jié)表示該項(xiàng)服務(wù)每15分鐘所消費(fèi)金額,單位是角。應(yīng)答信息中不包含數(shù)據(jù)。
獲取計(jì)時(shí)費(fèi)率事件對(duì)應(yīng)的數(shù)據(jù)包是一個(gè)字節(jié),表示計(jì)時(shí)服務(wù)號(hào)。應(yīng)答信息中包含一個(gè)字節(jié)的費(fèi)率數(shù)據(jù)。
充值事件對(duì)應(yīng)的數(shù)據(jù)包是三個(gè)字節(jié),頭兩個(gè)字節(jié)表示新增加的金額數(shù),單位是角,第三個(gè)字節(jié)必須是卡號(hào)的第二個(gè)字節(jié),否則,本次充值會(huì)被上機(jī)卡拒絕。應(yīng)答信息中不包含數(shù)據(jù)。
剩余金額數(shù)據(jù)恢復(fù)功能事件主機(jī)發(fā)送這個(gè)類型的數(shù)據(jù)包來同步主備余額區(qū)。數(shù)據(jù)包沒有內(nèi)容,應(yīng)答信息中不包含數(shù)據(jù)。
獲取當(dāng)前剩余金額事件對(duì)應(yīng)的數(shù)據(jù)包沒有內(nèi)容。應(yīng)答信息中包含兩個(gè)字節(jié)的剩余金額數(shù)據(jù)。
獲取上機(jī)記錄數(shù)事件 用戶每次上機(jī),卡上都有一個(gè)記錄,這些記錄可以被管理主機(jī)獲取。對(duì)應(yīng)的數(shù)據(jù)包沒有內(nèi)容。應(yīng)答信息中包含兩個(gè)字節(jié)用來表示到目前為止上機(jī)的記錄數(shù)。
獲取特定上機(jī)記錄事件對(duì)應(yīng)的數(shù)據(jù)包兩個(gè)字節(jié),用來表示第幾條記錄(0開始)。應(yīng)答信息是當(dāng)前記錄的內(nèi)容,長度是七個(gè)字節(jié)。
3.3.3計(jì)費(fèi)管理模塊的數(shù)據(jù)結(jié)構(gòu)
計(jì)費(fèi)管理模塊所涉及的很多數(shù)據(jù)都要保留在EEPROM中,做到掉電不丟失。每個(gè)數(shù)據(jù)都對(duì)應(yīng)EEPROM中的—個(gè)數(shù)據(jù)區(qū),這些數(shù)據(jù)區(qū)包括:
卡號(hào)數(shù)據(jù)區(qū)六個(gè)字節(jié),表示本卡的卡號(hào)。
服務(wù)費(fèi)率數(shù)據(jù)區(qū) 一個(gè)字節(jié),表明了當(dāng)前上機(jī)服務(wù)中,單位時(shí)間的收費(fèi)標(biāo)準(zhǔn),以角為單位。時(shí)間單位是一刻鐘。
剩余金額數(shù)據(jù)區(qū)兩個(gè)字節(jié),表明本卡所剩的金額數(shù)值,單位是角。
備用剩余金額數(shù)據(jù)區(qū)1和備用剩余金額數(shù)據(jù)區(qū)2都是兩個(gè)字節(jié),用來作為剩余金額數(shù)據(jù)區(qū)的備份。
當(dāng)前上機(jī)記錄數(shù)據(jù)區(qū) 兩個(gè)字節(jié),表明當(dāng)前在EEPROM中,有多少條上機(jī)記錄。
所有上機(jī)記錄的數(shù)據(jù)區(qū)共7000個(gè)字節(jié),每條記錄是7個(gè)字節(jié),最多可以有1000條記錄。由于這個(gè)數(shù)據(jù)區(qū)的初始地址是固定的,每條記錄的長度固定,所有記錄是連續(xù)的,所以,只要知道一條記錄的順序號(hào),很容易獲得該條記錄的數(shù)據(jù)。主機(jī)通過獲取當(dāng)前上機(jī)記錄數(shù),然后按順序獲取所有的記錄,以供管理之用。
4結(jié)束語
本文說明了上機(jī)卡的硬件和軟件設(shè)計(jì)原理。根據(jù)這些原理,可以比較方便地在PC機(jī)上開發(fā)出使用該上機(jī)卡的驅(qū)動(dòng)程序。這個(gè)驅(qū)動(dòng)程序是一個(gè)USB設(shè)備的驅(qū)動(dòng)程序。關(guān)于USB設(shè)備的驅(qū)動(dòng)程序的設(shè)計(jì)開發(fā)請(qǐng)參考文獻(xiàn)[3]。在此基礎(chǔ)上再開發(fā)出在主機(jī)上使用的管理和監(jiān)控的程序,就可以使用本卡了。
(注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。)