- 電機瞬態過程分析的MATLAB建模與仿真
- 黃守道 鄧建國 羅德榮編著
- 1936字
- 2018-12-27 12:57:24
1.8 Matlab軟件簡介
本書使用Matlab軟件對電機的瞬態過程進行仿真分析。Matlab是近年來應用廣泛、性能卓越的科學計算工具軟件,它集數值分析、矩陣運算、信號處理和圖形顯示于一體,構成了一個操作方便、界面友好的系統仿真和CAD平臺。Matlab軟件中提供了很多具有源程序的開放性和功能齊備的工具箱,例如,信號處理、控制系統、神經網絡、圖像處理、系統辨識、最優化分析與綜合、模糊邏輯、小波變換等工具箱。人們可直觀而方便地利用它們進行分析、計算及設計工作,從而大大節省時間。
Matlab的另一個顯著特點,就是提供了系統動態仿真工具箱——Simulink。Simulink由模塊庫、模型構造及指令分析和演示程序組成,是一個模塊化、模型化的系統動態仿真環境。Simulink既保留了編程方式的優點,又克服了編程方式的缺點,用戶只要從模塊庫中拖放合適的模塊組合在一起即可實現系統仿真,方便易學。通過Simulink可以對電氣、機械,以及通信等的連續、離散或混合系統進行深入的系統建模、仿真與分析研究。
S函數簡介
S函數即系統函數(System Function)的意思。對于有些復雜的算法若用普通的Simulink模塊來搭建仿真模型,有可能難以實現或顯得非常煩瑣,這時可采用編程的形式設計出S函數模塊,將其嵌入到系統中來建立仿真模型。如果恰當地使用S函數,理論上,可以在Simulink下對任意復雜的系統進行仿真。
S函數具有固定的程序格式,用Matlab語言可以編寫S函數,此外還允許用戶使用C、C++、Fortran和Ada等語言進行編寫,用非Matlab語言進行編寫時,需要采用編譯器生成動態鏈接庫DLL文件。
在主窗口中輸入sfundemos,或者單擊Simulink->User-Defined Functions->S-Function Examples,即可出現如圖1.4所示的界面,可以選擇對應的編程語言查看演示文件。

圖1.4 S函數范例庫
Matlab軟件為了用戶使用方便,有一個S函數的模板sfuntmpl.m,一般來說,僅需要在sfuntmpl.m的基礎上進行修改即可編寫出S函數。在主窗口輸入edit sfuntmpl即可出現M文件形式的S函數模板的內容,可以詳細地閱讀其幫助說明以便更好地了解S函數的工作原理。S函數模板的函數定義形式為
Function[sys,x0,str,ts,simStateCompliance]=sfuntmpl(t,x,u,flag)
一般來說,S函數的定義形式為
[sys,x0,str,ts,simStateCompliance]=sfuntmpl(t,x,u,flag,P1,…,Pn)
其中sfunc為自己定義的函數名稱,以上參數中,t、x、u分別對應時間、狀態、輸入信號,flag為標志位,其取值不同,S函數執行的任務和返回的數據也是不同的,Pn為額外的參數,sys為一個通用的返回參數值,其數值根據flag的不同而不同,x0為狀態初始數值,str在目前為止的Matlab版本中并沒有什么作用,一般str=[]即可,ts為一個兩列的矩陣,包含采樣時間和偏移量兩個參數,如果設置為[00],那么每個連續的采樣時間步都運行,[?10]則表示按照所連接的模塊的采樣速率進行,[0.250.1]表示仿真開始的0.1s后每0.25 s運行一次,采樣時間點為TimeHit=n*period+offset。simStateCompliance為Matlab 2010版加進去的。
S函數的使用過程中有2個概念值得注意:(1)direct feedthrough,系統的輸出是否直接和輸入相關聯,即輸入是否出現在輸出端的標志,若是為1,否則為0,一般可以根據在flag=3的時候,mdlOutputs函數是否調用輸入u來判斷是否直接饋通。(2)dynamically sized inputs,主要給出連續狀態的個數、離散狀態的個數、輸入數目、輸出數目和直接饋通否。
S函數中目前支持的flag選擇有0、1、2、3、4、9等幾個數值,下面說明在不同的flag情況下S函數的執行情況,見表1.1。(1)flag=0,進行系統的初始化過程,調用mdlInitializeSizes函數,對參數進行初始化設置,比如離散狀態個數、連續狀態個數、模塊輸入和輸出的路數、模塊的采樣周期個數、狀態變量初始數值等。(2)flag=1,進行連續狀態變量的更新,調用mdlDerivatives函數。(3)flag=2,進行離散狀態變量的更新,調用mdlUpdate函數。(4)flag=3,求取系統的輸出信號,調用mdlUpdate函數。(5)flag=4,調用mdlGetTimeOfNextVarHit函數,計算下一仿真時刻,由sys返回。(6)flag=9,終止仿真過程,調用mdlTerminate函數。
表1.1 不同flag的S函數的執行情況

在實際仿真過程中,Simulink會自動將flag設置為0,進行初始化過程,然后將flag的數值設置為3,計算模塊的輸出,一個仿真周期后,Simulink將flag的數值先后設置為1和2,更新系統的連續和離散狀態,再將其設置為3,計算模塊的輸出,如此循環直至仿真結束條件滿足。
在S函數的編寫過程中,首先需要搞清楚模塊中有多少個連續和離散狀態,離散模塊的采樣周期是如何的,同時需要了解模塊的連續和離散的狀態方程分別是什么,輸出如何表示。下面以實例說明S函數的具體應用。
Simulink是一個開放的編程環境,允許用戶開發自己的仿真模型。可以采用以下幾種方法建立新模型:
(1)用Simulink提供的功能模塊建立新模型;
(2)通過調用S-function模塊,編寫S函數建立新模型;
(3)調用M-function模塊,編寫Matlab函數的M文件建立新模型。
在對復雜系統仿真時,往往需要三種方法交叉使用。
另外,Matlab還提供了基于Simulink環境的電力系統模塊(Power System Blockset),專門用于電力電子與電氣傳動系統仿真。Power System Blockset中包含了變壓器模型、電機模型、電源模型、功率器件模型和無源器件模型等典型的電力裝置模型。Power System Blockset中的模型或模塊可以與Simulink中的模塊或建立的子系統混合使用,但要注意信號與電量及電量與信號之間的轉換。