摘要:針對當前高校中機房管理的現(xiàn)狀,提出了一種新的管理方法,利用USB接口實現(xiàn)公共機房的無人化管理。為了實現(xiàn)無人化管理,首先設計一塊基于USB接口的智能上機卡,然后設計出該設備在PC機上的驅動程序。在此基礎上,設計出在PC機上管理和使用該設備的監(jiān)控程序以及管理程序。文章著重討論了上機卡的硬件設計和上機卡內部的固件程序設計。
關鍵詞:USB接口;公共機房管理;USB設備;USB固件程序;EEPROM
0引言
當前,公共機房管理分為有人管理和無人管理兩大類。無人管理的方式主要有以下兩種:
lc卡控制方式。Ic卡控制系統(tǒng)是在每臺計算機上加一個Ic卡控制模塊,使用者在使用計算機的時候,必須將Ic卡插入控制模塊,下機的時候拔卡。這種方式穩(wěn)定性好、連續(xù)性高。但是成本高,因為要增加一個IC卡控制模塊;PC機負擔加重,因為計費是通過PC機進行的;且卡內信息可能會被人修改,安全性差。
網(wǎng)絡計費服務方式。網(wǎng)絡計費服務方式的機房管理系統(tǒng)是用戶在上機時輸入用戶名和密碼,驗證身份后上機,下機時根據(jù)上機和下機的時間差記費。這種方式實質上依靠—個網(wǎng)絡計費數(shù)據(jù)庫,安全性不好,而網(wǎng)絡不通時無法進行上機計費服務。
針對上述情況,本文提出了利用USB接口進行無人化管理的方法:利用當前PC機都具有的USB接口,設計出可以自動管理上機計費服務的USB設備,實現(xiàn)機房的自動管理。這種USB設備,稱為USB上機卡。
1上機卡的使用方法
在本系統(tǒng)中,用戶的所有相關信息存放在自己的卡里,而且這個卡和PC機的接口是USB接口,故稱USB上機卡。USB接口是PC機本身就有的,不需要額外的設備。

將用戶的費用計算等處理由USB上機卡本身實現(xiàn),這樣,既減輕了PC機的負擔,又可以防止某些使用者更改PC機程序和數(shù)據(jù)。而且,由于USB接口本身可以提供電源,所以,USB上機卡不需要額外的電源。
使用USB上機卡的上機流程如圖l所示。
系統(tǒng)功能結構如圖2所示。其中,系統(tǒng)管理、卡務管理和統(tǒng)計查詢模塊由一臺管理機負責。管理機無須和用戶機相連接,即管理員不用去管學生何時上下機,因為記錄上下機時間和計費處理全部由上機卡自動完成。管理員也不用擔心使用者逃費問題,因為只有當使用者將上機卡插入USB接口且卡內余額大于下限值時,鍵盤、鼠標才處于可用狀態(tài),否則鍵盤和鼠標處于加鎖狀態(tài)。在PC機端只要安裝一個小的監(jiān)控程序即可,該監(jiān)控程序主要用于檢測上機卡與計算機的連接情況、卡內余額是否大于下限值,對鍵盤和鼠標進行加鎖或解鎖。當使用者開始上機后,上機卡記錄開始上機的時間,之后則每隔一段時間刷新一次卡內余額和機時數(shù)(即本次上機時間數(shù),以分鐘為單位)。如果使用者強行關閉監(jiān)控程序,PC機會立刻重啟,又重新運行監(jiān)控程序。
2硬件設計原理
上機卡使用USB接口和PC機或收費使用的工具相連,所以上機卡本身就是一個USB設備。它必須包含一個具有USB設備接口功能的芯片。同時,上機卡本身有一定的處理能力。因為處理不會太復雜,所以,它只需擁有一個8位的單片機就足夠了。上機卡還必須能保存一些數(shù)據(jù),做到掉電不丟失。由于數(shù)據(jù)量不大,使用一個EEPROM就可以了。整個上機卡的硬件原理圖如圖3所示。
圖3中,P89C52是一個8位的單片機,是上機卡的核心芯片,用于各種信息的處理。P89C52是一個標準的80C52型單片機,包含了片內256個字節(jié)RAM,64K的FLASH,固件程序完全可以設置在芯片內部,不需要額外的程序存儲器和數(shù)據(jù)存儲器,可以簡化整個電路設計,還可以節(jié)約功耗。
CAT24WC64是一個64Kb的EEPROM,主要是存儲用戶的信息。單片機從CAT24WC64中讀出數(shù)據(jù),將處理過的信息存回CAT24WC64。CAT24WC64是一個擁有FC從設備功能的器件。在這里,將單片機的P1.0和P1.1這兩個引腳作為SDA和SCL線和CAT24WC64進行數(shù)據(jù)交換。12C總線和EEPROM的使用可參考文獻。
D12是菲利浦公司生產的PDIUSBDl2產品的簡稱,它被用作USB接口。PDIUSBDl2完全符合USBI.1的規(guī)范。它通過8根數(shù)據(jù)線和單片機相連,用于和單片機交換數(shù)據(jù)。關于PDIUSBDl2的使用,可以參考文獻[2,3]。
由于USB接口本身可以提供電源,上機卡不需要另外的電源。
3上機卡的固件程序設計
智能卡的固件程序主要分三個模塊:USB基本功能實現(xiàn)模塊,EEPROM的訪問模塊,卡的計費管理模塊。其中前兩個模塊是獨立的,而第三個模塊的實現(xiàn)依賴于前兩個模塊,如圖4。

3.1 USB基本功能實現(xiàn)模塊
USB基本功能模塊利用D12接口芯片的功能,完成USB設備的一些基本功能。比如USB接口初始化,USB設備的地址獲取,和主機配合完成枚舉功能、和主機側的數(shù)據(jù)傳送等。這部分程序比較復雜,感興趣的讀者可以參看和D12編程有關的資料(文獻[3])。由于本系統(tǒng)的USB數(shù)據(jù)傳送不需要同步數(shù)據(jù)傳送方式,所以模塊的功能可以簡化。
3.2 EEPROM訪問模塊
在本系統(tǒng)中,采用軟件的方法來生成I℃的時序,從而達到控制EEPROM的目的。
這個模塊主要有以下函數(shù)構成:起動總線函數(shù)、結束總線函數(shù)、字節(jié)數(shù)據(jù)發(fā)送函數(shù)、字節(jié)數(shù)據(jù)接收函數(shù)、應答函數(shù)、向EEPROM特定地址發(fā)送單字節(jié)函數(shù)、向EEPROM發(fā)送多字節(jié)數(shù)據(jù)函數(shù)、從EEPROM特定地址讀單字節(jié)數(shù)據(jù)函數(shù)、從EEPROM讀多字節(jié)數(shù)據(jù)函數(shù)。
通過這九個函數(shù),就可以實現(xiàn)對EEPROM任意地址的所有讀寫操作了。關于這些函數(shù)的實現(xiàn)原理可以參考相關文獻。
3.3計費管理模塊
3.3.1計費管理模塊的功能實現(xiàn)
計費管理在前面兩個模塊的基礎上,實現(xiàn)了對用戶上機的計費管理。其功能分為以下幾個部分。
上機卡的卡號設置:主機向上機卡發(fā)送6個字節(jié)的數(shù)據(jù),這六個字節(jié)是新卡號。得到新卡號后,要對卡號的有效性進行判斷。如果無效則向主機返回無效命令。如果有效,就向EEPROM的卡號信息區(qū)寫入新的卡號,然后應答主機。
卡號的正確性按下面規(guī)則判斷。卡號總共有六個字節(jié),假設為a[0l-a[5],其中a[0la[1]的值是可以任意的,可以認為是序列值。假設a[0]a[1]形成了一個字整數(shù)A,a[21~a[5]形成了一個雙字整數(shù)B,判斷B是否為k2*A2+kl*Al+k0 mod 2,其中l(wèi)(2和k1和k0都是小于2的整數(shù)常數(shù)。如果正確,說明卡號是正確的,否則有錯誤。主機傳送卡號的時候,也應該用這種方法生成a[21-a[5]這四個字節(jié)。
上機卡的卡號獲取:上機卡接收到卡號獲取請求后,本模塊從EEPROM中讀出卡號,放入一個六字節(jié)的數(shù)組中。然后通過USB接口,向PC機發(fā)送一個應答數(shù)據(jù)包,其內容就是這個六個字節(jié)的卡號。
計時服務啟動:當上機卡得到一個請求計時服務事件請求后,首先判斷該請求中是否有一個特定的服務號,如果沒有就按出錯處理。進入服務啟動,延遲五分鐘后,建立一條上機記錄,共七個字節(jié)。三個字節(jié)表示日期,兩個字節(jié)表示上機時間,兩個字節(jié)表示下機時間,這時,兩個時間同為當前時間,時間以分為單位。然后從EEPROM中獲取剩余金額和費率,并從剩余金額中減去費率值,再啟動一個定時器,給主機一個應答。
上機計費功能:當計時服務的定時器啟動后,每隔15分鐘就從剩余金額中減去費率值,并更新當前新增的上機記錄中的下機時間。如果剩余金額小于等于O,就用特定指令切斷USB接口的軟連接。而對于主機來說,切斷軟連接等于是從主機中將卡拔出。
通過上面兩個功能的分析,可以發(fā)現(xiàn)上機卡的計費規(guī)則如下:上機不足五分鐘的不收費。五分鐘后以每一刻鐘為單位進行收費,不足一刻鐘按照一刻鐘計算。
15分鐘定時很長,直接在定時器上設置這么長的定時是不可能的。這里給定時器設置的定時長度是10毫秒,然后在定時器中斷處理程序中設置一個初始為0的計數(shù)器,每次中斷計數(shù)器加1,當計數(shù)器等于90000時,就認為是過了15分鐘。
停止計時功能:上機卡得到一個主機發(fā)來的停止計時服務的要求,就將已經(jīng)啟動的定時器停止,然后向主機發(fā)送應答。
充值功能:當上機卡從主機得到一個申請充值請求的數(shù)據(jù)包時,就啟動一個充值服務過程,判斷該數(shù)據(jù)是否合法。判斷的依據(jù)是這個數(shù)據(jù)包長度必須是三個字節(jié),且第三個字節(jié)是卡號的第二個字節(jié)。如果合法,就讀取原有的金額再加上新充值的金額,并將新的金額寫入EEPROM中剩余金額數(shù)據(jù)區(qū)。
不論是充值服務還是上機計費的過程中,上機卡可能和主機突然失去連接并掉電,這樣向EEPROM寫數(shù)據(jù)會發(fā)生錯誤,而這種錯誤會讓卡內的金額變得不可捉摸,結果可能是災難性的。所以,這里用了兩個備用剩余金額數(shù)據(jù)區(qū)的方法來解決這個問題。
上機卡向EEPROM寫新的剩余金額數(shù)據(jù)的方法是,將新的金額按順序寫入EEPROM中備用剩余金額數(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ā)生寫數(shù)據(jù)錯誤,所以在每次上機卡插入主機后,自動進行一次剩余金額數(shù)據(jù)恢復的操作。充值后,也應該進行一次這樣的操作。實現(xiàn)這個功能的原理是,從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。
向管理主機傳送上機記錄功能:上機卡向管理主機傳送所有的上機記錄,傳送結束后,將所有記錄清0。傳送記錄的過程是先傳送記錄數(shù),后按順序將所有記錄一條一條傳送給管理主機。
3.3.2計費管理模塊和主機的通信設計
計費管理模塊利用USB接口和主機進行數(shù)據(jù)通信,根據(jù)和主機的通信內容,執(zhí)行特定的過程,以完成上述功能。整個模塊可以按一個簡單的數(shù)據(jù)包接收事件驅動機制來設計。
所有通信都是主機主動發(fā)起的,上機卡只進行應答。主機在規(guī)定時間內收不到應答,就認為這次操作失敗。主機發(fā)送給上機卡的數(shù)據(jù)包的第一個字節(jié)表明了這個數(shù)據(jù)包的類型,稱為事件號。根據(jù)整個模塊的功能,事件號有如下幾種:
獲取卡號請求事件對應的數(shù)據(jù)包沒有內容。應答信息中包含六個字節(jié)的卡號。
設置卡號請求事件對應的數(shù)據(jù)包有六個字節(jié),用來表示卡號。應答信息中不包含數(shù)據(jù)。
請求計時服務事件對應的數(shù)據(jù)包是六個字節(jié),第一個字節(jié)表示計時服務號,后五個字節(jié)表示當前日期和時間,分為單位。應答信息中不包含數(shù)據(jù)。
停止計時服務事件對應的數(shù)據(jù)包是一個字節(jié),表示計時服務號。應答信息中不包含數(shù)據(jù)。
設置計時服務費車事件對應的數(shù)據(jù)包是兩個字節(jié),第一個字節(jié)表示計時服務號,第二個字節(jié)表示該項服務每15分鐘所消費金額,單位是角。應答信息中不包含數(shù)據(jù)。
獲取計時費率事件對應的數(shù)據(jù)包是一個字節(jié),表示計時服務號。應答信息中包含一個字節(jié)的費率數(shù)據(jù)。
充值事件對應的數(shù)據(jù)包是三個字節(jié),頭兩個字節(jié)表示新增加的金額數(shù),單位是角,第三個字節(jié)必須是卡號的第二個字節(jié),否則,本次充值會被上機卡拒絕。應答信息中不包含數(shù)據(jù)。
剩余金額數(shù)據(jù)恢復功能事件主機發(fā)送這個類型的數(shù)據(jù)包來同步主備余額區(qū)。數(shù)據(jù)包沒有內容,應答信息中不包含數(shù)據(jù)。
獲取當前剩余金額事件對應的數(shù)據(jù)包沒有內容。應答信息中包含兩個字節(jié)的剩余金額數(shù)據(jù)。
獲取上機記錄數(shù)事件 用戶每次上機,卡上都有一個記錄,這些記錄可以被管理主機獲取。對應的數(shù)據(jù)包沒有內容。應答信息中包含兩個字節(jié)用來表示到目前為止上機的記錄數(shù)。
獲取特定上機記錄事件對應的數(shù)據(jù)包兩個字節(jié),用來表示第幾條記錄(0開始)。應答信息是當前記錄的內容,長度是七個字節(jié)。
3.3.3計費管理模塊的數(shù)據(jù)結構
計費管理模塊所涉及的很多數(shù)據(jù)都要保留在EEPROM中,做到掉電不丟失。每個數(shù)據(jù)都對應EEPROM中的—個數(shù)據(jù)區(qū),這些數(shù)據(jù)區(qū)包括:
卡號數(shù)據(jù)區(qū)六個字節(jié),表示本卡的卡號。
服務費率數(shù)據(jù)區(qū) 一個字節(jié),表明了當前上機服務中,單位時間的收費標準,以角為單位。時間單位是一刻鐘。
剩余金額數(shù)據(jù)區(qū)兩個字節(jié),表明本卡所剩的金額數(shù)值,單位是角。
備用剩余金額數(shù)據(jù)區(qū)1和備用剩余金額數(shù)據(jù)區(qū)2都是兩個字節(jié),用來作為剩余金額數(shù)據(jù)區(qū)的備份。
當前上機記錄數(shù)據(jù)區(qū) 兩個字節(jié),表明當前在EEPROM中,有多少條上機記錄。
所有上機記錄的數(shù)據(jù)區(qū)共7000個字節(jié),每條記錄是7個字節(jié),最多可以有1000條記錄。由于這個數(shù)據(jù)區(qū)的初始地址是固定的,每條記錄的長度固定,所有記錄是連續(xù)的,所以,只要知道一條記錄的順序號,很容易獲得該條記錄的數(shù)據(jù)。主機通過獲取當前上機記錄數(shù),然后按順序獲取所有的記錄,以供管理之用。
4結束語
本文說明了上機卡的硬件和軟件設計原理。根據(jù)這些原理,可以比較方便地在PC機上開發(fā)出使用該上機卡的驅動程序。這個驅動程序是一個USB設備的驅動程序。關于USB設備的驅動程序的設計開發(fā)請參考文獻[3]。在此基礎上再開發(fā)出在主機上使用的管理和監(jiān)控的程序,就可以使用本卡了。
(注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。)