MATLABSimulink機(jī)電系統(tǒng)仿真應(yīng)用 課件 第5章 Simulink建模仿真_第1頁
MATLABSimulink機(jī)電系統(tǒng)仿真應(yīng)用 課件 第5章 Simulink建模仿真_第2頁
MATLABSimulink機(jī)電系統(tǒng)仿真應(yīng)用 課件 第5章 Simulink建模仿真_第3頁
MATLABSimulink機(jī)電系統(tǒng)仿真應(yīng)用 課件 第5章 Simulink建模仿真_第4頁
MATLABSimulink機(jī)電系統(tǒng)仿真應(yīng)用 課件 第5章 Simulink建模仿真_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Simulink建模仿真12/9/2025目錄ContentSimulink概述01Simulink工作環(huán)境02Simulink模型的仿真運(yùn)行03子系統(tǒng)創(chuàng)建與封裝04S-函數(shù)簡介05Simulink概述SimulinkOverview01Simulink界面與操作展示Simulink的主界面布局說明常用模塊庫的功能演示如何創(chuàng)建新模型Simulink工作環(huán)境SimulinkWorkingEnvironment02Simulink內(nèi)置模塊庫包含通用模塊庫(Simulink)和若干專業(yè)模塊庫,如通信系統(tǒng)工具箱、計(jì)算機(jī)視覺系統(tǒng)工具箱、控制系統(tǒng)工具箱、數(shù)字信號處理工具箱和模糊邏輯工具箱等。介紹常用模塊的功能與參數(shù)設(shè)置演示模塊的連接與配置分析模塊的輸入輸出特性7.增加模塊陰影為模塊增加陰影可以右擊所要編輯模塊,從彈出菜單中選擇{Format}|{Shadow}命令。增加陰影后顯示的結(jié)果如圖5-8所示。5.2.5模型說明在一個(gè)模型中添加文本形式的模型說明,說明該模型的功能和使用方法,可以讓模型更加易懂。1.模型說明的添加方法在模型窗口中的任何空白處雙擊,在出現(xiàn)的文本框中輸入需要添加的模型說明內(nèi)容,輸入完成后在此框外任何空白處單擊一下即可。2.修改模型說明字體單擊模型說明,使模型說明處于被選狀態(tài)。在模型說明文本編輯框內(nèi)用鼠標(biāo)右擊引出快捷菜單,選擇{Format}|{FontStyleforSelection}命令。在出現(xiàn)的對話框中進(jìn)行適當(dāng)設(shè)置之后,單擊{ok}按鈕。圖5-10所示就是模型mdl12中左上角空白處添加了一個(gè)中文說明“這是模型12號”。5.2.6模型打印有時(shí)候需要將模型輸出打印出來以便檢查,打印方法主要有三種:菜單打印、粘貼到文檔和使用MATLAB中的打印命令。1.菜單打印選擇{File}|{Print}|{PageSetup}命令,在彈出的對話框中可設(shè)置各種打印屬性,設(shè)置好以后單擊{確定}按鈕。選擇{File}|{Print}命令,在彈出的對話框中單擊{OK}2.嵌入文檔中打印在模型窗口中選擇{Edit}|{CopyCurrentViewToClipboard}命令,這樣模型就被復(fù)制到剪貼板中,然后粘貼到文檔中(如word)就可以了。抓圖的方法,使用鍵盤[PrintScreenSysRq]鍵,然后粘貼到圖形處理程序中,進(jìn)行適當(dāng)?shù)奶幚?,或用其他抓圖軟件處理也可以,然后打印。3.使用MATLAB的print命令使用print命令可以將圖形輸出到打印機(jī)、剪貼板或其他文檔中。Simulink不僅能夠與MATLAB完美結(jié)合,而且可以調(diào)用MATLAB中的許多工具箱。如在命令行窗口中輸入命令:ver,就會在MATLAB命令行窗口輸出MATLAB/Simulink所包含的所有工具箱。Simulink模型的仿真運(yùn)行SimulationOperationofSimulinkModel035.3Simulink模型的仿真運(yùn)行用Simulink模型仿真的基本步驟(1)根據(jù)具體的仿真問題,建立系統(tǒng)的數(shù)學(xué)仿真模型。(2)打開一個(gè)空白模型編輯窗口,其初始的文件名為untitled,用戶可修改。(3)拖放或復(fù)制所需模塊到空白模型中。(4)設(shè)置各個(gè)模塊參數(shù)。(5)用連線對各個(gè)模塊進(jìn)行連接。(6)設(shè)置仿真模型的系統(tǒng)參數(shù)。(7)運(yùn)行仿真。(8)查看仿真結(jié)果。(9)保存文件后退出。Simulink允許在仿真過程中修改其模型參數(shù),但以下這些情況是例外:(1)采樣周期、模型的過零個(gè)數(shù)、模塊中的參數(shù)維數(shù)、模型的狀態(tài)、模型的輸入輸出個(gè)數(shù)、內(nèi)部模塊工作向量的維數(shù)等不能在仿真運(yùn)行過程中修改。(2)不能在模型的仿真運(yùn)行過程中增加或刪除模塊、增加或刪除信號線。如果必須進(jìn)行這類修改,必須停止模型仿真,修改完成后再進(jìn)行仿真。5.3.1創(chuàng)建一個(gè)簡單模型

【例5-1】計(jì)算機(jī)仿真的核心是數(shù)值積分,所以首先以積分一個(gè)簡單信號作為仿真建模的起點(diǎn)。仿真結(jié)構(gòu)將包括一個(gè)輸入(在Simulink中稱為Source),兩個(gè)積分器,一個(gè)可以觀看信號隨時(shí)間變化規(guī)律的窗口(Sinks)。啟動Simulink新模型和庫瀏覽器窗口。展開Source庫,找到Step模塊。用鼠標(biāo)點(diǎn)擊該模塊,并一直按住鼠標(biāo)將該模塊拖到空的窗口。當(dāng)將該模塊拖到窗口時(shí),松開鼠標(biāo)按鈕,在窗口就會出現(xiàn)一個(gè)Step模塊的拷貝。類似地,可以在Continuous庫找到Integrator模塊,并將一個(gè)積分器模塊移到窗口中來。在仿真中需要兩個(gè)積分器,這里僅從庫中拖出來一個(gè)。一旦在Step旁邊有了一個(gè)積分器,只需將鼠標(biāo)移到該積分模塊并按鼠標(biāo)右鍵,在窗口內(nèi)將該模塊拖到右邊,然后松開鼠標(biāo)按鈕,就會看到兩個(gè)積分器。在Simulink里任意一個(gè)模塊處按住鼠標(biāo)右鍵并將模塊拖到一個(gè)新的位置,就可以獲得該模塊的一個(gè)拷貝。從Sinks庫中,找到Scope模塊并將之拖到窗口。用鼠標(biāo)拖著連接線從一個(gè)模塊移到下一個(gè)模塊將二者連接起來,最后,完成模塊結(jié)構(gòu)如圖5-13左所示。雙擊Scope圖標(biāo)并點(diǎn)擊Simulink窗口的運(yùn)行按鈕,幾秒鐘后,仿真結(jié)束并發(fā)出逐漸減弱的嘟嘟聲,顯示窗口如圖5-13右所示。從圖中可以看出:Simulink默認(rèn)的仿真運(yùn)行時(shí)間是0~10s,第二個(gè)積分器的輸出信號是一個(gè)二次增長的信號,但只有1s后才表現(xiàn)出這種特性,Scope模塊默認(rèn)顯示整個(gè)信號。返回模型窗口,打開Step模塊,會看到如圖5-14所示的對話框。Step模塊產(chǎn)生了在輸入到Steptime中的時(shí)刻從Initialvalue初始值階躍變化到Finalvalue終值的信號,改變這些參數(shù)可以在示波器中觀察信號隨時(shí)間的變化波形。打開Integrator模塊,可以看到積分器的缺省初始條件是0,可以修改這2個(gè)積分器的初始條件,觀察波形的變化,對積分初始條件的影響有一個(gè)透徹的理解。Simulink模塊中不同的參數(shù)設(shè)置會影響仿真的運(yùn)行結(jié)果。在仿真窗口點(diǎn)擊Simulink菜單選擇Parameters將會出現(xiàn)如圖5-15的對話框??梢赃x擇仿真的開始和結(jié)束時(shí)間。除了對那些含有顯式時(shí)間函數(shù)的仿真外,對大多數(shù)物理仿真來說,所用的起始時(shí)刻實(shí)際值和仿真沒有關(guān)系。通常的作法是讓仿真從t=0s開始,這個(gè)窗口也被用作調(diào)整參數(shù)以便了解Simulink如何進(jìn)行數(shù)值積分,而這一點(diǎn)恰恰是仿真的核心。Simulink缺省采用對經(jīng)典Runge-Kutta法改進(jìn)后的變步長四階/五階顯式Runge-Kutta積分法。該方法在積分過程中調(diào)整積分時(shí)間步長,使得積分誤差低于某個(gè)誤差限,缺省的相對誤差限是1e-3。絕對誤差限由算法在積分過程中自動調(diào)整。如要嚴(yán)格地控制相對誤差限,可在窗口中進(jìn)行相應(yīng)的修改令相對誤差限達(dá)到1e-6或1e-7。類似地,改變最終的運(yùn)行時(shí)間到5s,然后點(diǎn)擊OK按鈕關(guān)閉窗口。如果再運(yùn)行仿真,將顯示仿真時(shí)間5s的相應(yīng)信號。對前面的仿真模型再作進(jìn)一步的修改以顯示Simulink更多的特性。返回到Simulink庫瀏覽器窗口,在Signals&Systems標(biāo)題下找到Mux模塊并將它拖到仿真窗口,刪除最后一個(gè)積分器和Scope模塊的連接線。Mux模塊是一個(gè)多路合成器,該模塊接受多路信號并將它們合并為一路信號,這在許多場合都非常有用,可以通過雙擊鼠標(biāo)利用對話框改變輸入信號的數(shù)量為3路輸入的多路轉(zhuǎn)換器。將仿真模塊重新布置,使Mux模塊位于第二個(gè)積分器和Scope模塊之間,將第二個(gè)積分器和Mux模塊連接作為一路輸入,Mux模塊的輸出和Scope模塊連接。仿真模型如圖5-16所示。將初始條件重新設(shè)置為零,運(yùn)行仿真并在Scope模塊中觀察仿真(圖5-16右)注意到三條線(在屏幕上表現(xiàn)為不同的顏色)表示輸入到Mux模塊的3個(gè)信號。水平線是第一個(gè)輸入,階躍信號在仿真開始1s從0變到1并在整個(gè)仿真過程中保持不變。Mux的第二個(gè)輸入是第一個(gè)積分器的輸出,是經(jīng)過一段時(shí)間后終止于一定值的水平線,是對常量積分的響應(yīng),第二個(gè)積分器輸出和前面結(jié)果一樣,改變初始條件、時(shí)間步長以及階躍輸入的大小,可以觀察改變這些參數(shù)對仿真結(jié)果的影響。示波器經(jīng)過Layout布局設(shè)置,下面第2個(gè)端口顯示的也是第二個(gè)積分器輸出波形。

ToWorkspace模塊一般將多路信號作為輸入,在MATLAB環(huán)境中生成一個(gè)矩陣。矩陣的每一列代表在給定時(shí)間向量的輸入變量值。變量在矩陣中出現(xiàn)的順序與它們連接到Mux模塊的順序一樣。圖5-20中第二個(gè)積分器的輸出與Mux模塊最下端或第四個(gè)輸入連接。因此,工作環(huán)境矩陣的第四列將是第二個(gè)積分器的輸出。保留默認(rèn)的矩陣名simout,雙擊ToWorkspace模塊,需注意對話框下部的Saveformat,默認(rèn)格式是Structure。這種格式以一種非常緊湊并很完整的數(shù)據(jù)結(jié)構(gòu)存儲數(shù)據(jù)。但是,對這些數(shù)據(jù)進(jìn)行處理比較煩瑣,除非掌握了非常全面扎實(shí)的數(shù)據(jù)結(jié)構(gòu)知識。對話框中的另外一個(gè)選項(xiàng)Array更為合適。在圖5-21所示的對話框中作此更改并運(yùn)行仿真。現(xiàn)在進(jìn)入MATLAB命令窗口,鍵入列出存儲在工作環(huán)境中的矩陣的命令,whos。>>whosNameSizeBytesClassAttributessimout56x41792doubletout56x1448double

simout矩陣有56行4列,是Simulink模型產(chǎn)生的默認(rèn)矩陣,tout列出了每一個(gè)積分步長的時(shí)間,這一點(diǎn)是非常重要,因?yàn)镾imulink一般采用變時(shí)間步長算法,因此數(shù)據(jù)存儲的實(shí)際時(shí)間預(yù)先不知道。simout由仿真中的ToWorkspace模塊產(chǎn)生。該矩陣是56行4列的矩陣,這與Mux具有四個(gè)輸入變量一致。為了證實(shí)這一事實(shí),看一下存儲在矩陣中的以下數(shù)據(jù),最容易的方法是在命令行輸入矩陣的名字。>>simoutsimout=1.00000001.00000.00000.00000.00001.00000.00020.00060.00001.00000.00120.00360.00001.00000.00620.01860.00011.00000.03130.09310.00151.00000.13130.37680.02511.00000.23130.64050.0762

如前所述,第一列數(shù)據(jù)是輸入變量,第二列是第一個(gè)積分器后的信號也即函數(shù)的輸入,是一個(gè)線性增長的斜波函數(shù),第三列是經(jīng)過函數(shù)后的輸出,第四列是第二個(gè)積分器后即最后的輸出。返回到m文件編輯器打開一個(gè)新的文件,得到一個(gè)單輸入、單輸出函數(shù)以實(shí)現(xiàn)上面給出的多項(xiàng)式函數(shù)。選擇的變量名可以是任意的,MATLAB慣例約定傳遞進(jìn)來的參數(shù)為變量u。實(shí)現(xiàn)這個(gè)函數(shù)的一個(gè)可能的MATLAB程序腳本如下,在命令行輸入繪圖plot命令。>>plot(tout,simout(:,1),':',tout,simout(:,2),'r',tout,simout(:,3),'k-',tout,simout(:,4),'g-')這是plot命令最簡單的形式,在這里畫出simout第一列,第二列,第三列,第四列的所有元素隨tout的變化曲線。由該命令得到結(jié)果如圖5-23所示。圖中為清楚指明曲線使用了Figure中的Insert編輯命令。Sinks模塊庫中還有另一個(gè)輸出到文件(ToFile)模塊將信號輸出到mat文件,其模塊參數(shù)對話框如圖5-24所示。5.3.4仿真結(jié)構(gòu)參數(shù)化模型窗口中各模塊的參數(shù)在參數(shù)對話框中設(shè)置,參數(shù)的設(shè)置可以用常量也可以用變量,當(dāng)模塊的參數(shù)需要經(jīng)常改變或由函數(shù)得出時(shí),可以使用變量來設(shè)置模塊的參數(shù),然后通過MATLAB的工作空間或m文件對變量進(jìn)行修改?!纠?-3】仿真兩個(gè)簡單的電路,一個(gè)RL串聯(lián)電路和RC串聯(lián)電路,輸出分別用ToFile模塊和ToWorkspace模塊顯示。R、L、C的參數(shù)使用變量表示,變量的值存放在“ex.m“文件中,模型命名為R2,模型框圖如圖5-25所示。

2.運(yùn)行前在【File】下先進(jìn)入ModelProperties菜單,再進(jìn)入Callbacks調(diào)用,在InitFcn模型初始化函數(shù)界面輸入這三個(gè)參數(shù),按照圖5-26,圖5-27輸入模型參數(shù)后運(yùn)行。將ToWorkspace模塊的”Saveformat“設(shè)置為”Array“,其它默認(rèn)。輸入以下命令。>>plot(tout,simout)%RC回路輸出波形將ToFile模塊的“Filename”設(shè)置為“ex5_3.mat”,”Variablename“設(shè)置為y,”Saveformat“設(shè)置為”Array“,仿真運(yùn)行結(jié)束后,仿真數(shù)據(jù)輸出到ex5_3.mat文件。在命令窗口輸入命令查看ex5_3.mat文件。>>loadex5_3,size(y)ans=2695.3.5用命令運(yùn)行Simulink模型1.sim命令啟動模型的仿真可以使用sim函數(shù)來完成,命令格式如下。[t,x,y]=sim('model',timespan,options,ut)%利用輸入?yún)?shù)進(jìn)行仿真【說明】‘model’為模型名,其余參數(shù)可以省略;timespan是仿真時(shí)間區(qū)間,可以使用[t0,tf]設(shè)置仿真起始時(shí)間和終止時(shí)間,如果是標(biāo)量則指終止時(shí)間;options參數(shù)為模型仿真的相關(guān)參數(shù),包括仿真參數(shù)和求解器的屬性;ut為模型的外部輸入向量;t為仿真時(shí)間列向量,x為狀態(tài)變量構(gòu)成的矩陣,y為輸出信號構(gòu)成的矩陣,每列對應(yīng)一路輸出信號。RL回路輸出響應(yīng)如圖所示?!纠?-3續(xù)】>>[t,x,y]=sim('R2’);

%調(diào)用Simulink模型,運(yùn)行仿真>>loadex5_3,plot(t,y)

分析仿真步長與求解器的選擇說明仿真時(shí)間的設(shè)置方法演示如何配置仿真參數(shù)5.3.6Simulink仿真運(yùn)行參數(shù)設(shè)置利用Simulink窗口進(jìn)行仿真,主要有以下幾個(gè)操作。一、設(shè)置仿真參數(shù)在Simulink模型窗口中選擇{Simulation}|{ModelConfigurationParameters}選項(xiàng),彈出仿真參數(shù)設(shè)置對話框。圖中左側(cè)列表框中的目錄樹包括Solver、DataImport/Export、Optimization、Diagnostics、HardwareImplementation、ModelReferencing、Real-TimeWorkshop和HDLCoder等8項(xiàng)。右側(cè)是每一項(xiàng)所包含的參數(shù)設(shè)置選項(xiàng)。仿真參數(shù)設(shè)置好之后,單擊{Apply}按鈕或者單擊{OK}按鈕。1)Solver求解器求解器設(shè)置包括兩個(gè)選項(xiàng)組Simulationtime和Solveroptions,可以設(shè)置仿真的起止時(shí)間、求解器類型、誤差大小等。(1)Simulationtime:仿真起止時(shí)間設(shè)置Starttime:仿真起始時(shí)間,默認(rèn)為0。Stoptime:仿真終止時(shí)間,默認(rèn)為10。(2)Solveroptions:仿真求解器具體設(shè)置Type:此選項(xiàng)包括Variable-step和Fixed-step,分別表示變步長和定步長。Solver:表示求解方法,當(dāng)Type值為Variable-step時(shí),包括ode45、ode23、ode113、ode15s、ode23s、ode23t和ode23tb,其中前3個(gè)為非剛性求解方法,其余為剛性求解方法。a.離散時(shí)間系統(tǒng)求解器算法離散時(shí)間系統(tǒng)一般都是用差分方程描述的,其輸入與輸出僅在離散的采樣時(shí)刻取值,系統(tǒng)的狀態(tài)每隔一個(gè)采樣周期才更新一次,而Simulink對離散時(shí)間系統(tǒng)仿真的核心,就是對離散時(shí)間系統(tǒng)的差分方程求解。因此,除了有限的數(shù)據(jù)截?cái)嗾`差外,Simulink對離散時(shí)間系統(tǒng)仿真的結(jié)果可以認(rèn)為是沒有誤差的。用戶欲仿真純粹的離散時(shí)間系統(tǒng),需要選用離散求解器。即在Simulink仿真參數(shù)設(shè)置對話框的求解器選項(xiàng)卡中選擇discrete(nocontinuousstates)選項(xiàng),便可對離散時(shí)間系統(tǒng)進(jìn)行精確的求解和仿真。b.連續(xù)系統(tǒng)求解器算法連續(xù)系統(tǒng)是用微分方程描述的。使用數(shù)字計(jì)算機(jī)只能求出其數(shù)值解(即近似解),不可能得到系統(tǒng)的精確解。Simulink對連續(xù)系統(tǒng)進(jìn)行仿真,實(shí)質(zhì)上是求系統(tǒng)的常微分或者偏微分方程的數(shù)值解。微分方程的近似求解方法有多種,因此Simulink的連續(xù)求解器有多種不同的算法。在具體介紹這些算法之前,必須先了解關(guān)于用微分方程描述的系統(tǒng)的“剛性(stiff)”的概念。所謂剛性(stiff)系統(tǒng),是指該其系統(tǒng)方程特征值相差很大(有的很大,有的很?。┑南到y(tǒng),其物理意義就是描述該動態(tài)系統(tǒng)慣性的一組時(shí)間常數(shù)值大小相差懸殊。因此,剛性系統(tǒng)中既包含變化很快的動態(tài)模式(分量),又包含變化很慢的動態(tài)模式。連續(xù)系統(tǒng)求解器算法有以下幾種:1.ode45算法采用Runge-Kutta方法,這是利用Simulink求解微分方程時(shí)最常用的一種方法。它利用有限項(xiàng)的Taylor級數(shù)來近似解函數(shù),而誤差的來源就是Taylor級數(shù)的截?cái)囗?xiàng),誤差就是截?cái)嗾`差。這種算法精度適中,一般情況下應(yīng)該首先選它。ode45分別采用4階與5階Taylor級數(shù)計(jì)算每個(gè)積分步長終端的狀態(tài)變量近似值,并把這兩個(gè)階次不同的級數(shù)的近似值相減,用得到的差值作為計(jì)算誤差的判斷標(biāo)準(zhǔn)。如果誤差估計(jì)值大于該系統(tǒng)的設(shè)定值,那么就把該積分步長縮短,然后重新計(jì)算;如果誤差遠(yuǎn)小于系統(tǒng)的設(shè)定值,那么就將積分步長加大。2.ode23算法這種求解器也采用Runge-Kutta方法,同樣是利用有限項(xiàng)的Taylor級數(shù)來近似解函數(shù)。與ode45不同的是,它分別采用2階與3階Taylor級數(shù)計(jì)算每個(gè)積分步長終端的狀態(tài)變量近似值,并利用這兩個(gè)級數(shù)的值相減,以得到的差值作為計(jì)算誤差的判斷標(biāo)準(zhǔn)。如果誤差估計(jì)值大于這個(gè)系統(tǒng)的設(shè)定值,那么就把該積分步長縮短,然后重新計(jì)算。如果誤差遠(yuǎn)小于系統(tǒng)的設(shè)定值,那么就將積分步長加長。為了能夠達(dá)到與ode45同樣的精度,ode23的積分步長總要比ode45取的小。因此,ode23處理“中度剛性”問題的能力優(yōu)于ode45。ode23和ode45都屬于變步長算法。3.ode113算法ode113采用的變階Adams法是一種多步預(yù)報(bào)校正算法。使用ode113的步驟如下:(a)在預(yù)報(bào)階段,用一個(gè)(n-1)階多項(xiàng)式近似導(dǎo)函數(shù)。該預(yù)報(bào)多項(xiàng)式的系數(shù)通過前面(n-1)個(gè)節(jié)點(diǎn)及其導(dǎo)數(shù)值來確定。(b)用外推方法計(jì)算下一個(gè)節(jié)點(diǎn)。(c)在校正階段,通過對前面n個(gè)節(jié)點(diǎn)和新的試探節(jié)點(diǎn)運(yùn)用擬合技術(shù)獲得校正多項(xiàng)式。(d)用該校正多項(xiàng)式重算試探解,即獲得校正解。(e)用預(yù)報(bào)解和校正解之間的差值作為誤差,與系統(tǒng)設(shè)定值比較,用來調(diào)整積分步長,調(diào)整方法與ode45和ode23方法類似。4.ode15s算法它是專門用來求解剛性方程的變階多步算法,包含一種對系統(tǒng)動態(tài)轉(zhuǎn)換進(jìn)行檢測的機(jī)理。這種檢測使這一算法對非剛性系統(tǒng)計(jì)算效率低下,尤其是對那種有快速變化模式的系統(tǒng)更是如此。5.ode23s算法它與ode15s一樣都是用來求解剛性方程的,是基于Rosenbrok公式建立起來的定階單步算法。由于計(jì)算階數(shù)不變,所以計(jì)算效率要比ode15s效率高。6.ode23t算法

此法用來求解中度剛性方程。也可以用來求解剛性方程。2)DataExport/Import數(shù)據(jù)輸入輸出單擊ConfigurationParameters對話框左側(cè)目錄中的DataExport/Import選項(xiàng),對話框如圖5-31。這個(gè)頁面的作用是定義將仿真結(jié)果輸出到工作空間,以及從工作空間得到輸入和初始狀態(tài)。(1)Loadfromworkspace:可以設(shè)置如何從MATLAB工作區(qū)調(diào)入數(shù)據(jù)。勾選相應(yīng)方框表明從工作空間獲得輸入或初始狀態(tài)。若勾選Input,則工作空間提供輸入,且為矩陣形式。輸入矩陣的第一列必須是升序的時(shí)間向量,其余列分別對應(yīng)不同的輸入信號。(2)Savetoworkspaceorfile:可以設(shè)置如何將數(shù)據(jù)保存到MATLAB工作區(qū)。勾選相應(yīng)方框表明保存輸出到MATLAB工作空間。Time和Output為缺省選中的。即一般運(yùn)行一個(gè)仿真模型后,在MATLAB工作空間都會增加兩個(gè)變量tout、yout。變量名可以設(shè)置。(3)Saveoptions:允許設(shè)置保存到工作區(qū)或者從工作區(qū)加載的數(shù)據(jù)長度(Limitdatapointstolast。存儲數(shù)據(jù)到工作空間的格式(Format下拉列表框可選數(shù)組、構(gòu)架數(shù)組、包含時(shí)間數(shù)據(jù)的構(gòu)架數(shù)組)。確定兩相鄰存儲數(shù)據(jù)間隔的點(diǎn)數(shù)即抽樣率(Decimation若為1,則保存所有數(shù)據(jù);若為2,則隔一個(gè)數(shù)據(jù)保存一次)。(4)Outputoptions:包含(Refineoutput)細(xì)化輸出、(Produceadditionaloutput)產(chǎn)生附加輸出、(Producespecifiedoutputonly)只產(chǎn)生特定輸出。細(xì)化輸出指可以增加輸出數(shù)據(jù)的點(diǎn)數(shù),使輸出更加平滑。數(shù)據(jù)點(diǎn)數(shù)增加的數(shù)量由(Refinefactor)細(xì)化系數(shù)控制,可在文本框內(nèi)設(shè)置,為2,則在每個(gè)步長中間插入一個(gè)點(diǎn)。3)Diagnostics診斷Diagnostics參數(shù)配置控制面板可以配置適當(dāng)?shù)膮?shù),如下圖5-32,以便在仿真執(zhí)行過程中遇到異常情況時(shí)診斷出錯(cuò)誤,從而采取相應(yīng)的措施。(1)Solver:當(dāng)Simulink檢測到與求解器相關(guān)的錯(cuò)誤時(shí),這個(gè)控制組可設(shè)置診斷措施。Algebraicloop:在執(zhí)行模型仿真時(shí)可以檢測出代數(shù)環(huán)。Minimizealgebraicloop:如果需要Simulink消除包含有子系統(tǒng)的代數(shù)環(huán)及這個(gè)子系統(tǒng)的直通輸入端口,就可以設(shè)置此選項(xiàng)來采取相應(yīng)的診斷措施。Blockpriorityviolation:當(dāng)仿真運(yùn)行時(shí),Simulink檢測模塊優(yōu)先級設(shè)置錯(cuò)誤的選項(xiàng)。Minstepsizeviolation:允許下一個(gè)仿真步長小于模型設(shè)置的最小時(shí)間步長。當(dāng)設(shè)置的模型誤差需要的步長小于設(shè)置的最小步長時(shí),此選項(xiàng)起作用。Solverdatainconsistency:兼容性檢測是一個(gè)調(diào)試工具,確保滿足Simulink中ODE求解器的若干假設(shè)。(2)SampleTime:當(dāng)Simulink檢測到與模型采樣周期相關(guān)的錯(cuò)誤時(shí),這個(gè)控制組可以設(shè)置診斷措施。Sourceblockspecifies-1sampletime:設(shè)置源模塊的采樣周期為-1,如SineWave模塊。Multitaskratetransition:在多任務(wù)模式中的兩個(gè)模塊,會出現(xiàn)兩個(gè)模塊間速率的轉(zhuǎn)換。Singletaskratetransition:在單任務(wù)模式中,兩個(gè)模塊間的速率會進(jìn)行轉(zhuǎn)換。Taskswithequalpriority:這個(gè)模型所表示的目標(biāo)中的一個(gè)異步任務(wù)與另外一個(gè)目標(biāo)異步任務(wù)具有同樣的優(yōu)先級。如果目標(biāo)不允許具有同樣優(yōu)先級的任務(wù)相互支配,則必須將選項(xiàng)設(shè)置為error。(3)DataValidity:數(shù)據(jù)有效性診斷。(4)TypeConversion:該選項(xiàng)組用于用戶設(shè)置診斷,以便在模型編譯過程中Simulink檢測到模型中存在數(shù)據(jù)類型轉(zhuǎn)換問題時(shí)所采取的應(yīng)對措施。(5)Connectivity:這個(gè)選項(xiàng)組用于用戶設(shè)置診斷,以便在模型編譯過程中Simulink檢測到模塊的連接問題時(shí)采取相應(yīng)的措施。(6)Compatibility和ModelReferencing:這兩個(gè)選項(xiàng)組都允許用戶設(shè)置相應(yīng)的診斷措施,以便在模型升級或者模型仿真過程中,檢測到Simulink不同版本之間的不兼容性時(shí)采取相應(yīng)的應(yīng)對措施,二者功能類似,只是針對的對象有所不同。5)HardwareImplementation硬件設(shè)置參數(shù)配置控制面板主要針對基于計(jì)算機(jī)系統(tǒng)的模型,如嵌入式控制器。允許設(shè)置這些用來執(zhí)行模型所表示系統(tǒng)的硬件的參數(shù)。能夠使模型仿真中可檢測到目標(biāo)硬件中存在的錯(cuò)誤條件,如硬件的溢出。二、運(yùn)行仿真選擇{Simulation}|{Run}命令運(yùn)行仿真,或者使用[Ctrl+T]快捷鍵,或者單擊工具欄的運(yùn)行(Run)按鈕直接運(yùn)行。模型運(yùn)行時(shí),命令{Simulation}|{Run}自動變?yōu)閧Simulation}|{Stop},運(yùn)行按鈕變?yōu)闀和0粹o。三、終止仿真與運(yùn)行仿真操作類似,當(dāng)運(yùn)行完仿真后可選擇{Simulation}|{Stop}命令,或者使用快捷鍵[Ctrl+Shift+T],或者單擊{Stop}按鈕直接終止仿真。四、暫停仿真與終止仿真操作類似,當(dāng)運(yùn)行仿真后可選擇{Simulation}|{Stop}命令,或者單擊暫停按鈕直接暫停仿真。五、仿真診斷在仿真過程中,如果模型中存在錯(cuò)誤,運(yùn)行會被終止,并彈出仿真診斷對話框,在對話框中顯示錯(cuò)誤信息,錯(cuò)誤信息含義如表5-1。錯(cuò)誤信息信息含義Message信息類型,如錯(cuò)誤模塊,警告,日志Source信息來源,如Simulink,Stateflow,Real-TimeWorkshopReportedby導(dǎo)致出錯(cuò)的元素名,如模塊Summary出錯(cuò)信息摘要子系統(tǒng)創(chuàng)建與封裝SubsystemCreationandEncapsulation045.4子系統(tǒng)創(chuàng)建與封裝在建立的Simulink系統(tǒng)模型比較大或很復(fù)雜時(shí),可將一些模塊組合成子系統(tǒng),這樣可使模型得到簡化,便于連線;可提高效率,便于調(diào)試;可生成層次化的模型圖表,用戶可采取自上而下或自下而上的設(shè)計(jì)方法。將一個(gè)創(chuàng)建好的子系統(tǒng)進(jìn)行封裝,也就是使子系統(tǒng)象一個(gè)模塊一樣,例如可以有自己的參數(shù)設(shè)置對話框,自己的模塊圖標(biāo)等。這樣就使子系統(tǒng)使用起來非常方便。

5.4.1創(chuàng)建子系統(tǒng)1.通過Subsystem子系統(tǒng)模塊創(chuàng)建子系統(tǒng):在Simulink庫瀏覽器,有一個(gè)Ports&Subsystems模塊庫,點(diǎn)擊該圖標(biāo)即可看到不同類型的子系統(tǒng)模塊。下面以創(chuàng)建PID子系統(tǒng)為例,說明子系統(tǒng)的創(chuàng)建過程。【例5-4】創(chuàng)建PID控制器子系統(tǒng)。將子系統(tǒng)庫模塊中的Subsystem模塊復(fù)制到模型窗,如圖5-34左所示。雙擊該圖標(biāo)即打開該子系統(tǒng)的編輯窗口,如圖5-34右所示;將組成子系統(tǒng)的模塊填加到子系統(tǒng)編輯窗口,將模塊按設(shè)計(jì)要求連接,設(shè)置子系統(tǒng)各模塊參數(shù)(可以是變量),修改In1和Out1模塊下面的標(biāo)簽,關(guān)閉子系統(tǒng)的編輯窗口,返回模型窗口如圖5-35所示。修改子系統(tǒng)的標(biāo)簽(PID),該P(yáng)ID子系統(tǒng)即可作為模塊在構(gòu)造系統(tǒng)模型時(shí)使用。如圖5-36所示。2.組合已存在的模塊建立子系統(tǒng)如果現(xiàn)有的模型已經(jīng)包含了需要轉(zhuǎn)化成子系統(tǒng)的模塊,就可以通過組合這些模塊的方式建立子系統(tǒng)。步驟如下:(1) 確定需建立Subsystem的模型(被選中的背景均標(biāo)記有藍(lán)色),如圖5-37所示。(2) 點(diǎn)擊模型窗【Diagram】菜單中的【Subsystem&ModelReference】下的CreateSubsystemFromSelection命令,則所選定的部分模塊或者全部模塊組合自動轉(zhuǎn)化成子系統(tǒng),如圖5-38所示。(3) 雙擊該圖標(biāo),可打開該子系統(tǒng)窗口,改寫輸入輸出符號;關(guān)閉子系統(tǒng)編輯窗口,設(shè)置子系統(tǒng)標(biāo)簽,則系統(tǒng)模型如圖5-39所示。5.4.2封裝子系統(tǒng)子系統(tǒng)可以建立自己的參數(shù)設(shè)置對話框,以避免對子系統(tǒng)內(nèi)的每個(gè)模塊分別進(jìn)行參數(shù)設(shè)置,因此在子系統(tǒng)建立好以后,需對其進(jìn)行封裝。子系統(tǒng)封裝的基本步驟如下:(1)選擇需要封裝的子系統(tǒng),設(shè)置好子系統(tǒng)中各模塊的參數(shù)變量;(2)定義提示對話框及其特性;定義被封裝子系統(tǒng)的描述和幫助文檔;定義產(chǎn)生模塊圖標(biāo)的命令。選擇Edit→Editmask菜單命令,在彈出框中設(shè)置(3)單擊Apply或OK保存1.設(shè)置子系統(tǒng)參數(shù)變量將原子系統(tǒng)中的常數(shù)改為變量,其中飽和環(huán)節(jié)的上、下限分別設(shè)為au、ab(需打開該環(huán)節(jié)的參數(shù)設(shè)置框),如圖5-40所

示。2.產(chǎn)生提示對話框選擇需要封裝的子系統(tǒng),從模型窗口的【Diagram】中的Mask菜單選擇CreateMask命令,即彈出如圖5-41所

示的封裝編輯器窗口,共有4個(gè)選項(xiàng)卡:(1)Parameters&Dialog(參數(shù)設(shè)置):定義子系統(tǒng)參數(shù)對話框的變量。這是對于子系統(tǒng)封裝最關(guān)鍵的,用于設(shè)置參數(shù)變量及其類型等。在本例中需要對飽和器的上、下限,傳遞函數(shù)系數(shù),延遲時(shí)間常數(shù)等進(jìn)行設(shè)置。只需要在Prompt文本框內(nèi)輸入變量提示符,在對應(yīng)的Variable文本框中輸入相應(yīng)的變量名(必須與被封裝子系統(tǒng)定義的變量名一致),在【Type】下拉列表框中選【Edit】,勾選【Evaluate】、【Tunable】復(fù)選框,然后單擊左側(cè)Edit按鈕即可依次設(shè)置子系統(tǒng)中的各個(gè)變量。【Type】下拉列表框有10個(gè)選項(xiàng),一般選Edit控件,它要求直接在文本框里輸入要設(shè)置的值(變量名)。(2)Initialization(初始化):主要對封裝子系統(tǒng)內(nèi)的變量賦初值,輸入初始化命令并顯示所定義的變量,如圖5-42左

所示。其中的DialogVariables(變量表)中的變量排序應(yīng)與Parameters定義的變量一致。參數(shù)變量名由由封裝編輯器的Parameters選項(xiàng)卡全部輸入后,雙擊該子系統(tǒng)圖標(biāo),即彈出如圖5-42右

所示子系統(tǒng)的參數(shù)設(shè)置對話框。(3)Icon&Ports(圖標(biāo)):確定封裝后子系統(tǒng)模塊的圖標(biāo)。圖5-43模塊圖標(biāo)編輯窗口,在圖標(biāo)上顯示文本、定制圖標(biāo)的命令都寫在Icondrawingcommands(圖標(biāo)繪制命令)窗口內(nèi),disp命令將內(nèi)容顯示在圖標(biāo)中心,而text命令則將內(nèi)容放在指定位置。而圖標(biāo)上顯示圖形需要在窗口輸入繪圖指令plot()。例如輸入plot([0145],[0044],[05],[22],[2.52.5],[04]),則圖標(biāo)顯示為如圖5-43左下所示。其中第一對([0145],[0044])繪制飽和曲線,第二對([05],[22])畫X軸,最后一對數(shù)據(jù)畫Y軸。在圖標(biāo)繪制命令窗口輸入指令dpoly(num,den)可以顯示傳遞函數(shù),num和den分別為分子分母的系數(shù)。(4)Documentation(文檔):封裝說明。該選項(xiàng)有三個(gè)文本框如圖5-44Type文本框用來設(shè)置子系統(tǒng)模塊的封裝類型,可輸入字符串。Description文本框用于設(shè)置子系統(tǒng)的說明文檔。Help文本框用于設(shè)置幫助信息。封裝后完整的系統(tǒng)如圖5-45所示。5.4.3條件子系統(tǒng)條件子系統(tǒng)是指執(zhí)行受某種信號控制的一類子系統(tǒng)。Simulink中的條件子系統(tǒng)受到兩種信號之一,一是決定子系統(tǒng)是否執(zhí)行的控制信號(觸發(fā)信號、使能信號);另一個(gè)是使系統(tǒng)產(chǎn)生輸出的輸入信號。條件子系統(tǒng)包括使能子系統(tǒng)、觸發(fā)子系統(tǒng)和使能觸發(fā)子系統(tǒng)模塊。1.使能子系統(tǒng)使能子系統(tǒng)當(dāng)使能端控制信號為正時(shí),系統(tǒng)處于“允許”狀態(tài),否則為“禁止”狀態(tài)?!笆鼓堋笨刂菩盘柨梢詾闃?biāo)量,也可以為向量。當(dāng)為標(biāo)量信號時(shí),只要該信號大于零,子系統(tǒng)就開始執(zhí)行;當(dāng)為向量信號時(shí),只要其中一個(gè)信號大于零,也“使能”子系統(tǒng)。雙擊使能子系統(tǒng)圖標(biāo)得到如圖5-46所示的子系統(tǒng)編輯窗口,再雙擊窗口中的Enable模塊,則彈出5-46右的對話框,可以選擇使能開始時(shí)狀態(tài)的值reset(復(fù)位)或held(保持當(dāng)前狀態(tài))。2.觸發(fā)子系統(tǒng)觸發(fā)子系統(tǒng)只在觸發(fā)事件發(fā)生的時(shí)刻執(zhí)行。所謂觸發(fā)事件也就是觸發(fā)子系統(tǒng)的控制信號,一個(gè)觸發(fā)子系統(tǒng)只能有一個(gè)控制信號,在Simulink中稱之為觸發(fā)輸入。觸發(fā)事件有4種類型,即上升沿觸發(fā)(rising)、下降沿觸發(fā)(falling)、跳變觸發(fā)(either)和回調(diào)函數(shù)觸發(fā)(function-call)。雙擊觸發(fā)子系統(tǒng)中的觸發(fā)器模塊(Trigger),在彈出的對話框中可選擇觸發(fā)類型。圖5-48左是觸發(fā)子系統(tǒng)應(yīng)用的一個(gè)示例。觸發(fā)器設(shè)為上升沿觸發(fā),正弦輸入經(jīng)觸發(fā)控制后,成為階梯波,如圖5-48右所示。觸發(fā)器設(shè)為下降沿觸發(fā),正弦輸入經(jīng)觸發(fā)控制后,成為階梯波,如圖5-49所示。觸發(fā)事件發(fā)生時(shí)刻觸發(fā)子系統(tǒng)的輸出會保持到下一個(gè)觸發(fā)事件的發(fā)生時(shí)刻。3.觸發(fā)使能子系統(tǒng)同時(shí)具有觸發(fā)和使能兩個(gè)功能模塊的子系統(tǒng),在這種系統(tǒng)中,若系統(tǒng)處于使能狀態(tài),則觸發(fā)事件將激活子系統(tǒng);若系統(tǒng)處于非使能狀態(tài),則忽略觸發(fā)信號。5.4.4仿真實(shí)例本節(jié)介紹如何利用Simulink求解機(jī)構(gòu)的運(yùn)動約束方程,進(jìn)行機(jī)構(gòu)的運(yùn)動學(xué)仿真。圖5-50所示為某曲柄滑塊機(jī)構(gòu)示意圖。連桿r2、r3的長度已知,曲柄輸入角速度或角加速度已知。

(2)建立曲柄滑塊機(jī)構(gòu)的Simulink運(yùn)動學(xué)仿真模型如圖5-52左所示。其中的MATLABFunction模塊在User-definedFunction庫中,將該模塊復(fù)制到模型窗口后,雙擊該模塊,在彈出的對話框的Parameters欄中填入前面建立的MATLAB函數(shù)名compv(該函數(shù)應(yīng)當(dāng)已經(jīng)在MATLAB搜索路徑中)以及2個(gè)輸出變量,如圖5-52右所示。

為了分析連桿3的轉(zhuǎn)角和滑塊的位移間的關(guān)系,可利用雙縱坐標(biāo)圖同時(shí)繪制這兩條曲線,程序如下:t=tout;[ax,h1,h2]=plotyy(t,acc(:,3),t,acc(:,5),'plot');%利用圖形句柄進(jìn)行操作(坐標(biāo)軸和對應(yīng)圖形)set(get(ax(1),'Ylabel'),'string','連桿3轉(zhuǎn)角/rad');%設(shè)置左縱坐標(biāo)軸名set(get(ax(2),'Ylabel'),'string','滑塊位移/mm');%設(shè)置右縱坐標(biāo)軸名xlabel('t/s');set(h1,'LineStyle','-.')%設(shè)置左縱坐標(biāo)軸對應(yīng)曲線的線型text(0.94,0.2,'連桿轉(zhuǎn)角\rightarrow')text(0.27,0.1,'滑塊位移\rightarrow')

程序運(yùn)行所繪制的圖形如圖5-55所

示。仿真結(jié)果分析介紹Scope模塊的使用闡述如何查看仿真波形分析仿真結(jié)果的解讀方法S-函數(shù)簡介IntroductiontoS-function055.5S函數(shù)簡介5.5.1S函數(shù)工作原理Simulink的系統(tǒng)函數(shù)(SystemFunction)簡稱為S函數(shù),是由一系列子函數(shù)即“仿真過程”組成的。仿真過程就是S函數(shù)特有的語法結(jié)構(gòu),用戶編寫S函數(shù)的任務(wù)就是在相應(yīng)的仿真過程中填寫適當(dāng)?shù)拇a,供Simulink及MATLAB求解器調(diào)用。M文件S函數(shù)結(jié)構(gòu)清晰,書寫方便,易于理解,能夠調(diào)用豐富的MATLAB函數(shù),所以可滿足大多數(shù)實(shí)際應(yīng)用的需求。S函數(shù)模塊在“User-DefinedFunctions”子模塊庫中,模塊可以用C、MATLAB和Fortran編寫,通過“S-Function”模塊創(chuàng)建包含S函數(shù)的Simulink模型。如果“S-Function”模塊需要其他源文件來生成代碼,在“S-Functionname:”中必須填寫不帶擴(kuò)展名的S函數(shù)文件名,例如,輸入“src”,而不是“src.c”?!癝-Functionparameters:”中填寫模塊的參數(shù)S函數(shù)M文件形式的標(biāo)準(zhǔn)模板程序是一個(gè)格式特殊的M文件,名為“sfuntmpl.m”,存放在“…MATLAB\R2010a\toolbox\simulink\blocks”目錄下,用戶可以根據(jù)該模板進(jìn)行修改。M文件的S函數(shù)由以下形式的MATLAB函數(shù)組成:[sys,x0,str,ts,simStateCompliance]=f(t,x,u,flag,p1,p2,...)其中f是S函數(shù)的文件名,t是當(dāng)前時(shí)間,x是狀態(tài)向量,u是模塊的輸入,flag是所要執(zhí)行的任務(wù)標(biāo)志,p1,p2…都是模塊的參數(shù)。在模型仿真的過程中,Simulink不斷地調(diào)用函數(shù)f,通過標(biāo)志flag的值來說明所要完成的任務(wù)。每次S函數(shù)執(zhí)行任務(wù)后,都將以特定結(jié)構(gòu)返回結(jié)果。M文件S函數(shù)利用標(biāo)志flag控制調(diào)用仿真過程函數(shù)的順序。M文件S-函數(shù)的仿真流程如圖5-56所示。在初始化階段,通過標(biāo)志0調(diào)用S函數(shù),并請求提供輸入輸出個(gè)數(shù)、初始狀態(tài)和采樣周期等信息。然后,仿真開始。下一個(gè)標(biāo)志為4,請求S函數(shù)提供下一步的采樣周期(只在變采樣速率下才被調(diào)用)。接著標(biāo)志為3,計(jì)算模塊的輸出,然后標(biāo)志為2更新離散狀態(tài),當(dāng)需要計(jì)算連續(xù)狀態(tài)導(dǎo)數(shù)時(shí)標(biāo)志為1。然后求解器使用積分過程計(jì)算狀態(tài)的值。計(jì)算狀態(tài)導(dǎo)數(shù)和更新離散狀態(tài)之后通過標(biāo)志3計(jì)算模塊的輸出。這樣就完成了一個(gè)仿真步長的工作。當(dāng)?shù)竭_(dá)結(jié)束時(shí)間時(shí),采用標(biāo)志9完成結(jié)束前的處理工作。以下為仿真過程對應(yīng)的flag選項(xiàng)表。當(dāng)調(diào)用S函數(shù)在flag=0時(shí),調(diào)用格式為[sys,x0]=model(t,x,u,flag)返回參數(shù)x0表示狀態(tài)向量的初始值及sys各分量的信息。SYS(1)=連續(xù)狀態(tài)變量數(shù)SYS(2)=離散狀態(tài)變量數(shù)SYS(3)=輸出變量數(shù)SYS(4)=輸入變量數(shù)SYS中前四個(gè)元素中的任何一個(gè)都可以指定為-1,表示它們可以動態(tài)調(diào)整大小。所有其他flag的實(shí)際長度將等于輸入的長度U。SYS(5)=系統(tǒng)中不連續(xù)根的個(gè)數(shù),保留用于根查找,必須為零SYS(6)=直通標(biāo)志(1=存在,0=不存在)。s函數(shù)如果在標(biāo)志=3期間使用U,則具有直通,將此設(shè)置為0類似于承諾在標(biāo)志=3期間不使用U。如果違背承諾會出現(xiàn)不可預(yù)測的結(jié)果。SYS(7)=采樣時(shí)間數(shù)。這是TS中的行數(shù)。實(shí)際用戶在建立Simulink模型框圖時(shí),Simulink就會利用該框圖中的信息生成一個(gè)S-函數(shù)(即.mdl文件),每個(gè)框圖都有一個(gè)與之同名的S-函數(shù)。5.5.2M文件S函數(shù)模板Simulink為用戶提供了大量的S-函數(shù)模板和實(shí)例,用戶可以根據(jù)需要進(jìn)行修改。雙擊Simulink模塊庫中User-DefinedFunction的子庫S-FunctionExample,彈出圖5-57所示的S-函數(shù)示例模塊庫;再雙擊其中的MATLABfileS-Function模塊,彈出如圖5-58所示的用M文件編寫的S-函數(shù)模塊庫,其中Level-1MATLABfile用于兼容以前版本的S-函數(shù)仿真,Level-2MATLABfile用于擴(kuò)展M文件的S-函數(shù)仿真。雙擊Level-1MATLABfileS-functionsTemplate即可打開S-函數(shù)模板文件sfunmpl.m,如圖5-59所示。S函數(shù)有固定的編寫格式,在MATLAB中自帶了默認(rèn)的模板,用戶只需要按其要求填寫或改寫相關(guān)部分。直接利用MATLAB語言編寫的S函數(shù)不需要編譯就可以直接調(diào)用。在編寫M文件S函數(shù)時(shí),建議使用S函數(shù)模板文件sfunmpl.m,這個(gè)文件中包含了一個(gè)完整的M文件S函數(shù)。其中包括一個(gè)主函數(shù)和若干子函數(shù),每一個(gè)子函數(shù)都對應(yīng)一個(gè)flag。主函數(shù)用來調(diào)用子函數(shù),子函數(shù)就成為S函數(shù)回調(diào)函數(shù)。在主函數(shù)內(nèi)有一個(gè)Switch-Case開關(guān)結(jié)構(gòu),根據(jù)變量flag之值將執(zhí)行流程轉(zhuǎn)到對應(yīng)的子函數(shù)。用戶在MATLAB命令窗口輸入命令“editsfuntmpl”即可打開文件,以下是sfuntmpl.m在刪除了部分注釋后的內(nèi)容。>>editsfuntmplfunction[sys,x0,str,ts,simStateCompliance]=sfuntmpl(t,x,u,flag)%主函數(shù)switchflag,%Initialization%case0,%flag=0則調(diào)用初始化子函數(shù)[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;%Derivatives%case1,%

flag=1則調(diào)用計(jì)算導(dǎo)數(shù)子函數(shù)sys=mdlDerivatives(t,x,u);%Update%case2,%flag=2則調(diào)用離散狀態(tài)更新子函數(shù)

sys=mdlUpdate(t,x,u);%Outputs%case3,%flag=3則調(diào)用計(jì)算輸出子函數(shù)sys=mdlOutputs(t,x,u);%GetTimeOfNextVarHit%case4,%flag=4則調(diào)用計(jì)算下一個(gè)采樣點(diǎn)子函數(shù)

sys=mdlGetTimeOfNextVarHit(t,x,u);%Terminate%case9,%flag=9則調(diào)用仿真結(jié)束子函數(shù)

sys=mdlTerminate(t,x,u);%Unexpectedflags%otherwise%flag=其它值則報(bào)錯(cuò)DAStudio.error('Simulink:blocks:unhandledFlag',num2str(flag));end%mdlInitializeSizes%Returnthesizes,initialconditions,andsampletimesfortheS-function.function[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes%初始化子函數(shù)sizes=simsizes;%生成sizes數(shù)據(jù)結(jié)構(gòu)sizes.NumContStates=0;%連續(xù)狀態(tài)變量數(shù),默認(rèn)為0sizes.NumDiscStates=0;%離散狀態(tài)變量數(shù),默認(rèn)為0sizes.NumOutputs=0;%輸出變量個(gè)數(shù),默認(rèn)為0sizes.NumInputs=0;%輸入變量個(gè)數(shù),默認(rèn)為0sizes.DirFeedthrough=1;%直通前向通道數(shù),默認(rèn)為1sizes.NumSampleTimes=1;%采樣周期個(gè)數(shù),默認(rèn)為1sys=simsizes(sizes);%返回sizes數(shù)據(jù)結(jié)構(gòu)所包含的信息%initializetheinitialconditionsx0=[];%設(shè)置初值狀態(tài),默認(rèn)置空str=[];%特殊保留變量,默認(rèn)置空%initializethearrayofsampletimests=[00];%采樣時(shí)間由[采樣周期偏移量]組成,采樣周期為0表示連續(xù)系統(tǒng)simStateCompliance='UnknownSimState';%mdlDerivatives計(jì)算導(dǎo)數(shù)子函數(shù)%Returnthederivativesforthecontinuousstates.functionsys=mdlDerivatives(t,x,u)%根據(jù)t,x,u計(jì)算連續(xù)狀態(tài)的導(dǎo)數(shù)sys=[];%狀態(tài)導(dǎo)數(shù)dx賦值給sys,連續(xù)系統(tǒng)狀態(tài)方程functionsys=mdlUpdate(t,x,u)%更新離散狀態(tài)子函數(shù)sys=[];%離散狀態(tài)向量x(k+1)賦值給sys,離散系統(tǒng)狀態(tài)方程functionsys=mdlOutputs(t,x,u)%計(jì)算輸出子函數(shù)sys=[];%輸出向量賦值給sys,系統(tǒng)輸出方程functionsys=mdlGetTimeOfNextVarHit(t,x,u)

溫馨提示

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

最新文檔

評論

0/150

提交評論