0.引言
在EMS中,圖形界面是人機接口的重要組成部分。其中在圖形建模及開 發(fā)方面,早在上世紀八十年代就提出了面向?qū)ο蠼5乃悸罚∣bject-Oriented, 即OO 模型) [1-4]。這種自上而下的建模方法有代碼重用率高、開發(fā)周期較短以 及便于維護等優(yōu)點。不過,對于傳統(tǒng)的OO方法,目前大多仍從底層開發(fā)(如 Windows API, MFC等[5,6])的方式,一旦涉及相對復雜的圖形技術,代碼將急速 膨脹,軟件的開發(fā)周期依然相當可觀。
本文提出了一種新的圖形建模及開發(fā)方法:面向圖形對象的建模 (Graphic Object-Oriented,簡稱GOO)方法。它與傳統(tǒng)面向?qū)ο蟮膱D 形建模方法相比,主要區(qū)別在于它關注的不再是怎樣從計算機底層代碼去實現(xiàn)圖 形,而是可視化的圖形對象。圖形對象是由相應的圖形類生成的。圖形類除了擁 有一般類的特征之外,還擁有可視的圖形,能夠直接編輯,同時也可以通過程序 代碼來操縱。GOO建模的特點決定了它需要比以往更高等級的開發(fā)平臺。該平臺需 要擁有完全可視的圖形開發(fā)人機接口,而且能夠內(nèi)部管理各種圖形交互事件并提 供基本的圖形對象和建模工具。故GOO建模起點較之OO建模更高,但對開發(fā)者而言 難度則大大降低,效率也大幅度提高。
本文基于Visual Graph圖形平臺(以下簡稱VG),圖形建模采用自上而下 的類的繼承的思路:在VG提供的基本的圖形單元類的基礎上進行繼承和擴充,建 立各種元件部件類,再把這些部件組合,形成各種電力元件的模型。最后繪制復 雜的電力系統(tǒng)。
1.VG的基本結構及基本單元類
1.1VG的基本結構
目前國內(nèi)外已經(jīng)開發(fā)了多種組態(tài)式圖形通用系統(tǒng),如ArcObject、 VectorDraw、JFDraw, Visual Graph等。其中VG是一種ActiveX組件,主要包括 一套基本可視圖形類庫和管理圖形的接口,另外還提供圖形開發(fā)建模的工具。其 中的可視圖形類有各種成員屬性和成員函數(shù),可通過一套語法簡潔的腳本語言來 操作圖形,并對外提供編程接口,內(nèi)嵌到各編程工具中進行開發(fā)。
1.2VG的基本單元類
VG提供一個基本圖形單元類-IUnit,它由描述圖形單 元特征的基本屬性和函數(shù)組成,例如名稱Name,坐標Left、Top,尺寸Width、 Height,移動函數(shù)MoveTo(x,y)等,設計時既可通過鼠標操作來修改圖形,也可直 接設置相應屬性值。Unit下面繼承有四種子類:
文字單元類 IText:該類為文本框?qū)ο?,成員屬性包括 文字內(nèi)容Text,字體Font等。
形狀單元類 IShape:該類包括矩形、橢圓、圓角矩形 、圓弧四種形狀對象,成員屬性包括線條顏色LineColor、線寬LineWidth、背景 顏色BackColor等。
折線單元類 ILine:該類包括點、線、連接點、連接線 ,成員屬性包括組成折線的點集合Points[i]、各點類型屬性Bytes[i]、線條類形 LineType等。其中連接線可以連接兩個圖形,形成一組拓撲連接關系。
元件單元類 IElement:該類看作一個類似容器的空白 圖形,它容納其他的子圖形以形成新的圖形類,其成員屬性包括組成元件的子對 象集合Units[i],子對象數(shù)目UnitCount等。由上述的幾種基本圖形類可以在 IElement中繪制任意復雜的二維圖形,組成一個新的圖形類,即新的元件類。本 文最后要建立的電力元件就是用IElement制作的圖形元件類。
上述即是VG提供的基本圖形單元類,除此之外,VG還提供了對圖形的基本 操作函數(shù),包括添加、刪除、移動、旋轉、對齊、縮放、拷貝、剪切、粘貼、撤 銷、恢復、修改顏色、文本框字體等。對于復雜的操作,可用這些函數(shù)不同的組 合來實現(xiàn)。
2.電力元件部件類
本文將電力元件定義為圖形對象和端口對象 的有序組合。圖形對象是描述電力元件的圖形符號,以一次設備單線圖 為例,如三繞組變壓器是由三個圓表示,負荷由一根箭頭線表示等。端口對象則 是元件之間連接的紐帶。如圖1所示,””代表元件的一個端口,圖中G1和BK1之 間的端口重合,則二者已經(jīng)連接在一起,在VG中元件可以通過端口的自動吸附來 實現(xiàn)連接。
元件中的每個圖形對象或者端口對象就稱為該元件的一個部件。元件部件 類由圖形類和端口類組成。二者都繼承自基本圖形類,本文定義了如下的端口類 和圖形類:
?。?端口部件類,MyPort:繼承自VG的ILine中的連接 線,該線只包含一個點,即一根退化為點的連接線。端口部件類除了折線單元類 的屬性外,還擴充了如下自定義的屬性:
電壓等級Vn,整型。缺省值為0,代表尚未指定電壓等 級;
端口序號PNo,整形,只讀。為方便按電壓等級著色, 在同一元件中,規(guī)定不同電壓等級端口的端口序號是不同的,而同一電壓等級中 端口的端口序號是相同的。比如線路、開關等元件兩端的端口電壓等級相同,則 其PNo都是0,而含有多電壓等級的元件如圖1中的三繞組變壓器T1,它有三個端口 ,電壓等級都不同,其端口序號分別為0、1、2,而圖1中的斷路器BK1,有兩個端 口,電壓等級相等,端口序號均為0。
圖1元件的端口、端口序號、元件之間的連接及不同電壓等級 著色示意圖
Fig1 Ports of elements, No. of ports, connection between elements and coloring of different parts of element by different voltage classes
端口帶電狀態(tài) PState,整型,指該 端口在帶電著色后的狀態(tài),值0,1依次代表停電、帶電,缺省值為0;
端口類型PType,整形,指該端口所在支路的類型,值 為0,1,2依次代表輻射支路、橋路和環(huán)路,缺省值為0;
節(jié)點號PNodeNo,指該端口所連接的電氣節(jié)點序號,缺 省值0代表尚未分配節(jié)點號。
?。?圖形部件類MyGraph:繼承自VG的基本圖形單元類 IUnit,下面繼承有形狀類MyShape和線類MyLine,二者分別又同時繼承自IShape 和ILine。為了方便按電壓等級著色,這兩個類擴充了一個自定義屬性PNo,其值 與同電壓等級端口中的PNo相同。
3.電力元件類
建立好了元件的基本部件圖形類和端口類之后,再擴充其 它一些必要的屬性,就可以組合起來形成各種類型的電力元件。
電力元件類MyElement:繼承自IElement,主要屬性如 下:
圖形連接的集合Links[i](系統(tǒng)自帶屬性),從該屬性 可以得到某個連接所在的本元件的連接端口Port,以及該連接連到的另一元件 LinkUnit及其端口LinkPort。如圖1,G1只有一個連接:G1.Links [0].Port=G1.Port0,G1.Links[0].LinkUnit=BK1,G1.Links [0].LinkPort=BK1.Port0,其它元件的該屬性也類似于此。此屬性可方便地實現(xiàn) 深度/廣度優(yōu)先遍歷。
TypeNo,元件的類型號,整型,只讀,如可規(guī)定1代表 發(fā)電機、2代表負荷等;
SearchState,元件的被遍歷狀態(tài),缺省值0表示尚未被 遍歷到,1表示已經(jīng)被遍歷;
這樣電力元件類確定后,就可以在其內(nèi)加入圖形部件和端口部件,組成各 種類型的元件。電力元件的類型一般比較穩(wěn)定,可以分為如下的幾類:
功率類,單端口元件,包括發(fā)電機、調(diào)相機、負荷、接 地電容、電抗等;
母線類,單端口元件無阻抗的元件;
開關類,雙端口元件,包括開關、刀閘等,兩端口同屬 一個電壓等級。開關類有特殊屬性開關狀態(tài)State,整型,0代表斷開,1代表閉合 ;
變壓器類,多端口元件,包括各種變壓器,各端口電壓 等級Vn不同,則各端口的PNo也不同;
阻抗類,雙端口元件,包括架空線、電纜、串聯(lián)電抗器 、串聯(lián)電容器等元件,各端口的PNo相同。
4.標注類
標注類MyLabel:繼承IText類,增加自 定義屬性UnitName,即該標注所指的元件名 ,字符串型。標注類用來對元件進行標注,如元件名稱,電氣參數(shù)等。
圖2為電力元件類圖形建模類的結構示意圖。
圖2電 力元件的類的建立
Fig 2 Construction of classes of various power elements
5.圖形建模系統(tǒng)
本文的圖形建模系統(tǒng)由三個模塊組成,如圖3所示:
圖3 圖形建模系統(tǒng)的結構
Fig3 The structure of Graphic Model Building System
建模時,按照自上而下,由簡到繁的方式,從當前元件庫中選取圖形元件 搭建新的圖形,同時設計其成員屬性和成員函數(shù),最后將繪制好的新圖當<