【matlab教學ppt】第7講 matlab仿真simulink_第1頁
【matlab教學ppt】第7講 matlab仿真simulink_第2頁
【matlab教學ppt】第7講 matlab仿真simulink_第3頁
【matlab教學ppt】第7講 matlab仿真simulink_第4頁
【matlab教學ppt】第7講 matlab仿真simulink_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第7講 MATLAB仿真_SIMULINK1Simulink仿真 7.1 Simulink仿真入門1.Simulink的特點Simulink是MATLAB中的一個建立系統(tǒng)方框圖和基于方框圖級的系統(tǒng)仿真環(huán)境,是一個對動態(tài)系統(tǒng)進行建模、仿真并對仿真結果進行分析的軟件包。使用Simulink可以更加方便地對系統(tǒng)進行可視化建模,并進行基于時間流的系統(tǒng)級仿真,使得仿真系統(tǒng)建模與工程中的方框圖統(tǒng)一起來。并且仿真結果可以近乎“實時”地通過可視化模塊,如示波器模塊、頻譜儀模塊以及數(shù)據(jù)輸入輸出模塊等顯示出來,使得系統(tǒng)仿真工作大為方便。2Simulink全方位地支持動態(tài)系統(tǒng)的建模仿真,它支持連續(xù)系統(tǒng)、離散系統(tǒng)、連

2、續(xù)離散混合系統(tǒng)、線性系統(tǒng)、非線性系統(tǒng)、時不變系統(tǒng)、時變系統(tǒng)的建模仿真,也支持具有多采樣速率的多速率系統(tǒng)??梢哉f,在通用系統(tǒng)仿真領域,Simulink是無所不包的。 結合MATLAB編程和Simulink可視化建模仿真各自的特點,可以構建更為復雜的系統(tǒng)模型,并進行自動化程度更高的仿真和仿真結果的數(shù)據(jù)分析,這是MATLAB的高級應用方面。 32.使用Simulink建模和仿真的過程啟動MATLAB之后,在命令窗口中輸入命令“simulink”或單擊MATLAB工具欄上的Simulink圖標,打開Simulink模塊庫窗口。在Simulink模塊庫窗口中單擊菜單項“”,就可以新建一個Simulink

3、模型文件,如圖2-8所示。 4圖2-8 Simulink模塊庫界面和新建模型文件窗口5以二階系統(tǒng)為例。其輸入輸出的傳遞函數(shù)為(2-28)其中,R=3, L=1H,C=0.1F。H(s) 簡化為利用鼠標單擊Simulink基礎庫中的Continuous子庫,選取傳遞函數(shù)模塊,將它拖動到新建模型窗口中的適當位置,如圖2-9所示。 (2-29) 6圖2-9 利用模塊庫建立仿真模型7如果需要對模型模塊進行參數(shù)設置和修改,只需選中模型文件中的相應模塊,單擊鼠標右鍵,彈出快捷菜單,從中選取相應參數(shù)進行修改,如圖2-10所示。單擊模塊下方的“TransferFun”可以對其進行編輯,例如修改為“傳遞函數(shù)”字

4、樣。從快捷菜單中選取“Transfer Fun parameters.”項修改傳遞函數(shù)參數(shù),在彈出的對話框中的傳遞函數(shù)分子系數(shù)“Numerator:”欄填入10;在傳遞函數(shù)分母系數(shù)“Denominator”欄填入1,3,10,其余參數(shù)使用默認值。 8圖2-10 修改仿真模型的參數(shù)9采用同樣的方法,在Simulink基礎庫中的Sources子庫中選取激勵信號源,例如我們選取階躍信號源,將之拖入建模窗口中。在Sinks子庫中選取示波器作為系統(tǒng)輸出波形顯示。接下來利用鼠標將這三個模塊連接起來。模塊外部的大于符號“”分別表示信號的輸入輸出節(jié)點,為了連接兩個模塊的輸入輸出,可以將鼠標置于節(jié)點處,這時鼠標

5、顯示為“十”字形狀,拖動鼠標到另一個模塊的端口,然后釋放鼠標按鈕,則形成了帶箭頭的連線,箭頭方向表示信號的流向。完成后的建模系統(tǒng)可以通過“File”菜單存盤為模型文件,擴展名為“mdl”,如“l(fā)izi1.mdl”,如圖2-11所示。 10圖2-11 完成的建模方框圖11接下來,需要對輸入信號源(階躍)的參數(shù)進行設置。將鼠標指向階躍信號模塊雙擊或通過快捷菜單打開屬性設置對話框,設置階躍信號的參數(shù),如圖2-12所示對于階躍信號源來說,其參數(shù)含義、默認值以及我們根據(jù)仿真需要修改后的參數(shù)值如表2-1所示。12表2-1階躍信號源的參數(shù)含義、默認值及修改后的參數(shù)值13圖2-12 階躍信號源模塊的參數(shù)設置對

6、話框及其幫助文檔14根據(jù)仿真要求,我們將仿真-210s時間區(qū)間內(nèi)的系統(tǒng)階躍響應的輸出波形,在時間為0s時的躍變。然后設置仿真參數(shù),主要是仿真求解器的選擇和仿真步長等參數(shù)的選取。通過前面的分析可知,動態(tài)系統(tǒng)仿真的本質就是求解其狀態(tài)方程,而對狀態(tài)方程的數(shù)值求解算法有多種,求解算法的步長也可以不同。不同的算法適用的范圍有所不同,而算法的步長也直接影響求解的精度。因此,對求解器的選擇以及其仿真步長等參數(shù)的設定對系統(tǒng)仿真來說就成為相當重要的事情。從系統(tǒng)建模窗口的狀態(tài)欄可以看到當前使用的求解器,如圖2-11中顯示的仿真求解器是“ode45”算法。從建模窗口菜單項“Simulation|Simulation

7、Parameters.”打開仿真參數(shù)設置對話框(快捷鍵為Ctrl+E),我們現(xiàn)在設置求解器標簽下的參數(shù)部分,如圖2-13所示。 15設置仿真起始時間為-2秒,仿真結束時間為10秒,其余參數(shù)為默認值:求解器采用“ode45”算法,步長設定為自適應變步長的,最大步長、最小步長以及初始步長均設為自動選取,相對求解精度為1e-3,絕對求解精度自動選取。 16圖2-13 仿真參數(shù)設置對話框17最后,雙擊示波器模型圖標,打開示波器顯示窗口。在顯示窗口中單擊鼠標右鍵,通過快捷菜單設置顯示坐標范圍等屬性,這里我們設置為自動刻度,如圖2-14所示。 18圖2-14 示波器顯示窗口以及參數(shù)設置19所有這些工作完成

8、之后,就可以進行仿真了??赏ㄟ^建模窗口菜單項“Simulation|Start”啟動仿真,也可以單擊工具欄上的小三角按鈕或使用快捷鍵Ctrl+T啟動仿真。仿真結果如圖2-15所示。讀者可以將結果與圖2-3所示的結果進行比較。 20圖2-15 仿真結果21更換信號源為Sources子模塊庫中的SignalGenerator,并設置信號源為0.2Hz的方波,幅度為1,如圖2-16左邊對話框所示。設置示波器顯示窗口的屬性(Parameters),使之成為雙蹤顯示,然后將示波器第二輸入節(jié)點與信號源輸出相連,這樣我們就可以同時觀察系統(tǒng)的輸入輸出波形了。系統(tǒng)建模如圖2-16中間窗口所示。將仿真時間設定為0

9、秒到20秒,其余參數(shù)使用默認參數(shù)。運行仿真后的結果如圖2-16右邊窗口顯示。還可以進一步修改信號源參數(shù),使用三角波、正弦波等作為激勵信號,觀察輸出信號的情況。22圖2-16 更換信號源并使用雙蹤示波器之后的仿真結果233. MATLAB命令窗口與Simulink之間的交互 我們還可以通過MATLAB命令來打開Simulink模型并進行仿真。在MATLAB命令窗口中,使用“open lizi1.mdl”,然后使用“sim(lizi1.mdl)”就可以啟動對模型lizi1.mdl的仿真計算。而Simulink仿真的數(shù)據(jù)結果也可以送回MATLAB工作空間中作進一步數(shù)值分析。24仍以上例加以說明。首先

10、設置示波器,使得顯示波形數(shù)據(jù)能夠送回MATLAB工作空間。在示波器波形顯示窗口單擊“參數(shù)Parameters”工具圖標,打開顯示參數(shù)設置對話框。選中Data history標簽下的Savedatatoworkspace,并設傳遞變量名稱,例如設為ScopeData,格式選擇為Structurewithtime(帶時間的結構型變量)。參數(shù)設置的情況如圖2-17所示。 25圖2-17 示波器顯示窗口的參數(shù)設置26將建模存盤為lizi1.mdl,然后在MATLAB下運行如下命令(參見圖2-18):clear;%工作空間初始化open lizi1.mdl;%這時將看到建模模型文件被打開sim(lizi

11、1.mdl);%啟動模型仿真,顯示出仿真波形whosNameSizeBytesClassScopeData1x13578structarrayGrandtotalis307elementsusing3578bytes27圖2-18 通過命令啟動Simulink仿真28可見,仿真完成之后,工作空間中出現(xiàn)了“ScopeData”結構變量,其中包含了示波器顯示的全部波形數(shù)據(jù)。通過“plot”命令可以作出這些數(shù)據(jù)對應的波形,即t=ScopeData.time;%仿真的時間變量signal=ScopeData.signals;wave1=signal(1,1).values;wave2=signal(1

12、,2).values;subplot(2,1,1);plot(t,wave1);subplot(2,1,2);plot(t,wave2);axis(0,20,-2,2);作出的波形如圖2-19所示。讀者可以對比示波器上得到的波形(參見圖2-18)。我們在此說明了Simulink與MATLAB工作空間進行數(shù)據(jù)交換的一種方法。 29圖2-19 示波器數(shù)據(jù)傳入工作空間后進行波形作圖顯示30事實上,MATLAB提供了許多途徑用于與Simulink的數(shù)據(jù)交互。通過Sources子模型庫中的FromWorkspace模塊可以從工作空間中讀入仿真所需要的輸入數(shù)據(jù)通過Sinks子模型庫中的ToWorkspac

13、e模塊可以將Simulink中產(chǎn)生的數(shù)據(jù)回送到工作空間,從而可以實現(xiàn)MATLAB編程與Simulink模型相結合的混合仿真。下面的例子中,我們將從工作空間中讀入輸入波形數(shù)據(jù),通過Simulink建模仿真之后,將仿真結果再送回工作空間中進行處理。通過這種方式,我們可以通過MATLAB程序產(chǎn)生任意的數(shù)據(jù)送入Simulink中加以處理,然后再利用MATLAB強大的統(tǒng)計分析功能來處理數(shù)據(jù)。31首先建立Simulink模型,如圖2-20所示。圖中使用了Sources子模型庫中的FromWorkspace模塊,以便從工作空間中讀入數(shù)據(jù)。使用Sinks子模型庫中的ToWorkspace模塊,將輸出數(shù)據(jù)回送到

14、工作空間。設計輸入為階躍信號,仿真建模中使用Continuous子庫中的微分器來獲得系統(tǒng)的階躍響應的微分沖激響應。 32圖2-20 用于測試與MATLAB工作空間進行數(shù)據(jù)交互的Simulink模型33圖2-20中,F(xiàn)romWorkspace模塊的參數(shù)設置如圖2-21所示。 其中,Data項使用了兩個矢量T,U參數(shù)組合。T表示離散時間序列,U表示對應于離散時間序列T的波形取值。Sampletime項設置為0,表示采用仿真求解器的默認采樣時間間隔。Interpolatedata選中表示允許數(shù)據(jù)插值,并且通過數(shù)據(jù)外插(Extrapolation)方式在最終數(shù)值后形成輸出。34圖2-21 FromWo

15、rkspace模塊的參數(shù)設置35模型中我們使用了兩個ToWorkspace模塊,分別接不同的輸出信號,這兩個ToWorkspace模塊的輸出變量分別為simout1和simout2。數(shù)據(jù)格式可設置為帶時間的結構變量,如圖2-22所示。仿真求解器采用ode45算法。但是為了獲得更為精細的波形,可以設定求解的初始步長和最大步長為0.01,最小步長為auto,仿真時間段為020s。其余參數(shù)采用默認值。建模完成之后,將模型文件存盤為lizi2.mdl文件。然后編寫如下的MATLAB仿真程序pro4lizi2.m,對模型進行仿真和分析。36圖2-22 ToWorkspace模塊的參數(shù)設置37程序2-14

16、%pro4 lizi2.mclear;T=(0:0.1:20);%仿真時間段和步進,為列向量U=(T5);%在時間為5秒躍變的階躍信號sim(lizi2.mdl);%運行仿真lizi2.mdlfigure(1);plot(simout1.time,simout1.signals.values);xlabel(timesec)%階躍響應figure(2);plot(simout2.time,simout2.signals.values);xlabel(timesec)%沖激響應程序運行結果如圖2-23所示。 38圖2-23 MATLAB編程調(diào)用Simulink模型的仿真結果(階躍響應和沖激響應)

17、394.Simulink子系統(tǒng)的構造實際建模過程中,常常會遇到一些較為復雜的系統(tǒng),難以在一張模型方框圖中畫出來。這時候,就需要以層次結構來繪制框圖。也就是首先將大系統(tǒng)中的一些具有獨立功能的部分封裝起來,形成一些子系統(tǒng),然后再利用這些子系統(tǒng)來構成整個系統(tǒng)。Simulink允許構造多層子系統(tǒng),即在子系統(tǒng)中仍然允許包含若干下層子系統(tǒng)。40Simulink中子系統(tǒng)的構造方法舉例說明如下:首先將Simulink模塊庫中Ports&Subsystems子模塊庫中的Subsystem模塊拖動到新建的模型文件窗口中,雙擊該Subsystem模塊,就會打開該子系統(tǒng),其輸入用In模塊表示,輸出用Out模塊表示,一

18、個子系統(tǒng)可以有多個輸入、輸出。然后利用Simulink模型庫中的連續(xù)時間Continuous子庫中的傳遞函數(shù)TransferFcn模塊,數(shù)學操作MathOperations子庫中的增益Gain模塊、求和Sum模塊以及乘法模塊Product構成子系統(tǒng)。該子系統(tǒng)有兩個輸入端口,一個輸出端口。在子系統(tǒng)外部輸入端口加入兩個信號源,在其輸出端口接上示波器,如圖2-24所示。41圖2-24 子系統(tǒng)的構建和仿真42系統(tǒng)參數(shù)的設置如表2-2所示。43表2-2 lizi3.mdl模型的參數(shù)設置44注意,在仿真運行之前,必須將子系統(tǒng)中的以變量表達的參數(shù)值確定下來。這些參數(shù)值只需在MATLAB命令窗口中輸入即可。例

19、如,在命令窗口中輸入?yún)?shù)值后運行仿真:G=1;A=1;B=0.001;C=1;sim(lizi3.mdl);仿真運行結果如圖2-25所示。45圖2-25 lizi3.mdl的仿真結果46如果結合循環(huán)語句來自動修改參數(shù),并將仿真結果送回MATLAB工作空間,則我們可以讓計算機在不同系統(tǒng)參數(shù)條件下自動仿真若干次,得出響應的結果。如果不使用命令“sim”來進行仿真,那么我們只好通過Simulink可視化界面來修改系統(tǒng)參數(shù),并通過使用鼠標點擊仿真運行工具來啟動仿真,這樣效率將是十分低下的。由此可見MATLAB編程與Simulink結合進行仿真的優(yōu)勢。 475.封裝子系統(tǒng)子系統(tǒng)中的參數(shù)(如增益G),傳遞

20、函數(shù)系數(shù)等等,是通過MATLAB工作空間傳入的,這就破壞了子系統(tǒng)內(nèi)部的隱藏性質。為此,Simulink中給出了一種解決辦法,也就是所謂的模塊封裝技術。對子系統(tǒng)封裝以后,它就可以像Simulink模塊庫所提供的模塊一樣來使用,子系統(tǒng)模塊內(nèi)部的參數(shù)可以通過一個設計的對話框來輸入。48對一個用戶自己建立的系統(tǒng)模型進行封裝,首先要通過上面所講的方法將系統(tǒng)模型轉化為子系統(tǒng),然后選中該子系統(tǒng)圖標,選擇“Edit|MaskSubsystem”菜單項(快捷鍵為Ctrl+M),然后設置所彈出的對話框內(nèi)容。 下面我們對lizi3.mdl中建立的子系統(tǒng)進行封裝。打開lizi3.mdl,另存為lizi4.mdl,然后

21、選中子系統(tǒng)模塊,將其改名為Mysubsystem,選擇“Edit|MaskSubsystem”菜單項,彈出Maskeditor對話框,如圖2-26所示。 49圖2-26 封裝編輯器對話框(Icon標簽和Parameters標簽)50在Icon標簽下主要是對封裝模塊的圖標進行設置,可以設置圖標的邊框是否可見,圖標是否透明,是否旋轉,以及繪圖單位等,還可使用命令來繪制圖標,該標簽下部給出了繪制圖標的語法舉例。在Parameters標簽下可以設置子系統(tǒng)的參數(shù),本例中需要設置的參數(shù)就是G,A,B,C四個。參數(shù)設置可以采用編輯框(Edit)、彈出列表(Popup)或復選框(Checkbox)形式,讀者可

22、參考在線幫助。我們這里只使用編輯框。設置參數(shù)如圖2-26右面對話框所示。51圖2-27所示是設置封裝編輯器對話框中的“Initialization(初始化)”標簽和“Documentation(文檔)”標簽的情況。一般情況下,初始化標簽可使用默認值;文檔標簽的三部分將分別顯示在封裝模塊的參數(shù)設置對話框和幫助文檔中,如圖2-28所示。 52 圖2-27封裝編輯器對話框(Initialization標簽和Documentation標簽)53圖2-28 封裝模塊的參數(shù)設置對話框以及幫助文檔54對于已經(jīng)封裝的模塊,采用“Edit|EditMask”(快捷鍵為Ctrl+M)菜單項就可以重新編輯封裝對話框

23、。在編輯封裝對話框的下部有一個Unmask按鈕(參見圖2-26),單擊該按鈕可以去除封裝。若需要修改子系統(tǒng)的內(nèi)部結構,可以使用菜單項“Edit|Lookundermask”(快捷鍵為Ctrl+U)來打開子系統(tǒng)結構,從而對子系統(tǒng)方框圖進行修改。 556.組建用戶自定義模塊庫如果建立了許多自定義的子系統(tǒng),并且已經(jīng)封裝好了,而這些已經(jīng)封裝的自定義模塊又是會反復使用的,就像Simulink提供的模塊庫中那些模塊一樣,在這種情況下,就有必要對這些自定義的重用性較好的模塊進行建庫,以方便管理和反復使用,同時也可以作為新的專業(yè)庫提供給其他用戶使用。Simulink提供了建庫手段,具體方法是:用“simuli

24、nk”命令打開Simulink庫瀏覽器,從其菜單中選擇“New|Library”,新建一個空白的模塊庫窗口,然后將欲建庫的模塊用鼠標拖入該庫文件窗口中即可。 56可用“”菜單項來修改自建庫的屬性,最后存盤,例如存為myku.mdl文件。以后需要使用時,在MATLAB命令窗口中鍵入“myku.mdl”即可開啟該模型庫窗口,其中的自定義模塊與Simulink提供的標準庫中的模塊的使用方法完全相同。自定義模塊庫存盤之后將處于鎖定狀態(tài),如果要對庫中的模塊進行修改,可以再次打開該模塊庫,然后用“Edit|Unlocklibrary”解鎖,修改并存盤之后,庫自動恢復為鎖定狀態(tài)。圖2-29給出了一個用戶自定

25、義模塊庫的例子。 57圖2-29 一個用戶自定義模塊庫的例子587.2 S 函 數(shù)Simulink進行仿真本質上就是利用某種求解算法對系統(tǒng)狀態(tài)方程進行求解的過程。Simulink是如何將系統(tǒng)的狀態(tài)方程與系統(tǒng)方框圖模型聯(lián)系起來的呢?事實上,Simulink設計了固定格式的S函數(shù)接口,通過S函數(shù)可將系統(tǒng)的數(shù)學方程表達形式與方框圖表達形式聯(lián)系起來。 59通過編寫和使用S函數(shù),用戶也可以構建出采用Simulink普通模塊難以搭建出來的系統(tǒng)模型,大大增強了Simulink的靈活性。S函數(shù)可以用MATLAB語言書寫,也可以采用C、C+、Fortran等語言編寫。S函數(shù)還可以進行編譯,以提高執(zhí)行速度。Sim

26、ulink內(nèi)建的標準模塊庫就是用S函數(shù)編寫并進行編譯后形成的。 60 1.系統(tǒng)的狀態(tài)方程描述對于連續(xù)系統(tǒng),其狀態(tài)方程為 x=f(t,x,u) (2-30) 若系統(tǒng)是線性時不變系統(tǒng),則狀態(tài)方程可簡化為 x=f(t,x,u)=Ax(t)+Bu(t) (2-31)系統(tǒng)的輸出方程為 y=f0(t,x,u) (2-32)若為線性時不變系統(tǒng),則輸出方程可簡化為 y=f0(t,x,u) =Cx(t)+Du(t) (2-33)m個輸入的情況:u(t)=u1(t),u2(t),um(t)T (2-34)k個輸出的情況:y(t)=y1(t),y2(t),yk(t)T (2-35)61n個狀態(tài)數(shù)的情況:x(t)=x

27、1(t),x2(t),xn(t)T(2-36)最為簡單的是單輸入單輸出系統(tǒng),設其狀態(tài)數(shù)為n,則 狀態(tài)方程為x=f(t,x,u)=Ax(t)+Bu(t) (2-37)輸出方程為 y=f0(t,x,u)=Cx(t)+Du(t) (2-38)62無記憶系統(tǒng)是一般系統(tǒng)的特例,其狀態(tài)數(shù)為0。例如:設計一個放大器系統(tǒng),將信號放大2.7倍,則該系統(tǒng)是無記憶的,故狀態(tài)數(shù)為0,狀態(tài)矩陣x=是空矩陣,而輸出方程為y=f0(t,x,u)=Du(t)=2.7u(t)對于離散時間系統(tǒng),其狀態(tài)方程表現(xiàn)為差分方程組的形式。對于更一般的系統(tǒng),都有以下共同特征:一個輸入向量u,一個輸出向量y,一個狀態(tài)向量x,這些向量可以是連續(xù)

28、的,也可以是離散的,還可以是連續(xù)、離散混合的,如圖2-30所示。 63圖2-30 一般系統(tǒng)的抽象數(shù)學模型64輸入向量、輸出向量和狀態(tài)向量之間的數(shù)學關系可以通過如下方程來表達:y=f0(t,x,u)(輸出方程) (2-40)xc=fd(t,x,u)(連續(xù)時間系統(tǒng)狀態(tài)方程微分方程) (2-41)xdk+1=fu(t,x,u)(離散時間系統(tǒng)狀態(tài)方程差分方程) (2-42)其中,x=xc+xd,xc是連續(xù)狀態(tài)部分,xd是離散狀態(tài)部分。 65在Simulink的S函數(shù)中,相應地將狀態(tài)向量分為連續(xù)狀態(tài)部分和離散狀態(tài)部分,對于沒有狀態(tài)的模塊(即無記憶系統(tǒng)),狀態(tài)向量x為空矩陣。662. MATLAB語言的S

29、函數(shù)模板 MATLAB語言的S函數(shù)編寫方法是固定的,MATLAB提供了標準S函數(shù)的模板sfuntmpl.m,文件在Toolboxsimulinkblocks目錄下。其代碼如下:程序functionsys,x0,str,ts=sfuntmpl(t,x,u,flag)switchflag,case0,%初始化部分 67sys,x0,str,ts=mdlInitializeSizes;case1,%計算導數(shù)sys=mdlDerivatives(t,x,u);case2,%差分方程遞推更新sys=mdlUpdate(t,x,u);case3,%計算輸出sys=mdlOutputs(t,x,u);cas

30、e4,%取得下一步仿真的時間sys=mdlGetTimeOfNextVarHit(t,x,u);68case9,%終止sys=mdlTerminate(t,x,u);otherwise%Unexpectedflags出錯處理error(Unhandledflag=,num2str(flag);end%sfuntmpl函數(shù)結束%=%mdlInitializeSizes模型初始化函數(shù),返回:%sys是系統(tǒng)參數(shù)69%x0是系統(tǒng)初始狀態(tài),若沒有狀態(tài),取%str是系統(tǒng)階字串,通常設為%ts是取樣時間矩陣,對連續(xù)取樣時間,ts取00%若使用內(nèi)部取樣時間,ts取-10,-1表示繼承輸入信號的采樣周期%=fu

31、nctionsys,x0,str,ts=mdlInitializeSizes%模型初始化函數(shù)sizes=simsizes;%取系統(tǒng)默認設置sizes.NumContStates=0;%設置連續(xù)狀態(tài)變量的個數(shù)sizes.NumDiscStates=0;%設置離散狀態(tài)變量的個數(shù)70sizes.NumOutputs=0;%設置系統(tǒng)輸出變量的個數(shù)sizes.NumInputs=0;%設置系統(tǒng)輸入變量的個數(shù)sizes.DirFeedthrough=1;%設置系統(tǒng)是否直通sizes.NumSampleTimes=1;%采樣周期的個數(shù),必須大于等于1sys=simsizes(sizes);%設置系統(tǒng)參數(shù)x0

32、=;%系統(tǒng)狀態(tài)初始化str=;%系統(tǒng)階字串總為空矩陣ts=00;%初始化采樣時間矩陣71%=%mdlDerivatives模型計算導數(shù)連續(xù)狀態(tài)部分的計算,返回連續(xù)狀態(tài)的導數(shù)%=functionsys=mdlDerivatives(t,x,u)sys=;%根據(jù)狀態(tài)方程(微分方程部分)修改此處%=%mdlUpdate狀態(tài)更新計算離散狀態(tài)部分%=functionsys=mdlUpdate(t,x,u)72sys=;%根據(jù)狀態(tài)方程(差分方程部分)修改此處%=%mdlOutputs計算輸出信號,返回模塊的輸出%=functionsys=mdlOutputs(t,x,u)sys=;%根據(jù)輸出方程修改此處%

33、=%mdlGetTimeOfNextVarHit計算下一步的仿真時刻,該函數(shù)僅當在mdlInitializeSizes%函數(shù)中的采樣時間向量定義了一個可變離散采樣時間ts為-20時才被使用 73%=functionsys=mdlGetTimeOfNextVarHit(t,x,u)sampleTime=1;%例如,下一步仿真時間是1s之后sys=t+sampleTime;%=%mdlTerminate終止仿真設定,完成仿真終止時的任務%=functionsys=mdlTerminate(t,x,u)sys=;%程序結束 74Simulink進行仿真的過程是: 仿真開始時,調(diào)用各個模塊的初始化函數(shù)

34、進行系統(tǒng)初始化,接著進入仿真階段,反復調(diào)用模型中的每一個模塊,即調(diào)用這些模塊對應的S函數(shù),對每個模塊執(zhí)行諸如計算輸出、計算連續(xù)函數(shù)導數(shù)以及計算離散函數(shù)的更新值等任務。 在仿真結束時,調(diào)用終止仿真函數(shù)以結束仿真任務。具體某時刻Simulink執(zhí)行什么任務,取決于當時調(diào)用S函數(shù)時傳入的標志flag的值。75進入第一次仿真循環(huán)之前為仿真初始化階段,Simulink調(diào)用S函數(shù)的初始化功能mdlInitializeSizes完成初始化任務:首先初始化一個包含S函數(shù)信息的Simulink結構(sys),然后設置輸入和輸出端口的數(shù)量和大小,并設置模塊的采樣時間、分配存儲空間以及估計數(shù)組大小等等。進入仿真循環(huán)

35、后,Simulink首先調(diào)用mdlGetTimeOfNextVarHit計算下一采樣點時間(僅僅對于可變離散采樣時間的模塊),然后計算主要時間同步輸出,得出當前時間步的模塊的輸入輸出端口和狀態(tài)取值。接著更新主要時間步的離散狀態(tài),最后進行輔助時間步的積分過程。在輔助時間步調(diào)用S函數(shù)的輸出和導數(shù)計算,并定位過零區(qū)間,于是完成一次仿真循環(huán)。76當Simulink跳出仿真循環(huán)后,就進入了仿真的最后階段。這一階段通過調(diào)用S函數(shù)中的mdlTerminate來執(zhí)行一些必要的任務,最后結束仿真。773.利用S函數(shù)建模和仿真的過程在Simulink模塊瀏覽器中可以打開S函數(shù)的編程例子加以學習,如圖2-31所示。

36、 這里我們通過幾個S函數(shù)的建模實例來說明S函數(shù)建模和仿真的過程。 78圖2-31 在Simulink模塊瀏覽器中打開S函數(shù)的編程例子79 例如: 一個單輸入、單輸出的三階線性時不變系統(tǒng),其狀態(tài)變量設為x1,x2,x3,輸入為u(t) ,輸出為y(t) ,并有狀態(tài)空間方程: 80(2-45)以及輸出方程: y=4x2 (2-46)以矩陣表示為(2-47)81或簡寫為通式:其中:(2-49) (2-48) (2-50) 82據(jù)此可以編寫S函數(shù)myHsapp.m如下:程序2-16functionsys,x0,str,ts=myHsapp(t,x,u,flag)%連續(xù)系統(tǒng)狀態(tài)方程%x=Ax+Bu%y=Cx+Du%定義A,B,C,D矩陣 83A=0 1 0;0 0 1;-4 -6 -3;B=0;0;1;C=0 4 0;D=0;switch flag,case 0 %flag=0初始化sys,x0,str,ts=mdlInitializeSizes(A,B,C,D); %注意要將ABCD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論