董政+丁建完



摘要: 針對Simulink模型重用到更高階的Modelica平臺上的需求,分析Simulink模型的數學本質和代碼表達,以及Modelica對外部函數和外部類的支持,重用Simulink模型轉換生成的S-function目標C代碼,實現Simulink模型到Modelica模型轉換.
關鍵詞: Simulink; S-function; Modelica; 模型轉換
中圖分類號: TP391.9 文獻標志碼: B
0 引 言
隨著數字化功能樣機技術和仿真技術的發展,近幾十年來涌現出許多成熟的建模仿真分析工具,并廣泛應用于機械、電子、控制等領域中,使得對集機械、電子、液壓、控制等多個學科領域子系統于一體的復雜產品的整體系統進行分析成為可能.多年以來,Simulink以其基本模塊的易用性和通用性,被廣泛應用于控制系統的建模.同時,為滿足物理系統建模,MATLAB官方和第三方均提供多種擴展工具模塊,但是實際使用時,擴展工具模塊往往難以滿足使用需求.越來越多的使用者發現針對復雜物理系統,Simulink存在著建模難度大并且耗費時間多的問題.歐洲學者針對復雜物理系統統一建模,提出多領域統一建模語言——Modelica語言,實現對復雜產品整體統一建模分析,并使之成為復雜系統建模領域的標準.目前,Modelica語言已有較大的發展,針對其開發的標準模型庫更是迅猛增長,已覆蓋機械、液壓、氣壓、電控、熱力和電磁等多個領域,并在歐美汽車、能源、動力、機電、航空和航天等各行業獲得成功應用.[1]
雖然Modelica的應用已推進復雜物理系統的建模和仿真發展,但是控制系統工程師依然習慣利用Simulink進行控制系統的建模和仿真,而其他設計工程師使用Modelica建立物理系統模型.長期以來,大量的知識已經以Simulink模型的方式累積下來,如果把這些模型用Modelica重寫,十分耗費時間和精力.基于Modelica語言在多領域建模和仿真中的廣泛應用以及未來發展趨勢,可以考慮將控制系統Simulink模型轉換成Modelica模型,使系統模型在統一的Modelica平臺下進行仿真.有學者提出一種“模塊映射”方案,通過在Modelica平臺中建立與Simulink基本模塊對應的模型庫元件,并按照Simulink模型模塊和連接關系,用Modelica元件代替Simulink模塊并復現連接關系,實現模型轉換.[2-3]這種方案依賴于專門定制的Modelica模型庫元件.然而,部分Simulink基本模塊,如積分模塊等,有多種變形模式,要設計一種Modelica元件與其對應的難度很大.對此,本文提出一種基于Simulink模型代碼生成和Modelica外部類和函數接口實現Simulink模型到Modelica模型轉換的新方案.
1 模型轉換原理
1.1 Simulink模型描述
Simulink模型中包含時間
Simulink通常用模塊和連接關系表達模型.通過MATLAB提供的代碼生成工具RTW(Real-Time Workshop)把模型轉換成S-Function目標C代碼后,Simulink模型中的數學描述就變成代碼描述.Simulink模型轉換成C代碼后,Simulink模型原有的所有變量信息都保存在SimStruct實例中,SimStruct是S-Function目標C代碼中定義的類,代碼中還定義用于對SimStruct操作的接口函數.
Simulink求解器通過對接口函數的調用,對用C代碼描述的Simulink模型進行仿真,仿真流程見圖1,仿真主要包含初始化和循環求解2個階段.
初始化階段由mdlInitializeSizes,mdlStart和mdlInitializeSampleTimes函數實現采樣時間、狀態向
量、輸入向量的初始化.在循環求解階段中,
modelOutputs函數用C代碼的方式描述關系式
1.4 Modelica外部類
類是Modelica語言的基本結構元素,是構成Modelica模型的基本單元,類可以包含3種類型:變量、方程和成員類.變量表示類的屬性,通常代表某個物理量;方程指定類的行為,表達變量之間的數值約束關系.[1]通常,類定義在Modelica內部,類的變量、方程和成員類均以Modelica語言描述,對內是可見的.
Modelica同時支持外部類.外部類一般由C語言定義,對于Modelica相當于一個“黑箱”,只暴露其操作的接口,內部結構完全封閉.外部函數協作完成某一任務時,這些外部函數之間需要傳遞一些信息的內部存儲,外部類的實例就可以表示這種內部存儲.在Modelica語言中,外部類同樣以class作為關鍵字,但加上extends ExternalObject關鍵字修飾,表明從ExternalObject派生,并且僅有3個函數constructor和destructor,分別用于構造和銷毀外部實例.外部類實例通常為一個指向某類實例的指針,見圖3.定義SimStructPrt外部類并且定義類構造函數.構造函數由外部函數實現,SimStructPrt實例即為指向SimStruct實例的指針.
3 結 論
通過對S-function目標C代碼分析和對
Modelica外部類及外部函數的研究,實現Simulink模型到Modelica模型的轉換,使得Simulink模型可以在Modelica平臺下進行仿真.模型轉換重用Simulink模型,可以將多年來累積在Simulink模型中的知識重用到更高階的Modelica平臺上,提高工作效率.由于無須依賴定制的模型庫,實施起來方便高效,并且由Simulink自帶的代碼生成工具生成C代碼,代碼穩定可靠,魯棒性高.
參考文獻:
[1]
趙建軍, 丁建完, 周凡利, 等. Modelica語言及其多領域統一建模與仿真機理[J]. 系統仿真學報, 2006, 18(S2): 570-573. DOI: 10.3969/j.issn.1004-731X.2006.z2.162.
ZHAO J J, DING J W, ZHOU F L, et al. Modelica and its mechanism of multi-domain unified modeling and simulation[J]. Journal of System Simulation, 2006, 18(S2): 570-573. DOI: 10.3969/j.issn.1004-731X.2006.z2.162.
[2] DEMPSEY M. Automatic translation of Simulink models into Modelica using Simelica and the AdvancedBlocks library[C]//Proceedings of the 3rd International Modelica Conference. Linkping, 2003.
[3] 王岳. 多領域建模仿真平臺MWorks的外接工具集成研究[D]. 武漢:華中科技大學, 2009.
[4] van SCHIJNDEL A W M. A review of the application of SimuLink S-functions to multi domain modelling and building simulation[J]. Journal of Building Performance Simulation, 2014, 7(3): 165-178. DOI: 10.1080/19401493.2013.804122.