羅 婷 朱凌云
(東華大學(xué)信息科學(xué)與技術(shù)學(xué)院,上海 201620)
Visual Basic(VB)編程語言具有眾多的優(yōu)點,易于學(xué)習(xí),因此常常被應(yīng)用于監(jiān)控系統(tǒng)的上位機軟件設(shè)計。在上位機軟件系統(tǒng)的實現(xiàn)過程中,主要需要解決的問題包括記錄的管理、實時曲線的顯示、歷史數(shù)據(jù)的保存和查看等。本文通過對VB語言的深入研究和學(xué)習(xí),設(shè)計了一個環(huán)境監(jiān)控系統(tǒng)的上位機軟件。針對設(shè)計過程中的3種關(guān)鍵技術(shù),以下分別給出詳細(xì)的實現(xiàn)方法。這3種技術(shù)分別為基于ADO的Access訪問方法、繪制曲線的方法以及與Excel的連接方法。最后,給出了這些關(guān)鍵技術(shù)在環(huán)境監(jiān)測系統(tǒng)中的實際應(yīng)用情況。
ActiveX Data Object(ADO)技術(shù)是由 Microsoft公司開發(fā)的最新的數(shù)據(jù)訪問接口技術(shù),ADO是建立在基于低層數(shù)據(jù)訪問接口OLEDB技術(shù)上的數(shù)據(jù)對象,它是數(shù)據(jù)訪問對象(data access object,DAO)和遠(yuǎn)程數(shù)據(jù)對象(remote data object,RDO)的后繼產(chǎn)物[1]。在 VB中,通常有2種方法可以實現(xiàn)對ADO的操作[2],一是通過ADO Data控件非編程訪問方式,二是利用ADO對象編程來訪問各種類型數(shù)據(jù)庫。
在此舉例說明第二種方法,即編程訪問Access數(shù)據(jù)庫。假設(shè)存在一個名為“hjmonitoring”的數(shù)據(jù)庫,同時該數(shù)據(jù)庫中有一張“admin”表,該表含有 users、passwords和rname這3個字段。訪問數(shù)據(jù)庫的關(guān)鍵語句如下。
使用VB設(shè)計上位機軟件時,常常需要使用數(shù)據(jù)庫保存一些數(shù)據(jù)記錄(當(dāng)數(shù)據(jù)量不大時,常采用Access數(shù)據(jù)庫),同時也要求在監(jiān)控界面上方便地查看這些記錄。因此,必需利用編程方法訪問數(shù)據(jù)庫。
在監(jiān)控軟件中,圖形最能給人直觀的感受,因此,采用VB語言編程,實現(xiàn)實時圖形繪制十分必要。繪制實時圖形的方法較多,在此結(jié)合設(shè)計系統(tǒng)時所涉及到的二維曲線的實時繪制,采用一種較簡單的Line方法繪制實時曲線[5]。
Line方法是結(jié)合實測得到的數(shù)組數(shù)據(jù)進(jìn)行曲線的繪制。該方法必須在窗體或者圖片框等容器內(nèi)使用。實際使用時,常采用PictureBox控件作為容器,但首先要設(shè)置其Autodraw屬性為true,以保證在界面刷新時所繪圖形不會被消隱。
使用Line方法得到的是位圖圖像,圖像的大小和所定義的容器的大小一致。
假設(shè)Timer控件的Interval參數(shù)值設(shè)為1000,即每隔1 s刷新一次;監(jiān)測環(huán)境中CO2氣體的濃度隨時間變化,使用GetCO2Percent()函數(shù)來采集CO2實時濃度值,則繪制實時曲線的程序[6]如下。
如果要查看歷史曲線,首先提取歷史數(shù)據(jù)并存放到數(shù)組CO2_CSh(N1)中(注:取數(shù)據(jù)方法將在下一部分VB與Excel連接中做詳細(xì)說明),然后再繪制曲線。繪制曲線的程序如下。
在監(jiān)控軟件中,還有一個應(yīng)用很廣泛的連接對象——Excel。
在VB中,可以通過調(diào)用Excel事件的方法完成報表的制作[7-8]。利用 Excel實現(xiàn)數(shù)據(jù)報表制作的關(guān)鍵在于如何根據(jù)報表要求的格式將數(shù)據(jù)快速準(zhǔn)確地輸出到Excel。
微軟的Excel對象模型包括128個不同的對象,其中最重要也是使用最多的4個對象分別介紹如下。①Application對象,它處于Excel對象層次結(jié)構(gòu)的頂層,表示Excel自身的運行環(huán)境;②Workbook對象,它直接處于Application對象的下層,表示一個Excel工作簿文件;③Worksheet對象,它包含于Workbook對象,表示一個Excel工作表;④Range對象,它包含于Worksheet對象,表示Excel工作表中的一個或多個單元格。
在VB中,可以通過對這些對象進(jìn)行直接控制,實現(xiàn)數(shù)據(jù)的輸入輸出。Excel中還定義了一個類“cell”,這個類所代表的就是Excel的一個單元格。通過給cell賦值,就可以實現(xiàn)對Excel表格的某個單元格寫入數(shù)據(jù)。
下面給出使用Excel對象時的常用編程語句。
系統(tǒng)主要應(yīng)用在對人類生命安全存在威脅的環(huán)境中,如密閉環(huán)境、地下等。該系統(tǒng)的工作流程為:測得環(huán)境內(nèi)各種氣體的濃度數(shù)值,然后系統(tǒng)按照適宜人類生存的各種氣體濃度的標(biāo)準(zhǔn)值對環(huán)境進(jìn)行凈化處理;待人們進(jìn)入環(huán)境凈化工作后,系統(tǒng)繼續(xù)實時監(jiān)測該環(huán)境,在PC機上顯示出各種氣體濃度的實時曲線。如果某氣體值超標(biāo),監(jiān)控系統(tǒng)會馬上報警,提示環(huán)境內(nèi)的工作人員撤退。
本系統(tǒng)的下位機主要由溫度傳感器、噪聲傳感器以及多種氣體濃度測量傳感器組成[9],這些傳感器信號經(jīng)過數(shù)據(jù)采集卡的自動采集,通過USB口傳送至上位機進(jìn)行分析和處理。本系統(tǒng)的組成框圖如圖1所示。
圖1 系統(tǒng)組成框圖Fig.1 Composition of the system
系統(tǒng)的上位機監(jiān)控軟件組成框圖如圖2所示。
圖2 監(jiān)控軟件組成框圖Fig.2 Configuration of the monitoring software
對于該監(jiān)控軟件,系統(tǒng)用戶管理和氣體標(biāo)準(zhǔn)管理頁面涉及到VB和數(shù)據(jù)庫連接的技術(shù);實時監(jiān)控曲線涉及到利用VB繪制曲線的技術(shù);氣密性監(jiān)測、環(huán)境凈化管理以及查看歷史記錄既涉及到VB和數(shù)據(jù)庫連接的技術(shù),又涉及到VB和Excel連接的技術(shù)。
系統(tǒng)用戶管理界面與氣體標(biāo)準(zhǔn)管理頁面類似,通過在監(jiān)控界面的相關(guān)操作,使得數(shù)據(jù)庫中的“admin”表得到修改,包括查看記錄、添加記錄、修改記錄和刪除記錄4種操作。
環(huán)境監(jiān)控涉及到的參數(shù)較多,具體包括溫度、噪聲、壓力、濕度、CO2、CO、O2、NO、H2S、CH4這 10 種檢測信號,所以監(jiān)控界面上同時放置有10個PictureBox控件用來顯示曲線。監(jiān)測開始后,顯示界面就會實時顯示各個氣體濃度的動態(tài)變化過程。同時,界面上有兩條濃度上下限標(biāo)準(zhǔn)值直線,若濃度超出范圍,系統(tǒng)會發(fā)出報警聲。此外,點擊任意PictureBox,可實現(xiàn)對應(yīng)位置參數(shù)曲線圖的放大。N2濃度實時監(jiān)測曲線如圖3所示。
圖3 N2濃度實時監(jiān)測圖Fig.3 Real-time monitoring of N2concentration
在實時監(jiān)測過程中,大量的氣體濃度數(shù)據(jù)會被保存到Excel表格中,以便測試后查看記錄時調(diào)用。同時,在監(jiān)測過程中系統(tǒng)也會對這些數(shù)據(jù)做分析處理,每隔30 min自動輸出一張格式工整的測試分時報表。具體測試分時報表界面如圖4所示。
圖4 測試分時報表界面圖Fig.4 Interface of time sharing report of testing
通過分析可知,使用VB語言編制監(jiān)控程序簡單易行,設(shè)計界面美觀,具有較大的實際應(yīng)用意義。目前,該監(jiān)控程序已經(jīng)應(yīng)用于地下環(huán)境監(jiān)控系統(tǒng)中。
[1]張磊.VB中用ADO對象動態(tài)訪問Access[J].長春師范學(xué)院學(xué)報,2004,23(2):36 -39.
[2]莫禮平,張兆海.VB中基于ADO的數(shù)據(jù)庫訪問方法[J].電腦開發(fā)與應(yīng)用,2004,17(6):33 -34.
[3]周威.在VB.Net中用ADO訪問Access數(shù)據(jù)庫的方法[J].嘉興學(xué)院學(xué)報,2005,17(3):39 -41.
[4]張良,何也熙.Matlab、Access和VB.NET混合編程方法的研究和應(yīng)用[J].計算機工程與設(shè)計,2009,30(5):1232 -1235.
[5]喬文剛,汪友龍,李宣,等.關(guān)于用VB實現(xiàn)實時測試曲線的動態(tài)顯示研究[J].機床與液壓,2009,39(1):126 -127.
[6]關(guān)維娟,陳清華.利用VB編程實現(xiàn)實時數(shù)據(jù)曲線繪制[J].信息技術(shù),2005(10):76 -78.
[7]王福杰,潘宏俠.基于VB的二維實時曲線顯示設(shè)計[J].電腦開發(fā)與應(yīng)用,2005,18(11):30 -32.
[8]魏彩喬,王曉光,焦?jié)M囤.基于VB和EXCEL的復(fù)雜數(shù)據(jù)報表輸出[J].華北航天工業(yè)學(xué)院學(xué)報,2005,15(1):3 -7.
[9]安子良,孔令超,肖立中.基于VB、Matlab和Access的石油井架應(yīng)力測量系統(tǒng)[J].化工自動化及儀表,2011,38(6):597 -600.