Simulink建模和仿真课件_第1页
Simulink建模和仿真课件_第2页
Simulink建模和仿真课件_第3页
Simulink建模和仿真课件_第4页
Simulink建模和仿真课件_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Simulink建模和仿真在電腦技術飛速發展的今天,許多科學研究、工程設計由於其複雜性越來越高,因此與電腦的接合日趨緊密。也正是電腦技術的介入,改變了許多學科的結構、研究內容和研究方向。例如,計算流體力學、計算物理學、計算聲學等新興學科的興起,均與電腦技術的發展分不開。控制理論、仿真技術本身與電腦的接合就十分緊密,而隨著專業領域的研究深入和電腦軟硬體技術的發展,這種聯繫呈現更加緊密。計算控制論的建立,足以說明這個問題。而這種發展,又以系統仿真技術的發展分不開的。為了滿足用戶對工程計算的要求,一些軟體公司相繼推出一批數學類科技應用軟體,如Matlab、Xmath、Mathematica、Maple等。其中MathWorks公司推出的Matlab由於有強大的功能和友好的用戶介面受到越來越多的科技工作者的青睞,尤其是控制領域的專家和學者.

Matlab具有友好的工作平臺和編程環境、簡單易學的編程語言、強大的科學計算和數據處理能力、出色的圖形和圖像處理功能、能適應多領域應用的工具葙、適應多種語言的程式介面、模組化的設計和系統級的仿真功能等,諸多的優點和特點。支持Matlab仿真是Simulink工具箱,Simulink一般可以附在Matlab上同時安裝,也有獨立版本來單獨使用。但大多數用戶都是附在Matlab上,以便能更好地發揮Matlab在科學計算上的優勢,進一步擴展Simulink的使用領域和功能。本章詳細地向用戶介紹Simulink地建模方法、使用操作、以及使用Simulink進行系統級的仿真和設計原理。使讀者通過本章地學習,不但可以進一步掌握電腦仿真的基本概念和理論,也可以初步學會使用Simulink去真正地運用仿真技術解決科研和工程中地實際問題。

7.1Simulink的概述和基本操作近幾年來,在學術界和工業領域,Simulink已經成為動態系統建模和仿真領域中應用最為廣泛的軟體之一。Simulink可以很方便地創建和維護一個完整地模組,評估不同地演算法和結構,並驗證系統的性能。由於Simulink是採用模組組合方式來建模,從而可以使得用戶能夠快速、準確地創建動態系統的電腦仿真模型,特別是對複雜的不確定非線性系統,更為方便。Simulink模型可以用來模擬線性和非線性、連續和離散或者兩者的混合系統,也就是說它可以用來模擬幾乎所有可能遇到動態系統。另外Simulink還提供一套圖形動畫的處理方法,使用戶可以方便的觀察到仿真的整個過程。Simulink沒有單獨的語言,但是它提供了S函數規則。所謂的S函數可以是一個M函數檔、FORTRAN程式、C或C++語言程式等,通過特殊的語法規則使之能夠被Simulink模型或模組調用。S函數使Simulink更加充實、完備,具有更強的處理能力。

7.1Simulink的概述和基本操作同Matlab一樣,Simulink也不是封閉的,他允許用戶可以很方便的定制自己的模組和模組庫。同時Simulink也同樣有比較完整的幫助系統,使用戶可以隨時找到對應模組的說明,便於應用。綜上所述,Simulink就是一種開放性的,用來模擬線性或非線性的以及連續或離散的或者兩者混合的動態系統的強有力的系統級仿真工具。目前,隨著軟體的升級換代,在軟硬體的介面方面有了長足的進步,使用Simulink可以很方便地進行即時的信號控制和處理、資訊通信以及DSP的處理。世界上許多知名的大公司已經使用Simulink作為他們產品設計和開發的強有力工具。

7.1Simulink的概述和基本操作圖7.1.1Simulink模型元素關聯圖

7.1.2基本操作一、模型基本結構一個典型的Simulink模型包括如下三種類型的元素:

①信號源模組

②被模擬的系統模組

③輸出顯示模組如圖7.1.1所示說明了這三種元素之間的典型關係。系統模組作為中心模組是Simulink仿真建模所要解決的主要部分;信號源為系統的輸入,它包括常數信號源函數信號發生器(如正弦和階躍函數波等)和用戶自己在Matlab中創建的自定義信號或Matlab工作間中三種。輸出模組主要在Sinks庫中。第七章Simulink建模和仿真

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

Simulink仿真包括兩個階段;初始化階段和模型執行階段

(1)模組初始化

在初始化階段主要完成以下工作:

①模型參數傳給Matlab進行估值,得到的數值結果將作為模型的實際參數;

②展開模型的各個層次,每一個非條件執行的子系統被它所包含的模組所代替;

第七章Simulink建模和仿真

7.1Simulink的概述和基本操作③模型中的模組按更新的次序進行排序。排序演算法產生一個列表以確保具有代數環的模組在產生它的驅動輸入的模組被更新後才更新。當然,這一步要先檢測出模型中存在的代數環。

④決定模型中有無顯示設定的信號屬性,例如名稱、數據類型、數值類型以及大小等,並且檢查每個模組是否能夠接受連接到它輸入端的信號。Simulink使用屬性傳遞的過程來確定未被設定的屬性,這個過程將源信號的屬性傳遞到它所驅動的模組的輸入信號;

⑤決定所有無顯示設定採樣時間的模組的採樣時間;

⑥分配和初始化用於存儲每個模組的狀態和輸入當前值的存儲空間。完成這些工作後就可以進行仿真了。2)模型執行一般模型是使用數值積分來進行仿真的。所運用的仿真解法器(仿真演算法)依賴於模型提供它的連續狀態微分能力。計算微分可以分兩步進行:第七章Simulink建模和仿真

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

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

7.1Simulink的概述和基本操作注意:不要把模組保存到模組檔的次序與仿真過程模組被更新的次序相混淆。Simulink在模組初始化時以將模組排好正確的次序。為了建立有效的更新次序,Simulink根據輸入和輸出的關係將模組分類。其中,當前輸出依賴於當前輸入的模組稱為直接饋入模組,所有其他的模組都稱為非虛擬模組。直接饋入模組的例子有Gain、Product和Sum模組;非直接饋入模組的例子有Integrator模組(它的輸出只依賴於它的狀態),Constant模組(沒有輸入)和Memory模組(它的輸出只依賴於前一個模組的輸入)。基於上述分類,Simulink使用下麵兩個基本規則對模組進行排序:①每個模組必須在它驅動的所有模組更新之前被更新。這條規則確保了模組被更新時輸入有效。②若非直接饋入模組在直接饋入模組之前更新,則它們的更新次序可以是任意的。這條規則允許Simulink在排序過程中忽略非虛擬模組。另外一個約束模組更新次序的因素是用戶給模組設定優先順序,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列出了各庫包含的主要模組種類圖形。

7.2基本模組表7.2.1Source庫

模塊名說明Clock顯示或者提供仿真時間Constant產生一個常數值信號Digitalclock產生數字採樣時間信號Digitalpulsegenerator產生數字脈衝信號Fromfile從檔讀取數據輸入Fromworkspace從工作間定義的矩陣讀入數據Pulsegenerator產生脈衝信號Ramp產生“斜坡”信號Randomnumber產生正態分佈的隨機信號Repeatingsequence產生週期序列信號Signalgenerator信號發生器Sinewave正弦波信號Step產生一個階躍信號Uniformrandomnumber產生均勻分佈的隨機信號

7.2基本模組

模塊名說明Display顯示輸入信號的值Scope顯示信號的波形Stopsimulation當輸入信號為0時結束仿真Tofile向檔中寫數據Toworkspace向工作間定義的變數寫數據到XYgraphMatlab圖形窗口顯示信號的二維圖表7.2.2Sinks庫

7.2基本模組

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

7.2基本模組

模塊名

說明Derivative信號的微分運算Integrator信號的積分運算Memory輸出前一個時間步的輸入值State-space實現線性狀態空間系統Transferfcn實現線性傳遞系統Transportdelay對輸入信號進行傳輸延時Variabletransportdelay對輸入信號進行可變時間的傳輸延時Zero-pole實現零-極點運算式的傳遞函數表7.2.4Continuous庫

7.2基本模組

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

7.2基本模組

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

7.2基本模組

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

7.2基本模組

模塊名說明Busselector有選擇的輸出信號Configurablesubsystem代表任何一個從指定的庫中選擇的模組Datastorememory定義共用數據存儲空間Datestoreread從共用數據空間讀數據並輸出Datestorywrite寫數據到共用數據存儲空間Datetypeconversion將信號轉換為其他數據類型Demux將一個向量信號分解輸出Enable為子系統增加啟動斷口From從一個Goto模組接受信號Goto傳遞信號到From模組Gototagvisibility定義Goto模組標記的可視域Ground將末連接的輸入端接地表7.2.8SignalandSystems庫

7.2基本模組

模塊名說明Hitcrossing檢測過零點IC設置一個信號的初始值Inpl為子系統建立一個輸入端口或建立一個外部入口Merge將幾個輸入量合併為一個標量的輸出串Modelinfo顯示模型資訊Mux將幾個輸入信號合成一個向量信號Out1為子系統建立一個輸出端口或建立一個外部出口Probe信號的寬度,採樣時間及信號類型Subsystem子系統模組Terminator結束一個未連接的輸出端口Trigger為子系統增加觸發端口Width輸入向量的輸出寬度Selector在輸入信號中選擇並輸出表7.2.8SignalandSystems庫

7.2基本模組

圖7.2.1庫的類型圖7.2.2Sources庫

7.2基本模組

圖7..2.3Sinks庫

圖7.2.4Discrete庫

圖7.2.5Continuous庫

7.2基本模組

圖7.2.6Math庫

圖7.2.7Nonlinear庫

7.2基本模組

圖7.2.8Signak&Systems庫

7.2基本模組

圖7.2.9Subsystems庫

7.2基本模組

圖7.2.10Functions&Tables庫

7.2基本模組

在Simulink中,各功能模組的參數描述都可以由用戶通過該模組的模組屬性對話框進行操作給出或修改。圖7.2.11是積分模組的屬性對話框,從圖可見,它有9個可控參數。

(1)Externalreset為外部重置選項。它用在當重置信號中發生觸發事件時,模組將照初始條件重置狀態。

(2)initialconditionsource此項用來從初始條件參數或外部模組中獲取初始條件。

(3)initialcondition此區域用來設置初始條件。

(4)Limitoutput如果此項被選中,則狀態將被限制在飽和度下限和上限之間。

(5)Uppersaturationlimit此參數用來設置飽和度上限。

(6)Lowersaturationlimit此參數用來設置飽和度下限。

(7)Showsaturationport若此項被選中,則模組上將增加一個飽和度端口。

(8)Showstateport若此項被選中,則模組上將增加一個狀態端口。

7.2基本模組

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

7.3建模方法

利用Simulink建立物理系統和數學系統的仿真模型,關鍵是對Simulink提供的功能模組進行操作,即用適當的方式將各種模組連接在一起。本小節將介紹模組的基本操作。在介紹具體的操作之前先對建模過程提兩點建議:

⑴在建模之前,應對模組和信號線有一個整體、清晰和仔細的安排,以便能減少建模時間;

⑵及時對模組和信號線命名、及時對模型加標注,以增強模型的可讀性。

本小節將詳細介紹創建Simulink仿真模型的過程,包括模組操作、編輯信號線及標注模型等。

7.3建模方法

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

7.3建模方法

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

7.3建模方法

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

圖7.3.2在同一模型窗口內複製模組

7.3建模方法

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

7.3建模方法

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

7.3建模方法

圖7.3.3模組參數設置對話

圖7.3.4模組特性設置對話框

7.3建模方法

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

如果參數的值不是字串或數字,參數值的位置會顯示N/S(notsupported)。如果參數名無效,參數值的位置將顯示“???”。圖7.3.5設置屬性格式字串後的效果

7.3建模方法

四、模組外形的調整

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

圖7.3.6調整模組的方向

7.3建模方法

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

7.3建模方法

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

7.3建模方法

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

圖7.3.9調整連線的位置(一)

圖7.3.10調整連線的位置(二)

7.3建模方法

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

7.3建模方法

二、在連線上反映資訊(1)用粗線表示向量為了能比較直觀地區別各個模組之間傳輸的數據是數據還是矩陣(向量),可以選擇模型檔菜單Format下的WidevectorLines選項,這樣傳輸向量的連線就會變粗。如果再選擇Format下的VectorLinesWidths選項,在傳輸矩陣的連線上方會顯示出通過該連線的矩陣維數。如圖7.3.12,模組StateSpace的輸入為二維矩陣,在加粗的輸入輸出線的上方分別標出了相應矩陣的維數。圖7.3.12用粗線表示向量

7.3建模方法

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

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

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

Selector、Subsystem和Enable。

7.3建模方法

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

圖7.3.14信號標記的建立

圖7.3.15信號標記的傳遞

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

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

7.4系統仿真舉例

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

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

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

由牛頓第二定律,汽車的運動方程為:其中m代表汽車的品質,x為汽車的位移。

在實際系統中總會有下界和上界,上界為發動機的最大推動力,下界為刹車時的最大制動力。。第七章Simulink建模和仿真7.4系統仿真舉例

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

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

圖7.4.2比例速度控制的汽車模型第七章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系統仿真舉例

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

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

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

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

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

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

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

第七章Simulink建模和仿真7.4系統仿真舉例它的控制器的三個部分分別是:

·比例部分由一個領零階保持和一個比例增益模組組成。比例增益係數也是50。·

積分部分由一個時間離散積分模組和一個增益模組組成。在離散積分模組中,選擇【LimiteOutput】,並設置飽和限為。

·控制器的微分部分包括一個離散傳遞函數模組和一個增益模組。在此例中設仿真運行時間為100s,滑塊增益為80。得示波器圖形如圖7.4.6所示。圖7.4.6汽車速度控制曲線

在前面的章節中,介紹了連續離散和混合系統創建器Simulink模型的基本方法。根據前面的介紹,基本可以創建任何物理系統的模型。然而隨著模型越來越複雜,用這些基本操作創建的Simulink模變得越來越龐大而難於讀懂。在接下來的章節中,將介紹一系列的Simulink特殊處理技術來使得模型變得更加簡捷易懂易用。本節先介紹一種類似於程式設計語言中的副程式的處理方法——Simulink子系統,然後講解一種更加好用的封裝子系統技術。第七章Simulink建模和仿真7.5子系統和子系統的封裝7.5.1Simulink子系統絕大多數的程式設計語言都有使用副程式的功能。在FORTRAN裏有subroutine副程式和function副程式;C語言中的副程式被稱為“函數”;Matlab的副程式稱為函數式M檔。Sinlulilnk也提供了類似的功能——副程式。隨著模型越來越大、越來越複雜,人們很難輕易的讀懂它們。在這種情況下,子系統通過把大的模型分割成幾個小的模型系統以使得整個系統模型更簡捷、可讀性更高,而且這種操作並不複雜。舉一個簡單的例子,考慮在例1中提到的汽車模型,其Simulink模型圖見圖7.5.1。第七章Simulink建模和仿真7.5子系統和子系統的封裝圖7.5.1比例速度控制的汽車模型整個模型包括兩個主要部分:發動機動力系統和控制系統。但是在模型圖中哪些模組代表發動機動力系統,那些模組代表控制系統並不明確。在圖7.5.2中,將模型的這兩個部分轉化為子系統。經過轉化後,主模型圖中的結構就變得很明瞭了,只是兩個子系統的具體結構被隱藏起來了,雙擊子系統模組,則會在一個新的窗口中顯示子系統的模組圖。如圖7.5.3所示。第七章Simulink建模和仿真7.5子系統和子系統的封裝

圖7.5.2子模組化了的汽車模型第七章Simulink建模和仿真7.5子系統和子系統的封裝(a)控制子系統

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

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

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

第七章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子系統和子系統的封裝為了可以對每個小車的參數進行賦值,要做以下設置:⑴對小車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子系統和子系統的封裝此時就可以很方便地使用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子系統和子系統的封裝7.5.2子系統的封裝封裝技術是將Simulink子系統“包裝”成一個模組,並可以如同使用Simulink內部模組一樣使用的技術。每個封裝模組都可以有一個自定義的圖示用來設定參數的對話框,參數設定方法也與Simulink模組庫中的內部模組完全相同。為了更好的理解封裝的含義,見圖7.5.10所示的模型。此模型與例7.5.1中的模型完全等價,但它要更容易使用。雙擊Spring-mass1模組可以打開該模組屬性的對話框。與例7.5.1中打開每個模組去修改參數不同,這裏可以直接在此對話框中輸入參數。對話框的結構與形式都和“原裝”的模型毫無兩樣。本節將主要以此彈簧-品質系統為例來詳細介紹創建一個封裝模組的步驟。第七章Simulink建模和仿真7.5子系統和子系統的封裝創建一個封裝模組的主要步驟分為三步:⑴創建一個子系統;⑵選中子系統,選擇模型窗口菜單中的【Edit>Masksubsystem】選項生成封裝模組;⑶使用封裝編輯器設置封裝文本、對話框和圖示。一、子系統到封裝模組的轉換當按照上節仲介紹的方法創建以彈簧-品質子系統模組之後(如圖7.5.10所示),將其複製到一個新的窗口中,如圖7.5.11所示。選中此模組,在窗口的菜單中執行【Edit>Masksubsystem】指令,彈出如圖7.5.12所示的一個封裝編輯對話框。該對話框有三個選項卡。下麵分別討論這三個選項卡的功能和使用。第七章Simulink建模和仿真7.5子系統和子系統的封裝圖7.5.11將子系統複製到新窗口圖7.5.12封裝編輯對話框第七章Simulink建模和仿真7.5子系統和子系統的封裝(1)文本頁Documentation圖7.5.13是編輯器的文本頁。它也包括三個區域,每個區域都為一個自由區,既可填寫也可以不填寫。

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

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

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

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

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

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

封裝子系統與非封裝子系統的一個重要的區別在於模組對話框中變數的作用範圍。非封裝子系統模組中的變數可以直接在MATLAB工作間中賦值。而封裝子系統的模組則不能。封裝子系統有一個獨立於MATLAB工作間及其它子系統的內部存儲空間、這個特點可以防止模組變數與其它工作間中無關變數的衝突。因此,在封裝模組中用到的變數要在封裝編輯器對話區或初始命令區中設置。第七章Simulink建模和仿真7.5子系統和子系統的封裝圖7.5.13封裝編輯器的文本頁圖7.5.14封裝編輯器的初始化頁第七章Simulink建模和仿真7.5子系統和子系統的封裝(3)圖示頁Icon編輯器的圖示頁如圖7.5.12所示,它是用來給封裝模組設計自定義圖示的。此頁分6個區。頂區的【Masktype】同其他兩頁中的【Masktype】是等同的。【Deawingcommands】區是以MATLAB語句來繪製圖示的編輯區。其餘的4個區是用來指定圖示的屬性,理解了圖示的這些屬性再來分析圖示的繪製命令是很容易的。

Iconfram:第一個屬性為圖示框選項,他由一個下拉菜單組成,分別有可見、不可見選項。所謂的圖示框即圖示的邊界線。

Icontransparency:第二個屬性為圖示的透明度選項,也是由一個下拉菜單組成,有兩個選項,透明和不透明。

Iconrotation:第三個選項為圖示旋轉選項,其下拉菜單選項為固定和旋轉。這個選項決定了當執行【Format>Flipblock】或【Formal>RotateBlock】指令時的圖示形狀。

Drawingcooedenates:最後一個區是圖形座標區,用來設置繪圖的比例。它有三個選項:

Pixed:用來設置繪圖系為絕對坐標系,其效果為當模組圖調整大小時,圖示不隨其大小的改變而改變。此參數下的坐標系應為象素點座標,圖示的左下角為坐標系的原點。

Autoscale:該選項使得圖示圖形恰好充滿整個模組。

Normalized:該選項是設置繪圖比例在0河1之間的選項。圖示的左下角的座標定義為(0,0),模組的右上角座標定義為(1,1)。當模組調整大小的時候,坐標系同樣被調整。

第七章Simulink建模和仿真7.5子系統和子系統的封裝二、查看封裝和解封裝對於一個已封裝的子系統要想查看其封裝前子系統的具體內容,可以選著菜單命令【Edit>LookUndermask】。若要對已經封裝的模組進行解封裝操作,要先選中此模組,打開封裝編輯器,按下Unmask按鈕,則封裝就被解開。若要再次封裝此子系統,選著【Edit>Masksubsystem】即可。

7.6回調回調是一種MATLAB命令,他在某種事件,如打開模組或雙擊模組等情況發生時執行。例如,通常雙擊一個模組時,螢幕上將會顯示出此模4塊的對話框。而對示波器模組,雙擊它將會執行一個顯示示波器的回調函數。回調與MATLAB的圖形處理有著很緊密的聯繫。例如,當使用圖形處理工具創建一個菜單時,每個菜單選項通常是與同一個回調相對應的,它會在選項被選中時自動執行。回調可以是一句非常簡單的MATLAB命令。例如,若菜單選項為【CloseFigure】,比較合適的回調語句是MATLAB命令close。回調在更多的情況下是一個可以完成指定操作的M檔。

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’。

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:’);

7.6回調為了在模型打開的時候自動加載此回調,打開模型,並在MATLAB命令窗口中輸入:

set_param(‘callb_1’,’PreloadFcn’,’inetm_1’)保存此模型並關閉。下一次打開模型的時候,MATLAB會自動提示:

>>Enterthevalue:並將輸入值賦給In_val變數。若希望當仿真開始之前而不是模型打開時再輸入參數值,則需要下麵的命令來加載回調:

set_param(‘callb_1’,’InitFcn’,’inetm_1’)

7.6回調7.6.2基於回調的圖形用戶介面使用回調可以很容易地為Simulink模型創建一個圖形用戶介面。線性模組庫中的滑塊增益模組就是一個很好的例子。此模組是一個帶有回調所產生的用戶介面的增益模組,其介面如圖7.6.2所示。本小節介紹這種圖形介面的創建過程和相關的程式問題。圖7.6.2滑塊增益模組的用戶介面窗口

7.6回調在Simulink模型中,帶有基於回調的圖形介面的模組可以通過雙擊使回調函數加載。打開後應回應如下事件:

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

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

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

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

介面窗口的控制按鈕操作。經驗表明在回調M檔中加入加載回調的語句是非常有用的。一旦程式被執行,則回調將會成為模型的一個參數部分,運行速度大大提高。

7.6回調如下所示的一段程式代碼可以作為回調函數M檔的一個樣板,讀者可以從中看出此類檔的一般規律,稍作修改,即可應用於其他情況。functionclbktplt(varargin)%Callbackfunctiontemplate%Installthiscallbackbyinvokingitwiththecommand%clbktplt('init_block')%attheMATLABpromptwiththeappropriatemodelfileopenandselected.%%Tousethetemplate,saveacopyunderanewname.Thenreplace%clbktpltwiththenewnameeverywhereitappears.

7.6回調action=varargin{1};switchaction,case'init_block',init_fcn;%Blockinitializationfunction,%locatedinthisM-filecase'create_fig',if(findobj('UserData',gcb))%Don'topentwoforsameblockdisp('Onlyopenoneinstanceperblockcanbeopened')else%Here,putallcommandsneededtosetupthefigureandits%callbacks.

7.6回調

left=100;%Figurepositionvaluesbottom=100;width=100;height=100;h_fig=figure('Position',[leftbottomwidthheight],...'MenuBar','none');set(h_fig,'UserData',gcb);%Savenameofcurrentblockin%thefigure'sUserData.Thisis%usedtodetectthataclbktpltfig%isalreadyopenforthecurrentblock,

7.6回調

%sothatonlyoneinstanceofthefigure%isopenatatime.endcase'close_fig',%Closeifopenwhenmodelisclosed.h_fig=findobj('UserData',gcb);if(h_fig)%Isthefigureforcurrentblockopen?close(h_fig);%Ifso,closeit.end

7.6回調

case'rename_block',%ChangethenameinthefigureUserData.h_fig=findobj('UserData',gcb);if(h_fig)%Isthefigureopen?set(h_fig,'UserData',gcb);%Ifso,changethename.end

7.6回調%************************************%*init_fcn*%************************************

case'UserAction1',%Placecasesforvarioususeractions%here.Thesecallbacksshouldbedefined%whenthefigureiscreated.end

7.6回調functioninit_fcn()%Configuretheblockcallbacks%Thisfunctionshouldbeexecutedoncewhentheblockiscreated%todefinethecallbacks.Afteritisexecuted,savethemodel%andthecallbackdefinitionswillbesavedwiththemodel.Thereisnoneed%toreinstallthecallbackswhentheblockiscopied;theyarepartofthe%blockoncethemodelissaved.sys=gcs;

7.6回調block=[sys,'/InitialBlockName'];%ReplaceInitialBlockNamewiththe%nameoftheblockwhenitis%createdandinitialized.Thisdoes

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论