董政+丁建完
摘要: 針對Simulink模型重用到更高階的Modelica平臺上的需求,分析Simulink模型的數(shù)學本質(zhì)和代碼表達,以及Modelica對外部函數(shù)和外部類的支持,重用Simulink模型轉(zhuǎn)換生成的S-function目標C代碼,實現(xiàn)Simulink模型到Modelica模型轉(zhuǎn)換.
關(guān)鍵詞: Simulink; S-function; Modelica; 模型轉(zhuǎn)換
中圖分類號: TP391.9 文獻標志碼: B
0 引 言
隨著數(shù)字化功能樣機技術(shù)和仿真技術(shù)的發(fā)展,近幾十年來涌現(xiàn)出許多成熟的建模仿真分析工具,并廣泛應用于機械、電子、控制等領域中,使得對集機械、電子、液壓、控制等多個學科領域子系統(tǒng)于一體的復雜產(chǎn)品的整體系統(tǒng)進行分析成為可能.多年以來,Simulink以其基本模塊的易用性和通用性,被廣泛應用于控制系統(tǒng)的建模.同時,為滿足物理系統(tǒng)建模,MATLAB官方和第三方均提供多種擴展工具模塊,但是實際使用時,擴展工具模塊往往難以滿足使用需求.越來越多的使用者發(fā)現(xiàn)針對復雜物理系統(tǒng),Simulink存在著建模難度大并且耗費時間多的問題.歐洲學者針對復雜物理系統(tǒng)統(tǒng)一建模,提出多領域統(tǒng)一建模語言——Modelica語言,實現(xiàn)對復雜產(chǎn)品整體統(tǒng)一建模分析,并使之成為復雜系統(tǒng)建模領域的標準.目前,Modelica語言已有較大的發(fā)展,針對其開發(fā)的標準模型庫更是迅猛增長,已覆蓋機械、液壓、氣壓、電控、熱力和電磁等多個領域,并在歐美汽車、能源、動力、機電、航空和航天等各行業(yè)獲得成功應用.[1]
雖然Modelica的應用已推進復雜物理系統(tǒng)的建模和仿真發(fā)展,但是控制系統(tǒng)工程師依然習慣利用Simulink進行控制系統(tǒng)的建模和仿真,而其他設計工程師使用Modelica建立物理系統(tǒng)模型.長期以來,大量的知識已經(jīng)以Simulink模型的方式累積下來,如果把這些模型用Modelica重寫,十分耗費時間和精力.基于Modelica語言在多領域建模和仿真中的廣泛應用以及未來發(fā)展趨勢,可以考慮將控制系統(tǒng)Simulink模型轉(zhuǎn)換成Modelica模型,使系統(tǒng)模型在統(tǒng)一的Modelica平臺下進行仿真.有學者提出一種“模塊映射”方案,通過在Modelica平臺中建立與Simulink基本模塊對應的模型庫元件,并按照Simulink模型模塊和連接關(guān)系,用Modelica元件代替Simulink模塊并復現(xiàn)連接關(guān)系,實現(xiàn)模型轉(zhuǎn)換.[2-3]這種方案依賴于專門定制的Modelica模型庫元件.然而,部分Simulink基本模塊,如積分模塊等,有多種變形模式,要設計一種Modelica元件與其對應的難度很大.對此,本文提出一種基于Simulink模型代碼生成和Modelica外部類和函數(shù)接口實現(xiàn)Simulink模型到Modelica模型轉(zhuǎn)換的新方案.
1 模型轉(zhuǎn)換原理
1.1 Simulink模型描述
Simulink模型中包含時間
Simulink通常用模塊和連接關(guān)系表達模型.通過MATLAB提供的代碼生成工具RTW(Real-Time Workshop)把模型轉(zhuǎn)換成S-Function目標C代碼后,Simulink模型中的數(shù)學描述就變成代碼描述.Simulink模型轉(zhuǎn)換成C代碼后,Simulink模型原有的所有變量信息都保存在SimStruct實例中,SimStruct是S-Function目標C代碼中定義的類,代碼中還定義用于對SimStruct操作的接口函數(shù).
Simulink求解器通過對接口函數(shù)的調(diào)用,對用C代碼描述的Simulink模型進行仿真,仿真流程見圖1,仿真主要包含初始化和循環(huán)求解2個階段.
初始化階段由mdlInitializeSizes,mdlStart和mdlInitializeSampleTimes函數(shù)實現(xiàn)采樣時間、狀態(tài)向
量、輸入向量的初始化.在循環(huán)求解階段中,
modelOutputs函數(shù)用C代碼的方式描述關(guān)系式
1.4 Modelica外部類
類是Modelica語言的基本結(jié)構(gòu)元素,是構(gòu)成Modelica模型的基本單元,類可以包含3種類型:變量、方程和成員類.變量表示類的屬性,通常代表某個物理量;方程指定類的行為,表達變量之間的數(shù)值約束關(guān)系.[1]通常,類定義在Modelica內(nèi)部,類的變量、方程和成員類均以Modelica語言描述,對內(nèi)是可見的.
Modelica同時支持外部類.外部類一般由C語言定義,對于Modelica相當于一個“黑箱”,只暴露其操作的接口,內(nèi)部結(jié)構(gòu)完全封閉.外部函數(shù)協(xié)作完成某一任務時,這些外部函數(shù)之間需要傳遞一些信息的內(nèi)部存儲,外部類的實例就可以表示這種內(nèi)部存儲.在Modelica語言中,外部類同樣以class作為關(guān)鍵字,但加上extends ExternalObject關(guān)鍵字修飾,表明從ExternalObject派生,并且僅有3個函數(shù)constructor和destructor,分別用于構(gòu)造和銷毀外部實例.外部類實例通常為一個指向某類實例的指針,見圖3.定義SimStructPrt外部類并且定義類構(gòu)造函數(shù).構(gòu)造函數(shù)由外部函數(shù)實現(xiàn),SimStructPrt實例即為指向SimStruct實例的指針.
3 結(jié) 論
通過對S-function目標C代碼分析和對
Modelica外部類及外部函數(shù)的研究,實現(xiàn)Simulink模型到Modelica模型的轉(zhuǎn)換,使得Simulink模型可以在Modelica平臺下進行仿真.模型轉(zhuǎn)換重用Simulink模型,可以將多年來累積在Simulink模型中的知識重用到更高階的Modelica平臺上,提高工作效率.由于無須依賴定制的模型庫,實施起來方便高效,并且由Simulink自帶的代碼生成工具生成C代碼,代碼穩(wěn)定可靠,魯棒性高.
參考文獻:
[1]
趙建軍, 丁建完, 周凡利, 等. Modelica語言及其多領域統(tǒng)一建模與仿真機理[J]. 系統(tǒng)仿真學報, 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.