摘 要: 用VB" title="VB">VB" title="VB">VB開發(fā)機(jī)房計(jì)算機(jī)電源監(jiān)控系統(tǒng)的一種方案。
關(guān)鍵詞: 串行通信 單片機(jī) Visual Basic
為了能實(shí)時、高效、方便地監(jiān)控、管理機(jī)房計(jì)算機(jī)電源設(shè)備,并實(shí)現(xiàn)對機(jī)房的計(jì)算機(jī)集中監(jiān)控、少人值守的目標(biāo),本文提出了一個機(jī)房計(jì)算機(jī)電源集中監(jiān)控系統(tǒng)方案。本系統(tǒng)的目標(biāo)是:通過相關(guān)軟件、硬件的設(shè)計(jì),實(shí)現(xiàn)由1臺主機(jī)(上位機(jī))通過單片機(jī)(下位機(jī))監(jiān)控多個機(jī)房中多臺計(jì)算機(jī)的開關(guān)情況。即利用主機(jī)的監(jiān)控軟件與單片機(jī)進(jìn)行通信,以實(shí)現(xiàn)對計(jì)算機(jī)電源的監(jiān)控功能。本系統(tǒng)應(yīng)具備如下功能:
(1)通過鍵盤或鼠標(biāo)對多臺計(jì)算機(jī)進(jìn)行開關(guān)控制并對整個機(jī)房的所有計(jì)算機(jī)進(jìn)行開關(guān)狀態(tài)的檢測。
(2)上位機(jī)與下位機(jī)能進(jìn)行可靠、實(shí)時的通信。
(3)界面設(shè)計(jì)清晰,功能齊全。備有菜單及各機(jī)房的電腦分布圖,并帶有右鍵快速菜單。
(4)能根據(jù)不同機(jī)房中不同電腦臺數(shù)自動調(diào)整布局。
1 軟硬件的選取及上下位機(jī)間通信協(xié)議的定義
基于上述目標(biāo)與功能,要實(shí)現(xiàn)本系統(tǒng),首先要解決以下幾個問題:
1.1 主機(jī)與單片機(jī)之間通信信道的選取
串行通信一次只傳1個位,處理的數(shù)據(jù)電壓只有一個準(zhǔn)位,因此不容易漏失數(shù)據(jù)。如果再加上一些防范措施,數(shù)據(jù)漏失就更不容易發(fā)生了。串行通信端口(RS-232)是每部計(jì)算機(jī)上的必要配備,通常含有COM1與COM2 2個信道,一般的計(jì)算機(jī)將COM1以9 Pin的接頭接出,而以25 Pin的接頭將COM2接出。新一代的計(jì)算機(jī)均以9 Pin的接頭接出所有的RS-232通信端口。通常與計(jì)算機(jī)連接的溝通接口是RS-232,它不僅實(shí)用簡單,而且價格便宜。因此本系統(tǒng)采用RS-232串行通信方式用于上、下位機(jī)間的通信。
1.2 監(jiān)控軟件開發(fā)平臺的選取
Visual Basic是Windows環(huán)境下的一個可視化軟件開發(fā)平臺。由于開放式的結(jié)構(gòu),Visual Basic允許外掛控件,因此有更多的廠商為Visual Basic撰寫控件,供系統(tǒng)開發(fā)者選用,從而為開發(fā)者提供了更方便的系統(tǒng)開發(fā)方案。這些控件可用于設(shè)計(jì)界面和實(shí)現(xiàn)各種功能,減少了編程人員的工作量,也簡化了界面設(shè)計(jì)過程,從而有效地提高了應(yīng)用程序的運(yùn)行效率和可靠性。所以,本系統(tǒng)采用Visual Basic作為監(jiān)控軟件平臺。
MSComm是Microsoft公司提供的簡化Windows下串行通信編程的ActiveX控件。MSComm控件提供了二種處理通信的方法:事件驅(qū)動法及查詢法。
(1)事件驅(qū)動法:OnComm事件是MSComm控件提供的惟一的事件。當(dāng)有數(shù)據(jù)到達(dá)端口或端口狀態(tài)發(fā)生改變或有通信錯誤產(chǎn)生時,都將觸發(fā)OnComm事件,以捕獲和處理這些通信事件和通信中產(chǎn)生的錯誤信息。通過查詢CommEvent屬性值,可以獲得關(guān)于通信事件和通信錯誤的完整信息,進(jìn)而進(jìn)行處理。這是一種功能很強(qiáng)的處理串行口活動的方法,具有程序響應(yīng)及時、可靠性高等優(yōu)點(diǎn)。
(2)查詢法:MSComm控件的CommEvent屬性返回通信中產(chǎn)生的事件和錯誤類型,由通信控件自動檢測和跟蹤通信狀態(tài)后設(shè)置。因此,在小程序中,程序員可以在每個重要的程序功能之后通過檢查CommEvent屬性值來檢測事件和通信錯誤。本系統(tǒng)采用查詢法作為處理通信的方法。
1.3 單片機(jī)型號以及芯片的選取
單片機(jī)主要采用Intel公司MCS-51系列8031單片機(jī),并使用MCS-51匯編語言開發(fā)。
1.4 監(jiān)控軟件與單片機(jī)之間通信協(xié)議的定義
主機(jī)與單片機(jī)要進(jìn)行實(shí)時、可靠的通信,必須定義一套良好的通信協(xié)議。
本系統(tǒng)的通信參數(shù)設(shè)置如表1所示,采用的通信協(xié)議如表2所示。
其中:Roomadd:機(jī)房代碼(即單片機(jī)的地址碼),1個字節(jié),由01H開始編碼。
Command:命令碼,1個字節(jié)(命令碼的格式見表3)。
Byte count:數(shù)據(jù)長度,要監(jiān)控的計(jì)算機(jī)總數(shù)量+1(最后1幀1為校驗(yàn)幀),1個字節(jié)。
PCadd:PC編號,每個PC編號1個字節(jié),由01H開始編碼。
Checksum:算術(shù)校驗(yàn)和,1個字節(jié),是所有PC編號的算術(shù)相加后對256取模而得到的。
Cmdresponse:單片機(jī)回應(yīng)的采集數(shù)據(jù),具體格式見表4。
其中:D7為1,表示該P(yáng)C狀態(tài)為“開”;D7為0,表示該P(yáng)C狀態(tài)為“關(guān)”。PC地址由01H開始編碼。約定00H為接收成功反饋信號。
2 系統(tǒng)總體設(shè)計(jì)模塊
根據(jù)本系統(tǒng)要實(shí)現(xiàn)的功能,可以將系統(tǒng)劃分為如圖1所示的3個模塊。
2.1 監(jiān)控部分
監(jiān)控部分可以分為監(jiān)測和控制2個模塊。監(jiān)測模塊的主要功能是對整個機(jī)房的所有計(jì)算機(jī)或某幾臺計(jì)算機(jī)進(jìn)行開關(guān)狀態(tài)的檢測。主機(jī)通過串口向單片機(jī)發(fā)送監(jiān)測信號,然后根據(jù)單片機(jī)的反饋信號(即模擬的計(jì)算機(jī)開關(guān)狀態(tài)數(shù)據(jù))在界面上顯示出模擬狀態(tài)。若沒有收到單片機(jī)的反饋信號,則提示操作失敗??刂颇K的主要功能是對機(jī)房的所有計(jì)算機(jī)或某幾臺計(jì)算機(jī)進(jìn)行開/關(guān)控制。主機(jī)通過串口給單片機(jī)發(fā)開/關(guān)信號。若主機(jī)收到單片機(jī)反饋的操作成功信號,則表示操作成功,在界面上顯示對應(yīng)計(jì)算機(jī)的開/關(guān)狀態(tài)。若沒有接收到單片機(jī)的操作成功反饋信號,則提示操作失敗。
2.2 系統(tǒng)設(shè)置部分
該模塊對本系統(tǒng)進(jìn)行一些設(shè)定。如機(jī)房配置:包括機(jī)房代碼、機(jī)房名稱、機(jī)房計(jì)算機(jī)數(shù)量的設(shè)定,定時監(jiān)測時間的設(shè)定,生成報(bào)告的設(shè)定等。這些設(shè)定使系統(tǒng)能適應(yīng)不同需要,更靈活地在不同場合運(yùn)作。
2.3 歷史記錄查詢管理部分
該模塊的主要功能是記錄每間機(jī)房中所有計(jì)算機(jī)的開機(jī)、關(guān)機(jī)時間,并提供查詢功能,使管理人員知道某臺計(jì)算機(jī)開關(guān)時間及在某一時刻某臺計(jì)算機(jī)開關(guān)狀態(tài)。
3 主界面設(shè)計(jì)
用戶界面應(yīng)具備如下的特性:
(1)使用簡單:界面簡潔明了、操作方便。
(2)具有容錯能力:具有錯誤診斷、修正錯誤以及出錯保護(hù)的功能;
(3)系統(tǒng)能夠按照用戶的希望和需要,提供不同詳細(xì)程度的系統(tǒng)響應(yīng)信息,包括反饋信息、提示信息、幫助信息、出錯信息等;
(4)在完成特定功能的前提下,使用戶界面越簡單越好。用戶界面應(yīng)能保證用戶正確、可靠地使用系統(tǒng),保證有關(guān)程序和數(shù)據(jù)的安全性。
為方便管理人員監(jiān)控,在用戶界面設(shè)計(jì)中采用圖形化人機(jī)界面,力求簡單靈活。在系統(tǒng)主屏幕中,以1個圖標(biāo)表示機(jī)房的1臺電腦,并用不同顏色的圖標(biāo)來表示電腦開關(guān)的不同狀態(tài)。
4 初始化設(shè)計(jì)
在進(jìn)行功能設(shè)計(jì)之前,首先要對系統(tǒng)進(jìn)行初始化設(shè)計(jì),主要初始化流程如圖2所示。
4.1 通信控件MSComm的設(shè)置
本系統(tǒng)對控件的具體設(shè)置如下:
MSComm1.CommPort=1 //使用COM1作為通信端口
MSComm1.PortOpen=True //打開通信端口
MSComm1.InputMode=comInputModeBinary
//以二進(jìn)制方式讀取數(shù)據(jù)
MSComm1.InputLen=0//每次讀取接收
//緩沖區(qū)的全部內(nèi)容
MSComm1.RThreshold=0 //使用查詢方式,關(guān)中斷
MSComm1.Settings=″9600,n,8,1″ //通信參數(shù)設(shè)置,波
//特率9600,不作奇偶校驗(yàn),8位數(shù)據(jù)位,1位停止位
由于每次發(fā)送和接收的數(shù)據(jù)長度都不相同,所以很難確定RThreshold的屬性值,以產(chǎn)生中斷;另外,由于系統(tǒng)采用面向?qū)ο缶幊?每次是以某個事件觸發(fā)發(fā)送和接收數(shù)據(jù)的,因此系統(tǒng)采用查詢InBufferCount的值來決定是否接收數(shù)據(jù),而不采用中斷的方式。
此外,對于微機(jī)與單片機(jī)組成的數(shù)據(jù)采集處理系統(tǒng),由于數(shù)據(jù)的傳輸多采用十六進(jìn)制方式,所以將MSComm設(shè)置為以二進(jìn)制方式讀取數(shù)據(jù)。
4.2 根據(jù)機(jī)房配置數(shù)據(jù)表對系統(tǒng)進(jìn)行初始化
因?yàn)楸鞠到y(tǒng)是采用動態(tài)方式顯示數(shù)據(jù)的,機(jī)房的配置(機(jī)房代碼、機(jī)房名、計(jì)算機(jī)數(shù)量)是存儲在數(shù)據(jù)庫(“機(jī)房監(jiān)控.mdb”)中的機(jī)房配置數(shù)據(jù)表中,所以在裝載系統(tǒng)時要取出數(shù)據(jù)表中的數(shù)據(jù)來初始化系統(tǒng)。
本系統(tǒng)定義了一個二維全局?jǐn)?shù)組Public pcroom(1 To 100,1 To 2)As Variant來存儲機(jī)房配置數(shù)據(jù)表中的機(jī)房數(shù)據(jù)。第一維表示機(jī)房代碼,設(shè)定為最多可以有100間機(jī)房,并可以根據(jù)需要更改數(shù)組的下標(biāo)來增加或減少機(jī)房的數(shù)量。Pcroom(i,1)表示機(jī)房名,Pcroom(i,2)表示該機(jī)房的計(jì)算機(jī)數(shù)量,i表示機(jī)房代碼(1≤i≤100)。
4.3 界面中與機(jī)房有關(guān)的控件的初始化
在本系統(tǒng)中,與機(jī)房名有關(guān)的控件有4個,其中2個是ComboBox(Combo1,用來顯示當(dāng)前機(jī)房列表),一個在主界面(Form1),一個在歷史記錄查詢窗口(frmhistory);另外2個是ListBox,它們在定時監(jiān)測機(jī)房設(shè)定窗口(fixchkset),名稱為lstall和lstsel。
5 功能設(shè)計(jì)
5.1 監(jiān)測模塊
監(jiān)測模塊的主要功能是發(fā)監(jiān)測信號給單片機(jī),要求讀取特定計(jì)算機(jī)的電源開關(guān)狀態(tài)。監(jiān)測部分根據(jù)操作方式可分為定時操作與非定時操作(人工操作);根據(jù)所監(jiān)測的計(jì)算機(jī)數(shù)量分類,可以分為監(jiān)測全部和部分監(jiān)測(要監(jiān)測的計(jì)算機(jī)數(shù)量大于等于1,小于機(jī)房的計(jì)算機(jī)總數(shù))。
定時監(jiān)測功能是為了使機(jī)房管理人員能夠及時了解特定計(jì)算機(jī)的開關(guān)狀態(tài)而設(shè)置的。它允許使用者通過設(shè)定時間間隔及選取要操作的計(jì)算機(jī),實(shí)現(xiàn)每隔一段時間驅(qū)動一次監(jiān)測事件,從而返回特定計(jì)算機(jī)在當(dāng)前時刻的開關(guān)狀態(tài)。此項(xiàng)功能不但免去了人工操作的麻煩,而且提高了系統(tǒng)的實(shí)時性。使用者不必長時間在電腦面前觀察每臺計(jì)算機(jī)的狀態(tài)。只要設(shè)置了定時監(jiān)測功能,系統(tǒng)就會每隔一段時間自動進(jìn)行監(jiān)測,管理人員只要查看歷史記錄就可以知道這些計(jì)算機(jī)的使用情況。定時監(jiān)測實(shí)際上利用一個定時器控件,當(dāng)?shù)竭_(dá)定時器的時間間隔時,就觸發(fā)一次監(jiān)測事件。
5.2 控制模塊
控制部分要實(shí)現(xiàn)的功能是發(fā)開/關(guān)信號給下位機(jī),要求將特定計(jì)算機(jī)的狀態(tài)設(shè)為開/關(guān)。若接收到下位機(jī)的正確反饋信號,則在界面上將相應(yīng)計(jì)算機(jī)的圖標(biāo)置為開/關(guān);若接收出錯,則給出出錯提示。根據(jù)要控制的計(jì)算機(jī)數(shù)量,可以分為部分控制(開/關(guān))和全部控制(全部開/全部關(guān))二類,前者控制一臺或多臺計(jì)算機(jī),后者控制當(dāng)前機(jī)房的所有計(jì)算機(jī)。
5.3 設(shè)置部分
5.3.1 修改密碼
本系統(tǒng)在啟動時要求管理員輸入正確的密碼才能登錄系統(tǒng)。在登錄之后可以重新修改密碼。
5.3.2 生成報(bào)告設(shè)定
本系統(tǒng)提供了將機(jī)房計(jì)算機(jī)當(dāng)前時刻的狀態(tài)、相關(guān)數(shù)據(jù)生成報(bào)告的功能。報(bào)告的格式為以機(jī)房名命名的文本文件。使用者可以根據(jù)需要選擇不同的報(bào)告生成方式。
5.3.3 定時監(jiān)測機(jī)房設(shè)定
除了提供定時監(jiān)測功能外,本系統(tǒng)還提供了定時監(jiān)測機(jī)房功能,以方便管理者定時自動監(jiān)測多間機(jī)房的計(jì)算機(jī)。
5.3.4 生成報(bào)告設(shè)定
本系統(tǒng)提供了將機(jī)房計(jì)算機(jī)當(dāng)前時刻的狀態(tài)及相關(guān)數(shù)據(jù)生成報(bào)告的功能。報(bào)告的格式為以機(jī)房名命名的文本文件,使用者可以根據(jù)需要選擇不同的報(bào)告生成方式。
5.3.5 定時監(jiān)測機(jī)房設(shè)定
除了提供定時監(jiān)測功能外,本系統(tǒng)還提供了定時監(jiān)測機(jī)房功能,以便管理者能定時自動監(jiān)測多間機(jī)房的計(jì)算機(jī)。
5.3.6 機(jī)房配置
本系統(tǒng)可以根據(jù)不同的機(jī)房配置來動態(tài)改變界面的相關(guān)顯示。本系統(tǒng)提供了機(jī)房配置功能以方便管理者在系統(tǒng)運(yùn)行時更改機(jī)房的配置。
5.4 歷史記錄查詢管理
本系統(tǒng)能夠?qū)λ杏?jì)算機(jī)的開關(guān)機(jī)時間做系統(tǒng)記錄。每臺計(jì)算機(jī)只要經(jīng)過了開機(jī)→關(guān)機(jī)這個過程,就將它的數(shù)據(jù)存放到數(shù)據(jù)庫中。這些記錄有助于管理人員管理機(jī)房,了解計(jì)算機(jī)的使用情況。
6 系統(tǒng)的安全性、可靠性和實(shí)時性
6.1 系統(tǒng)的安全性
本系統(tǒng)運(yùn)行時有二種登錄方式,一種是一般用戶,以用戶名guest登錄;另一種是管理員,以用戶名administrator登錄。第一種登錄方式不需要登錄密碼,但它的功能有限,只能進(jìn)行監(jiān)測和監(jiān)測機(jī)房操作,不能做其他操作,也不能對系統(tǒng)進(jìn)行設(shè)定或者查詢歷史記錄;第二種登錄方式的登錄者為管理員,需要輸入正確的密碼才能登錄,登錄成功后可以使用系統(tǒng)的全部功能,包括監(jiān)控、設(shè)定和查詢功能。
當(dāng)使用者試圖以其他用戶名登錄的時候,系統(tǒng)會彈出提示框,提示用戶要以guest或administrator用戶名登錄。當(dāng)使用者以用戶名administrator登錄,但輸入了錯誤的密碼時,系統(tǒng)會提示輸入密碼錯誤,讓用戶重新輸入。如果連續(xù)3次輸入錯誤,則強(qiáng)行退出系統(tǒng)。登錄密碼存放在當(dāng)前路徑的psw.txt文件中,并進(jìn)行了簡單的加密,其他人可以打開該文本文件,但是看到的是加密后的字符,不是原文,所以具有一定的安全性。
6.2 系統(tǒng)的可靠性
6.2.1 通信可靠性
本系統(tǒng)對各機(jī)房進(jìn)行了編碼(機(jī)房代碼),并將它作為下位機(jī)的地址碼,編號從01H開始。上位機(jī)與某下位機(jī)通信時,先發(fā)送地址碼,待握手成功后再發(fā)送監(jiān)控命令碼。若在限定時間內(nèi)收不到單片機(jī)的正確響應(yīng)信號或收到的信號不是00H,則轉(zhuǎn)出錯處理。
第一次握手成功后,上位機(jī)繼續(xù)發(fā)監(jiān)控命令碼和數(shù)據(jù)長度(要監(jiān)控的計(jì)算機(jī)數(shù)量+1,1為校驗(yàn)和幀)給下位機(jī)。發(fā)送完畢后,就等待單片機(jī)回送正確響應(yīng)信號00H,若在限定時間內(nèi)收到正確反饋信號,則第二次握手成功。否則,轉(zhuǎn)出錯處理。
第二次握手成功后,上位機(jī)開始發(fā)送要監(jiān)控的PC地址,并累加求校驗(yàn)和。發(fā)送完畢后,再發(fā)一幀校驗(yàn)和幀。然后等待單片機(jī)回送正確反饋信號00H(第三次握手)。若超時或信號錯誤,則轉(zhuǎn)出錯。
第三次握手成功后,上位機(jī)接收單片機(jī)傳來的一幀數(shù)據(jù),這幀數(shù)據(jù)的值表示下位機(jī)即將要向上位機(jī)發(fā)送的數(shù)據(jù)長度。上位機(jī)接收單片機(jī)回送的數(shù)據(jù)并累加校驗(yàn)和,若接收正確,則向單片機(jī)發(fā)送00H信號,表示此次操作成功。
上述三次握手,為上位機(jī)與下位機(jī)的通信提供了較高的可靠性。
6.2.2 系統(tǒng)可靠性
本系統(tǒng)提供了較完善的出錯處理機(jī)制及豐富的提示信息,從而提高了系統(tǒng)操作的可靠性。如:輸入出錯提示,包括文本框輸入非法字符,輸入錯誤密碼等等。
6.3 系統(tǒng)的實(shí)時性
在上位機(jī)與下位機(jī)通信時,系統(tǒng)根據(jù)要接收的數(shù)據(jù)長度定義了不同的超時時限,以保證系統(tǒng)的實(shí)時性。
7 總 結(jié)
在本系統(tǒng)中,單片機(jī)負(fù)責(zé)采集電源的模擬開關(guān)量,主機(jī)通過該系統(tǒng)的監(jiān)控軟件,可以得到單片機(jī)采集到的監(jiān)測信號,在界面上顯示出來。同時,該監(jiān)控軟件能對多臺電腦進(jìn)行開關(guān)控制,將這些控制信號發(fā)送到單片機(jī)。當(dāng)單片機(jī)接收到這些控制信號之后,能驅(qū)動相應(yīng)的模擬器件,將這些信號在硬件上反映出來并反饋信號給主機(jī),從而在軟件界面上顯示出模擬狀態(tài)。本系統(tǒng)界面菜單結(jié)構(gòu)清晰,布局合理,功能齊全,響應(yīng)實(shí)時;電路部分設(shè)計(jì)合理,芯片選擇恰當(dāng),調(diào)試方便;主機(jī)與單片機(jī)通信可靠,數(shù)據(jù)的實(shí)時采集和傳輸次序正確。
參考文獻(xiàn)
1 王國榮.Visual Basic 6.0實(shí)戰(zhàn)講座.北京:人民郵電出版社,1999
2 李玉東,李雷編.Visual Basic 6.0中文版控件大全.北京:電子工業(yè)出版社,2000
3 郝春強(qiáng)編.新概念Visual Basic 6編程.北京:北京科海集團(tuán)公司,2001
4 范逸之.Visual Basic與分布式監(jiān)控系統(tǒng).北京:清華大學(xué)出版社,2002
5 李朝青.PC機(jī)及單片機(jī)數(shù)據(jù)通信技術(shù).北京:北京航空航天大學(xué)出版社,2000
6 滕召勝,羅隆福,童調(diào)生.智能檢測系統(tǒng)與數(shù)據(jù)融合.北京:機(jī)械工業(yè)出版社,2000