Simulink建模和仿真課件_第1頁
Simulink建模和仿真課件_第2頁
Simulink建模和仿真課件_第3頁
Simulink建模和仿真課件_第4頁
Simulink建模和仿真課件_第5頁
已閱讀5頁,還剩249頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第七章Simulink建模和仿真在計算機技術(shù)飛速發(fā)展的今天,許多科學(xué)研究、工程設(shè)計由于其復(fù)雜性越來越高,因此與計算機的接合日趨緊密。也正是計算機技術(shù)的介入,改變了許多學(xué)科的結(jié)構(gòu)、研究內(nèi)容和研究方向。例如,計算流體力學(xué)、計算物理學(xué)、計算聲學(xué)等新興學(xué)科的興起,均與計算機技術(shù)的發(fā)展分不開。控制理論、仿真技術(shù)本身與計算機的接合就十分緊密,而隨著專業(yè)領(lǐng)域的研究深入和計算機軟硬件技術(shù)的發(fā)展,這種聯(lián)系呈現(xiàn)更加緊密。計算控制論的建立,足以說明這個問題。而這種發(fā)展,又以系統(tǒng)仿真技術(shù)的發(fā)展分不開的。為了滿足用戶對工程計算的要求,一些軟件公司相繼推出一批數(shù)學(xué)類科技應(yīng)用軟件,如Matlab、Xmath、Mathematica、Maple等。其中MathWorks公司推出的Matlab由于有強大的功能和友好的用戶界面受到越來越多的科技工作者的青睞,尤其是控制領(lǐng)域的專家和學(xué)者.天馬行空官方博客:/tmxk_docin;QQ:1318241189第七章Simulink建模和仿真天馬行空官方博客:htt1第七章Simulink建模和仿真Matlab具有友好的工作平臺和編程環(huán)境、簡單易學(xué)的編程語言、強大的科學(xué)計算和數(shù)據(jù)處理能力、出色的圖形和圖像處理功能、能適應(yīng)多領(lǐng)域應(yīng)用的工具葙、適應(yīng)多種語言的程序接口、模塊化的設(shè)計和系統(tǒng)級的仿真功能等,諸多的優(yōu)點和特點。支持Matlab仿真是Simulink工具箱,Simulink一般可以附在Matlab上同時安裝,也有獨立版本來單獨使用。但大多數(shù)用戶都是附在Matlab上,以便能更好地發(fā)揮Matlab在科學(xué)計算上的優(yōu)勢,進一步擴展Simulink的使用領(lǐng)域和功能。本章詳細地向用戶介紹Simulink地建模方法、使用操作、以及使用Simulink進行系統(tǒng)級的仿真和設(shè)計原理。使讀者通過本章地學(xué)習(xí),不但可以進一步掌握計算機仿真的基本概念和理論,也可以初步學(xué)會使用Simulink去真正地運用仿真技術(shù)解決科研和工程中地實際問題。第七章Simulink建模和仿真2第七章Simulink建模和仿真7.1Simulink的概述和基本操作近幾年來,在學(xué)術(shù)界和工業(yè)領(lǐng)域,Simulink已經(jīng)成為動態(tài)系統(tǒng)建模和仿真領(lǐng)域中應(yīng)用最為廣泛的軟件之一。Simulink可以很方便地創(chuàng)建和維護一個完整地模塊,評估不同地算法和結(jié)構(gòu),并驗證系統(tǒng)的性能。由于Simulink是采用模塊組合方式來建模,從而可以使得用戶能夠快速、準確地創(chuàng)建動態(tài)系統(tǒng)的計算機仿真模型,特別是對復(fù)雜的不確定非線性系統(tǒng),更為方便。Simulink模型可以用來模擬線性和非線性、連續(xù)和離散或者兩者的混合系統(tǒng),也就是說它可以用來模擬幾乎所有可能遇到動態(tài)系統(tǒng)。另外Simulink還提供一套圖形動畫的處理方法,使用戶可以方便的觀察到仿真的整個過程。Simulink沒有單獨的語言,但是它提供了S函數(shù)規(guī)則。所謂的S函數(shù)可以是一個M函數(shù)文件、FORTRAN程序、C或C++語言程序等,通過特殊的語法規(guī)則使之能夠被Simulink模型或模塊調(diào)用。S函數(shù)使Simulink更加充實、完備,具有更強的處理能力。天馬行空官方博客:/tmxk_docin;QQ:1318241189第七章Simulink建模和仿真7.1Simu3第七章Simulink建模和仿真7.1Simulink的概述和基本操作同Matlab一樣,Simulink也不是封閉的,他允許用戶可以很方便的定制自己的模塊和模塊庫。同時Simulink也同樣有比較完整的幫助系統(tǒng),使用戶可以隨時找到對應(yīng)模塊的說明,便于應(yīng)用。綜上所述,Simulink就是一種開放性的,用來模擬線性或非線性的以及連續(xù)或離散的或者兩者混合的動態(tài)系統(tǒng)的強有力的系統(tǒng)級仿真工具。目前,隨著軟件的升級換代,在軟硬件的接口方面有了長足的進步,使用Simulink可以很方便地進行實時的信號控制和處理、信息通信以及DSP的處理。世界上許多知名的大公司已經(jīng)使用Simulink作為他們產(chǎn)品設(shè)計和開發(fā)的強有力工具。第七章Simulink建模和仿真7.1Simu4第七章Simulink建模和仿真7.1Simulink的概述和基本操作圖7.1.1Simulink模型元素關(guān)聯(lián)圖

7.1.2基本操作一、模型基本結(jié)構(gòu)一個典型的Simulink模型包括如下三種類型的元素:①信號源模塊②被模擬的系統(tǒng)模塊③輸出顯示模塊如圖7.1.1所示說明了這三種元素之間的典型關(guān)系。系統(tǒng)模塊作為中心模塊是Simulink仿真建模所要解決的主要部分;信號源為系統(tǒng)的輸入,它包括常數(shù)信號源函數(shù)信號發(fā)生器(如正弦和階躍函數(shù)波等)和用戶自己在Matlab中創(chuàng)建的自定義信號或Matlab工作間中三種。輸出模塊主要在Sinks庫中。第七章Simulink建模和仿真7.1Simul5第七章Simulink建模和仿真

7.1Simulink的概述和基本操作Simulink模型并不一定要包含全部的三種元素,在實際應(yīng)用中通常可以缺少其中的一個或兩個。例如,若要模擬一個系統(tǒng)偏離平衡位置后的恢復(fù)行為,就可以建立一個沒有輸入而只有系統(tǒng)模塊加一個顯示模塊的模型。在某種情況下,也可以建立一個只有源模塊和顯示模塊的系統(tǒng)。若需要一個由幾個函數(shù)復(fù)合的特殊信號,則可以使用源模塊生成信號并將其送入Matlab工作間或文件中。二、仿真運行原理Simulink仿真包括兩個階段;初始化階段和模型執(zhí)行階段(1)模塊初始化

在初始化階段主要完成以下工作:①模型參數(shù)傳給Matlab進行估值,得到的數(shù)值結(jié)果將作為模型的實際參數(shù);②展開模型的各個層次,每一個非條件執(zhí)行的子系統(tǒng)被它所包含的模塊所代替;

天馬行空官方博客:/tmxk_docin;QQ:1318241189第七章Simulink建模和仿真7.1Simul6第七章Simulink建模和仿真

7.1Simulink的概述和基本操作③模型中的模塊按更新的次序進行排序。排序算法產(chǎn)生一個列表以確保具有代數(shù)環(huán)的模塊在產(chǎn)生它的驅(qū)動輸入的模塊被更新后才更新。當(dāng)然,這一步要先檢測出模型中存在的代數(shù)環(huán)。④決定模型中有無顯示設(shè)定的信號屬性,例如名稱、數(shù)據(jù)類型、數(shù)值類型以及大小等,并且檢查每個模塊是否能夠接受連接到它輸入端的信號。Simulink使用屬性傳遞的過程來確定未被設(shè)定的屬性,這個過程將源信號的屬性傳遞到它所驅(qū)動的模塊的輸入信號;⑤決定所有無顯示設(shè)定采樣時間的模塊的采樣時間;⑥分配和初始化用于存儲每個模塊的狀態(tài)和輸入當(dāng)前值的存儲空間。完成這些工作后就可以進行仿真了。2)模型執(zhí)行一般模型是使用數(shù)值積分來進行仿真的。所運用的仿真解法器(仿真算法)依賴于模型提供它的連續(xù)狀態(tài)微分能力。計算微分可以分兩步進行:第七章Simulink建模和仿真7.1Simul7第七章Simulink建模和仿真

7.1Simulink的概述和基本操作①首先,按照排序所決定的次序計算每個模塊的輸出。②然后,根據(jù)當(dāng)前時刻的輸入和狀態(tài)來決定狀態(tài)的微分;得到微分向量后再把它返回給解法器;后者用來計算下一個采樣點的狀態(tài)向量。一旦新的狀態(tài)向量計算完畢,被采樣的數(shù)據(jù)源模塊和接受模塊才被更新。在仿真開始時模型設(shè)定待仿真系統(tǒng)的初始狀態(tài)和輸出。在每一個時間步中,Simulink計算系統(tǒng)的輸入、狀態(tài)和輸出,并更新模型來反映計算出的值。在仿真結(jié)束時,模型得出系統(tǒng)的輸入、狀態(tài)和輸出。在每個時間步中,Simulink所采取的動作依次為:①按排列好的次序更新模型中模塊的輸出。Simulink通過調(diào)用模塊的輸出函數(shù)計算模塊的輸出。Simulink只把當(dāng)前值、模塊的輸入以及狀態(tài)量傳給這些函數(shù)計算模塊的輸出。對于離散系統(tǒng),Simulink只有在當(dāng)前時間是模塊采樣時間的整數(shù)倍時,才會更新模塊的輸出。第七章Simulink建模和仿真7.1Simul8第七章Simulink建模和仿真

7.1Simulink的概述和基本操作②按排列好的次序更新模型中模塊的狀態(tài),Simulink計算一個模塊的離散狀態(tài)的方法時調(diào)用模塊的離散狀態(tài)更新函數(shù)。而對于連續(xù)狀態(tài),則對連續(xù)狀態(tài)的微分(在模塊可調(diào)用的函數(shù)里,有一個用于計算連續(xù)微分的函數(shù))進行數(shù)值積分來獲得當(dāng)前的連續(xù)狀態(tài)。③檢查模塊連續(xù)狀態(tài)的不連續(xù)點。Simulink使用過零檢測來檢測連續(xù)狀態(tài)的不連續(xù)點。④計算下一個仿真時間步的時間。這是通過調(diào)用模塊獲得下一個采樣時間函數(shù)來完成的。(3)定模塊更新次序在仿真中,Simulink更新狀態(tài)和輸出都要根據(jù)事先確定的模塊更新次序,而更新次序?qū)Ψ结樈Y(jié)果的有效性來說非常關(guān)鍵。特別當(dāng)模塊的輸出是當(dāng)前輸入值的函數(shù)時,這個模塊必須在驅(qū)動它的模塊被更新之后才能被更新,否則,模塊的輸出將沒有意義。第七章Simulink建模和仿真7.1Simul9第七章Simulink建模和仿真

7.1Simulink的概述和基本操作注意:不要把模塊保存到模塊文件的次序與仿真過程模塊被更新的次序相混淆。Simulink在模塊初始化時以將模塊排好正確的次序。為了建立有效的更新次序,Simulink根據(jù)輸入和輸出的關(guān)系將模塊分類。其中,當(dāng)前輸出依賴于當(dāng)前輸入的模塊稱為直接饋入模塊,所有其他的模塊都稱為非虛擬模塊。直接饋入模塊的例子有Gain、Product和Sum模塊;非直接饋入模塊的例子有Integrator模塊(它的輸出只依賴于它的狀態(tài)),Constant模塊(沒有輸入)和Memory模塊(它的輸出只依賴于前一個模塊的輸入)。基于上述分類,Simulink使用下面兩個基本規(guī)則對模塊進行排序:①每個模塊必須在它驅(qū)動的所有模塊更新之前被更新。這條規(guī)則確保了模塊被更新時輸入有效。②若非直接饋入模塊在直接饋入模塊之前更新,則它們的更新次序可以是任意的。這條規(guī)則允許Simulink在排序過程中忽略非虛擬模塊。另外一個約束模塊更新次序的因素是用戶給模塊設(shè)定優(yōu)先級,Simulink在低優(yōu)先級模塊之前更新高優(yōu)先級模塊。天馬行空官方博客:/tmxk_docin;QQ:1318241189第七章Simulink建模和仿真7.1Simul10第七章Simulink建模和仿真7.2基本模塊由于大多數(shù)物理系統(tǒng)都可以用微分方程組和代數(shù)方程組來描述,Simulink也采用的是本教材第四章介紹的面向結(jié)構(gòu)圖的數(shù)字仿真原理。但其功能塊的類型、數(shù)值解法、功能快的描述、以及建模方式和方法遠遠超出CSS仿真程序包,其界面也更加友好。Simulink4把功能塊分成9類,分別放置在9個庫中,如圖7.2.1所示:源模塊庫(Sources)、輸出顯示庫(Sinks)、離散模塊庫(Discrete)、連續(xù)模塊庫(Continuous)、非線性模塊庫(Nonlinear)、數(shù)學(xué)函數(shù)庫(Math)、通用函數(shù)及列表庫(FunctionsandTables)、信號處理及系統(tǒng)類模塊庫(SignalandSystems)和子系統(tǒng)模塊庫(Subsystems)。表7.2.1到表7.2.8列出了個庫包含的主要模塊及簡單說明。圖7.2.2到圖7.2.10列出了各庫包含的主要模塊種類圖形。第七章Simulink建模和仿真7.2基11第七章Simulink建模和仿真7.2基本模塊表7.2.1Source庫

模塊名說明Clock顯示或者提供仿真時間Constant產(chǎn)生一個常數(shù)值信號Digitalclock產(chǎn)生數(shù)字采樣時間信號Digitalpulsegenerator產(chǎn)生數(shù)字脈沖信號Fromfile從文件讀取數(shù)據(jù)輸入Fromworkspace從工作間定義的矩陣讀入數(shù)據(jù)Pulsegenerator產(chǎn)生脈沖信號Ramp產(chǎn)生“斜坡”信號Randomnumber產(chǎn)生正態(tài)分布的隨機信號Repeatingsequence產(chǎn)生周期序列信號Signalgenerator信號發(fā)生器Sinewave正弦波信號Step產(chǎn)生一個階躍信號Uniformrandomnumber產(chǎn)生均勻分布的隨機信號天馬行空官方博客:/tmxk_docin;QQ:1318241189第七章Simulink建模和仿真7.2基12第七章Simulink建模和仿真7.2基本模塊

模塊名說明Display顯示輸入信號的值Scope顯示信號的波形Stopsimulation當(dāng)輸入信號為0時結(jié)束仿真Tofile向文件中寫數(shù)據(jù)Toworkspace向工作間定義的變量寫數(shù)據(jù)到XYgraphMatlab圖形窗口顯示信號的二維圖表7.2.2Sinks庫第七章Simulink建模和仿真7.213第七章Simulink建模和仿真7.2基本模塊

模塊名說明Discretefilter實現(xiàn)IIR和FIR濾波器Discretestate-space實現(xiàn)離散狀態(tài)空間系統(tǒng)Discrete-timeintegrator離散時間積分器Discretetransferfcn實現(xiàn)離散傳遞函數(shù)Discretezero-pol實現(xiàn)用零極點表達的離散傳遞函數(shù)First-orderhold實現(xiàn)一階采樣保持系統(tǒng)Unitdelay單位采樣時間延遲器Zero-orderhold實現(xiàn)采樣的零階保持表7.2.3Discrete庫第七章Simulink建模和仿真7.214第七章Simulink建模和仿真7.2基本模塊

模塊名說明Derivative信號的微分運算Integrator信號的積分運算Memory輸出前一個時間步的輸入值State-space實現(xiàn)線性狀態(tài)空間系統(tǒng)Transferfcn實現(xiàn)線性傳遞系統(tǒng)Transportdelay對輸入信號進行傳輸延時Variabletransportdelay對輸入信號進行可變時間的傳輸延時Zero-pole實現(xiàn)零-極點表達式的傳遞函數(shù)表7.2.4Continuous庫天馬行空官方博客:/tmxk_docin;QQ:1318241189第七章Simulink建模和仿真7.215第七章Simulink建模和仿真7.2基本模塊

模塊名說明Abs信號的絕對值A(chǔ)lgebraicconstraint將輸入信號強制為零Combinatoriallogic實現(xiàn)一個真值表Complextomagnitude-angle輸出一個復(fù)數(shù)輸入信號的幅角和模Complextoreal-imag輸出一個復(fù)數(shù)信號的實部和虛部Dotproduct向量信號的點積Gain將模塊的輸入信號乘上一個增益Logicaloperator輸入信號的邏輯操作Magnitude-angletocomplex將模和幅角的信號轉(zhuǎn)換成為復(fù)數(shù)信號表7.2.5Math庫第七章Simulink建模和仿真7.216第七章Simulink建模和仿真7.2基本模塊Mathfunction實現(xiàn)數(shù)學(xué)函數(shù)Matrixgain將輸入乘上一個矩陣增益Minmax信號的最小值和最大值Product信號的乘積或者商Real-imagtocomplex將實部虛部的信號轉(zhuǎn)換成為復(fù)數(shù)信號Relationaloperator進行指定的關(guān)系運算Roundingfunction實現(xiàn)舍入運算Sign符號函數(shù)Slidergain滑塊增益Sum輸入信號的和Trigonometricfunction實現(xiàn)三角函數(shù)運算第七章Simulink建模和仿真7.2基本模17第七章Simulink建模和仿真7.2基本模塊

模塊名說明Fcn實現(xiàn)自定義表達式的輸入信號Look-uptable實現(xiàn)輸入的線性查表Look-uptable(2-d)實現(xiàn)兩維信號的線性查表Matlabfcn實現(xiàn)Matlab函數(shù)或表達式輸入信號S-FunctionS函數(shù)模塊表7.2.6FunctionandTables函數(shù)

第七章Simulink建模和仿真7.2基本18第七章Simulink建模和仿真7.2基本模塊

模塊名說明Backlash偏移模塊Coulomb&viscousfriction模擬原點不連續(xù)系統(tǒng)Deadzone輸出一個零輸出的區(qū)域Manualswitch在信號間手工切換Multiportswitch多端口的切換(開關(guān))器Quantizer按指定的間隔離散化輸出信號Ratelimiter限制信號的改變速率Relay實現(xiàn)繼電器功能Saturation限制信號的飽和度Switch在兩個信號間切換表7.2.7Nonlinear庫第七章Simulink建模和仿真7.2基本19第七章Simulink建模和仿真7.2基本模塊

模塊名說明Busselector有選擇的輸出信號Configurablesubsystem代表任何一個從指定的庫中選擇的模塊Datastorememory定義共享數(shù)據(jù)存儲空間Datestoreread從共享數(shù)據(jù)空間讀數(shù)據(jù)并輸出Datestorywrite寫數(shù)據(jù)到共享數(shù)據(jù)存儲空間Datetypeconversion將信號轉(zhuǎn)換為其它數(shù)據(jù)類型Demux將一個向量信號分解輸出Enable為子系統(tǒng)增加激活斷口From從一個Goto模塊接受信號Goto傳遞信號到From模塊Gototagvisibility定義Goto模塊標記的可視域Ground將末連接的輸入端接地表7.2.8SignalandSystems庫第七章Simulink建模和仿真7.2基本20第七章Simulink建模和仿真7.2基本模塊

模塊名說明Hitcrossing檢測過零點IC設(shè)置一個信號的初始值Inpl為子系統(tǒng)建立一個輸入端口或建立一個外部入口Merge將幾個輸入量合并為一個標量的輸出串Modelinfo顯示模型信息Mux將幾個輸入信號合成一個向量信號Out1為子系統(tǒng)建立一個輸出端口或建立一個外部出口Probe信號的寬度,采樣時間及信號類型Subsystem子系統(tǒng)模塊Terminator結(jié)束一個未連接的輸出端口Trigger為子系統(tǒng)增加觸發(fā)端口Width輸入向量的輸出寬度Selector在輸入信號中選擇并輸出表7.2.8SignalandSystems庫第七章Simulink建模和仿真7.2基本21第七章Simulink建模和仿真7.2基本模塊

圖7.2.1庫的類型圖7.2.2Sources庫

第七章Simulink建模和仿真7.2基本22第七章Simulink建模和仿真7.2基本模塊

圖7..2.3Sinks庫

圖7.2.4Discrete庫

圖7.2.5Continuous庫

第七章Simulink建模和仿真7.2基本23第七章Simulink建模和仿真7.2基本模塊

圖7.2.6Math庫

圖7.2.7Nonlinear庫

第七章Simulink建模和仿真7.2基本24第七章Simulink建模和仿真7.2基本模塊

圖7.2.8Signak&Systems庫第七章Simulink建模和仿真7.2基本25第七章Simulink建模和仿真7.2基本模塊

圖7.2.9Subsystems庫

第七章Simulink建模和仿真7.2基本26第七章Simulink建模和仿真7.2基本模塊

圖7.2.10Functions&Tables庫

第七章Simulink建模和仿真7.2基本27第七章Simulink建模和仿真7.2基本模塊在Simulink中,各功能模塊的參數(shù)描述都可以由用戶通過該模塊的模塊屬性對話框進行操作給出或修改。圖7.2.11是積分模塊的屬性對話框,從圖可見,它有9個可控參數(shù)。(1)Externalreset為外部重置選項。它用在當(dāng)重置信號中發(fā)生觸發(fā)事件時,模塊將照初始條件重置狀態(tài)。(2)initialconditionsource此項用來從初始條件參數(shù)或外部模塊中獲取初始條件。(3)initialcondition此區(qū)域用來設(shè)置初始條件。(4)Limitoutput如果此項被選中,則狀態(tài)將被限制在飽和度下限和上限之間。(5)Uppersaturationlimit此參數(shù)用來設(shè)置飽和度上限。(6)Lowersaturationlimit此參數(shù)用來設(shè)置飽和度下限。(7)Showsaturationport若此項被選中,則模塊上將增加一個飽和度端口。(8)Showstateport若此項被選中,則模塊上將增加一個狀態(tài)端口。第七章Simulink建模和仿真7.2基本28第七章Simulink建模和仿真7.2基本模塊

(9)Absolutetolerance此參數(shù)用來設(shè)置模塊狀態(tài)的絕對誤差。圖7.2.11積分模塊屬性對話框

第七章Simulink建模和仿真7.2基本29第七章Simulink建模和仿真7.3建模方法

利用Simulink建立物理系統(tǒng)和數(shù)學(xué)系統(tǒng)的仿真模型,關(guān)鍵是對Simulink提供的功能模塊進行操作,即用適當(dāng)?shù)姆绞綄⒏鞣N模塊連接在一起。本小節(jié)將介紹模塊的基本操作。在介紹具體的操作之前先對建模過程提兩點建議:⑴在建模之前,應(yīng)對模塊和信號線有一個整體、清晰和仔細的安排,以便能減少建模時間;⑵及時對模塊和信號線命名、及時對模型加標注,以增強模型的可讀性。

本小節(jié)將詳細介紹創(chuàng)建Simulink仿真模型的過程,包括模塊操作、編輯信號線及標注模型等。第七章Simulink建模和仿真7.3建模30第七章Simulink建模和仿真7.3建模方法

7.3.1模塊的操作 模塊是建立Simulink模型的基本單元。用適當(dāng)?shù)姆椒ò迅鞣N模塊連接在一起就能夠建立任何動態(tài)系統(tǒng)的模型。一、選取模塊當(dāng)選取單個模塊時,只要用鼠標在模塊上單擊即可,這是模塊的角上出現(xiàn)黑色的小方塊。選取多個模塊時,在所有模塊所占區(qū)域的一角按下鼠標左鍵不放,拖向該區(qū)域的對角,在此過程中會出現(xiàn)虛框,當(dāng)虛框包住了要選的所有模塊后,放開鼠標左鍵,這時在所有被選模塊的角上都會出現(xiàn)小黑方塊,表示模塊被選中了。此過程如圖7.3.1所示。圖7.3.1選取多個模塊第七章Simulink建模和仿真7.3建模31第七章Simulink建模和仿真7.3建模方法

二、復(fù)制、刪除模塊(1)在不同的窗口之間復(fù)制當(dāng)我們建立模型時,需要從模塊庫窗口或者已經(jīng)存在的窗口把需要的模塊復(fù)制到新建模型文件的窗口。要對已經(jīng)存在的模塊進行編輯時,有時也需要從模塊庫窗口或另一個已經(jīng)存在的模型窗口復(fù)制模塊。最簡單的辦法是用鼠標左鍵點住要復(fù)制的模塊(首先打開源模塊和目標模塊所在的窗口),按住左鍵移動鼠標到相應(yīng)窗口(不用按住Ctrl鍵),然后釋放,該模塊就會被復(fù)制過來,而源模塊不會被刪除。當(dāng)然還可以使用Edit菜單的Copy和Paste命令來完成復(fù)制:先選定要復(fù)制的模塊,選擇Edit菜單下的Copy命令,到目標窗口的Edit菜單下選擇Paste命令。(2)在同一個模型窗口內(nèi)復(fù)制有時一個模型需要多個相同的模塊,這時的復(fù)制方法如下:用鼠標左鍵點住要復(fù)制的模塊,按住左鍵移動鼠標,同時按下Ctrl鍵,到適當(dāng)位置釋放鼠標,該模塊就被復(fù)制到當(dāng)前位置。更簡單的方法是按住鼠標右鍵(不按Ctrl鍵)移動鼠標。第七章Simulink建模和仿真7.3建模32第七章Simulink建模和仿真7.3建模方法

另一種方法是先選定要復(fù)制的模塊,選擇Edit下的Copy命令,然后選擇Paste命令。在圖7.3.2的復(fù)制結(jié)果中我們會發(fā)現(xiàn)復(fù)制出的模塊名稱在原名稱的基礎(chǔ)上又加了編號,這是Simulink的約定:每個模型中的模塊和名稱是一一對應(yīng)的,相同的模塊或不同的模塊都不能用同一個名字。

圖7.3.2在同一模型窗口內(nèi)復(fù)制模塊第七章Simulink建模和仿真7.3建模33第七章Simulink建模和仿真7.3建模方法

(3)刪除模塊選定模塊,選擇Edit菜單下的Cut(刪除到剪貼板)或Clear(徹底刪除)命令。或者在模塊上單擊鼠標右鍵,在彈出菜單上選擇Cut或Clear命令。三、模塊的參數(shù)和特性設(shè)置Simulink中幾乎所有模塊的參數(shù)(Parameter)都允許用戶進行設(shè)置。只要雙擊要設(shè)置參數(shù)的模塊就會彈出設(shè)置對話框,如圖7.3.3所示。這是正弦波模塊的參數(shù)設(shè)置對話框,您可以設(shè)置它的幅值、頻率、相位、采樣時間等參數(shù)。模塊參數(shù)還可以用set-param命令修改,這在后面將會講到。第七章Simulink建模和仿真7.3建模34第七章Simulink建模和仿真7.3建模方法

每個模塊都有一個內(nèi)容相同的特性(Properties)設(shè)置對話框,如圖7.3.4所示。它包括如下幾項:(1)說明(Description)是對該模塊在模型中用法的注釋。(2)優(yōu)先級(Priority)規(guī)定該模塊在模型中相對于其他模塊執(zhí)行的有限順序。優(yōu)先級的數(shù)值必須是整數(shù)或不輸入數(shù)值,這時系統(tǒng)會自動選取合適的優(yōu)先級。優(yōu)先級的數(shù)值越小(可以是負整數(shù)),優(yōu)先級越高。(3)標記(Tag)用戶為模塊添加的文本格式的標記。(4)調(diào)用函數(shù)(Openfunction)當(dāng)用戶雙擊該模塊時調(diào)用的Matlab函數(shù)。(5)屬性格式字符串(Attributesformatstring)

第七章Simulink建模和仿真7.3建模35第七章Simulink建模和仿真7.3建模方法

圖7.3.3模塊參數(shù)設(shè)置對話

圖7.3.4模塊特性設(shè)置對話框

第七章Simulink建模和仿真7.3建模36第七章Simulink建模和仿真7.3建模方法

指定在該模塊的圖標下顯示模塊的那個參數(shù),以什么格式顯示。屬性格式字符串由任意的文本字符串加嵌入式參數(shù)名組成。例如,對一個傳遞函數(shù)模塊指定如下的屬性格式字符串:優(yōu)先級=%<priority>\n傳函分母=%<Denominator>該模塊顯示如圖7.3.5的內(nèi)容:

如果參數(shù)的值不是字符串或數(shù)字,參數(shù)值的位置會顯示N/S(notsupported)。如果參數(shù)名無效,參數(shù)值的位置將顯示“???”。圖7.3.5設(shè)置屬性格式字符串后的效果第七章Simulink建模和仿真7.3建模37第七章Simulink建模和仿真7.3建模方法

四、模塊外形的調(diào)整

(1)改變模塊的大小選定模塊,用鼠標點住其周圍的四個黑方塊中的任意一個拖動,這時會出現(xiàn)虛線的矩形表示新模塊的位置,到需要的位置后釋放鼠標即可。(2)調(diào)整模塊的方向選定模塊,選取菜單Format下的RotateBlock使模塊旋轉(zhuǎn)90o,F(xiàn)lipBlock使模塊旋轉(zhuǎn)180o。效果如圖7.3.6所示。(3)給模塊加陰影選定模塊,選取菜單Format下的ShowDropShadow使模塊產(chǎn)生陰影效果。如圖7.3.7所示。圖7.3.7模塊的陰影效果

圖7.3.6調(diào)整模塊的方向

第七章Simulink建模和仿真7.3建模38第七章Simulink建模和仿真7.3建模方法

五、模塊名的處理(1)模塊名的顯示與否選定模塊,選取菜單Format下的HideName,模塊名就會被隱藏,同時HideName改為ShowName。選取ShowName就會使模塊隱藏的名字顯示出來.(2)修改模塊名用鼠標左鍵單擊模塊名的區(qū)域,這時會在此處出現(xiàn)編輯狀態(tài)的光標,在這種狀態(tài)下能夠?qū)δK名隨意修改。模塊名和模塊圖標中的字體也可以更改,方法是選定模塊,在菜單Format下選取Font,這時會彈出SetFont的對話框,在對話框中選取想要的字體。(3)改變模塊名的位置模塊名的位置有一定的規(guī)律,當(dāng)模塊的接口在左右兩側(cè)時,模塊名只能位于模塊的上下兩側(cè),缺省在下側(cè):當(dāng)模塊的接口在上下兩側(cè)時,模塊名只能位于模塊的左右兩側(cè),缺省在左側(cè)。因此模塊名只能從原位置移到相對的位置。可以用鼠標拖動模塊名到其相對的位置;也可以選定模塊,用菜單Format下的FlipName實現(xiàn)相同的移動。第七章Simulink建模和仿真7.3建模39第七章Simulink建模和仿真7.3建模方法

7.3.2模塊的連接上面我們介紹了對模塊本身的各種操作。當(dāng)我們設(shè)置好了各個模塊后,還需要把它們按照一定的順序連接起來采能組成一個完整的系統(tǒng)模型。一下我們將討論模塊連接的相關(guān)問題。一、在模塊間連線(1)連接兩個模塊這是最基本的情況:從一個模塊的輸出端連到另一個模塊的輸入端。方法是在移動鼠標到輸出端,鼠標的箭頭會變成十字形光標,這是點住鼠標左鍵,移動鼠標到另一個模塊的輸入端,當(dāng)十字光標出現(xiàn)“重影”時,釋放鼠標左鍵就完成了連接。如果兩個模塊不在同一水平線上,連線是一條折線。要用斜線表示,需要在連接時按住Shift鍵。兩種連接的結(jié)果見圖7.3.8。圖7.3.8兩模塊不在同一水平線上

第七章Simulink建模和仿真7.3建模40第七章Simulink建模和仿真7.3建模方法

(2)模塊間連線的調(diào)整如圖7.3.9,這種調(diào)整模塊間連線位置的情況采用鼠標簡單拖動的辦法實現(xiàn)。即先把鼠標移到需要移動的線段的位置,按住鼠標左鍵,移動鼠標到目標位置,釋放鼠標左鍵。還有一種情況如圖7.3.10所示,要把一條直線分成斜線段。調(diào)整方法和前一種情況類似,不同之處在于按住鼠標之前要先按下Shift鍵,出現(xiàn)小黑方框之后,鼠標點住小黑方框移動,移動好后釋放Shift鍵和鼠標。圖7.3.9調(diào)整連線的位置(一)

圖7.3.10調(diào)整連線的位置(二)第七章Simulink建模和仿真7.3建模41第七章Simulink建模和仿真7.3建模方法

(3)在連線之間插入模塊把該模塊用鼠標拖到連線上,然后釋放鼠標即可。(4)連線的分支我們經(jīng)常會碰到一些情況,需要把一個信號輸送到不同的模塊,這時就需要分支結(jié)構(gòu)的連線。如圖7.3.11所示,要把正弦波信號實時顯示出來,同時還要到存到文件。這種情況地步驟是:在先連好一條線以后,把鼠標移到支線的起點位置,先按下鍵,然后按住Ctrl鼠標拖到目標模塊的輸入端,釋放鼠標和Ctrl鍵。圖7.3.11連線的分支第七章Simulink建模和仿真7.3建模42第七章Simulink建模和仿真7.3建模方法

二、在連線上反映信息(1)用粗線表示向量為了能比較直觀地區(qū)別各個模塊之間傳輸?shù)臄?shù)據(jù)是數(shù)據(jù)還是矩陣(向量),可以選擇模型文件菜單Format下的WidevectorLines選項,這樣傳輸向量的連線就會變粗。如果再選擇Format下的VectorLinesWidths選項,在傳輸矩陣的連線上方會顯示出通過該連線的矩陣維數(shù)。如圖7.3.12,模塊StateSpace的輸入為二維矩陣,在加粗的輸入輸出線的上方分別標出了相應(yīng)矩陣的維數(shù)。圖7.3.12用粗線表示向量第七章Simulink建模和仿真7.3建模43第七章Simulink建模和仿真7.3建模方法

(2)顯示數(shù)據(jù)類型在連線上可以顯示一個模塊輸出的數(shù)據(jù)類型:選擇菜單Format下的PortDataTypes選項。結(jié)果如圖7.3.13所示。

圖7.3.13在連線上顯示數(shù)據(jù)類型

(3)信號標記為了使模型更加直觀、可讀性更強,我們可以為傳輸?shù)男盘栕鳂擞洝=⑿盘枠擞浀霓k法是:雙擊要做標記的線段,出現(xiàn)一個小文本編輯框,在里面輸入標記的文本,這樣就建立了一個信號標記。信號標記可以隨信號的傳輸從一些模塊中進行傳遞。支持這種傳遞的模塊有Mux、Demux、Inport、From、Selector、Subsystem和Enable。第七章Simulink建模和仿真7.3建模44第七章Simulink建模和仿真7.3建模方法

要實現(xiàn)信號標記的傳遞,需要在上面列出的某個模塊的輸出端建立一個以“<”開頭的標記。如圖7.3.14所示。當(dāng)開始仿真或執(zhí)行Edit菜單下的UpdataDiagram命令時,傳輸過來的信號標記就會顯示出來。圖7.3.15顯示出了這個傳遞的結(jié)果。

圖7.3.14信號標記的建立

圖7.3.15信號標記的傳遞

第七章Simulink建模和仿真7.3建模45第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例

利用Simulink仿真,其仿真工作過程與我們前面幾節(jié)所介紹的仿真方法類似,對應(yīng)與Simulink采用的圖形輸入方式。因此,我們對其建模有以下基本要求:清晰性一個大的系統(tǒng)往往由許多子系統(tǒng)組成,因此對應(yīng)的系統(tǒng)模型也由許多子模型組成。在子模型與子模型之間,除了為實現(xiàn)研究目的所必需的信息聯(lián)系以外,相互耦合要盡可能少,結(jié)構(gòu)盡可能清晰。切題性系統(tǒng)模型只應(yīng)該包括與研究目的有關(guān)的方面,也就是與研究目的有關(guān)的系統(tǒng)行為子集的特征描述。對于同一個系統(tǒng),模型不是唯一的,研究目的不同,模型也不同。如研究空中管制問題,所關(guān)心的是飛機質(zhì)心動力學(xué)與坐標動力學(xué)模型;如果研究飛機的穩(wěn)定性和操縱性問題,則關(guān)心的是飛機繞質(zhì)心的動力學(xué)和駕駛儀動力學(xué)模型。第七章Simulink建模和仿真7.4系統(tǒng)仿真舉46第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例

精確性同一個系統(tǒng)的模型按其精確程度要求可以分為許多級。對不同的工程,精確程度要求不一樣。例如用于飛行器系統(tǒng)研制全過程的工程仿真器要求模型的精度較高,甚至要考慮到一些小參數(shù)對系統(tǒng)的影響,這樣的系統(tǒng)模型復(fù)雜,對仿真計算機的性能要求也高;但用于訓(xùn)練飛行員的飛行仿真器,對模型的精度要求則相對低一些,只要被培訓(xùn)人員感覺“真”即可。集合性這是指把一些個別的實體能組成更大實體的程度,有時要盡量從能合并成一個大的實體的角度考慮對一個系統(tǒng)實體的分割。例如對武器射擊精度的鑒定,并不十分關(guān)心每發(fā)子彈的射擊偏差,而著重討論多發(fā)子彈的統(tǒng)計特性。

第七章Simulink建模和仿真7.4系統(tǒng)47第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例

7.4.1非線性系統(tǒng)的模擬例7.4.1汽車行駛?cè)鐖D7.4.1所示的斜坡上通過受力分析可知在平行于斜面的方向上有三個力作用于汽車上:發(fā)動機的力、空氣阻力和重力沿斜面的分量下滑力。設(shè)計汽車控制系統(tǒng)并進行仿真。圖7.4.1斜坡上的汽車

由牛頓第二定律,汽車的運動方程為:其中m代表汽車的質(zhì)量,x為汽車的位移。在實際系統(tǒng)中總會有下界和上界,上界為發(fā)動機的最大推動力,下界為剎車時的最大制動力。。第七章Simulink建模和仿真7.4系統(tǒng)仿真舉48第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例

空氣阻力的值為阻力系數(shù),汽車前截面積A和動力學(xué)壓力P三項的乘積。其中其中,表示空氣的密度,表示汽車速度與風(fēng)速之和。假設(shè)且風(fēng)速以下式的規(guī)律變化:因此,空氣阻力可以近似為:下面假設(shè)馬路的斜角于位移的變化率符合規(guī)律:則下滑力為:用簡單的比例控制法來控制車速:其中,為驅(qū)動力,為期望速度值,為反饋增益。這樣驅(qū)動力正比于速度誤差。實際中的驅(qū)動力是在上面所設(shè)的上下界中變化。于是選。此系統(tǒng)的Simulink模型如圖7.4.2所示,仿真時間為1000s。第七章Simulink建模和仿真7.4系統(tǒng)仿真舉49第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例

比例控制器的輸入為汽車的期望速度值,它由一個滑塊增益模塊(SliderGain)外加一個常數(shù)輸入模塊(Constant)組成。比例控制器由一個用來計算速度誤差的求和模塊(Sum)和一個增益模塊Ke組成。發(fā)動機輸出力的上界和下界由兩個最值模塊來實現(xiàn)(也可以用非線性模塊庫中的飽和模塊來實現(xiàn))。

圖7.4.2比例速度控制的汽車模型第七章Simulink建模和仿真7.4系統(tǒng)仿真舉50第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例

非線性的下滑力和空氣阻力分別由函數(shù)模塊來計算。其中標簽為AeroForce的函數(shù)模塊的對話框中的【Expression】區(qū)中應(yīng)填寫0。001*(u[1]+20*sin(0.01*u[2]))^2,標簽為HillForce的應(yīng)填寫30*sin(0.0001*u[1])。顯示模塊(Display)用作速度表,而示波器模塊(Scope)則記錄了速度變化曲線,如圖7.4.3所示。圖7.4.3汽車的速度變化曲線說明:此模型也是一個輕度剛性問題的很好的例子,為了觀察剛性的影響,先以解法0DE45l來運行模型,然后選擇0DE15S再運行仿真,觀察其區(qū)別。第七章Simulink建模和仿真7.4系統(tǒng)仿真舉51第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例

7.4.2混和系統(tǒng)PID控制器仿真混合系統(tǒng)包括連續(xù)和離散兩種元素。下面的例子可以更加具體的說明混和系統(tǒng)的創(chuàng)建過程。例7.4.2為了說明混和系統(tǒng)模型的結(jié)構(gòu),可以對例7.4.1中的連續(xù)控制器用一個采樣時間為0。5s的離散比例積分-微分控制器代替。圖7.4.4顯示了連續(xù)的PID控制器。此控制器包括三個部分:比例部分、積分部分和微分部分。這三個部分都對計算誤差v進行操作。圖7.4.4連續(xù)PID控制器

第七章Simulink建模和仿真7.4系統(tǒng)仿真舉52第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例

其中比例部分對v信號提供一個比例增益,其表達式為:積分部分用來消除靜態(tài)誤差。其表達式為:對此積分部分需要注意的問題是,若plant模塊對起輸入信號的變化響應(yīng)相對比較飽滿,則積分就會很快的增加,這種現(xiàn)象成為“積分飽和”。積分飽和可以通過對加一個上界或下界加以消除。微分部分在模型中起衰減的作用。其輸出正比于v的變化率:第七章Simulink建模和仿真7.4系統(tǒng)仿真舉53第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例

這就是連續(xù)的PID控制器。而離散的PID控制器是在此基礎(chǔ)上用離散積分器代替積分部分,有用離散微分模塊來近似微分部分。一階數(shù)值微分近似為:此微分近似的傳遞函數(shù)為:

第七章Simulink建模和仿真7.4系統(tǒng)仿真舉54第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例

圖7.4.5所示即為使用了離散PID控制器的汽車模型。其中

此模型除控制器的部分之外都與例1是完全相同的。圖7.4.5離散控制器的汽車模型

第七章Simulink建模和仿真7.4系統(tǒng)仿真舉55第七章Simulink建模和仿真7.4系統(tǒng)仿真舉例它的控制器的三個部分分別是:·比例部分由一個領(lǐng)零階保持和一個比例增益模塊組成。比例增益系數(shù)也是50。·積分部分由一個時間離散積分模塊和一個增益模塊組成。在離散積分模塊中,選擇【LimiteOutput】,并設(shè)置飽和限為。·控制器的微分部分包括一個離散傳遞函數(shù)模塊和一個增益模塊。在此例中設(shè)仿真運行時間為100s,滑塊增益為80。得示波器圖形如圖7.4.6所示。圖7.4.6汽車速度控制曲線第七章Simulink建模和仿真7.4系56在前面的章節(jié)中,介紹了連續(xù)離散和混合系統(tǒng)創(chuàng)建器Simulink模型的基本方法。根據(jù)前面的介紹,基本可以創(chuàng)建任何物理系統(tǒng)的模型。然而隨著模型越來越復(fù)雜,用這些基本操作創(chuàng)建的Simulink模變得越來越龐大而難于讀懂。在接下來的章節(jié)中,將介紹一系列的Simulink特殊處理技術(shù)來使得模型變得更加簡捷易懂易用。本節(jié)先介紹一種類似于程序設(shè)計語言中的子程序的處理方法——Simulink子系統(tǒng),然后講解一種更加好用的封裝子系統(tǒng)技術(shù)。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝在前面的章節(jié)中,介紹了連續(xù)離散和混合系統(tǒng)創(chuàng)建器Sim577.5.1Simulink子系統(tǒng)絕大多數(shù)的程序設(shè)計語言都有使用子程序的功能。在FORTRAN里有subroutine子程序和function子程序;C語言中的子程序被稱為“函數(shù)”;Matlab的子程序稱為函數(shù)式M文件。Sinlulilnk也提供了類似的功能——子程序。隨著模型越來越大、越來越復(fù)雜,人們很難輕易的讀懂它們。在這種情況下,子系統(tǒng)通過把大的模型分割成幾個小的模型系統(tǒng)以使得整個系統(tǒng)模型更簡捷、可讀性更高,而且這種操作并不復(fù)雜。舉一個簡單的例子,考慮在例1中提到的汽車模型,其Simulink模型圖見圖7.5.1。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝圖7.5.1比例速度控制的汽車模型7.5.1Simulink子系統(tǒng)第七章Simulink建模58整個模型包括兩個主要部分:發(fā)動機動力系統(tǒng)和控制系統(tǒng)。但是在模型圖中哪些模塊代表發(fā)動機動力系統(tǒng),那些模塊代表控制系統(tǒng)并不明確。在圖7.5.2中,將模型的這兩個部分轉(zhuǎn)化為子系統(tǒng)。經(jīng)過轉(zhuǎn)化后,主模型圖中的結(jié)構(gòu)就變得很明了了,只是兩個子系統(tǒng)的具體結(jié)構(gòu)被隱藏起來了,雙擊子系統(tǒng)模塊,則會在一個新的窗口中顯示子系統(tǒng)的模塊圖。如圖7.5.3所示。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝

圖7.5.2子模塊化了的汽車模型整個模型包括兩個主要部分:發(fā)動機動力系統(tǒng)和控制系統(tǒng)。但是在模59第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝(a)控制子系統(tǒng)

(b)發(fā)動機動力子系統(tǒng)圖7.5.3子系統(tǒng)分解第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封60第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝子系統(tǒng)的另外一個重要的功能是把反復(fù)使用的模塊組壓縮成子系統(tǒng)后重復(fù)使用。在本例中,如果要比較在同一控制系統(tǒng)控制下不同發(fā)動機的工作效率,只需要替換新的發(fā)動機子系統(tǒng)而不是重建一個新的系統(tǒng)。這樣的控制系統(tǒng)就可以反復(fù)利用。注意:這種做法不僅節(jié)省了建模時間,而且可以保證在多次建模中不會因失誤而在控制子系統(tǒng)中出現(xiàn)差錯,這在大型的復(fù)雜系統(tǒng)建模中是非常重要的。創(chuàng)建Simulink子系統(tǒng)共有兩種方法:·一種辦法是對已存在的模型的某些部分或全部使用菜單命令【Edit/CreateSubsystem】進行壓縮轉(zhuǎn)化,使之成為子系統(tǒng);·另一種方法是使用Connections模塊庫中的Subsystem模塊直接創(chuàng)建子系統(tǒng)。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封61第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝下面分別介紹這兩種方法。一、壓縮子系統(tǒng)把已經(jīng)存在的Simulink模型中的某個部分或全部壓縮成子系統(tǒng)的操作如下:步驟一:首先使用范圍框?qū)⒁獕嚎s成子系統(tǒng)的部分選中,包括模塊和信號線,如圖7.5.4所示。圖7.5.4選中要壓縮的模塊第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封62第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝注意:在這種情況下只能用范圍框,而不能用Shift逐個選定。為了能使范圍框框住所有需要的模塊,重新安排模塊的位置常常似乎是必要的。步驟二:在模塊窗口菜單選項中選擇【Edit>CreatSubsystem】,Simulink將會用一個子系統(tǒng)模塊代替被選中的模塊組,如圖7.5.5所示。圖7.5.5壓縮后的模型圖

第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封63第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝步驟三:子系統(tǒng)模塊將有一個默認輸入端口和輸出端口。輸入端口和輸出端口的默認名分別為In1和Out1。調(diào)整子系統(tǒng)和模型窗口的大小使之美觀,如圖7.5.6所示。圖7.5.6壓縮后的模型圖第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封64第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝若想查看子系統(tǒng)內(nèi)容或?qū)ψ酉到y(tǒng)進行再編輯,可以雙擊子系統(tǒng)模塊,則會出現(xiàn)一個顯示子系統(tǒng)內(nèi)容的新窗口。在窗口內(nèi),除了原始的模塊外,Simulink自動添加了輸入模塊和輸出模塊,分別代表子系統(tǒng)的輸入端口和輸出端口。改變它們的標簽會使子系統(tǒng)的輸入輸出端口的標簽也隨著變化。特別注意:菜單命令【Edit/CreatSubsystem】沒有相反的操作命令。也就是說一旦將一組模塊壓縮成子系統(tǒng),就沒有直接還原的處理方法了(UNDO除外)。因此一個理想的處理方法是在壓縮子系統(tǒng)之前先把模型保存一下,作為備份。二、子系統(tǒng)模塊在創(chuàng)建模型的時候,如果需要一個子系統(tǒng),也可以直接在子系統(tǒng)窗口中創(chuàng)建。這樣就省去了上面的壓縮子系統(tǒng)和重新安排窗口的步驟。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封65要使用子系統(tǒng)模塊創(chuàng)建新的子系統(tǒng),先從Signals&Systems模塊庫中拖一個子系統(tǒng)模塊到模型窗口中。雙擊子系統(tǒng)模塊,就會出現(xiàn)一個子系統(tǒng)編輯窗口。注意:在信號輸入端口要使用一個輸入模塊,在信號輸出端口要使用一個輸出模塊。子系統(tǒng)創(chuàng)建完畢后,關(guān)閉子系統(tǒng)窗口。關(guān)閉子系統(tǒng)窗口之前不需要做任何保存操作。子系統(tǒng)作為模型的一部分,當(dāng)模型被保存時,子系統(tǒng)會自動保存。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝要使用子系統(tǒng)模塊創(chuàng)建新的子系統(tǒng),先從Signals&Sy66第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝例7.5.1模擬如圖7.5.7所示的彈簧-質(zhì)量系統(tǒng)的運動狀態(tài)。單個小車系統(tǒng)的運動方程如下:圖7.5.7彈簧-質(zhì)量系統(tǒng)

先建立如圖7.5.8所示的單個小車系統(tǒng)的子系統(tǒng)圖7.5.8單個小車系統(tǒng)

第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封67第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝使用子系統(tǒng)模塊創(chuàng)建如圖7.5.9所示的子系統(tǒng),此子系統(tǒng)用來模擬一個小車的運動。子系統(tǒng)的輸入為小車的左距x(n-1)和右距x(n+1),輸出為小車的當(dāng)前位置x(n).子系統(tǒng)完成之后,關(guān)閉子系統(tǒng)窗口。復(fù)制兩次此子系統(tǒng)模塊,并如圖7.5.10所示鏈接起來。圖7.5.9小車1的子系統(tǒng)模型

圖7.5.10使用子系統(tǒng)的三小車模型第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的68第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝為了可以對每個小車的參數(shù)進行賦值,要做以下設(shè)置:⑴對小車1,將標簽為LeftSpring的增益模塊的增益系數(shù)設(shè)置為k1,標簽為RightSpring的增益模塊的增益系數(shù)設(shè)置為k2,標簽為1/mass的增益模塊的增益系數(shù)設(shè)置為1/m1。設(shè)置速度積分模塊的初始值為0,位置積分模塊的初始值為1。⑵對小車2,將標簽為LeftSpring的增益模塊的增益系數(shù)設(shè)置為k2,標簽為RightSpring的增益模塊的增益系數(shù)設(shè)置為k3,標簽為1/mass的增益模塊的增益系數(shù)設(shè)置為1/m2。設(shè)置速度積分模塊的初始值為0,位置積分模塊的初始值為1。⑶對小車3,將標簽為LeftSpring的增益模塊的增益系數(shù)設(shè)置為k3,標簽為RightSpring的增益模塊的增益系數(shù)設(shè)置為k4,標簽為1/mass的增益模塊的增益系數(shù)設(shè)置為1/m3。設(shè)置速度積分模塊的初始值為0,位置積分模塊的初始值為1。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的69第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝此時就可以很方便地使用Matlab變量對彈簧常數(shù)k1,k2,k3和小車質(zhì)量m1,m2,m3進行賦值。這里使用了一個名為set_k_m的M文件對它進行賦值,如下所示:&setthespringconstantsandblockmassvaluesk1=1;k2=2;k3=4;m1=1;m2=3;m3=2;仿真開始之前在Matlab命令窗口中運行此M文件。然后,指定示波器模塊把顯示數(shù)據(jù)保存到工作間中,并設(shè)置仿真的起始時間(StartTime)為0,終止時間(StopTime)為100。仿真結(jié)束后,在Matlab窗口中把所得到的小車3的顯示數(shù)據(jù)繪制成圖。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的70第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝7.5.2子系統(tǒng)的封裝封裝技術(shù)是將Simulink子系統(tǒng)“包裝”成一個模塊,并可以如同使用Simulink內(nèi)部模塊一樣使用的技術(shù)。每個封裝模塊都可以有一個自定義的圖標用來設(shè)定參數(shù)的對話框,參數(shù)設(shè)定方法也與Simulink模塊庫中的內(nèi)部模塊完全相同。為了更好的理解封裝的含義,見圖7.5.10所示的模型。此模型與例7.5.1中的模型完全等價,但它要更容易使用。雙擊Spring-mass1模塊可以打開該模塊屬性的對話框。與例7.5.1中打開每個模塊去修改參數(shù)不同,這里可以直接在此對話框中輸入?yún)?shù)。對話框的結(jié)構(gòu)與形式都和“原裝”的模型毫無兩樣。本節(jié)將主要以此彈簧-質(zhì)量系統(tǒng)為例來詳細介紹創(chuàng)建一個封裝模塊的步驟。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的71第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝創(chuàng)建一個封裝模塊的主要步驟分為三步:⑴創(chuàng)建一個子系統(tǒng);⑵選中子系統(tǒng),選擇模型窗口菜單中的【Edit>Masksubsystem】選項生成封裝模塊;⑶使用封裝編輯器設(shè)置封裝文本、對話框和圖標。一、子系統(tǒng)到封裝模塊的轉(zhuǎn)換當(dāng)按照上節(jié)中介紹的方法創(chuàng)建以彈簧-質(zhì)量子系統(tǒng)模塊之后(如圖7.5.10所示),將其復(fù)制到一個新的窗口中,如圖7.5.11所示。選中此模塊,在窗口的菜單中執(zhí)行【Edit>Masksubsystem】指令,彈出如圖7.5.12所示的一個封裝編輯對話框。該對話框有三個選項卡。下面分別討論這三個選項卡的功能和使用。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的72第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝圖7.5.11將子系統(tǒng)復(fù)制到新窗口圖7.5.12封裝編輯對話框第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的73第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝(1)文本頁Documentation圖7.5.13是編輯器的文本頁。它也包括三個區(qū)域,每個區(qū)域都為一個自由區(qū),既可填寫也可以不填寫。

Masktype:該區(qū)內(nèi)容將作為模塊的類型顯示在封裝模塊的對話框中。

Blockdescription:此區(qū)中的內(nèi)容將顯示在封裝模塊對話框的上部,它的位置在后面的圖中可能看得更清楚。其內(nèi)容腦殼描述模塊的功用的簡短語句或其它關(guān)于使用此模塊的注意事項等。

Blockhelp:當(dāng)對話框中的【help】按鈕按下時,MATLAB的幫助系統(tǒng)將顯示此區(qū)中的內(nèi)容,其內(nèi)容應(yīng)當(dāng)包括使用此模塊的詳細說明。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的74第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝(2)初始化頁Initialization初始化頁是用來設(shè)置封裝模塊參數(shù)項的,如圖7.5.14所示。此頁也包括三個區(qū)域。

上區(qū)為Masktype區(qū)。此封裝類型區(qū)與文本頁中的封裝類型區(qū)是等同的,可以在任意一頁中定義或改變封裝類型。

中區(qū)是用來設(shè)置封裝模塊對話框中的輸入變量項目,如輸入變量或操作選擇等等。此區(qū)包括一個滾動項目列表、一套“加入”、“刪除”和“移動”按鈕,以及5個設(shè)置項目屬性的編輯區(qū)。

底區(qū)為Initializationcommands,在此區(qū)中可以輸入MATLAB語句,如定義變量、初始變量值等等。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的75第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝

封裝子系統(tǒng)與非封裝子系統(tǒng)的一個重要的區(qū)別在于模塊對話框中變量的作用范圍。非封裝子系統(tǒng)模塊中的變量可以直接在MATLAB工作間中賦值。而封裝子系統(tǒng)的模塊則不能。封裝子系統(tǒng)有一個獨立于MATLAB工作間及其它子系統(tǒng)的內(nèi)部存儲空間、這個特點可以防止模塊變量與其它工作間中無關(guān)變量的沖突。因此,在封裝模塊中用到的變量要在封裝編輯器對話區(qū)或初始命令區(qū)中設(shè)置。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的76第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝圖7.5.13封裝編輯器的文本頁圖7.5.14封裝編輯器的初始化頁第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的77第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝(3)圖標頁Icon編輯器的圖標頁如圖7.5.12所示,它是用來給封裝模塊設(shè)計自定義圖標的。此頁分6個區(qū)。頂區(qū)的【Masktype】同其它兩頁中的【Masktype】是等同的。【Deawingcommands】區(qū)是以MATLAB語句來繪制圖標的編輯區(qū)。其余的4個區(qū)是用來指定圖標的屬性,理解了圖標的這些屬性再來分析圖標的繪制命令是很容易的。Iconfram:第一個屬性為圖標框選項,他由一個下拉菜單組成,分別有可見、不可見選項。所謂的圖標框即圖標的邊界線。Icontransparency:第二個屬性為圖標的透明度選項,也是由一個下拉菜單組成,有兩個選項,透明和不透明。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的78第七章Simulink建模和仿真Iconrotation:第三個選項為圖標旋轉(zhuǎn)選項,其下拉菜單選項為固定和旋轉(zhuǎn)。這個選項決定了當(dāng)執(zhí)行【Format>Flipblock】或【Formal>RotateBlock】指令時的圖標形狀。Drawingcooedenates:最后一個區(qū)是圖形坐標區(qū),用來設(shè)置繪圖的比例。它有三個選項:Pixed:用來設(shè)置繪圖系為絕對坐標系,其效果為當(dāng)模塊圖調(diào)整大小時,圖標不隨其大小的改變而改變。此參數(shù)下的坐標系應(yīng)為象素點坐標,圖標的左下角為坐標系的原點。Autoscale:該選項使得圖標圖形恰好充滿整個模塊。Normalized:該選項是設(shè)置繪圖比例在0河1之間的選項。圖標的左下角的坐標定義為(0,0),模塊的右上角坐標定義為(1,1)。當(dāng)模塊調(diào)整大小的時候,坐標系同樣被調(diào)整。

第七章Simulink建模和仿真Iconrotat79第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的封裝二、查看封裝和解封裝對于一個已封裝的子系統(tǒng)要想查看其封裝前子系統(tǒng)的具體內(nèi)容,可以選著菜單命令【Edit>LookUndermask】。若要對已經(jīng)封裝的模塊進行解封裝操作,要先選中此模塊,打開封裝編輯器,按下Unmask按鈕,則封裝就被解開。若要再次封裝此子系統(tǒng),選著【Edit>Masksubsystem】即可。第七章Simulink建模和仿真7.5子系統(tǒng)和子系統(tǒng)的80第七章Simulink建模和仿真7.6回調(diào)回調(diào)是一種MATLAB命令,他在某種事件,如打開模塊或雙擊模塊等情況發(fā)生時執(zhí)行。例如,通常雙擊一個模塊時,屏幕上將會顯示出此模4塊的對話框。而對示波器模塊,雙擊它將會執(zhí)行一個顯示示波器的回調(diào)函數(shù)。回調(diào)與MATLAB的圖形處理有著很緊密的聯(lián)系。例如,當(dāng)使用圖形處理工具創(chuàng)建一個菜單時,每個菜單選項通常是與同一個回調(diào)相對應(yīng)的,它會在選項被選中時自動執(zhí)行。回調(diào)可以是一句非常簡單的MATLAB命令。例如,若菜單選項為【CloseFigure】,比較合適的回調(diào)語句是MATLAB命令close。回調(diào)在更多的情況下是一個可以完成指定操作的M文件。第七章Simulink建模和仿真781第七章Simulink建模和仿真7.6回調(diào)7.6.1回調(diào)函數(shù)的介紹使用MATLAB的set_param命令可以加載回調(diào),具體格式為set_param(object,parameter,value)其中:object為包含模型名或模塊路徑的MATLAB字符串。如果回調(diào)是關(guān)于模型動作的,則object為模型名。例如,一模型以car_mod.mdl為名保存,則object應(yīng)當(dāng)為‘car_mod’。如果回調(diào)是關(guān)于模塊的,則此模塊的Simulink路徑將成為object。例如,對于car_mod模型中的子系統(tǒng)Controller中的Gain_1模塊,object應(yīng)為字符串‘car_mod/Controller/Gain_1’。parameter是一個包含回調(diào)參數(shù)的MATLAB字符串。value是包含回調(diào)函數(shù)名的字符串。例如,回調(diào)一名為set_gain.m的M文件,則value應(yīng)為字符串‘set_gain’。第七章Simulink建模和仿真782第七章Simulink建模和仿真7.6回調(diào)例7.6.1考慮圖7.6.1所示的Simulink模型。若模型以callb_1.mdl為名保存,其中常數(shù)塊的值設(shè)置為In_val。希望在用戶打開模型的時候,模型會自動提示要求輸入In_val的值。圖7.6.1使用回調(diào)初始化的模型圖用下面名為initm_1.m的簡單M文件來實現(xiàn)回調(diào),此M文件只有一個一條語句:In_val=input(‘Enterthevaluv:’);第七章Simulink建模和仿真783第七章Simulink建模和仿真7.6回調(diào)為了在模型打開的時候自動加載此回調(diào),打開模型,并在MATLAB命令窗口中輸入:set_param(‘callb_1’,’PreloadFcn’,’inetm_1’)保存此模型并關(guān)閉。下一次打開模型的時候,MATLAB會自動提示:>>Enterthevalue:并將輸入值賦給In_val變量。若希望當(dāng)仿真開始之前而不是模型打開時再輸入?yún)?shù)值,則需要下面的命令來加載回調(diào):set_param(‘callb_1’,’InitFcn’,’inetm_1’)第七章Simulink建模和仿真784第七章Simulink建模和仿真7.6回調(diào)7.6.2基于回調(diào)的圖形用戶界面使用回調(diào)可以很容易地為Simulink模型創(chuàng)建一個圖形用戶界面。線性模塊庫中的滑塊增益模塊就是一個很好的例子。此模塊是一個帶有回調(diào)所產(chǎn)生的用戶界面的增益模塊,其界面如圖7.6.2所示。本小節(jié)介紹這種圖形界面的創(chuàng)建過程和相關(guān)的程序問題。圖7.6.2滑塊增益模塊的用戶界面窗口

第七章Simulink建模和仿真785第七章Simulink建模和仿真7.6回調(diào)在Simulink模型中,帶有基于回調(diào)的圖形界面的模塊可以通過雙擊使回調(diào)函數(shù)加載。打開后應(yīng)響應(yīng)如下事件:

雙擊模塊打開用戶界面(OpenFcn)。此回調(diào)應(yīng)包括創(chuàng)建界面圖形并對其初始化的程序,而且程序還要確認在打開之前沒有其它同一模塊的圖形界面打開。

刪除該模塊(DeleteFcn),則關(guān)閉相應(yīng)的界面圖形。

包含該模塊的模型被關(guān)閉(ModelCloseFcn),則關(guān)閉界面。

包含該模塊的子系統(tǒng)被關(guān)閉(ParentCloseFcn),則關(guān)閉界面。

界面窗口的控制按鈕操作。經(jīng)驗表明在回調(diào)M文件中加入加載回調(diào)的語句是非常有用的。一旦程序被執(zhí)行,則回調(diào)將會成為模型的一個參數(shù)部分,運行速度大大提高。第七章Simulink建模和仿真786第七章Simulink建模和仿真7.6回調(diào)如下所示的一段程序代碼可以作為回調(diào)函數(shù)M文件的一個樣板,讀者可以從中看出此類文件的一般規(guī)律,稍作修改,即可應(yīng)用于其它情況。functionclbktplt(varargin)%Callbackfunctiontemplate%Installthiscallbackbyinvokingitwiththecommand%clbktplt('init_block')%attheMATLABpromptwiththeappropriatemodelfileopenandselected.%%Tousethet

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論