包建華 張興奎 胡福年
(徐州師范大學(xué)電氣工程及自動(dòng)化學(xué)院,江蘇 徐州 221116)
工控組態(tài)軟件(monitor and control generated system,MCGS)是指在數(shù)據(jù)采集和過程控制中使用的專用軟件,它提供了監(jiān)控層的軟件平臺(tái)和開發(fā)環(huán)境,一般用于自動(dòng)控制系統(tǒng)的監(jiān)控層,其靈活的組態(tài)方式,可使用戶快速構(gòu)建專業(yè)級(jí)的工業(yè)自動(dòng)監(jiān)控系統(tǒng)[1]。
工控組態(tài)軟件是一套基于WindowsNT/2000/XP操作系統(tǒng)、可用來快速構(gòu)造和生成上位機(jī)監(jiān)控系統(tǒng)的組態(tài)軟件系統(tǒng)。它為用戶提供了從設(shè)備驅(qū)動(dòng)、數(shù)據(jù)采集到數(shù)據(jù)處理、報(bào)警處理、流程控制、動(dòng)畫顯示、報(bào)表輸出等用來解決實(shí)際工程問題的完整方案和開發(fā)平臺(tái)[2]。在實(shí)際應(yīng)用中,由于所用設(shè)備的特殊性或?qū)嶋H工程的需要以及用戶的個(gè)性化需求,MCGS提供了一套開放的、可擴(kuò)充的接口規(guī)范和配套的高級(jí)開發(fā)工具包,允許用戶根據(jù)自己的需要來開發(fā)設(shè)備驅(qū)動(dòng)構(gòu)件[3]。本文開發(fā)的基于MCGS的AT89C52單片機(jī)驅(qū)動(dòng)構(gòu)件可完成現(xiàn)場終端和上位機(jī)間的可靠通信,從而實(shí)現(xiàn)對房間溫度的遠(yuǎn)程監(jiān)測和報(bào)警限值的在線設(shè)置。
MCGS采用Active DLL構(gòu)件的方式來實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)程序,并通過規(guī)范的對象鏈接與嵌入(object linking and embedding,OLE)接口,將Active DLL構(gòu)件掛接到MCGS中,使其構(gòu)成一個(gè)整體。由于設(shè)備驅(qū)動(dòng)構(gòu)件和MCGS運(yùn)行在同一個(gè)進(jìn)程內(nèi),故設(shè)備構(gòu)件的運(yùn)行速度快、可靠性高。OLE是一個(gè)可擴(kuò)充的開放標(biāo)準(zhǔn),用于實(shí)現(xiàn)不同軟件之間的相互操作,因此,可以使用VB、VC、Delphi等語言來編制MCGS的設(shè)備驅(qū)動(dòng)程序。鑒于Visual Basic的通用性和簡單性,且VB6.0以上的版本是以二進(jìn)制碼來編譯執(zhí)行程序,其運(yùn)行速度巳接近或超過VC,完全能滿足設(shè)備驅(qū)動(dòng)構(gòu)件所需的速度要求,因此,本文采用VB6.0進(jìn)行單片機(jī)驅(qū)動(dòng)構(gòu)件的開發(fā)。
與MCGS相連接的外部設(shè)備分為獨(dú)立設(shè)備、父設(shè)備和子設(shè)備3類。獨(dú)立設(shè)備是可獨(dú)立工作、完成特定數(shù)據(jù)輸入輸出功能的設(shè)備,如用于模擬量輸入輸出、數(shù)字量輸入輸出的PC接口卡等;父設(shè)備是本身不直接處理數(shù)據(jù)輸入輸出,但能管理其他設(shè)備的工作,如串行口設(shè)備等;子設(shè)備是本身具有處理數(shù)據(jù)輸入輸出的功能,但只有和對應(yīng)的父設(shè)備一起才能構(gòu)成完整的工作系統(tǒng)的設(shè)備,如PLC設(shè)備、帶智能通信功能的儀器儀表等。單片機(jī)是工作在串行口父設(shè)備下的子設(shè)備,MCGS提供了串行口父設(shè)備驅(qū)動(dòng)構(gòu)件,需要開發(fā)的是掛接在串行口父設(shè)備下的子設(shè)備驅(qū)動(dòng)構(gòu)件[4-5]。MCGS與單片機(jī)通信結(jié)構(gòu)框圖如圖1所示。
圖1 通信結(jié)構(gòu)框圖Fig.1 Block diagram of communication
MCGS設(shè)備驅(qū)動(dòng)構(gòu)件的實(shí)現(xiàn)方法和原理與標(biāo)準(zhǔn)VB的ActiveDLL基本一致,不同的是MCGS規(guī)定了一套接口規(guī)范,只有遵守這些接口規(guī)范的ActiveDLL,才能用作 MCGS的設(shè)備驅(qū)動(dòng)構(gòu)件。具體來說,開發(fā)MCGS設(shè)備驅(qū)動(dòng)構(gòu)件的過程就是根據(jù)通信協(xié)議制定的數(shù)據(jù)幀格式,對MCGS接口規(guī)范中的5個(gè)屬性函數(shù)和8個(gè)方法函數(shù)進(jìn)行定義、編程、調(diào)試和掛接,從而完成設(shè)備功能的配置。
對MCGS設(shè)備驅(qū)動(dòng)構(gòu)件的開發(fā)可以采用以下兩種方法加以完成:一種是利用開發(fā)向?qū)煽蚣埽缓笤赩isual Basic編程環(huán)境中加入自己的驅(qū)動(dòng)程序部分;另一種是利用現(xiàn)有的設(shè)備驅(qū)動(dòng)程序進(jìn)行移植。本文采用的是前一種方法。
數(shù)據(jù)交互涉及通信協(xié)議問題。MCGS設(shè)備驅(qū)動(dòng)構(gòu)件的幀格式如圖2所示。51單片機(jī)串口集成了一個(gè)全雙工通用異步接收發(fā)送器UART。這里采用UART工作在模式1下,按照字節(jié)傳輸數(shù)據(jù),數(shù)據(jù)幀格式為1位起始位、8位數(shù)據(jù)位和1位停止位[6]。
圖2 幀格式Fig.2 Format of frame
編寫子設(shè)備驅(qū)動(dòng)程序時(shí),主要是對串行端口進(jìn)行操作。MCGS把復(fù)雜的對串行端口的設(shè)置(如波特率、數(shù)據(jù)位長度、數(shù)據(jù)校驗(yàn)方式等)、初始化和讀寫操作全部封裝在MCGS提供的串口父設(shè)備中。子設(shè)備按照通信協(xié)議將數(shù)據(jù)打包,然后調(diào)用串口父設(shè)備提供的標(biāo)準(zhǔn)串口讀寫函數(shù),即可完成對數(shù)據(jù)的讀取和發(fā)送工作[7]。常用的串行端口操作函數(shù)如下。
MCGS提供的接口規(guī)范中共有5個(gè)屬性接口,編程者可通過調(diào)用屬性接口函數(shù)來對設(shè)備屬性進(jìn)行設(shè)置。通過設(shè)置這5個(gè)屬性,可以標(biāo)明設(shè)備的類型、類別、設(shè)備的通道個(gè)數(shù)、設(shè)備所用I/O地址的個(gè)數(shù)和設(shè)備所用I/O的基地址。由于是子設(shè)備,故單片機(jī)驅(qū)動(dòng)構(gòu)件不需占用系統(tǒng)I/O。本設(shè)計(jì)需要對某房間的溫度、溫度上/下限報(bào)警限值、房間燈盞進(jìn)行遠(yuǎn)程監(jiān)測與控制,因此,設(shè)定的通道個(gè)數(shù)為7個(gè)。5個(gè)屬性接口設(shè)置代碼具體如下。
MCGS在組態(tài)環(huán)境和運(yùn)行環(huán)境下需要調(diào)用方法接口來實(shí)現(xiàn)特定的功能,如實(shí)現(xiàn)初始化、數(shù)據(jù)的輸入與輸出、通道的數(shù)據(jù)類型說明等功能。
2.4.1 組態(tài)環(huán)境中調(diào)用接口的方法
GetDevName接口供MCGS讀取設(shè)備的類型名稱,MCGS將把這個(gè)名稱顯示在設(shè)備工具箱中。本文設(shè)置如下:GetDevName=“單片機(jī)控制器”;GetDevHelp接口用以顯示設(shè)備構(gòu)件的在線幫助;SetDevPage接口用以設(shè)置設(shè)備構(gòu)件的內(nèi)部屬性頁。當(dāng)把設(shè)備從設(shè)備工具箱中選取到設(shè)備窗口中時(shí),調(diào)用InitNewDev接口,設(shè)置設(shè)備的缺省屬性值。
2.4.2 運(yùn)行環(huán)境中調(diào)用接口的方法
運(yùn)行環(huán)境中調(diào)用接口的方法具體如下。
①在MCGS運(yùn)行環(huán)境啟動(dòng)時(shí)調(diào)用InitDevRun接口一次,用于對設(shè)備構(gòu)件進(jìn)行初始化工作。
②MCGS調(diào)用GetChlType接口讀取設(shè)備各通道的數(shù)據(jù)類型和通道內(nèi)容的文字描述,在設(shè)備屬性設(shè)置窗口的通道連接屬性頁中所顯示的內(nèi)容來自本接口。本設(shè)計(jì)需設(shè)置7個(gè)通道,第1~4通道用于遠(yuǎn)程控制房間四盞燈的亮滅,使用51 單片機(jī)的 P1.0~P1.3;第 5 通道用于實(shí)時(shí)采集房間的溫度值;第6、第7通道用于在線設(shè)置房間溫度上/下限報(bào)警值。程序代碼如下。
③在MCGS運(yùn)行環(huán)境中,從設(shè)備采集數(shù)據(jù)或向設(shè)備輸出數(shù)據(jù)通過定時(shí)調(diào)用CollectDevDat接口來完成。設(shè)備構(gòu)件首先調(diào)用父設(shè)備的串口操作函數(shù)ComOutIn-Dat,把命令字寫到串行端口,再輸出到單片機(jī)控制器,單片機(jī)控制器收到命令字后發(fā)送數(shù)據(jù)到串行端口,串行端口讀取返回的數(shù)據(jù),再把數(shù)據(jù)存入到數(shù)組Output-Byte()中,然后將數(shù)組中的數(shù)據(jù)解包,把所需要的變量值存放到通道數(shù)組asngdatavalue()中,供MCGS進(jìn)行處理。
按照通信協(xié)議,發(fā)送幀格式采用“#”+“地址編號(hào)”+“命令數(shù)據(jù)”+“!”,然后將該字符串轉(zhuǎn)換為ASCII碼發(fā)送至單片機(jī)控制器。數(shù)據(jù)接收幀格式與之類似。
在CollectDevDat接口中編制的程序代碼如下。
在VB的程序模塊DevBas.bas中編制的源程序代碼如下。
通過調(diào)用父設(shè)備的串口操作函數(shù)ComOutInDat,實(shí)現(xiàn)與單片機(jī)控制器交互數(shù)據(jù),相應(yīng)的程序代碼如下。
④在MCGS中,周期性讀寫參數(shù)都是在通道連接中實(shí)現(xiàn)的。因此,本設(shè)計(jì)中沒有對RunDevCommand接口函數(shù)進(jìn)行編程。
本文選用Atmel公司的AT89C52單片機(jī)作為下位機(jī),房間溫度傳感器選用 DALLAS公司的DS18B20。DS18B20采用1-Wire總線,可將溫度直接轉(zhuǎn)換成串行數(shù)字信號(hào)供微控制器處理,測溫范圍為-55~+125℃,最大分辨率可達(dá)0.0625 K[8]。
下位單片機(jī)通過串口和上位機(jī)交換數(shù)據(jù),采用T1作為UART的波特率發(fā)生器。單片機(jī)晶振頻率選為11.0592 MHz,設(shè)置 SMOD=0、TH1=0FDH,可得到波特率為9600 bit/s。這樣獲得的波特率誤差率為0,提高了串口通信的可靠性。為提高數(shù)據(jù)交互的實(shí)時(shí)性,單片機(jī)收/發(fā)數(shù)據(jù)采用中斷方式。按照前述數(shù)據(jù)通信協(xié)議約定,單片機(jī)串行口的中斷服務(wù)程序流程如圖3所示。
圖3 中斷服務(wù)程序流程圖Fig.3 Flowchart of the interrupt service
MCGS為設(shè)備驅(qū)動(dòng)構(gòu)件提供了一套在VB環(huán)境下進(jìn)行在線調(diào)試的運(yùn)行機(jī)制,使用戶能夠隨時(shí)在VB源代碼一級(jí)對構(gòu)件的接口函數(shù)進(jìn)行調(diào)試、測試,以驗(yàn)證編程正確性。編程調(diào)試工作完成后,經(jīng)編譯,生成*.dll文件,只要把此文件拷貝到D:MCGSProgramDrivers的目錄下(假定MCGS系統(tǒng)安裝時(shí)的目錄為D:MCGS),即完成設(shè)備驅(qū)動(dòng)構(gòu)件的掛接工作[9]。
啟動(dòng)MCGS組態(tài)環(huán)境,在工作臺(tái)中打開設(shè)備組態(tài)窗口,再通過設(shè)備工具箱的“設(shè)備管理”窗口,完成自主開發(fā)的單片機(jī)驅(qū)動(dòng)構(gòu)件在Windows中的登記工作。
本文開發(fā)的基于MCGS的51單片機(jī)驅(qū)動(dòng)構(gòu)件可實(shí)現(xiàn)對房間溫度的實(shí)時(shí)監(jiān)測,并能夠在上位機(jī)中對房間溫度的上/下限報(bào)警限值進(jìn)行在線設(shè)置。系統(tǒng)運(yùn)行中一旦溫度超限,上位機(jī)監(jiān)控可立即實(shí)現(xiàn)漢語語音報(bào)警,其中的聲音文件由中科大訊飛信息科技公司“InterPhonic CN語音合成系統(tǒng)”產(chǎn)生,效果如真人發(fā)音[10]。同時(shí),系統(tǒng)可實(shí)現(xiàn)在上位機(jī)上對房間的4個(gè)燈盞進(jìn)行遠(yuǎn)程開啟與關(guān)閉。
工控組態(tài)軟件開發(fā)的計(jì)算機(jī)監(jiān)控系統(tǒng)具有系統(tǒng)配置靈活、開發(fā)周期短、通用性強(qiáng)、可靠性高等特點(diǎn),MCGS提供了一套規(guī)范的設(shè)備驅(qū)動(dòng)程序接口,用戶可方便靈活地開發(fā)設(shè)備驅(qū)動(dòng)程序。熟練掌握MCGS設(shè)備驅(qū)動(dòng)構(gòu)件的開發(fā)方法不僅大大拓寬了硬件選型范圍,也為開發(fā)基于MCGS的計(jì)算機(jī)監(jiān)控系統(tǒng)提供技術(shù)保證。實(shí)際運(yùn)行表明,本文開發(fā)的基于MCGS的51單片機(jī)驅(qū)動(dòng)構(gòu)件效果良好,數(shù)據(jù)交互及時(shí)可靠。
[1]曹輝,馬棟萍,王暄,等.組態(tài)軟件技術(shù)及應(yīng)用[M].北京:電子工業(yè)出版社,2009:1.
[2]包建華,丁啟勝,張興奎.工控組態(tài)軟件MCGS及其應(yīng)用[J].工礦自動(dòng)化,2007(3):92.
[3]邱小文,汪仁和.基于MCGS組態(tài)軟件的設(shè)備驅(qū)動(dòng)開發(fā)[J].露天采礦技術(shù),2007(5):51.
[4]周杰,林沂杰.基于MCGS的51單片機(jī)驅(qū)動(dòng)構(gòu)件實(shí)現(xiàn)方法[J].微計(jì)算機(jī)應(yīng)用,2009,30(11):76-77.
[5]邱小文,汪仁和.基于MCGS的凌陽單片機(jī)驅(qū)動(dòng)程序的設(shè)計(jì)[J].微計(jì)算機(jī)信息,2006,22(7):113.
[6]王曉光,鄭萍,馬巧娟,等.基于MCGS的51系列單片機(jī)通用驅(qū)動(dòng)程序設(shè)計(jì)[J].儀表技術(shù)與傳感器,2010(5):38.
[7]潘崢嶸,張巖,郭凱,等.基于MCGS的C8051F020單片機(jī)驅(qū)動(dòng)程序的設(shè)計(jì)與應(yīng)用[J].微計(jì)算機(jī)應(yīng)用,2009,30(2):49.
[8]李光飛,樓然苗,胡佳文,等.單片機(jī)課程設(shè)計(jì)實(shí)例指導(dǎo)[M].北京:北京航空航天大學(xué)出版社,2004:105-115.
[9]馬海瑞,周愛軍.MCGS的可擴(kuò)充性及其設(shè)備驅(qū)動(dòng)構(gòu)件[J].兵工自動(dòng)化,2005,24(2):80.
[10]包建華,張興奎.空壓機(jī)組監(jiān)控軟件應(yīng)用中的若干技術(shù)處理[J].工業(yè)控制計(jì)算機(jī),2007,20(10):45.