李 貴 劉衛(wèi)紅 金 旭 江 輝
(浙江浙大中控信息技術有限公司,310053,杭州∥第一作者,工程師)
組件對象模型技術在地鐵綜合監(jiān)控系統(tǒng)的應用
李 貴劉衛(wèi)紅金 旭江 輝
(浙江浙大中控信息技術有限公司,310053,杭州∥第一作者,工程師)
摘 要闡述了組件對象模型(COM)技術在地鐵綜合監(jiān)控系統(tǒng)軟件平臺開發(fā)中的應用情況,詳述了COM技術在基于組態(tài)軟件平臺Cimplicity HMI上進行二次開發(fā)時的應用。通過與傳統(tǒng)開發(fā)模式的對比,展現了COM技術在Cimplicity HMI平臺上開發(fā)的優(yōu)勢。COM技術可解決傳統(tǒng)開發(fā)模式存在的代碼碎片化、控制代碼與畫面視圖嚴重耦合、代碼編號不方便、調試困難、難以版本管理、代碼無法保密等問題,具有較好的實用性,值得推廣。
關鍵詞軌道交通;綜合監(jiān)控;組件對象模型;組態(tài)軟件平臺
Author's address Zhejiang SUPCON Information Co.,Ltd,310053,Hangzhou,China
目前,優(yōu)秀的上位機組態(tài)軟件較多,由GE IP公司開發(fā)的Cimplicity HMI便是其中之一。Cimplicity HMI支持OLE、COM組件(Active X DLL),畫面編輯簡單易用,可提供報警、日志、趨勢、遠程瀏覽、冗余等功能。
由于應用行業(yè)的不同,每個監(jiān)控工程的功能是不同的。Cimplicity HMI可以創(chuàng)建程序腳本正是解決此問題的關鍵。它允許用戶用類似于Visual Basic類型的編程語言(Basic Control Language,簡為“BCL”)在其提供的編譯環(huán)境(Basic Control Environment,簡為“BCE”)中創(chuàng)建程序。BCE提供了一個用戶根據自身需求進行二次開發(fā)的編譯環(huán)境,用戶可以在BCE的全局模塊或者各個畫面中創(chuàng)建變量、結構體、函數等代碼。
目前流行的做法是:分別在每個畫面中創(chuàng)建相應的功能函數,部分公共函數從全局模塊中調用。GE官方提供的二次開發(fā)樣例也是如此。但是,這樣的開發(fā)模式會導致代碼碎片化、代碼編寫調試困難、版本管理混亂等一系列問題。本文以在Cimplicity HMI上進行綜合監(jiān)控軟件平臺客戶端(下稱“客戶端”)的二次開發(fā)為例,介紹一種以COM組件嵌入BCE的全新開發(fā)方式,很好地解決了這些問題。
BCE提供了一個與Visual Basic語言極為相似的用戶命令環(huán)境,內置了一個超過600個標準功能函數的程序集,并且提供相應的訪問接口。通過這些接口,可以訪問或控制Cimplicity的數據點、報警和錯誤記錄等數據。通過BCE可以實現算術運算、邏輯運算、字符串處理、文件處理、數組處理、DDE通信、Windows界面交互等各種功能。
1.1傳統(tǒng)開發(fā)模型
在BCE提供的開發(fā)環(huán)境下,傳統(tǒng)的二次開發(fā)模型如圖1所示。
工程組態(tài)時,一個畫面通常會繪制多個圖元,包括普通的矩形、多邊形、圓形、圖片、按鈕、文本、OLE(對象連接與嵌入)對象、微軟.NET控件、趨勢控件等。當圖元需要執(zhí)行或響應一個操作時,就需要在相應的圖元上綁定一個對應的腳本。腳本可以調用一個公共的全局模塊腳本,由此可以實現某些公共變量或者函數的共享和控制。腳本可以控制畫面中的各個圖元的多種狀態(tài),如位置、大小、顏色、文本等。
1.2傳統(tǒng)開發(fā)模型存在的問題
(1)代碼碎片化。BCE并沒有提供一個類似于VC++或者VB的集成編譯環(huán)境,所有的代碼都分布在全局腳本以及各個畫面的圖元中,如果畫面較多,且每張畫面中的圖元層次和數量也較多時,代碼編寫、維護的工作量將明顯增大。特別是像地鐵行業(yè),各個圖元的組態(tài)都是比較復雜的,以電力監(jiān)控系統(tǒng)中的一個電動開關為例,不僅要考慮開關的開、關狀態(tài),還要考慮開關設備的斷線、維修等狀態(tài),每個狀態(tài)都需要對此開關圖元中的子圖元進行組態(tài),因此層次可能較深,數量也可能較多。類似的圖元可能在整個監(jiān)控平臺中的很多地方出現,意味著相應的代碼可能分布在不同的地方。這樣就導致了代碼的碎片化現象。代碼碎片化給代碼的維護和調試帶來了很大的困難,因為調試前必須找到相應的代碼進行斷點,而當圖元結構層次和數量都很多時,工作量大大增加。
(2)控制代碼與畫面視圖嚴重耦合。此問題造成的后果是:代碼編寫和畫面制作無法很好地由兩組人員完成,且改動也將受到牽制。必須先由畫面組態(tài)人員繪制完畫面后,開發(fā)人員才能進行相應的編碼工作;且一旦涉及更改,必須由畫面組態(tài)人員再次提供相應的畫面后,方能進行代碼更改,否則將導致混亂的對應狀態(tài)。
(3)BCE存在缺陷。BCE雖然是一個腳本代碼的編寫環(huán)境,卻存在以下問題:①代碼沒有智能提示;②函數有順序限制;③無法跨模塊使用全局變量;④不能使用Byte數據類型;⑤函數不能返回數組;⑥不能使用Replace、Split等字符串常用函數。此缺陷造成無法有效、高效地進行代碼編寫。
(4)調試工作困難。BCE編譯環(huán)境中,不能像普通編譯器一樣對任意編寫的函數進行斷點調試,必須在每處函數調用入口設置斷點后才能進入需要的調試狀態(tài)。另外,編譯器提供的監(jiān)視功能只能監(jiān)視數值和文本,當監(jiān)視對象類型的變量時,不能顯示對象的屬性及屬性值,對解決問題時的調試幾乎沒有作用。
(5)版本管理困難。BCE沒有單個整體代碼工程的概念,所有的代碼“散落”在各畫面的圖元中,所以代碼的版本管理比較困難。
(6)代碼公開化問題。代碼直接綁定到圖元中,導致接觸到客戶端的人都可以點開各個圖元而看到里面綁定的腳本代碼,對代碼的規(guī)范管理存在一定風險。
COM(Component Object Model,組件對象模型)是一種以組件為發(fā)布單元的對象模型,可使各軟件組件用一種統(tǒng)一的方式進行交互。COM既提供了組件之間進行交互的規(guī)范,也提供了實現交互的環(huán)境,并且組件對象之間交互的規(guī)范不依賴于任何特定的語言。
客戶端使用Visual Basic 6.0作為編譯環(huán)境,創(chuàng)建Active X DLL工程,最終編譯形成單獨的DLL文件,進行開發(fā)、調試、編譯、部署等工作。
2.1COM開發(fā)模型
整體的開發(fā)模型如圖2所示??梢姡珻OM開發(fā)模型不再將功能腳本寫到每個圖元里,而是將全部的具體實現的功能代碼都放到COM組件中,實現代碼的集中管理。在每個圖元中只有標準的調用代碼,BCE全局腳本中也只有統(tǒng)一的調用代碼,真正實現的代碼全部移入COM組件工程中。其結合軟件設計模式中的“簡單類工廠模式”,動態(tài)地創(chuàng)建相應的類,有效地實現了內存管理并取得了良好的系統(tǒng)性能。
2.2COM開發(fā)模型實現
COM組件有三種形式:①進程內(組件以DLL方式存在,它與客戶在同一進程內);②進程間(以EXE方式存在,它與客戶在同一臺機器卻不在同一進程內);③不同機器上以EXE方式存在。不論何種形式,客戶都不必知道使用的是哪種組件,因為COM組件對象是位置透明的。本文詳細介紹采用第一種COM組件形式,現實地鐵綜合監(jiān)控系統(tǒng)軟件平臺客戶端的二次開發(fā)。具體構成如圖3所示。
整體函數調用和控制的實現原理,如圖4所示。
圖2 COM開發(fā)模型
圖3 COM組件存在形式
詳細實現過程如圖5所示。
首先,需要響應圖元的事件必須在相應的圖元上綁定執(zhí)行腳本。圖元所能觸發(fā)的事件僅是Cimplicity提供的20多種事件,所以圖元需要綁定的腳本也就20多個代碼段。以響應鼠標點擊事件為例,畫面圖元中On MouseUp調用全局腳本中的On MouseUpEx函數。
gISCSLib在全局腳本中,主要用于存放其模塊的20多個事件的響應調用對象。它是后臺COM組件ISCSLib的一個實例。ISCSLib工程中的Main類包含了On MouseUp集中響應函數,此函數中實現簡單類工廠的代碼如下:
Select Case sScr Name
Case"startmimic.cim"
Set oScrCOM = New Scr_StartMimmic
Case"navigator.cim"
Set oScrCOM = New Scr_NaviSymbols
End Select
CallByName oScrCOM,"OnMouseUp",VbCallType.VbMethod,X,Y,flags,oControl
在On MouseUp事件中通過簡單類工廠模式,很好地解決了多類型對象的實例化問題,并最終通過執(zhí)行的CallBy Name函數,利用“反射”機制調用具體類中的函數,達到控制或者執(zhí)行某個具體功能函數的目的。
圖4 COM模型調用原理
圖5 COM模型實現過程
2.3COM開發(fā)模型的優(yōu)勢
使用COM技術在Cimplicity HMI平臺上進行二次開發(fā),非常巧妙地克服了傳統(tǒng)開發(fā)模式的各種缺點。
(1)代碼管理集約化。具體現實代碼被全部轉移到COM工程后,一個工程就能管理所有的實現代碼,并可充分利用VB編譯器的各種功能,方便代碼的編寫和維護,大大提高工作效率。
(2)控制代碼與畫面視圖解耦。圖元和全局腳本中只剩少量的“接口型”標準調用代碼,組態(tài)人員可以在畫圖時直接將代碼復制到圖元腳本中,并不用關心后續(xù)的代碼編寫;腳本開發(fā)人員也不再受制于圖元中的代碼,具體的代碼全部編寫到COM工程中即可。圖形組態(tài)人員和代碼開發(fā)人員互不干擾,可以并行開,大大提高了工作效率,降低了兩者的工作沖突。
(3)標準VB開發(fā)。絕大多數代碼被轉移到Visual Basic 6.0開發(fā)的COM工程中,人員只要使用VB開發(fā)環(huán)境即可輕松編碼。
(4)調試方便。將COM工程設置為“Active X DLL”工程類型,結合Cimplicity的BCE進行代碼聯(lián)調,所有在COM工程中的斷點都可以正常攔截并調試,所有類型的變量都可以正常查看,調試十分方便。
(5)方便版本管理。所有功能代碼集中在COM工程中,可方便地進行VB工程的代碼版本管理工作。
(6)代碼隱藏。COM工程最后編譯生成的是一個DLL文件,關鍵性的代碼被隱藏,從而非常有效地保護了軟件代碼不被泄露。
本文提出了一種基于COM技術開發(fā)地鐵綜合監(jiān)控軟件的方案。該方案基于Cimplicity HMI工控組態(tài)軟件平臺,結合Cimplicity支持COM組件的特性,利用COM技術開發(fā)Active X DLL,解決了傳統(tǒng)開發(fā)模式的諸多問題,可大大節(jié)省整個系統(tǒng)的研發(fā)時間,以及后期系統(tǒng)的維護費用。
傳統(tǒng)開發(fā)模式存在代碼碎片化、控制代碼與畫面視圖嚴重耦合、代碼編寫不方便、調試困難、難以版本管理、代碼無法保密等的缺點,COM開發(fā)模式可很好地解決這些問題。該技術可運用于不同行業(yè)中相類似的開發(fā)過程,能解決非常實際的開發(fā)問題,值得推廣。
參考文獻
[1] Curland Matthew J,Storage,Bill.Advanced Visual Basic 6 [M].涂翔云,劉玉印,劉巖,譯.北京:中國電力出版社,2001.
[2] 程杰.大話設計模式[M].北京:清華大學出版社,2007.
[3] 張婭.COM研究及其在組態(tài)軟件中的應用[J].微計算機信息,2006,22(34):49.
[4] 王海剛.COM中的設計模式[J].計算機仿真,2004,21 (5):184.
[5] 歐建斌.工廠設計的模式研究[J].微型電腦應用,2010,26 (12):15.
[6] 張偉.用VB實現COM組件的包容[J].計算機應用,2001,21 (10):99.
[7] 吳東慶.反射機制下類工廠模式的實現與研究[J].計算機應用,2006,26(3):705.
Application of COM Technology to Metro Integrated Supervisory Control System
Li Gui,Liu Weihong,Jin Xu,Jiang Hui
AbstractThe application of COM technology in the soft platform development of metro ISCSis described,the application and research findings of COM technology on the redevelopment based on Cimplicity HMI software platform are introduced in detail.Compared with traditional application development,the technological advantages of COM development on Cimplicity HMIsoftware platform are fully displayed.It could solve many problems existing in the traditional mode such assevere coupling of coultrol code and picture,debugging difficulties,vulnerable code and so on,thus has good practicability and promotional value.
Key wordsurban rail transit;integrated supervisory control system(ISCS);component object model(COM);Cimplicity HMI software platform
中圖分類號U 29-39
DOI:10.16037∕j.1007-869x.2016.01.025
收稿日期:(2014-06-03)