包建華 張興奎 胡福年
(徐州師范大學電氣工程及自動化學院,江蘇 徐州 221116)
工控組態軟件(monitor and control generated system,MCGS)是指在數據采集和過程控制中使用的專用軟件,它提供了監控層的軟件平臺和開發環境,一般用于自動控制系統的監控層,其靈活的組態方式,可使用戶快速構建專業級的工業自動監控系統[1]。
工控組態軟件是一套基于WindowsNT/2000/XP操作系統、可用來快速構造和生成上位機監控系統的組態軟件系統。它為用戶提供了從設備驅動、數據采集到數據處理、報警處理、流程控制、動畫顯示、報表輸出等用來解決實際工程問題的完整方案和開發平臺[2]。在實際應用中,由于所用設備的特殊性或實際工程的需要以及用戶的個性化需求,MCGS提供了一套開放的、可擴充的接口規范和配套的高級開發工具包,允許用戶根據自己的需要來開發設備驅動構件[3]。本文開發的基于MCGS的AT89C52單片機驅動構件可完成現場終端和上位機間的可靠通信,從而實現對房間溫度的遠程監測和報警限值的在線設置。
MCGS采用Active DLL構件的方式來實現設備驅動程序,并通過規范的對象鏈接與嵌入(object linking and embedding,OLE)接口,將Active DLL構件掛接到MCGS中,使其構成一個整體。由于設備驅動構件和MCGS運行在同一個進程內,故設備構件的運行速度快、可靠性高。OLE是一個可擴充的開放標準,用于實現不同軟件之間的相互操作,因此,可以使用VB、VC、Delphi等語言來編制MCGS的設備驅動程序。鑒于Visual Basic的通用性和簡單性,且VB6.0以上的版本是以二進制碼來編譯執行程序,其運行速度巳接近或超過VC,完全能滿足設備驅動構件所需的速度要求,因此,本文采用VB6.0進行單片機驅動構件的開發。
與MCGS相連接的外部設備分為獨立設備、父設備和子設備3類。獨立設備是可獨立工作、完成特定數據輸入輸出功能的設備,如用于模擬量輸入輸出、數字量輸入輸出的PC接口卡等;父設備是本身不直接處理數據輸入輸出,但能管理其他設備的工作,如串行口設備等;子設備是本身具有處理數據輸入輸出的功能,但只有和對應的父設備一起才能構成完整的工作系統的設備,如PLC設備、帶智能通信功能的儀器儀表等。單片機是工作在串行口父設備下的子設備,MCGS提供了串行口父設備驅動構件,需要開發的是掛接在串行口父設備下的子設備驅動構件[4-5]。MCGS與單片機通信結構框圖如圖1所示。

圖1 通信結構框圖Fig.1 Block diagram of communication
MCGS設備驅動構件的實現方法和原理與標準VB的ActiveDLL基本一致,不同的是MCGS規定了一套接口規范,只有遵守這些接口規范的ActiveDLL,才能用作 MCGS的設備驅動構件。具體來說,開發MCGS設備驅動構件的過程就是根據通信協議制定的數據幀格式,對MCGS接口規范中的5個屬性函數和8個方法函數進行定義、編程、調試和掛接,從而完成設備功能的配置。
對MCGS設備驅動構件的開發可以采用以下兩種方法加以完成:一種是利用開發向導生成框架,然后在Visual Basic編程環境中加入自己的驅動程序部分;另一種是利用現有的設備驅動程序進行移植。本文采用的是前一種方法。
數據交互涉及通信協議問題。MCGS設備驅動構件的幀格式如圖2所示。51單片機串口集成了一個全雙工通用異步接收發送器UART。這里采用UART工作在模式1下,按照字節傳輸數據,數據幀格式為1位起始位、8位數據位和1位停止位[6]。

圖2 幀格式Fig.2 Format of frame
編寫子設備驅動程序時,主要是對串行端口進行操作。MCGS把復雜的對串行端口的設置(如波特率、數據位長度、數據校驗方式等)、初始化和讀寫操作全部封裝在MCGS提供的串口父設備中。子設備按照通信協議將數據打包,然后調用串口父設備提供的標準串口讀寫函數,即可完成對數據的讀取和發送工作[7]。常用的串行端口操作函數如下。

MCGS提供的接口規范中共有5個屬性接口,編程者可通過調用屬性接口函數來對設備屬性進行設置。通過設置這5個屬性,可以標明設備的類型、類別、設備的通道個數、設備所用I/O地址的個數和設備所用I/O的基地址。由于是子設備,故單片機驅動構件不需占用系統I/O。本設計需要對某房間的溫度、溫度上/下限報警限值、房間燈盞進行遠程監測與控制,因此,設定的通道個數為7個。5個屬性接口設置代碼具體如下。

MCGS在組態環境和運行環境下需要調用方法接口來實現特定的功能,如實現初始化、數據的輸入與輸出、通道的數據類型說明等功能。
2.4.1 組態環境中調用接口的方法
GetDevName接口供MCGS讀取設備的類型名稱,MCGS將把這個名稱顯示在設備工具箱中。本文設置如下:GetDevName=“單片機控制器”;GetDevHelp接口用以顯示設備構件的在線幫助;SetDevPage接口用以設置設備構件的內部屬性頁。當把設備從設備工具箱中選取到設備窗口中時,調用InitNewDev接口,設置設備的缺省屬性值。
2.4.2 運行環境中調用接口的方法
運行環境中調用接口的方法具體如下。
①在MCGS運行環境啟動時調用InitDevRun接口一次,用于對設備構件進行初始化工作。
②MCGS調用GetChlType接口讀取設備各通道的數據類型和通道內容的文字描述,在設備屬性設置窗口的通道連接屬性頁中所顯示的內容來自本接口。本設計需設置7個通道,第1~4通道用于遠程控制房間四盞燈的亮滅,使用51 單片機的 P1.0~P1.3;第 5 通道用于實時采集房間的溫度值;第6、第7通道用于在線設置房間溫度上/下限報警值。程序代碼如下。

③在MCGS運行環境中,從設備采集數據或向設備輸出數據通過定時調用CollectDevDat接口來完成。設備構件首先調用父設備的串口操作函數ComOutIn-Dat,把命令字寫到串行端口,再輸出到單片機控制器,單片機控制器收到命令字后發送數據到串行端口,串行端口讀取返回的數據,再把數據存入到數組Output-Byte()中,然后將數組中的數據解包,把所需要的變量值存放到通道數組asngdatavalue()中,供MCGS進行處理。
按照通信協議,發送幀格式采用“#”+“地址編號”+“命令數據”+“!”,然后將該字符串轉換為ASCII碼發送至單片機控制器。數據接收幀格式與之類似。
在CollectDevDat接口中編制的程序代碼如下。

在VB的程序模塊DevBas.bas中編制的源程序代碼如下。

通過調用父設備的串口操作函數ComOutInDat,實現與單片機控制器交互數據,相應的程序代碼如下。

④在MCGS中,周期性讀寫參數都是在通道連接中實現的。因此,本設計中沒有對RunDevCommand接口函數進行編程。
本文選用Atmel公司的AT89C52單片機作為下位機,房間溫度傳感器選用 DALLAS公司的DS18B20。DS18B20采用1-Wire總線,可將溫度直接轉換成串行數字信號供微控制器處理,測溫范圍為-55~+125℃,最大分辨率可達0.0625 K[8]。
下位單片機通過串口和上位機交換數據,采用T1作為UART的波特率發生器。單片機晶振頻率選為11.0592 MHz,設置 SMOD=0、TH1=0FDH,可得到波特率為9600 bit/s。這樣獲得的波特率誤差率為0,提高了串口通信的可靠性。為提高數據交互的實時性,單片機收/發數據采用中斷方式。按照前述數據通信協議約定,單片機串行口的中斷服務程序流程如圖3所示。

圖3 中斷服務程序流程圖Fig.3 Flowchart of the interrupt service
MCGS為設備驅動構件提供了一套在VB環境下進行在線調試的運行機制,使用戶能夠隨時在VB源代碼一級對構件的接口函數進行調試、測試,以驗證編程正確性。編程調試工作完成后,經編譯,生成*.dll文件,只要把此文件拷貝到D:MCGSProgramDrivers的目錄下(假定MCGS系統安裝時的目錄為D:MCGS),即完成設備驅動構件的掛接工作[9]。
啟動MCGS組態環境,在工作臺中打開設備組態窗口,再通過設備工具箱的“設備管理”窗口,完成自主開發的單片機驅動構件在Windows中的登記工作。
本文開發的基于MCGS的51單片機驅動構件可實現對房間溫度的實時監測,并能夠在上位機中對房間溫度的上/下限報警限值進行在線設置。系統運行中一旦溫度超限,上位機監控可立即實現漢語語音報警,其中的聲音文件由中科大訊飛信息科技公司“InterPhonic CN語音合成系統”產生,效果如真人發音[10]。同時,系統可實現在上位機上對房間的4個燈盞進行遠程開啟與關閉。
工控組態軟件開發的計算機監控系統具有系統配置靈活、開發周期短、通用性強、可靠性高等特點,MCGS提供了一套規范的設備驅動程序接口,用戶可方便靈活地開發設備驅動程序。熟練掌握MCGS設備驅動構件的開發方法不僅大大拓寬了硬件選型范圍,也為開發基于MCGS的計算機監控系統提供技術保證。實際運行表明,本文開發的基于MCGS的51單片機驅動構件效果良好,數據交互及時可靠。
[1]曹輝,馬棟萍,王暄,等.組態軟件技術及應用[M].北京:電子工業出版社,2009:1.
[2]包建華,丁啟勝,張興奎.工控組態軟件MCGS及其應用[J].工礦自動化,2007(3):92.
[3]邱小文,汪仁和.基于MCGS組態軟件的設備驅動開發[J].露天采礦技術,2007(5):51.
[4]周杰,林沂杰.基于MCGS的51單片機驅動構件實現方法[J].微計算機應用,2009,30(11):76-77.
[5]邱小文,汪仁和.基于MCGS的凌陽單片機驅動程序的設計[J].微計算機信息,2006,22(7):113.
[6]王曉光,鄭萍,馬巧娟,等.基于MCGS的51系列單片機通用驅動程序設計[J].儀表技術與傳感器,2010(5):38.
[7]潘崢嶸,張巖,郭凱,等.基于MCGS的C8051F020單片機驅動程序的設計與應用[J].微計算機應用,2009,30(2):49.
[8]李光飛,樓然苗,胡佳文,等.單片機課程設計實例指導[M].北京:北京航空航天大學出版社,2004:105-115.
[9]馬海瑞,周愛軍.MCGS的可擴充性及其設備驅動構件[J].兵工自動化,2005,24(2):80.
[10]包建華,張興奎.空壓機組監控軟件應用中的若干技術處理[J].工業控制計算機,2007,20(10):45.