張 鵬 張偉業 劉 濤
1(中國民航大學適航學院 天津 300300)2(中國民航大學電子信息與自動化學院 天津 300300)
飛機機電系統規模龐大且結構復雜[1],導致單機仿真效率較低[2],因此針對復雜系統研究分布式建模與仿真方法具有重要意義[3]。文獻[4-6]應用數據分發服務(Data Distribution Service,DDS)解決了分布式仿真中數據流的可靠交互問題,以及仿真節點之間的通信問題,證明了使用DDS能滿足機電系統對于多物理量數據流的交互要求。文獻[7-8]利用分布式建模方法拓展了仿真規模,解決了單機仿真拓展性差的問題,但還未應用在民機機電系統的仿真拓展中。文獻[9-10]使用分布式建模與仿真方法獲得了比非分布式方法更好的仿真性能,分布式方法對于仿真整體性能的提升具有明顯優勢,但現有的分布式方法主要集中在同步性的研究,對于并行計算的加速性研究較少。
本文在上述研究的基礎上,基于DDS分布式互聯架構平臺,通過設計仿真數據交互接口,針對性地研究了民機機電系統分布式并行建模與仿真,改善了民機電系統仿真的可拓展性以及數據的可交互性,減少了仿真解算時間,提高了機電系統仿真的計算效率,增強了民機協同仿真的實時性。
數據傳輸是分布式仿真中各節點通信的基礎,DDS是由OMG(Object Management Group)定義的一種以數據為中心的發布/訂閱式通信模式[11],提供了一個與平臺無關的數據模型,簡化了數據在分布式系統中的可靠、高效發布[12]。DDS通信實體主要包括域、發布者、訂閱者、數據寫者、數據讀者和主題[13],同一域中的DDS實體通信模型如圖1所示。

圖1 同一域中的DDS實體通信模型
一個發布者可以創建和管理多個包含主題的數據寫者,然后向全局數據空間發布帶有不同主題的數據,一個訂閱者可以創建和管理多個數據讀者,通過匹配全局數據空間的主題來讀取所需要的數據,這樣就實現了DDS實體之間的數據通信過程。
以本文的AMESim機電系統分布式仿真為例,給出基于DDS發布/訂閱的通信過程,如圖2所示。由于AMESim建模與仿真是基于功率鍵合圖的圖形化仿真,元器件之間的連接有前后邏輯關系,即前一組狀態方程的輸出與后一組狀態方程的輸入要有正確的對應關系,并且每一個仿真步長均會計算大量數據,所以在分布式仿真時,仿真元器件之間要交換大量特定的數據,符合DDS多主題傳輸、自動發現并匹配所需數據的通信特點。將AMESim視作發布/訂閱節點,節點通過仿真數據接口向DDS創建連接和注冊數據類型,然后發布帶有相應服務質量的主題信息,另一AMESim節點收聽到請求后,在全局數據空間中對比相應的發布/訂閱主題以及服務質量,如果兩者均相同則進行通信,再通過仿真數據接口傳輸到AMESim節點。

圖2 發布/訂閱過程
分布式互聯架構能實現多應用軟件的協同仿真,但AMESim應用的集成還未實現,且飛機系統設計與集成測試需要專業的機械液壓設計軟件,故本文設計了AMESim與DDS平臺的數據交互接口,其總體框架圖如圖3所示。架構分為七個部分:仿真運行管理環境、仿真主引擎、仿真子引擎、仿真軟總線、仿真輔助服務、數據存儲及記錄、數據接口。仿真數據接口通過初始化、定義輸入/輸出接口列表,以及調用嵌入到仿真數據接口內部的仿真子引擎,將仿真模型與DDS連接,以實現數據交互、分布式仿真模型的求解控制。

圖3 分布式仿真總體框架圖
數據接口模塊負責與AMESim仿真軟件搭建的機電系統模型輸入/輸出端口進行銜接、初始化、控制模型的解算、模型與子引擎之間的數據交互、系統資源回收等。封裝好的AMESim接口模塊位于AMESim Library中,圖標為P_in、T_in、P_out和T_out,它們是四個功能結構相同的物理接口模塊,目的是為了防止進油油路和回油油路混淆,Adapter模塊為系統的適配模塊,其功能為求解器頻率范圍適配和求解器幅值范圍適配。通過拖拽圖形化的接口完成AMESim分布式仿真能力的擴展,使AMESim機電系統分布式建模與仿真成為可能。
在現有架構和開源RTI_DDS基礎上進行二次開發,通過對相關的函數進行封裝,形成了AMESim分布式仿真的通用接口,使每一個帶有AMESim的分布式節點都可以借助DDS分布式架構進行發布和訂閱的相關操作,從而實現數據的實時交互。下面介紹通用接口里的幾個主要函數以及具體實現過程:
1) 初始化處理階段主要函數。
void AddInPort(char* name, int size, porttype type, portmode mode, void* initvalue),功能是加入輸入端口,定義了端口名稱、端口維數、端口類型、端口模式、端口初始值5個參數。void AddOutPort(char* name, int size, porttype type, portmode mode, void* initvalue),功能是加入輸出端口,參數含義同上。int initPortList(int dir, portlist**sq),功能為初始化端口列表。BOOL InitSubEng(),初始化子引擎。
2) 仿真接口調度階段主要函數。int hwaMakeMdf(),其功能是在模型工程路徑下生成后綴名為.mdf的模型描述文件,是整個接口設計環節的核心,返回值為0或1。void GetCoSimPortData (portnode* ptnd),得到當前協同仿真端口數據,返回當前端口節點指針。void SetCoSimPortData(const portnode* ptnd, const double* timestamp),向數據軟總線寫入當前端口和當前模型解算時間戳。int getCV(CurVar* cv, void* value, porttype eletype, int arraysize, portmode mode),獲取端口數據值。void getPortDataById (portlist* sq, int id ,void *value ),通過端口ID號設置端口數據。
3) 仿真結束階段主要函數。void ProcessModelSimulateTerminate(int portDir),在仿真結束時調用子引擎終止函數,在仿真過程中安全退出。void TerminateSubEng(const int dir),dir是端口輸入/輸出方向參數。
實現過程分成三個階段處理,實現的流程示意圖如圖4所示。

圖4 接口實現示意圖
(1) 接口初始化處理階段。調用AMESim API獲取仿真信息,包括仿真起始時間、模型解算步長、模型名稱、系統工程名稱及路徑等;初始化端口列表;加入所有輸入輸出端口;獲取輸入端口個數以及輸出端口個數;調用AMESim回調函數AmeInstallAtEnd()注冊仿真結束處理函數,函數第一個參數為需要注冊的函數名,第二個參數為注冊函數的參數列表。
(2) 仿真運行接口調度階段。在指定路徑下尋找模型描述文件,如果沒有.mdf文件,則生成模型描述文件,然后結束仿真。如果有.mdf文件,則進入仿真,等待同步時鐘。然后初始化子引擎,等待子引擎給出開始解算信號。此時從接口函數處獲取對應輸入端口的數據,賦值給模型輸入變量,再進行模型解算,將獲取的模型輸出變量賦值給對應的接口函數輸出端口,此過程與仿真子引擎進行交互并更新端口計數器。
(3) 仿真結束處理。調用子引擎終止函數,設置參數為輸入或輸出;調用仿真終止函數等。
利用上述DDS分布式互聯架構和設計的仿真數據交互接口,可以讓熟悉不同系統的仿真人員分別設計各個子系統,只需要預留出系統的輸入/輸出端口,通過連接協同仿真數據接口完成分布式仿真建模,最后再集成到仿真平臺上進行分布式仿真。由于篇幅原因,下面以典型的升降舵系統與液壓能源系統為例說明分布式建模過程。
某型飛機升降舵有左右兩個舵面,左升降舵由中央液壓能源系統和左液壓能源系統供油,右升降舵由中央液壓能源系統和右液壓能源系統供油。由于左右兩側功能與結構相同,每一側有兩套作動裝置,故只選取一套系統進行建模。升降舵單側液壓回路主要由遠程電子單元、電液伺服閥、旁通阻尼閥、模式選擇閥和阻斷電磁閥等組成。信號經過一個PI環節和舵偏角限幅環節送到動力控制單元(Power Controller Unit,PCU)中的電液伺服閥中,再由電液伺服閥驅動液壓缸完成方向舵偏轉,其過程可由圖5升降舵控制框圖描述。

圖5 升降舵控制框圖
參考某型飛機手冊,在升降舵建模過程中設置如下仿真參數:電液伺服閥內流量5 L/min,液壓缸活塞直徑82.3 mm,液壓缸行程長度0.254 m,液壓缸活塞桿直徑44.45 mm,作動筒活塞直徑0.1 m,作動筒行程0.025 m,作動筒活塞桿直徑0.013 m,控制器PI參數設置為-2和0,最大值40,最小值-40,延遲時間0.001 s,建立如圖6所示的分布式升降舵模型。

圖6 分布式升降舵系統建模
某型飛機液壓能源系統有左中右三套,左和右液壓能源分別由一個發動機驅動泵、一個電動泵組成,中間液壓能源系統由兩臺電動泵和一臺沖壓空氣渦輪驅動泵組成,參考手冊中液壓能源系統原理圖,回路中還應有液壓油箱、高壓濾油器、漏油濾油器、蓄能器等。
飛機液壓系統的設計指標之一是能夠滿足全飛行過程的負載流量需求[14],參考某型飛機北京-上海航段數據,模型精細度及參數設置如下:
(1) 液壓泵為恒壓變量泵,壓力位5 000 PSI(壓力變化范圍為4 775 PSI~5 050 PSI),流量27 GPM~34 GPM;額定流量25 GPM(94.625 L/min)。
(2) 電動泵額定輸出流量為27 GPM,輸出壓力為4 750 PSI,最大輸出值37 GPM,電機轉速5 500 r/min。電動泵主要在起飛及爬升高度在2 000 ft以內使用,當高度超過2 000 ft以后,襟翼收回,電動泵轉速變為2 700 r/min。當降落時,電機轉速5 500 r/min,起落架放下;當發動機反推時,電機轉速6 800 r/min。
(3) 其他參數設置:液壓油箱為自增壓油箱,增壓壓力為75 PSI,共三個油箱,左右油箱容積為19 L,中央油箱容積為42 L。油箱指示使用的參考溫度80 F(26.7 ℃)熱補償計算。蓄能器壓力為5 000 PSI,預壓壓力為2 000 PSI。高壓濾油器:通過減壓閥保護,當壓力大于6 000 PSI時,減壓閥工作。同時并聯單向閥,防止油液回流。參考某型飛機液壓能源系統原理圖,建立如圖7所示的分布式液壓能源系統模型。

圖7 分布式液壓能源系統建模
本文選取Windows 7系統作為實驗平臺的操作系統,其硬件的主要參數如下:CPU型號為Intel(R) Core(TM) i7-7700K,CPU主頻為4.20 GHz,內存16.0 GB;其軟件環境主要為LMS AMESim R15,DDS分布式互聯架構。將建模完成后的兩個模型分別進行編譯與仿真,此時會在仿真工程路徑下生成模型描述文件。通過把生成的描述文件導入到DDS互聯架構的模型庫中,實現分布式模型在架構中的調度與運行。
根據AMESim的help文件:對系統分布式建模后,每個分布式模型都會被另一個模型視為發散,故會存在系統不穩定、仿真結果不收斂的情況。這在求解器耦合求解時很常見,所以對分布式建模的系統穩定性以及性能分析是非常有必要的。由于機電系統是非線性的,故按照文獻[15]設置仿真變量的狀態,對系統進行線性化分析,圖8所示是分布式升降舵系統的Nyquist曲線,由Nyquist判據可知:繞(-1, j0)一圈,系統穩定。由于飛控系統中對指令響應速度有要求,故使用階躍信號來測試作動筒跟隨的快速性,仿真結果如圖9所示,過渡過程時間為2.73 s(5%誤差帶),超調量為0,穩態誤差為0。對于不同幅度指令的作動響應如圖10所示,與階躍響應一致。

圖8 Nyquist曲線

圖9 階躍響應

圖10 不同幅度的指令偏轉響應
通過對比關鍵仿真元件使用分布式仿真方法與集中仿真方法的位移、壓力、流量等物理量的誤差,來驗證分布式仿真變量的一致性,選取伺服閥進油回路質量流率、液壓缸進油口的壓力、作動筒的位移進行比較,圖11-圖13所示為伺服閥進油回路流量、液壓缸進油口的壓力、作動筒位移分布式仿真前后一致性對比圖,其中流量值和位移值幾乎完全重合,壓力值的瞬時最大誤差為14%,平均誤差不超過10%,對仿真結果幾乎無影響。

圖11 伺服閥進油回路流量對比圖

圖12 液壓缸進油口壓力對比圖

圖13 作動筒位移對比圖
把基于數據接口的分布式仿真模型還原為集成仿真模型,可以得到如圖14的分布式仿真前后CPU時間對比圖,可以看出分布式仿真前為5.27 s,分布式仿真后的液壓能源系統為0.20 s,升降舵系統為1.19 s,明顯縮短了仿真計算時間,導入到互聯架構平臺中的仿真時間為6.97 s,時間稍有增加,原因是DDS通信時間在本次仿真時間中占比很大。故對三套液壓能源系統和兩側升降舵均進行仿真,分布式前后時間如圖15所示,分布式之前時間是32.39 s,分布式之后為28.28 s,時間縮短了4.11 s,加速性能良好。

圖14 仿真時間對比圖

圖15 復雜系統時間對比圖
分布式仿真是分析大規模復雜機電系統仿真的有效方法,本文通過研究DDS數據通信機制以及現有的DDS分布式互聯架構平臺,設計了AMESim與DDS平臺的仿真數據接口,建立了民機機電系統分布式仿真模型,實現了并行建模、分布式仿真以及復雜系統的仿真加速。仿真結果表明:使用DDS作為通信中間件,在保證仿真同步精度的同時實現了仿真加速,為民機復雜系統的集成測試與驗證提供了新的工程思路。