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

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

11、1.mdl);%啟動(dòng)模型仿真,顯示出仿真波形whosNameSizeBytesClassScopeData1x13578structarrayGrandtotalis307elementsusing3578bytes27圖2-18 通過(guò)命令啟動(dòng)Simulink仿真28可見(jiàn),仿真完成之后,工作空間中出現(xiàn)了“ScopeData”結(jié)構(gòu)變量,其中包含了示波器顯示的全部波形數(shù)據(jù)。通過(guò)“plot”命令可以作出這些數(shù)據(jù)對(duì)應(yīng)的波形,即t=ScopeData.time;%仿真的時(shí)間變量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所示。讀者可以對(duì)比示波器上得到的波形(參見(jiàn)圖2-18)。我們?cè)诖苏f(shuō)明了Simulink與MATLAB工作空間進(jìn)行數(shù)據(jù)交換的一種方法。 29圖2-19 示波器數(shù)據(jù)傳入工作空間后進(jìn)行波形作圖顯示30事實(shí)上,MATLAB提供了許多途徑用于與Simulink的數(shù)據(jù)交互。通過(guò)Sources子模型庫(kù)中的FromWorkspace模塊可以從工作空間中讀入仿真所需要的輸入數(shù)據(jù)通過(guò)Sinks子模型庫(kù)中的ToWorkspac

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

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

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

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

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

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

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

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

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

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

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

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

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

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

27、1(t),x2(t),xn(t)T(2-36)最為簡(jiǎn)單的是單輸入單輸出系統(tǒng),設(shè)其狀態(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無(wú)記憶系統(tǒng)是一般系統(tǒng)的特例,其狀態(tài)數(shù)為0。例如:設(shè)計(jì)一個(gè)放大器系統(tǒng),將信號(hào)放大2.7倍,則該系統(tǒng)是無(wú)記憶的,故狀態(tài)數(shù)為0,狀態(tài)矩陣x=是空矩陣,而輸出方程為y=f0(t,x,u)=Du(t)=2.7u(t)對(duì)于離散時(shí)間系統(tǒng),其狀態(tài)方程表現(xiàn)為差分方程組的形式。對(duì)于更一般的系統(tǒng),都有以下共同特征:一個(gè)輸入向量u,一個(gè)輸出向量y,一個(gè)狀態(tài)向量x,這些向量可以是連續(xù)

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

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

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

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

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

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

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

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

36、 這里我們通過(guò)幾個(gè)S函數(shù)的建模實(shí)例來(lái)說(shuō)明S函數(shù)建模和仿真的過(guò)程。 78圖2-31 在Simulink模塊瀏覽器中打開(kāi)S函數(shù)的編程例子79 例如: 一個(gè)單輸入、單輸出的三階線性時(shí)不變系統(tǒng),其狀態(tài)變量設(shè)為x1,x2,x3,輸入為u(t) ,輸出為y(t) ,并有狀態(tài)空間方程: 80(2-45)以及輸出方程: y=4x2 (2-46)以矩陣表示為(2-47)81或簡(jiǎn)寫(xiě)為通式:其中:(2-49) (2-48) (2-50) 82據(jù)此可以編寫(xiě)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論