, ,
(武漢理工大學(xué) 仿真中心,武漢 430063)
隨著仿真系統(tǒng)日益復(fù)雜,提高仿真軟件開發(fā)效率、縮短研發(fā)周期,同時保證軟件系統(tǒng)的可靠性和重用性成為仿真研究的焦點。圖形化建模是一種提高軟件開發(fā)效率的有效途徑。20世紀(jì)80年代中期以來,國內(nèi)外許多公司和研究機構(gòu)相繼開發(fā)出圖形化建模軟件。
本文在分析前人研究成果的基礎(chǔ)上,開發(fā)了一套圖形化建模軟件,該軟件致力于為包括船舶熱力系統(tǒng)在內(nèi)的仿真系統(tǒng)的開發(fā)提供開發(fā)環(huán)境。
模塊化建模是將大系統(tǒng)分解成由若干個基本單元構(gòu)成的子系統(tǒng)(模塊),然后用數(shù)學(xué)、物理分析方法建立這些基本單元的數(shù)學(xué)模型,形成算法庫,算法與基本單元一一對應(yīng),最后再根據(jù)實際系統(tǒng)的物理過程用這些算法構(gòu)造出模型[1]。圖形化建模是建立在模塊化建模的基礎(chǔ)上的一種建模方法。
圖形化建模通常采用兩種方式定義拓撲結(jié)構(gòu):節(jié)點支路方式和設(shè)備接口方式[2]。本文對設(shè)備接口方式進行了修改,其定義方式為:采用一種特殊的有向圖來描述具體的仿真系統(tǒng)中各個設(shè)備、設(shè)備之間的聯(lián)系以及設(shè)備之間數(shù)據(jù)的傳遞關(guān)系,有向圖由模塊節(jié)點、弧和端口組成,其中,模塊節(jié)點代表一個模擬相應(yīng)模塊功能的模型程序;端口代表一系列變量,端口具有方向性,即是輸出端口還是輸入端口;弧代表數(shù)據(jù)流動的方向以及模塊之間的聯(lián)系。用戶必須遵循以下約定:
1) 在弧的兩端,輸出端口的數(shù)據(jù)類型必須是輸入端口數(shù)據(jù)類型的子集。
2) 與弧頭相關(guān)聯(lián)的必須是輸入端口,與弧尾相關(guān)聯(lián)的必須是輸出端口。
在圖形化建模中,用戶通過組態(tài)的方式方便快捷地構(gòu)建仿真模型,然后進行拓撲識別,根據(jù)拓撲識別的結(jié)果生成模型程序,見圖1。
圖3 圖元庫類結(jié)構(gòu)圖
圖1 圖形化建?;驹?/p>
圖形化建模軟件的體系結(jié)構(gòu)設(shè)計采用層次結(jié)構(gòu),共分為3層:組態(tài)層、模型層以及運行支撐層。
組態(tài)層位于體系結(jié)構(gòu)的最上層,直接與用戶交互,提供一系列圖元以及用實現(xiàn)組態(tài)功能的接口,存儲并分析仿真系統(tǒng)的拓撲結(jié)構(gòu),向模型層傳遞拓撲分析的結(jié)果以及數(shù)據(jù)流動的方向;模型層維護一個模型程序庫,根據(jù)組態(tài)層傳遞下來的信息從模型程序庫中提取相應(yīng)的模型程序合成能夠模擬仿真系統(tǒng)的模型程序;運行支撐層提供一系列服務(wù)以實現(xiàn)模型程序的掃描入庫、監(jiān)視、運行、控制等。
組態(tài)層包括圖元庫、圖元操作接口以及拓撲分析3大部分。圖元是圖形的幾何元素,如點、線、矩形等。復(fù)合圖元由基本圖元組合而成,如調(diào)整框。可操作圖元是一種在圖形編輯界面中,用戶可以進行創(chuàng)建、修改、刪除等操作的圖元。模塊又稱為元件,是一種可操作圖元,在組態(tài)層中,其代表仿真對象中的某個設(shè)備或某個系統(tǒng);在模型層中,其代表模擬某個設(shè)備或系統(tǒng)的模型程序。組態(tài)層中的圖元庫由基本圖元和復(fù)合圖元組成,其結(jié)構(gòu)如圖2所示。
圖2 圖元關(guān)系示意
其中,模塊、連接線、調(diào)整框為復(fù)合圖元。模塊是唯一作為網(wǎng)絡(luò)節(jié)點參與拓撲分析的圖元。模塊圖標(biāo)為一種特殊的基本圖元由一幅位圖構(gòu)成,位圖圖像信息中的關(guān)鍵色在顯示時取背景色。圖元類庫是根據(jù)圖元之間的關(guān)系建立起來的,圖元類之間的結(jié)構(gòu)關(guān)系見圖3。
如圖3所示,所有可操作圖元以及部分基本圖元均派生自圖元類。圖元類是一個虛基類,它的公共接口由所有派生類的公共接口的并集和圖元組合操作接口構(gòu)成,軟件通過圖元類提供的接口實現(xiàn)仿真系統(tǒng)的圖形組態(tài)。
軟件根據(jù)用戶組態(tài)描述的仿真系統(tǒng)提取其中的模塊以及模塊之間的關(guān)系生成一個有向圖,對有向圖的拓撲結(jié)構(gòu)進行分析排序,識別模塊的執(zhí)行先后次序,生成一個拓撲序列。無論是電網(wǎng)還是熱力系統(tǒng),工質(zhì)流的流動往往形成一個回路,即用于描述仿真對象的有向圖中往往存在環(huán)路。傳統(tǒng)的拓撲排序算法無法有效解決這種環(huán)路問題。文獻[3-4]中提出了2種不同的拓撲分析的方法,分別應(yīng)用于流體網(wǎng)絡(luò)和熱力系統(tǒng),但是這兩種方法都基于一個前提條件:網(wǎng)絡(luò)中至少存在一個邊界點。因此,需要在傳統(tǒng)的拓撲算法上進行改進。有向圖中環(huán)路有兩種情況:
1) 整個系統(tǒng)是一個環(huán)路。
2) 系統(tǒng)中存在環(huán)路。
針對這兩種情況,重新設(shè)計的拓撲序列生成算法如下:
1) 創(chuàng)建一個空的拓撲序列隊列,鏈表中的元素是節(jié)點。
2) 采用深度優(yōu)先算法搜索有向圖,看圖中是否存在未標(biāo)記移出(以下簡稱標(biāo)記)的源點。
3) 若沒有未標(biāo)記的源點,進入步驟7);否則,判斷源點是否是環(huán)路中的一個節(jié)點。
4) 若源點是環(huán)路中的一個節(jié)點,則將環(huán)路中該源點和其前驅(qū)節(jié)點間的弧打上標(biāo)記。
5) 將源點送入拓撲序列隊列,將源點和源點的輸出弧打上標(biāo)記。
6) 返回步驟2)。
7) 若有向圖中所有節(jié)點均打上標(biāo)記,則結(jié)束算法;否則,提示用戶在環(huán)路中選擇一個節(jié)點或選擇環(huán)路中入度最小的節(jié)點,將節(jié)點的輸入弧打上標(biāo)記,返回步驟2)。
模型層包括模型程序管理以及模型程序合成兩個部分。軟件采用文件系統(tǒng)和關(guān)系數(shù)據(jù)庫系統(tǒng)來管理模型程序:用文件系統(tǒng)來管理模型程序的源文件,用關(guān)系數(shù)據(jù)庫來存儲模型程序的源文件的路徑、模塊與模型程序的映射關(guān)系以及端口與變量的映射關(guān)系。模型程序管理模塊是一個具有可擴展性的模塊,提供模塊增加、編輯以及刪除功能。
模型程序的合成是根據(jù)拓撲排序的結(jié)果調(diào)用相應(yīng)的模型程序,生成能夠模擬用戶在組態(tài)界面上描述的仿真系統(tǒng)的模型程序。
合成后的模型程序依次循環(huán)調(diào)用各模塊所對應(yīng)的模型程序,在調(diào)用前將參數(shù)輸入,在調(diào)用后將結(jié)果輸出,參數(shù)的輸入和輸出是根據(jù)與模塊相連的弧的方向以及端口來決定。在每次調(diào)用模型程序時,均需計算仿真精度,直到達到一定的仿真精度時才調(diào)用下一個模型程序。
支撐運行層是一個支撐運行環(huán)境,提供模型程序掃描、變量數(shù)據(jù)管理、工況控制等功能。支撐運行層將C語言編寫的模型程序以字符流的形式送入掃描模塊中,掃描模塊將字符流分解成各種有意義的語法單元(如預(yù)編譯指令、變量定義等),獲取變量定義單元,根據(jù)C語言的詞法規(guī)則對變量定義單元進行解析,生成單詞串進行語法分析,最終獲取變量、函數(shù)頭等信息。
掃描模塊在掃描的同時還對模型程序進行了兩個方面的處理:
1) 修改模型程序中的變量定義語句,通過引用和指針的方式使得模型程序和變量數(shù)據(jù)庫能共享同一塊空間,從而建立一種映射關(guān)系。
2) 生成主控函數(shù),創(chuàng)建一個工作線程循環(huán)調(diào)用合成后的模型程序,實現(xiàn)模型程序和圖形化建模軟件間的通信。
變量數(shù)據(jù)管理是通過一個變量數(shù)據(jù)庫來完成的。變量數(shù)據(jù)庫是一個采用內(nèi)存文件映射機制實現(xiàn)的內(nèi)存數(shù)據(jù)庫,數(shù)據(jù)庫分為2個存儲區(qū):變量屬性存儲區(qū)和變量值存儲區(qū)。前者用于存放諸如:變量名、變量類型等變量屬性信息,后者用于存放變量值。變量數(shù)據(jù)庫支撐數(shù)據(jù)在模型程序和圖形化建模軟件間共享。
圖形化建模的采用,簡化了用戶的操作,降低了用戶對計算機編程等知識的使用要求。本文研究和分析的結(jié)果被成功運用于仿真中心船舶輪機系統(tǒng)的圖形化建模軟件開發(fā)中,經(jīng)過檢驗測試證明本文提出的相關(guān)理論和算法是可行的,尤其是它解決了仿真系統(tǒng)中存在回路時的拓撲分析問題。
[1] 胡建宏.Star-90模塊式圖形化建模技術(shù)的實現(xiàn)[J].電力情報,2000(3): 52-54.
[2] 蔡瑞忠.圖形建模中流體網(wǎng)絡(luò)拓撲結(jié)構(gòu)的定義與識別[J].清華大學(xué)學(xué)報(自然科學(xué)版),1999,39(6):63-66.
[3] 謝茂清,朱 文,任挺進.流體網(wǎng)絡(luò)拓撲分析的研究[J].系統(tǒng)仿真學(xué)報, 1998,10(5):43-47.
[4] 談 理,唐勝利.熱力系統(tǒng)圖形化建模軟件的開發(fā)[J].計算機仿真, 2004,21(11):239-241.