俞明帥,黃金泉
(南京航空航天大學(xué)能源與動(dòng)力學(xué)院,南京 210016)
航空發(fā)動(dòng)機(jī)動(dòng)態(tài)鏈接庫(kù)模型建模技術(shù)研究
俞明帥,黃金泉
(南京航空航天大學(xué)能源與動(dòng)力學(xué)院,南京 210016)
俞明帥(1988),男,在讀碩士研究生,主要研究方向?yàn)楹娇瞻l(fā)動(dòng)機(jī)建模。
針對(duì)目前航空發(fā)動(dòng)機(jī)組態(tài)建模軟件不能輸出用戶所搭建模型的局限性,設(shè)計(jì)了與組態(tài)建模軟件相匹配的通用發(fā)動(dòng)機(jī)動(dòng)態(tài)鏈接庫(kù)模型框架,并將用戶在組態(tài)建模軟件上錄入的模型信息輸出為1個(gè)配置文件,加載該動(dòng)態(tài)鏈接庫(kù)模型和配置文件進(jìn)行發(fā)動(dòng)機(jī)仿真,仿真結(jié)果與采用組態(tài)建模軟件所得到的結(jié)果一致。通過(guò)該方法實(shí)現(xiàn)了輸出組態(tài)建模軟件中模型的功能,輸出的模型可用于發(fā)動(dòng)機(jī)數(shù)控系統(tǒng)的設(shè)計(jì)等工作中。
動(dòng)態(tài)鏈接庫(kù);航空發(fā)動(dòng)機(jī);建模技術(shù)
由于具有可重用性、繼承性等優(yōu)點(diǎn),面向?qū)ο蠼<夹g(shù)逐漸成為航空發(fā)動(dòng)機(jī)仿真領(lǐng)域的主流技術(shù)[1-3]。21世紀(jì)后,航空發(fā)動(dòng)機(jī)建模的最新發(fā)展趨勢(shì)是通過(guò)圖形界面組態(tài)的方式,而非編程的方式,選擇、配置、裝配和使用那些封裝好的、可替換的功能模塊,來(lái)快速靈活地搭建結(jié)構(gòu)合理的發(fā)動(dòng)機(jī)模型進(jìn)行仿真[4-5]。文獻(xiàn)[5]設(shè)計(jì)的航空發(fā)動(dòng)機(jī)組態(tài)建模軟件,可以通過(guò)圖形界面操作的形式方便地進(jìn)行多種類型發(fā)動(dòng)機(jī)的建模及仿真,但不能將用戶所搭建的模型輸出。
本文基于文獻(xiàn)[5]設(shè)計(jì)的航空發(fā)動(dòng)機(jī)組態(tài)建模軟件,研究了輸出組態(tài)模型的方法,即采用配置文件來(lái)定制通用發(fā)動(dòng)機(jī)動(dòng)態(tài)鏈接庫(kù)(Dynamic Link Library,DLL)模型,設(shè)計(jì)了通用發(fā)動(dòng)機(jī)DLL模型的框架結(jié)構(gòu)和組態(tài)建模軟件生成配置文件的方法。通過(guò)算例的仿真結(jié)果可以看出,同時(shí)加載通用發(fā)動(dòng)機(jī)DLL模型與配置文件進(jìn)行仿真,可以得到與組態(tài)建模軟件一致的結(jié)果,從而實(shí)現(xiàn)了輸出組態(tài)模型的功能。
從使用角度看,航空發(fā)動(dòng)機(jī)組態(tài)建模軟件可以分為前臺(tái)模型組態(tài)環(huán)境與后臺(tái)模型運(yùn)行環(huán)境2部分。在前臺(tái)模型組態(tài)環(huán)境中,用戶通過(guò)拖放部件圖標(biāo)庫(kù)并連線的方式組建發(fā)動(dòng)機(jī)模型,在部件屬性頁(yè)上錄入設(shè)計(jì)點(diǎn)參數(shù)、部件特性、算法選擇,以及將用戶搭建的模型連同參數(shù)設(shè)置存儲(chǔ)為1個(gè)項(xiàng)目文件,以便于下次直接載入。在后臺(tái)模型運(yùn)行環(huán)境中,軟件對(duì)用戶組建的發(fā)動(dòng)機(jī)模型進(jìn)行編譯,判斷其類型,并將其裝入內(nèi)存,進(jìn)行穩(wěn)態(tài)與動(dòng)態(tài)工作點(diǎn)求解。從開(kāi)發(fā)角度看,組態(tài)建模軟件分為以下4個(gè)模塊:部件模型庫(kù)、圖形界面系統(tǒng)、運(yùn)行管理系統(tǒng)和數(shù)據(jù)庫(kù)系統(tǒng)。軟件采用基于COM技術(shù)的開(kāi)發(fā)方法為典型的航空發(fā)動(dòng)機(jī)部件設(shè)計(jì)了組件模型,包含部件算法與規(guī)范的接口函數(shù),構(gòu)成了部件庫(kù)。軟件的圖形界面系統(tǒng)負(fù)責(zé)處理用戶與軟件之間的交互操作。運(yùn)行管理模塊主要來(lái)求解模型的穩(wěn)態(tài)與動(dòng)態(tài)工作點(diǎn)。數(shù)據(jù)庫(kù)系統(tǒng)則分為實(shí)時(shí)數(shù)據(jù)庫(kù)與歷史數(shù)據(jù)庫(kù),分別處理模型運(yùn)行時(shí)產(chǎn)生的實(shí)時(shí)數(shù)據(jù)與過(guò)期數(shù)據(jù)。目前的組態(tài)建模軟件主要用于航空發(fā)動(dòng)機(jī)建模研究,為擴(kuò)展軟件的功能,使組態(tài)模型能夠支持發(fā)動(dòng)機(jī)數(shù)控系統(tǒng)的設(shè)計(jì)等工作,有必要研究輸出組態(tài)建模軟件模型的方法。
現(xiàn)有的組態(tài)建模軟件是在VC++6.0語(yǔ)言編譯環(huán)境下,基于微軟的MFC類庫(kù)開(kāi)發(fā)出來(lái)的應(yīng)用程序,自身并不具備生成DLL文件的能力。為了解決這個(gè)問(wèn)題,可以采用2種方法:(1)直接生成DLL文件,需要研究VC等IDE編程環(huán)境生成動(dòng)態(tài)鏈接庫(kù)的機(jī)理,因此對(duì)編程人員要求極高,費(fèi)時(shí)費(fèi)力;(2)采用配置文件來(lái)配置通用發(fā)動(dòng)機(jī)DLL模型,需要開(kāi)發(fā)與組態(tài)建模軟件相匹配的通用發(fā)動(dòng)機(jī)DLL模型,通過(guò)配置文件將二者聯(lián)系起來(lái),此方法可行。
2.1 采用配置文件定制通用發(fā)動(dòng)機(jī)DLL模型
分析具有一定通用性航空發(fā)動(dòng)機(jī)模型的特點(diǎn),將發(fā)動(dòng)機(jī)的輸入?yún)?shù)如設(shè)計(jì)點(diǎn)參數(shù)、部件特性等獨(dú)立出來(lái),針對(duì)具有相同結(jié)構(gòu)、不同型號(hào)的發(fā)動(dòng)機(jī)建模,只需設(shè)定不同的輸入?yún)?shù)值。通用性對(duì)于組態(tài)建模軟件顯得更為重要,因?yàn)椴粌H要考慮具有相同結(jié)構(gòu)、不同型號(hào)的發(fā)動(dòng)機(jī)建模,而且要考慮不同結(jié)構(gòu)的發(fā)動(dòng)機(jī)建模。同樣地,通用發(fā)動(dòng)機(jī)動(dòng)態(tài)鏈接庫(kù)模型要實(shí)現(xiàn)多種類型發(fā)動(dòng)機(jī)的建模,則其發(fā)動(dòng)機(jī)結(jié)構(gòu)類型、設(shè)計(jì)點(diǎn)參數(shù)和部件特性等參數(shù)在被配置文件指定之前,都必須是未知的。
用戶使用組態(tài)建模軟件建立某型發(fā)動(dòng)機(jī)模型,其實(shí)質(zhì)是通過(guò)在程序界面拖放部件圖標(biāo)并連線的方式,指定發(fā)動(dòng)機(jī)結(jié)構(gòu)類型,然后通過(guò)各部件的屬性頁(yè)窗口,來(lái)指定部件的設(shè)計(jì)點(diǎn)參數(shù)與特性,以及某些算法選擇,只要模型結(jié)構(gòu)合理,且設(shè)計(jì)點(diǎn)與部件特性等參數(shù)正確,就可以進(jìn)行模型仿真。因此,建模人員與組態(tài)建模軟件所交互的主要內(nèi)容也就是發(fā)動(dòng)機(jī)的結(jié)構(gòu)類型、設(shè)計(jì)點(diǎn)參數(shù)、部件特性以及算法選擇等參數(shù),如果要實(shí)現(xiàn)將用戶所搭建的模型輸出,在本質(zhì)上其實(shí)是輸出這些參數(shù),也就是模型配置文件。有了模型配置文件,再配合通用發(fā)動(dòng)機(jī)模型算法,就可以得到與組態(tài)建模軟件一致的結(jié)果。組態(tài)建模軟件、配置文件與通用發(fā)動(dòng)機(jī)DLL模型框架的關(guān)系如圖1所示。
圖1 組態(tài)建模軟件、配置文件、通用發(fā)動(dòng)機(jī)DLL模型的關(guān)系
2.2 通用發(fā)動(dòng)機(jī)DLL模型框架
由于本文所設(shè)計(jì)的通用發(fā)動(dòng)機(jī)模型是1個(gè)動(dòng)態(tài)鏈接庫(kù)文件,沒(méi)有界面操作,因此在程序結(jié)構(gòu)上沒(méi)有組態(tài)建模軟件的復(fù)雜。采用經(jīng)典的面向?qū)ο缶幊谭椒?,將典型的發(fā)動(dòng)機(jī)部件模型與發(fā)動(dòng)機(jī)模型設(shè)計(jì)為相應(yīng)的類,從而通用發(fā)動(dòng)機(jī)動(dòng)態(tài)鏈接庫(kù)模型框架主要由部件模型類庫(kù)、發(fā)動(dòng)機(jī)模型類庫(kù)、輔助功能類庫(kù)以及接口函數(shù)組成,其結(jié)構(gòu)如圖2所示。
圖2 通用發(fā)動(dòng)機(jī)DLL模型框架結(jié)構(gòu)
部件模型類庫(kù)是整個(gè)DLL模型框架的基礎(chǔ),框架中不同形式發(fā)動(dòng)機(jī)模型所包含的部件均來(lái)自部件模型類庫(kù)。與組態(tài)建模軟件的部件模型庫(kù)相對(duì)應(yīng),通用發(fā)動(dòng)機(jī)DLL模型部件類庫(kù)也具有9個(gè)典型部件類,即進(jìn)氣道類、風(fēng)扇類、壓氣機(jī)類、燃燒室類、渦輪類、外涵道類、混合室類、加力燃燒室類和尾噴管類。各部件類具有相似的成員函數(shù)LoadDesign()和Run(),其功能分別是讀取模型配置文件中屬于該部件的設(shè)計(jì)點(diǎn)參數(shù)、部件特性、算法選擇等,然后計(jì)算設(shè)計(jì)點(diǎn)修正系數(shù)與根據(jù)進(jìn)口參數(shù)進(jìn)行1次部件運(yùn)算,這里要求Run()函數(shù)所包含的部件算法要與組態(tài)建模軟件中的部件算法相同,以保證計(jì)算結(jié)果一致。
發(fā)動(dòng)機(jī)模型類庫(kù)是整個(gè)DLL模型框架的核心,庫(kù)中的具體發(fā)動(dòng)機(jī)模型負(fù)責(zé)組織其各部件的沿程運(yùn)算,并求解穩(wěn)態(tài)與動(dòng)態(tài)工作點(diǎn)。發(fā)動(dòng)機(jī)模型類庫(kù)是專為通用發(fā)動(dòng)機(jī)DLL模型框架設(shè)計(jì)的,組態(tài)建模軟件中并沒(méi)有相對(duì)應(yīng)的發(fā)動(dòng)機(jī)模型庫(kù)。雖然組態(tài)建模軟件可以支持多種類型發(fā)動(dòng)機(jī)的建模,但是其內(nèi)部并不存在某種具體結(jié)構(gòu)的發(fā)動(dòng)機(jī)模型,而是要根據(jù)用戶在軟件界面上拖放的部件類型、個(gè)數(shù)以及連接順序來(lái)確定發(fā)動(dòng)機(jī)類型,因此,組態(tài)建模軟件有1套與前臺(tái)圖形組態(tài)系統(tǒng)相配套的判斷機(jī)制。由于所設(shè)計(jì)的通用發(fā)動(dòng)機(jī)DLL模型不需要程序界面,因此考慮將組態(tài)建模軟件能夠支持的所有類型的發(fā)動(dòng)機(jī)模型算法固化為發(fā)動(dòng)機(jī)模型類庫(kù),配置文件指定了發(fā)動(dòng)機(jī)類型后,直接生成發(fā)動(dòng)機(jī)模型類庫(kù)中的某種具體發(fā)動(dòng)機(jī)對(duì)象,省去了一系列判斷操作,以簡(jiǎn)化代碼。
對(duì)于發(fā)動(dòng)機(jī)類庫(kù)中的所有發(fā)動(dòng)機(jī)模型,為其設(shè)計(jì)了類似的成員函數(shù)Initial()、Simulate()、SetGuessVector()、SteadyNR()與DynamicNR(),其作用分別是利用模型配置文件來(lái)進(jìn)行發(fā)動(dòng)機(jī)參數(shù)初始化、沿流程進(jìn)行1次發(fā)動(dòng)機(jī)所有部件仿真運(yùn)算、設(shè)置N-R迭代法初猜值、求解穩(wěn)態(tài)點(diǎn)、求解動(dòng)態(tài)點(diǎn)。其中,Initial()函數(shù)實(shí)際上是按流程依次調(diào)用各部件的LoadDesign()函數(shù)來(lái)實(shí)現(xiàn)讀取配置文件數(shù)據(jù)的功能,Simulate()函數(shù)功能則通過(guò)依次調(diào)用各部件的Run()函數(shù)來(lái)實(shí)現(xiàn)。對(duì)于不同形式的發(fā)動(dòng)機(jī)模型,則根據(jù)其所包含的部件以及共同工作方程的不同,為其成員函數(shù)設(shè)計(jì)了不同的實(shí)現(xiàn)方法。
同時(shí),為了更大程度上利用面向?qū)ο缶幊讨С执a重用與易于擴(kuò)展的優(yōu)點(diǎn),對(duì)于具有相似結(jié)構(gòu)的發(fā)動(dòng)機(jī),將其模型類設(shè)計(jì)成派生與繼承的關(guān)系。如對(duì)于雙軸渦扇混排發(fā)動(dòng)機(jī)模型,其加力類型發(fā)動(dòng)機(jī)模型與之最大的區(qū)別在于多了1個(gè)加力燃燒室部件,從而發(fā)動(dòng)機(jī)沿程計(jì)算函數(shù)Simulate()中也多了加力燃燒室的部件計(jì)算,除此之外其他函數(shù)的實(shí)現(xiàn)方法完全相同,因此定義雙軸渦扇混排加力發(fā)動(dòng)機(jī)模型為雙軸渦扇混排發(fā)動(dòng)機(jī)模型的派生類,在派生類中只需重寫Simulate()的函數(shù)實(shí)現(xiàn)方法,其他的函數(shù)繼承父類即可,而不必重新編寫。此外,為了保持仿真結(jié)果的一致性,當(dāng)為組態(tài)建模軟件增加了某型發(fā)動(dòng)機(jī)的建模能力后,在發(fā)動(dòng)機(jī)模型類庫(kù)中應(yīng)該同步增加相應(yīng)的發(fā)動(dòng)機(jī)類。
除了部件類庫(kù)與發(fā)動(dòng)機(jī)類庫(kù)之外,DLL模型框架還使用了一系列輔助功能類[6],如調(diào)用CVarMap類中的InterpolateMap()函數(shù)可實(shí)現(xiàn)部件特性數(shù)據(jù)的線性插值功能,CGasState類封裝了幾乎所有常見(jiàn)的熱力學(xué)參數(shù)的計(jì)算方法,如根據(jù)溫度、油氣比等參數(shù)可以方便計(jì)算焓、熵值,或者進(jìn)行參數(shù)反向計(jì)算,CMethod類則將牛頓·拉夫森迭代算法設(shè)計(jì)成NewtonRaphson()函數(shù)。
通用發(fā)動(dòng)機(jī)DLL模型由于具有封裝性的特點(diǎn),只能通過(guò)接口函數(shù)提供服務(wù)。由于所設(shè)計(jì)的發(fā)動(dòng)機(jī)模型主要提供穩(wěn)態(tài)、動(dòng)態(tài)仿真的功能,因此為其設(shè)計(jì)了相應(yīng)的接口函數(shù):Engine_SteadyRun()與Engine_DynamicRun(),這里的接口參數(shù)除了輸入、輸出數(shù)組地址之外,還有配置文件所在的路徑,以便讀取配置文件。
2.3 模型配置文件的生成方法
模型配置文件實(shí)際上是用戶在使用組態(tài)建模軟件進(jìn)行發(fā)動(dòng)機(jī)建模時(shí)所錄入的模型信息,但這些信息并非只被軟件的某個(gè)專門模塊所接收,而是分散地錄入到軟件的不同功能模塊。如軟件部件庫(kù)中的具體部件對(duì)象接收了建模人員錄入的設(shè)計(jì)點(diǎn)、部件特性、算法選擇等參數(shù),以完成部件參數(shù)的初始化;而軟件的運(yùn)行管理模塊則接收了模型運(yùn)行的其他信息如迭代算法初猜值文件數(shù)據(jù)等,以進(jìn)行仿真運(yùn)算。由于組態(tài)建模軟件的各模塊之間具有很強(qiáng)的獨(dú)立性,相互之間的通訊只通過(guò)接口函數(shù)來(lái)實(shí)現(xiàn),如果通過(guò)傳遞接口參數(shù)的方式,將分散于各模塊之間的信息組織起來(lái),勢(shì)必造成接口函數(shù)的參數(shù)非常長(zhǎng),而且增加了各模塊之間的耦合,不利于軟件維護(hù)。
針對(duì)上述問(wèn)題,本文采用分布式輸出的方式,即各功能模塊只輸出其接收的模型信息,來(lái)避免各模塊發(fā)生耦合,實(shí)現(xiàn)原理如圖3所示。具體作法如下:由于最終將配置文件輸出到存儲(chǔ)介質(zhì)的操作是由軟件運(yùn)行管理模塊中的SaveConfigureInfo()函數(shù)來(lái)實(shí)現(xiàn),因此,首先在該函數(shù)中申請(qǐng)足夠大的內(nèi)存空間,定義指針pElmNow指向其起始地址,然后將運(yùn)行管理模塊接收的信息輸出到這片內(nèi)存中,假設(shè)其占用N個(gè)數(shù)組元素,則這時(shí)將當(dāng)前指針pElmNow移動(dòng)到數(shù)組中N的位置;接下來(lái)要依次輸出各部件接收的設(shè)計(jì)點(diǎn)等信息,由于組態(tài)軟件中所開(kāi)發(fā)的各部件模型是COM組件,因此可為其設(shè)計(jì)專用于輸出配置文件信息的接口函數(shù)ISaveConfigureInfo(),該函數(shù)需要傳入前述內(nèi)存當(dāng)前指針pElmNow,在該接口函數(shù)內(nèi)部,各部件將其設(shè)計(jì)點(diǎn)等信息從pElmNow所指定的地址輸出到內(nèi)存中,輸出完畢后,則向后移動(dòng)內(nèi)存當(dāng)前指針pElmNow,使其始終指向未被改變的內(nèi)存地址;從而,運(yùn)行管理模塊的SaveConfigureInfo()函數(shù)在輸出了模型環(huán)境信息之后,就可以沿發(fā)動(dòng)機(jī)各部件的連接順序,依次調(diào)用各部件ISaveConfigureInfo()接口以實(shí)現(xiàn)將配置信息輸出到內(nèi)存中,最后再輸出到存儲(chǔ)介質(zhì),即為最終的模型配置文件。
圖3 組態(tài)建模軟件輸出配置文件原理
采用這樣的方法輸出模型信息的優(yōu)點(diǎn)在于,組態(tài)建模軟件的某一功能模塊不必關(guān)心其他模塊要輸出的內(nèi)容及大小,維護(hù)了軟件各模塊之間的獨(dú)立性。
為了檢驗(yàn)所設(shè)計(jì)的模型配置文件與通用發(fā)動(dòng)機(jī)DLL模型的可用性,本文在組態(tài)建模軟件中建立了某型單軸渦噴發(fā)動(dòng)機(jī)的數(shù)學(xué)模型,并將模型信息輸出為1個(gè)配置文件。然后編寫應(yīng)用程序加載通用發(fā)動(dòng)機(jī)DLL模型與配置文件,調(diào)用接口函數(shù)來(lái)進(jìn)行多點(diǎn)穩(wěn)態(tài)、動(dòng)態(tài)仿真,仿真結(jié)果如圖4所示。從圖4中可見(jiàn),通過(guò)加載DLL模型和配置文件所得到的結(jié)果與采用組態(tài)建模軟件所得到的一致,說(shuō)明該設(shè)計(jì)方法有效。
圖4 DLL模型與組態(tài)建模仿真結(jié)果
本文采用前述方法,設(shè)計(jì)了與組態(tài)建模軟件相匹配、具有一定擴(kuò)展性、方便調(diào)用的通用發(fā)動(dòng)機(jī)DLL模型框架,并且根據(jù)組態(tài)建模軟件的內(nèi)部結(jié)構(gòu)特點(diǎn),給出了分布式輸出模型配置文件的方法。經(jīng)過(guò)仿真算例驗(yàn)證,編寫應(yīng)用程序加載該通用發(fā)動(dòng)機(jī)DLL模型與配置文件進(jìn)行仿真,其仿真結(jié)果與采用組態(tài)建模軟件得到的結(jié)果一致。通過(guò)該方法可以實(shí)現(xiàn)輸出組態(tài)建模軟件中模型的功能,輸出的發(fā)動(dòng)機(jī)DLL模型可以支持?jǐn)?shù)控系統(tǒng)的設(shè)計(jì)等工作,擴(kuò)展了組態(tài)建模軟件的用途。
[1]Reed J A,Afjeh A A.An extensible object-oriented framework fordistributedcomputationalsimulationofgasturbine propulsion systems[R].AIAA-98-3565.
[2]周文祥,黃金泉,竇建平,等.面向?qū)ο蟮臏u扇發(fā)動(dòng)機(jī)及控制系統(tǒng)仿真平臺(tái)[J].航空動(dòng)力學(xué)報(bào),2007,22(1):119-125.
[3]夏飛,黃金泉,周文祥.基于MATLAB/SIMULINK的航空發(fā)動(dòng)機(jī)建模與仿真研究[J].航空動(dòng)力學(xué)報(bào),2007,22(12):2134-2138.
[4]姚祖明.基于構(gòu)件的航空發(fā)動(dòng)機(jī)建模技術(shù)研究[D].南京:南京航空航天大學(xué),2007.
[5]陶金偉,黃金泉,周文祥.航空發(fā)動(dòng)機(jī)組態(tài)建模技術(shù)研究[J].航空動(dòng)力學(xué)報(bào),2010,25(10):2372-2378.
[6]竇建平,黃金泉.基于UML的航空發(fā)動(dòng)機(jī)仿真建模研究[J].航空動(dòng)力學(xué)報(bào),2005,20(4):684-688.
[7]陶金偉,黃金泉.航空發(fā)動(dòng)機(jī)部件級(jí)組件化模型研究[J].航空發(fā)動(dòng)機(jī),2009,35(6):18-21.
Study of Dynamic Link Library(DLL)Modeling Technology for Aeroengine
YU Ming-shuai,HUANG Jin-quan
(College of Energy and Power Engineering,Nanjing University of Aeronautics and Astronautics,Nanjing 210016,China)
Aiming at limitation that model cannot be output by aeroengine configuration modeling software,the dynamic link library modeling frame of general aeroengine was designed,which matched with configuration modeling software.The modeling information
by the software from user was output as a configuration file.DLL model and configuration file model were loaded for aeroengine simulation.The simulation results conformance to that obtained with configuration modeling software.The function of output configuration modeling software is received by this way,which can be used in the engine digital control system.
dynamic link library;aeroengine;modeling technology
2011-10-25