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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

7.1Simulink的概述和基本操作注意:不要把模塊保存到模塊文件的次序與仿真過程模塊被更新的次序相混淆。Simulink在模塊初始化時以將模塊排好正確的次序。為了建立有效的更新次序,Simulink根據輸入和輸出的關系將模塊分類。其中,當前輸出依賴于當前輸入的模塊稱為直接饋入模塊,所有其他的模塊都稱為非虛擬模塊。直接饋入模塊的例子有Gain、Product和Sum模塊;非直接饋入模塊的例子有Integrator模塊(它的輸出只依賴于它的狀態),Constant模塊(沒有輸入)和Memory模塊(它的輸出只依賴于前一個模塊的輸入)。基于上述分類,Simulink使用下面兩個基本規則對模塊進行排序:①每個模塊必須在它驅動的所有模塊更新之前被更新。這條規則確保了模塊被更新時輸入有效。②若非直接饋入模塊在直接饋入模塊之前更新,則它們的更新次序可以是任意的。這條規則允許Simulink在排序過程中忽略非虛擬模塊。另外一個約束模塊更新次序的因素是用戶給模塊設定優先級,Simulink在低優先級模塊之前更新高優先級模塊。天馬行空官方博客:/tmxk_docin;QQ:1318241189第七章Simulink建模和仿真7.1Simul10第七章Simulink建模和仿真7.2基本模塊由于大多數物理系統都可以用微分方程組和代數方程組來描述,Simulink也采用的是本教材第四章介紹的面向結構圖的數字仿真原理。但其功能塊的類型、數值解法、功能快的描述、以及建模方式和方法遠遠超出CSS仿真程序包,其界面也更加友好。Simulink4把功能塊分成9類,分別放置在9個庫中,如圖7.2.1所示:源模塊庫(Sources)、輸出顯示庫(Sinks)、離散模塊庫(Discrete)、連續模塊庫(Continuous)、非線性模塊庫(Nonlinear)、數學函數庫(Math)、通用函數及列表庫(FunctionsandTables)、信號處理及系統類模塊庫(SignalandSystems)和子系統模塊庫(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產生一個常數值信號Digitalclock產生數字采樣時間信號Digitalpulsegenerator產生數字脈沖信號Fromfile從文件讀取數據輸入Fromworkspace從工作間定義的矩陣讀入數據Pulsegenerator產生脈沖信號Ramp產生“斜坡”信號Randomnumber產生正態分布的隨機信號Repeatingsequence產生周期序列信號Signalgenerator信號發生器Sinewave正弦波信號Step產生一個階躍信號Uniformrandomnumber產生均勻分布的隨機信號天馬行空官方博客:/tmxk_docin;QQ:1318241189第七章Simulink建模和仿真7.2基12第七章Simulink建模和仿真7.2基本模塊

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

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

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

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

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

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

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

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

模塊名說明Hitcrossing檢測過零點IC設置一個信號的初始值Inpl為子系統建立一個輸入端口或建立一個外部入口Merge將幾個輸入量合并為一個標量的輸出串Modelinfo顯示模型信息Mux將幾個輸入信號合成一個向量信號Out1為子系統建立一個輸出端口或建立一個外部出口Probe信號的寬度,采樣時間及信號類型Subsystem子系統模塊Terminator結束一個未連接的輸出端口Trigger為子系統增加觸發端口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中,各功能模塊的參數描述都可以由用戶通過該模塊的模塊屬性對話框進行操作給出或修改。圖7.2.11是積分模塊的屬性對話框,從圖可見,它有9個可控參數。(1)Externalreset為外部重置選項。它用在當重置信號中發生觸發事件時,模塊將照初始條件重置狀態。(2)initialconditionsource此項用來從初始條件參數或外部模塊中獲取初始條件。(3)initialcondition此區域用來設置初始條件。(4)Limitoutput如果此項被選中,則狀態將被限制在飽和度下限和上限之間。(5)Uppersaturationlimit此參數用來設置飽和度上限。(6)Lowersaturationlimit此參數用來設置飽和度下限。(7)Showsaturationport若此項被選中,則模塊上將增加一個飽和度端口。(8)Showstateport若此項被選中,則模塊上將增加一個狀態端口。第七章Simulink建模和仿真7.2基本28第七章Simulink建模和仿真7.2基本模塊

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

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

利用Simulink建立物理系統和數學系統的仿真模型,關鍵是對Simulink提供的功能模塊進行操作,即用適當的方式將各種模塊連接在一起。本小節將介紹模塊的基本操作。在介紹具體的操作之前先對建模過程提兩點建議:⑴在建模之前,應對模塊和信號線有一個整體、清晰和仔細的安排,以便能減少建模時間;⑵及時對模塊和信號線命名、及時對模型加標注,以增強模型的可讀性。

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

7.3.1模塊的操作 模塊是建立Simulink模型的基本單元。用適當的方法把各種模塊連接在一起就能夠建立任何動態系統的模型。一、選取模塊當選取單個模塊時,只要用鼠標在模塊上單擊即可,這是模塊的角上出現黑色的小方塊。選取多個模塊時,在所有模塊所占區域的一角按下鼠標左鍵不放,拖向該區域的對角,在此過程中會出現虛框,當虛框包住了要選的所有模塊后,放開鼠標左鍵,這時在所有被選模塊的角上都會出現小黑方塊,表示模塊被選中了。此過程如圖7.3.1所示。圖7.3.1選取多個模塊第七章Simulink建模和仿真7.3建模31第七章Simulink建模和仿真7.3建模方法

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

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

圖7.3.2在同一模型窗口內復制模塊第七章Simulink建模和仿真7.3建模33第七章Simulink建模和仿真7.3建模方法

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

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

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

圖7.3.3模塊參數設置對話

圖7.3.4模塊特性設置對話框

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

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

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

四、模塊外形的調整

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

圖7.3.6調整模塊的方向

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

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

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

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

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

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

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

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

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

圖7.3.13在連線上顯示數據類型

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

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

圖7.3.14信號標記的建立

圖7.3.15信號標記的傳遞

第七章Simulink建模和仿真7.3建模45第七章Simulink建模和仿真7.4系統仿真舉例

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

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

第七章Simulink建模和仿真7.4系統47第七章Simulink建模和仿真7.4系統仿真舉例

7.4.1非線性系統的模擬例7.4.1汽車行駛如圖7.4.1所示的斜坡上通過受力分析可知在平行于斜面的方向上有三個力作用于汽車上:發動機的力、空氣阻力和重力沿斜面的分量下滑力。設計汽車控制系統并進行仿真。圖7.4.1斜坡上的汽車

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

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

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

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

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

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

第七章Simulink建模和仿真7.4系統仿真舉52第七章Simulink建模和仿真7.4系統仿真舉例

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

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

第七章Simulink建模和仿真7.4系統仿真舉54第七章Simulink建模和仿真7.4系統仿真舉例

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

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

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

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

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

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

先建立如圖7.5.8所示的單個小車系統的子系統圖7.5.8單個小車系統

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

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

Masktype:該區內容將作為模塊的類型顯示在封裝模塊的對話框中。

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

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

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

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

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

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

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

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

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

刪除該模塊(DeleteFcn),則關閉相應的界面圖形。

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

包含該模塊的子系統被關閉(ParentCloseFcn),則關閉界面。

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

溫馨提示

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

評論

0/150

提交評論