艾鳳明 馮首鴻 梁興壯 李偉林 林秦州
(1. 中國航空工業集團公司沈陽飛機設計研究所 沈陽 110035; 2. 西北工業大學自動化學院 西安 710129)
復雜系統的設計已經證實了仿真是從概念設計到樣品實現過程中不可或缺的步驟。事物仿真需要考慮初步估計、擇優甚至是現有方案在實施前的重新設計,因此會降低風險。建立元器件本身及其之間交互作用的高保真模型,能夠使仿真的結果更具有確信度。
聯合仿真是現階段最有效的耦合系統仿真方案。從數學方面分析,聯合仿真由一組常微分方程和微分代數方程構成,而仿真時間包括子系統之間的通信節點時間和每一個子系統內部的積分時間。分析一個聯合仿真系統是否符合要求需要對其穩定性、準確性和快速性進行分析。
聯合仿真系統中,每一個仿真器都可以看成是一個動態系統,它們之間具有信號的傳遞,傳遞的信號與上一次信號傳遞的時間間隔為一個宏步長,該步長的大小反映了系統仿真計算時間的長短。通常情況下,仿真過程結果都希望具有最小的通信時間,然而考慮到系統穩定性,該計算時間不能無限變小,所以需要找出兼顧計算效率和計算穩定性的方法來滿足系統在仿真需求。為了提高仿真速度,聯合仿真的并行化速度也需要提高,然而并行的子模型和相關求解器之間的松耦合會引起積分誤差,為了保證誤差在預先要求的范圍內,同樣需要兼顧考慮仿真效率和仿真精確度的關系。
Dymola是一款基于Modelica語言的多領域仿真平臺。Modelica語言可以實現各模塊庫之間的連接,進行多領域仿真。文獻[1]通過Modelica語言搭建了包括交流發電機、變壓整流器、電源系統接觸器和過欠壓、過欠頻檢測模塊等部件的數字仿真模型和供電系統模型,并完成系統邏輯設計。通過特殊的接口,Dymola可以與多款軟件實現聯合仿真,現在國內外的主要研究方向為對電機的控制和汽車系統建模。文獻[2]利用Simulink、CarSim、Dymola軟件實現對負荷傳感液壓轉向系統的聯合仿真;Dymola符合FMI接口協議,所以可以輸入輸出FMU模型;文獻[3]在Dymola中實現二極管模型的FMU模型輸出;文獻[4]在Dymola中實現熱流體模型的FMU模型輸出;文獻[5]是對自動嵌入式物理模型的FMI研究;文獻[6]將Modelica模型通過FMI輸出到Excel表格中,通過FMI Toolbox for Matlab工具生成FMU模型,最后導入Dymola平臺中進行聯合仿真,實現控制器算法模型和Dymola整車聯合仿真測試。
本文對聯合仿真系統模型進行了數學分析,建立了系統微分方程,在穩定和精度要求下提出了線性隱性計算方法,并提出了基于FMI協議的聯合仿真計算流程,最后通過一個工程例子說明了該方法的實際應用效果。
用非線性微分方程描述一個連續離散混合動態系統Σ形式如下


圖1 被分割并行的系統
因此系統Σ可以重新寫成

式中,U1是子系統 ∑1的輸入,U2是子系統 ∑2的輸入。也就是說,根據得到的解耦結果判斷是不是空集。同樣,1Y是子系統 1∑得到的輸出,Y2是子系統 ∑2得到的輸出,即
為了更好數值運算整個復雜系統,每一個仿真器都需要在通信節點進行數據交換,來為其他子模塊提供所需要的數據。為了提高積分運算速度,并行模塊要盡量獨立,所以子模型之間的同步時間P要遠大于他們內部的積分時間。因此在通信節點之間,每一個仿真器都有自己的積分速率(假設使用變步長求解器),并且在此期間,從其他模型處得到的數據將保持常數。
大的通信間隔很可能提高積分運算速度,但是也可能會產生積分誤差累計從而降低最終結果的精確度。所以通過非嚴格同步來減小建模誤差是找到提高積分速度和精確度之間平衡的有效方式的第 一步。

圖2 進行數據交換的子模型∑1和∑2

式中,ωmax為系統最大角頻率,滿足

所以系統的宏步長滿足

然而這個宏步長的邊界太大,由經驗求得,宏步長的頻率要遠大于Nyquist頻率,有時會達到100倍。如果宏步長的頻率不夠大,則會導致系統的最終發散。為了解釋只有很小的宏步長才能使耦合系統穩定,需要對整個系統的穩定性進行分析,按照文獻[8]中所述的方法可以對這類環路采樣系統進行穩定性分析。此時,子系統通過零階保持器來耦合變量。
圖3為兩個子系統的聯合仿真方框圖,其主要在每一步離散化了耦合變量,這模擬了子系統可以分別使用數值求解器進行內部計算。對于兩個系統的耦合連接,通過線性化狀態空間所求出的離散時間傳遞函數來分析穩定性[9]。

圖3 具有兩個子系統的聯合仿真方框圖
若要保證系統穩定,需要足夠小的宏步長,這雖然保證了系統的精確度,但卻需要消耗過多的計算時間,降低了計算效率[10]。線性隱性穩定方法利用子系統的Jacobian矩陣來線性化系統,這種方法允許使用相對較大的宏步長來實現系統的穩定[11]。
整個耦合系統的數學模型如下所示

對于整個系統,內部子系統之間的連接是通過耦合方程來實現的。

在耦合方程中,每一個子系統的輸入向量是其他子系統輸出向量的函數,K為具有以下特點的關聯矩陣:①K是一個方陣,認為每一個子系統的輸出都對應一個子系統的輸入;② 只包含1或者0;③ 矩陣中每一行和每一列中只有一個1。
對系統進行線性化處理,規定Jacobian矩陣為

在使用隱性穩定方法時,需要以下假設:① 在沒有考慮耦合變量的代數環情況下,假設DK的乘積為冪零;② 在聯合仿真宏步長中,線性時不變系統由線性化(在點和系統常微分方程得到;③ 通過Backward Euler方法來離散線性化后的系統。
根據假設②,線性化后的系統數學模型如下 所示

式中,ξ、η和ω分別在線性化系統中對應于x、y和u的值。因此,在一個宏步長內,重新描述線性化處理后的系統耦合方程為

式(9)為整個系統的微分代數方程,因為不考慮代數環,微分代數方程可以通過下面的計算改寫成常微分方程。根據假設③,常微分方程首先進行離散化處理

Backward Euler:

同樣可以得到輸出的關系式

Backward Euler:

為了考慮缺少代數環,式(10)可以通過假設②估計得到,即輸入ω是通過在t=tk處線性化系統的輸出y得到的。

Backward Euler:

將式(13)代入到式(12)中,并根據假設①設定DK的乘積為冪零,得

故式(10)可以寫成

根據式(16),每一步結束后輸出值會在子系統中進行求解和傳遞

每個功能模型單元(Function mockup unit,FMU)只負責本地系統運算,不包含任何耦合和仿真環境的相關信息[12]。協同仿真過程中,計算機只通過主求解器來聯合系統中不同從求解器的信息,并向從求解器提供方法來求解其他代表耦合系統的線性部分的常微分方程(Ordinary differential equation,ODE)。這些信息一部分來自于每一個求解器的模型描述結構中,一部分來自于求解FMU所包含的系統方向導數的函數[13]。
FMU求解器需要具有計算所有狀態變量和所連的輸入輸出的方向導數的能力,在FMI協議中,通過標記“provide Direction Derivative”來說明,并通過方程“fmi Get Directional Derivative”來實現。穩定方法“基于模型的外推法”不與FMI提供的“基于歷史的外推法”相兼容,所以屬性“can Interpolate Inputs”需要擴展到其所指定的外推類型。
計算流程包括兩步,第一步在通信節點處進行,第二步發生在求解在通信節點之間的連續時間DOE系統處。
第一步中狀態向量的倒數求得為

它的輸出為

Jacobian矩陣為


上式中當k等于0時,表示為全局的初始狀態。


根據式(19)可知,出現在式(21)中的輸入變量包含了其他的狀態變量,并且輸入變量現在相當是狀態變量的初始狀態。通過求解器內的數值積分求解出的狀態向量是,這里us實際是,通過主求解器來連接線性系統的輸出和求解器的輸入,因此連接的結構信息只用主求解器獲得。
如果主求解器不支持穩定性,式(22)的右邊會降為0,這樣從求解器的實際輸入將不變:如果沒有設置標記“can Interpolate Inputs”,那么零階保持器外推因主求解器不支持穩定性而在FMI協議中定義。這種情況下,通過主求解器在每一個通信節點調用方程“fmi Get Real”和“fmi Set Real”,每一個從求解器的輸入是通過式(20)直接給出的,是從求解器的輸出,這些從求解器會求出第s個求解器的輸入。
主求解器方面需要設置回調方程(Callback function),這個方程用于求解相連的從求解器的動態輸入。在聯合仿真之前,從求解器的模型結構信息將體現在準備矩陣和式(23)的計算中。隨后,在聯合仿真過程中,這些元素將會調用方程“fmi Get Continuous States”“fmi Get Derivatives”和“fmi Get Directional Derivatives”在每一次的信息交換節點上更新。當對式(21)、(23)數值積分時,系統通過從數值求解器調用這些方程。
根據式(23)可知,回調方程需要返回穩定輸入的微分向量,這需要通過主仿真環境在從設備實現方程屬性“fmi Callback Functions”來實現。圖4簡略地描述了主求解器中的算法流程[14]。

圖4 主求解器中的算法流程
利用FMI2.0 for Co-simulation標準的線性隱性穩定方法可以很好對系統加速,其改善了聯合仿真在平衡穩定或精確度和計算效率上的問題。隨著FMI2.0的問世,一個巨大的提升是出現了方向導數矩陣的接口,這使得聯合仿真系統的強耦合性更有效[15-16]。
基于二自由度液壓模型如圖5所示,其中包括了兩個液壓子系統,可將這個系統看為兩個子系統實現聯合仿真。

圖5 在AMESim中搭建的二自由度液壓模型
所有測試都采用同一套參數,測試結果如表1所示。

表1 在不同的方案下的測試結果對比
聯合仿真的精度是通過方均根誤差來表示的。在所有的聯合仿真測試中,CPU時間通過設定一定的間隔時間為50 μs。從表1中可以看出,混合使用C/Python標準的#5方案相比#3方案在CPU耗時上更差,這是由于在兩個仿真環境中帶有很多的轉換接口;相反,對比#2和#6,同樣使用C標準的#3和#7(或#8),系統明顯實現了加速。說明利用FMI2.0標準的線性隱性穩定方法可以很好地改善聯合仿真在平衡穩定或精確度和計算效率上的問題。
本文的研究目的是提高聯合仿真系統數值積分運算速度,同時兼顧系統穩定運行并保證積分誤差在預期范圍內。論文研究了一種基于FMI通用接口標準的聯合仿真方法,得到如下結論。
(1) 其基本方法是將整個系統分為若干個子系統,各部分之間在通信節點處交換數據,數值分析時需要將系統合理解耦分析,在保證運算速度的同時使系統具有良好的穩定性和準確性。
(2) 線性隱性穩定方法在保證系統穩定的前提下對仿真運算時間具有一定的加速,其基于聯合仿真的FMI標準下的工程實例也證明了該方法使系統具有良好的穩定性和準確性。