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