MCGS即"監(jiān)視與控制通用系統(tǒng)",是為工業(yè)過程控制和實時監(jiān)測領(lǐng)域服務(wù)的通用計算機(jī)系統(tǒng)軟件,具有功能完善、操作簡便、可視性好、可維護(hù)性強(qiáng)的突出特點。是目前比較優(yōu)秀的工業(yè)過程控制和實時監(jiān)測領(lǐng)域服務(wù)的計算機(jī)系統(tǒng)軟件。
在西寧市尖扎縣康揚(yáng)水電站全廠綜合監(jiān)控系統(tǒng)中,使用MCGS組態(tài)的全廠水力測量監(jiān)控上位機(jī)擔(dān)當(dāng)著全廠的水力數(shù)據(jù)和綜合監(jiān)控系統(tǒng)之間通信的樞紐,負(fù)責(zé)上傳各種水力數(shù)據(jù)。而MCGS沒有自帶數(shù)據(jù)傳輸?shù)尿?qū)動程序,無法實現(xiàn)數(shù)據(jù)的自動傳輸。筆者在工程調(diào)試階段采用了兩種方法都成功的實現(xiàn)了數(shù)據(jù)的通訊。一是借助MCGS提供的一套規(guī)范的設(shè)備驅(qū)動程序接口,編寫了數(shù)據(jù)傳輸?shù)脑O(shè)備驅(qū)動程序,二是利用MCGS支持OLE Automation技術(shù)允許用戶在Visual Basic中操作MCGS中的對象這一優(yōu)勢使用VB編寫數(shù)據(jù)通訊程序 并嵌入到MCGS監(jiān)控系統(tǒng)中。
MCGS通過驅(qū)動程序、OLE兩種方法和綜合監(jiān)控系統(tǒng)通信的系統(tǒng)框圖如圖1所示。數(shù)據(jù)傳輸采用串行通信方式,8位數(shù)據(jù)位,1位停止位,現(xiàn)場采用RS-485屏蔽雙絞線通信以提高傳輸距離和抗干擾能力。

圖1系統(tǒng)框圖
1 驅(qū)動程序開發(fā)
雖然MCGS提供了大多數(shù)常用設(shè)備的驅(qū)動程序,但在實際應(yīng)用中,或因為所用設(shè)備的特殊性、或因為實際工程的需要,MCGS所提供的設(shè)備驅(qū)動程序總會有些不盡人意,但我們可以借助MCGS提供的一套規(guī)范的設(shè)備驅(qū)動程序接口,根據(jù)自己的需要來編寫設(shè)備驅(qū)動程序。
MCGS的設(shè)備驅(qū)動程序是由VB程序編寫的DLL文件,即動態(tài)連接庫文件。設(shè)備驅(qū)動程序中包含符合設(shè)備通信協(xié)議的處理程序,通過規(guī)范的OLE接口將驅(qū)動程序掛接到MCGS中,使其構(gòu)成一個整體。OLE是一個可擴(kuò)充的開放標(biāo)準(zhǔn),用于實現(xiàn)不同軟件之間的相互操作,而不管軟件本身是使用什么編程語言。因此,只要遵守MCGS的接口規(guī)范,可以使用諸如VB、VC、Delphi等來編制MCGS設(shè)備驅(qū)動程序。鑒于VB的通用性和簡單性,筆者采用了VB來開發(fā)數(shù)據(jù)傳輸?shù)尿?qū)動程序。
1.1驅(qū)動程序的實現(xiàn)
MCGS設(shè)備構(gòu)件的實現(xiàn)方法和原理與標(biāo)準(zhǔn)VB的Active DLL完全一致,但MCGS規(guī)定了一套接口規(guī)范,只有遵守這些接口規(guī)范的Active DLL才能用作MCGS的設(shè)備驅(qū)動構(gòu)件。MCGS設(shè)備驅(qū)動構(gòu)件具有5個屬性和8個方法,分別如下:
屬性接口:DevType、DevStyle、DevChannel、DevBaseIO、DevIONumber
方法接口: GetDevName、GetDevHelp、SetDevPage、InitNewDev、GetChlType、InitDevRun、RunDevCommand、CollectDevDat
開發(fā)MCGS設(shè)備驅(qū)動的過程,實際上就是根據(jù)設(shè)備的特性和需要實現(xiàn)的功能來完成5個屬性接口和8個方法接口的編程過程。
下面詳細(xì)介紹數(shù)據(jù)傳輸驅(qū)動程序的開發(fā)過程:
每個設(shè)備的驅(qū)動程序都必須有四個只讀屬性:DevType、DevStyle、DevIONumber和DevChannel。DevType標(biāo)明設(shè)備的類型 當(dāng)DevType = 0時表示父設(shè)備 ,當(dāng)DevType = 1 表示子設(shè)備 ;DevStyle標(biāo)明設(shè)備的種類 當(dāng)DevStyle= 0時表示獨立設(shè)備 ,當(dāng)DevStyle = 1時表示和串口父設(shè)備對應(yīng)的子設(shè)備; DevIoNumber標(biāo)明設(shè)備所占用系統(tǒng)I/O的個數(shù); DevChannel標(biāo)明設(shè)備的通道個數(shù)。
由于本驅(qū)動設(shè)備屬于串口父設(shè)備對應(yīng)的子設(shè)備,沒有占用系統(tǒng)I/O。又因為需要傳輸11個數(shù)據(jù),故需要11個通道。編程如下:
Public Property Get DevType(),Get DevStyle(),Get DevIONumber(),Get DevChannel() As Long
DevType = 1 DevStyle = 1 DevIONumber = 0 DevChannel = 11
End Property
MCGS在組態(tài)模式和運行模式下需要調(diào)用方法接口來實現(xiàn)特定的功能,如實現(xiàn)初始化、數(shù)據(jù)的輸入和輸出等功能。在本驅(qū)動程序開發(fā)過程中主要用到GetChlType、CollectDevDat兩個方法接口。其中GetChlType接口的目的是在運行環(huán)境中MCGS調(diào)用本接口讀取設(shè)備各通道的數(shù)據(jù)類型和通道內(nèi)容的文字描述,在設(shè)備屬性設(shè)置窗口的通道連接屬性頁中所顯示的內(nèi)容均來自本接口。此接口中alngChlDataType表示存儲通道的數(shù)據(jù)類型:1表示開關(guān)型,2表示數(shù)值型,3表示字符型。當(dāng)通道的數(shù)據(jù)類型為負(fù)數(shù)時,表示該通道的作用是Mcgs中的數(shù)據(jù)傳輸?shù)皆O(shè)備來,因此編程如下:
Public Function GetChlType(alngChlDataType As Variant, astrChlExplain As Variant) As Long
Dim lngIndex As Long
alngChlDataType(0) = 1
For lngIndex = 1 To 10
alngChlDataType(lngIndex) = -2
Next lngIndex
astrChlExplain(0) = "通信狀態(tài)標(biāo)志"
astrChlExplain(1) = "上游水位"
astrChlExplain(2) = "下游水位"
astrChlExplain(3) = "毛水頭"
.
.
.
astrChlExplain(10) = "柵壓差7"
End Function
CollectDevDat接口的作用是MCGS運行時,根據(jù)指定的采集周期,定時調(diào)用本接口,對設(shè)備進(jìn)行數(shù)據(jù)采集工作?! ollectDevDat接口十分重要,設(shè)備構(gòu)件首先調(diào)用串行通信父設(shè)備函數(shù)ComOutinDat把命令字寫到串行端口輸出到外部設(shè)備(如智能儀表),外設(shè)收到命令后,在判斷命令字正確后發(fā)送數(shù)據(jù)到串行端口,串行端口讀取返回的數(shù)據(jù),存放到通道數(shù)組asngDataValue()中供MCGS進(jìn)行各種處理操作。
由于本驅(qū)動只需要將數(shù)據(jù)傳輸出去,因此就不必讀取返回數(shù)據(jù)。MCGS的數(shù)據(jù)傳輸是按照通信協(xié)議進(jìn)行的。在本驅(qū)動程序中命令字為“#”+“數(shù)據(jù)串”+“回車”。其中#為起始符,回車符為結(jié)束標(biāo)志。編程如下:
Public Function CollectDevDat(alngDataFlag As Variant, asngDataValue As Variant, astrDataString As Variant) As Long
Dim strCommOrder,strReturnData,lngDo As String,lngReturn ,lngIndex ,itemp As Long
For lngIndex = 1 To 10
itemp = asngDataValue(lngIndex) * 100
lngDo = lngDo & Right("000000" & itemp, 6)
Next lngIndex
strCommOrder = "#" + lngDo+ Chr(33)
lngReturn=FetchDataFormComm(m_lngCheckFlag,m_objCommParent,strCommOrder,strReturnData)
End Function
函數(shù)FetchDataFormComm()的作用是將讀數(shù)據(jù)的命令通過串口發(fā)送出去,而返回數(shù)據(jù)在本驅(qū)動中不用理會。
到這里,我們已經(jīng)完成數(shù)據(jù)傳輸設(shè)備驅(qū)動程序的開發(fā)工作。
1.2測試和掛接數(shù)據(jù)傳輸設(shè)備驅(qū)動程序
啟動MCGS組態(tài)環(huán)境,打開監(jiān)控程序,在VB環(huán)境下運行驅(qū)動程序源程序,測試組態(tài)環(huán)境接口和運行環(huán)境接口,調(diào)試成功后,重新編譯一遍,生成最后可以使用的DLL文件,把這個文件拷貝到D:\MCGS\Program\Driver目錄下(默認(rèn)程序安裝到D:\MCGS中)。完成上述步驟后,就完成了數(shù)據(jù)傳輸驅(qū)動程序的掛接工作。
2 OLE方法的實現(xiàn)
MCGS組態(tài)軟件本身的OLE自動化功能可以幫助用戶在VB應(yīng)用程序中很方便地操縱MCGS組態(tài)軟件的運行。MCGS把其核心作為一個對象包裝起來,把MCGS的大多數(shù)功能作為對象的屬性和方法暴露出來,使其它的應(yīng)用程序通過OLE自動化來操作MCGS,在Visual Baisc、Excel、Access和、Delphi中都可以通過OLE自動化來取得MCGS實時數(shù)據(jù)庫對象,編程操作MCGS提供的屬性和方法。因此我們可以利用OLE自動化技術(shù)將MCGS中需要傳輸?shù)淖兞孔x取到VB中,然后通過串口通訊程序?qū)?shù)據(jù)傳輸出去。
2.1界面設(shè)置及程序編寫
建立一個工程,命名為MCGS-VB,包含一個窗體FORM1;窗體上放置一個MSComm控件;和一個Timer控件,Timer控件的Interval屬性設(shè)為5000(即5秒傳一次數(shù)據(jù))
在代碼窗口編寫程序如下:
Dim DataCentre As Object
Private Sub Form_Load()
On Error Resume Next
Set DataCentre = GetObject(, "ntre")
If Err Then MsgBox ("請先啟動MCGS運行環(huán)境!")
End
End If
End Sub
Private Sub Timer1_Timer()
Dim outdate,msg,lngDo As String, tt As Variant,otemp As Long
For i = 1 To 10
msg = "out" + Format$(i, "00")
ueFromName msg, tt
otemp =tt * 100
lngDo = lngDo & Right("000000" & otemp, 6)
Next i
On Error Resume Next
erCount = 0
ferCount = 0
If en = False Then
en = True
End If
outdat = "#" +lngDo+ Chr(13)
= outdat
End Sub
2.2 MCGS監(jiān)控程序組態(tài)
打開MCGS監(jiān)控程序,為編程方便在“實時數(shù)據(jù)庫”窗口定義10個數(shù)值型變量,命名為:OUT1,OUT2…,OUT10,并在循環(huán)策略中將需要上傳的數(shù)據(jù)分別賦給這10個變量。為了使MCGS和VB程序在運行時看起來是一個整體,可以使用 “shell”函數(shù),在MCGS工程運行時同時啟動VB數(shù)據(jù)傳輸程序。
這樣OLE的連接就完成了,數(shù)據(jù)傳輸程序和MCGS監(jiān)控程序同時運行時,就可以自動實現(xiàn)MCGS與外部設(shè)備的數(shù)據(jù)通信。
3 兩種方法比較
以上介紹的兩種方法經(jīng)過實踐都成功實現(xiàn)了數(shù)據(jù)的傳輸。
開發(fā)驅(qū)動程序,然后通過規(guī)范的OLE接口掛接到MCGS中,可以使其構(gòu)成一個整體,又由于設(shè)備驅(qū)動程序和MCGS運行在同一個進(jìn)程內(nèi),故運行速度快,可靠性高,不易受干擾。
使用OLE方法,借助VB編程,可以實現(xiàn)復(fù)雜的算法和控制功能,因而能大大擴(kuò)展MCGS的功能。
就本文所涉及的數(shù)據(jù)傳輸程序來講,MCGS和外設(shè)只是簡單的傳送數(shù)據(jù),使用驅(qū)動程序是最好的,因為在康揚(yáng)電站的水力測量工程中,由于綜合監(jiān)控系統(tǒng)與MCGS通信數(shù)據(jù)量很小,只有11個量,使用設(shè)備驅(qū)動可以保證數(shù)據(jù)通訊的穩(wěn)定性和快速性。
4 結(jié)束語
考慮到綜合監(jiān)控系統(tǒng)與MCGS通信數(shù)據(jù)量比較小,因此在工程聯(lián)調(diào)階段,最終采用了開發(fā)驅(qū)動程序這一方法,將自己編寫的數(shù)據(jù)傳輸設(shè)備驅(qū)動掛接道MCGS中,經(jīng)過長時間測試運行,MCGS與綜合監(jiān)控系統(tǒng)通信正常。
參考文獻(xiàn)
[1] 全中文工控組態(tài)軟件MCGS用戶指南. 北京:北京昆侖通態(tài)自動化軟件科技有限公司,2001.
[2] 全中文工控組態(tài)軟件MCGS參考手冊. 北京:北京昆侖通態(tài)自動化軟件科技有限公司,2001.
[3] 范逸之,陳立元. Visual Basic與RS-232串行通訊控制.北京:清華大學(xué)出版社,2002.
[4] 林 永,張樂強(qiáng). Visual Basic 6.0用戶編程手冊.北京:人民郵電出版社,1999.
[5] 李曉春,方彥軍. 監(jiān)控軟件設(shè)備驅(qū)動程序編制原理與實現(xiàn). 江西電力職工大學(xué)學(xué)報,2004,15(1):6-10.
作者簡介:
杜 崗(1981—),男,碩士研究生,研究方向:控制理論與控制工程。E-mail:dzg-1981@
馬小平(1961—),男,教授、博士生導(dǎo)師,博士,研究方向:控制理論與控制工程;
Two Realizable Methods of the Data Communication Based on MCGS and the Comparision
Du Gang Ma Xiaoping
(School of Information and Electrical EngineeringChina University of Mining and Technology,Xuzhou, 221008)
Abstract: This paper mainly introduces solving methods and detailed steps of the date communication problem between the automatization supervise system of Kangyang water-power plant based on MCGS and the complex supervise and control system .The penman adoptes two kind is that carrying out the equipments drives of the second is that using OLE makes link between the data communication program based on VB and MCGS .The two Above-mentioned methods are all successful in data communication. In the end,carrying on the comparision and selection to the two mefhods.
Key words: MCGS,VB,Communication,OLE
(轉(zhuǎn)載)