![Simulink建模和仿真_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/3f948eec-f5d1-443c-ab97-75cda8b19a73/3f948eec-f5d1-443c-ab97-75cda8b19a731.gif)
![Simulink建模和仿真_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/3f948eec-f5d1-443c-ab97-75cda8b19a73/3f948eec-f5d1-443c-ab97-75cda8b19a732.gif)
![Simulink建模和仿真_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/3f948eec-f5d1-443c-ab97-75cda8b19a73/3f948eec-f5d1-443c-ab97-75cda8b19a733.gif)
![Simulink建模和仿真_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/3f948eec-f5d1-443c-ab97-75cda8b19a73/3f948eec-f5d1-443c-ab97-75cda8b19a734.gif)
![Simulink建模和仿真_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/20/3f948eec-f5d1-443c-ab97-75cda8b19a73/3f948eec-f5d1-443c-ab97-75cda8b19a735.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、圖7.1.1 Simulink模型元素關(guān)聯(lián)圖 表表7.2.2 Sinks7.2.2 Sinks庫庫表表7.2.3 Discrete7.2.3 Discrete庫庫表表7.2.4 Continuous7.2.4 Continuous庫庫表表7.2.5 7.2.5 MathMath庫庫表表7.2.6 Function and Tables7.2.6 Function and Tables函數(shù)函數(shù) 表表7.2.7 Nonlinear 7.2.7 Nonlinear 庫庫表表7.2.8 7.2.8 Signal Signal and and SystemsSystems庫庫表表7.2.8 Signal
2、 and Systems7.2.8 Signal and Systems庫庫圖圖7.2.3 Sinks7.2.3 Sinks庫庫 圖圖7.2.4 Discrete7.2.4 Discrete庫庫 圖圖7.2.5 Continuous7.2.5 Continuous庫庫 圖圖7.2.6 Math7.2.6 Math庫庫 圖圖7.2.7 Nonlinear7.2.7 Nonlinear庫庫 圖圖7.2.8 Signak & Systems7.2.8 Signak & Systems庫庫 圖圖7.2.9 Subsystems7.2.9 Subsystems庫庫 圖圖7.2.10 Fu
3、nctions & Tables7.2.10 Functions & Tables庫庫 圖圖7.2.11 7.2.11 積分模塊屬性對話框積分模塊屬性對話框 圖圖7.3.1 7.3.1 選取多個模塊選取多個模塊 圖圖7.3.2 7.3.2 在同一模在同一模型窗口內(nèi)型窗口內(nèi)復(fù)制模塊復(fù)制模塊 圖圖7.3.3 7.3.3 模塊參數(shù)設(shè)置對話模塊參數(shù)設(shè)置對話 圖圖7.3.4 7.3.4 模塊特性設(shè)置對話框模塊特性設(shè)置對話框 如果參數(shù)的值不是字符串或數(shù)字,參數(shù)值的位置會顯示N/S(not supported)。如果參數(shù)名無效,參數(shù)值的位置將顯示“?”。 圖圖7.3.5 7.3.5 設(shè)置屬性
4、格式字符串后的效果設(shè)置屬性格式字符串后的效果圖圖7.3.7 7.3.7 模塊的陰影效果模塊的陰影效果 圖圖7.3.6 7.3.6 調(diào)整模塊的方向調(diào)整模塊的方向 圖圖7.3.8 7.3.8 兩模塊不在同一水平線上兩模塊不在同一水平線上 圖圖7.3.9 7.3.9 調(diào)整連線的位置(一)調(diào)整連線的位置(一) 圖圖7.3.10 7.3.10 調(diào)整連線的位置(二)調(diào)整連線的位置(二) 圖圖7.3.11 7.3.11 連線的連線的分支分支 圖圖7.3.12 7.3.12 用粗線表示用粗線表示向量向量 圖圖7.3.13 7.3.13 在連線上顯示數(shù)據(jù)類型在連線上顯示數(shù)據(jù)類型 (3) (3) 信號標(biāo)記信號標(biāo)記
5、 為了使模型更加直觀、可讀性更強(qiáng),我們可以為傳輸?shù)男盘?作標(biāo)記。 建立信號標(biāo)記的辦法是:雙擊要做標(biāo)記的線段,出現(xiàn)一個小 文本編輯框,在里面輸入標(biāo)記的文本,這樣就建立了一個信 號標(biāo)記。信號標(biāo)記可以隨信號的傳輸從一些模塊中進(jìn)行傳遞。 支持這種傳遞的模塊有Mux、Demux、Inport、From、 Selector、Subsystem和Enable。 圖圖7.3.14 7.3.14 信號標(biāo)記的建立信號標(biāo)記的建立 圖圖7.3.15 7.3.15 信號標(biāo)記的傳遞信號標(biāo)記的傳遞 xeFwFhF圖圖7.4.1 7.4.1 斜坡上的汽車斜坡上的汽車 由牛頓第二定律,汽車的運(yùn)動方程為:hweFFFxm eFK
6、gFe100,10002000汽車的質(zhì)量為假設(shè)其中m代表汽車的質(zhì)量,x為汽車的位移。 在實(shí)際系統(tǒng)中總會有下界和上界,上界為發(fā)動機(jī)的最大推動力,下界為剎車時的最大制動力。22VP001.02ACDtVw011.0sin10201. 0sin20001. 0txFwx0001.0sin0093.0 xFh0001.0sin30 xxKFdesiredeccFdesiredx eK50eK比例控制器的輸入為汽車的期望速度值,它由一個滑塊增益模塊(Slider Gain)外加一個常數(shù)輸入模塊(Constant)組成。比例控制器由一個用來計(jì)算速度誤差的求和模塊(Sum)和一個增益模塊Ke組成。發(fā)動機(jī)輸出
7、力的上界和下界由兩個最值模塊來實(shí)現(xiàn)(也可以用非線性模塊庫中的飽和模塊來實(shí)現(xiàn))。 圖圖7.4.2 7.4.2 比例速比例速度控制度控制的汽車的汽車模型模型圖圖7.4.3 7.4.3 汽車的速度變化曲線汽車的速度變化曲線說明:說明:此模型也是一個輕度剛性問題的很好的例子,為了觀察剛性的影響,先以解法0DE45l來運(yùn)行模型,然后選擇0DE15S再運(yùn)行仿真,觀察其區(qū)別。圖7.4.4 連續(xù)PID控制器 vKup0tiivdtKu0iuvKuddTkvkvud1zzTKzVzUdd1圖圖7.4.5 7.4.5 離散控制器的汽車模型離散控制器的汽車模型 75,75. 0,50dipKKK圖圖7.4.6 7.
8、4.6 汽車速度控制曲線汽車速度控制曲線圖圖7.5.1 7.5.1 比例速度比例速度控制的汽控制的汽車模型車模型 圖圖7.5.2 7.5.2 子模塊化了的汽車模型子模塊化了的汽車模型 (a) (a) 控制子系統(tǒng)控制子系統(tǒng) (b) (b) 發(fā)動機(jī)動力子系統(tǒng)發(fā)動機(jī)動力子系統(tǒng)圖7.5.3 子系統(tǒng)分解 子系統(tǒng)的另外一個重要的功能是把反復(fù)使用的模塊組壓縮成子系統(tǒng)后重復(fù)使用。在本例中,如果要比較在同一控制系統(tǒng)控制下不同發(fā)動機(jī)的工作效率,只需要替換新的發(fā)動機(jī)子系統(tǒng)而不是重建一個新的系統(tǒng)。這樣的控制系統(tǒng)就可以反復(fù)利用。注意:這種做法不僅節(jié)省了建模時間,而且可以保證在多次建模中不會因失誤而在控制子系統(tǒng)中出現(xiàn)差錯
9、,這在大型的復(fù)雜系統(tǒng)建模中是非常重要的。創(chuàng)建Simulink子系統(tǒng)共有兩種方法:一種辦法是對已存在的模型的某些部分或全部使用菜單命令【Edit/Create Subsystem】進(jìn)行壓縮轉(zhuǎn)化,使之成為子系統(tǒng);另一種方法是使用Connections模塊庫中的Subsystem模塊直接創(chuàng)建子系統(tǒng)。下面分別介紹這兩種方法。一、壓縮子系統(tǒng)一、壓縮子系統(tǒng)把已經(jīng)存在的Simulink模型中的某個部分或全部壓縮成子系統(tǒng)的操作如下:步驟一:步驟一:首先使用范圍框?qū)⒁獕嚎s成子系統(tǒng)的部分選中,包括模塊和信號線,如圖7.5.4所示。 圖7.5.4 選中要壓縮的模塊注意:注意:在這種情況下只能用范圍框,而不能用Shi
10、ft逐個選定。 為了能使范圍框框住所有需要的模塊,重新安排模塊的 位置常常似乎是必要的。步驟二:步驟二:在模塊窗口菜單選項(xiàng)中選擇【EditCreat Subsystem】,Simulink將會用一個子系統(tǒng)模塊代替被選中的模塊組,如圖7.5.5所示。圖圖7.5.5 7.5.5 壓縮后的模型圖壓縮后的模型圖 步驟三:步驟三:子系統(tǒng)模塊將有一個默認(rèn)輸入端口和輸出端口。輸入端口和輸出端口的默認(rèn)名分別為In1和Out1。調(diào)整子系統(tǒng)和模型窗口的大小使之美觀,如圖7.5.6所示。圖圖7.5.6 壓縮后的模型圖壓縮后的模型圖 若想查看子系統(tǒng)內(nèi)容或?qū)ψ酉到y(tǒng)進(jìn)行再編輯,可以雙擊子系統(tǒng)模塊,則會出現(xiàn)一個顯示子系統(tǒng)內(nèi)
11、容的新窗口。在窗口內(nèi),除了原始的模塊外,Simulink自動添加了輸入模塊和輸出模塊,分別代表子系統(tǒng)的輸入端口和輸出端口。改變它們的標(biāo)簽會使子系統(tǒng)的輸入輸出端口的標(biāo)簽也隨著變化。特別注意:特別注意:菜單命令【Edit/Creat Subsystem】沒有相反的操作命令。也就是說一旦將一組模塊壓縮成子系統(tǒng),就沒有直接還原的處理方法了(UNDO除外)。因此一個理想的處理方法是在壓縮子系統(tǒng)之前先把模型保存一下,作為備份。二、子系統(tǒng)模塊二、子系統(tǒng)模塊在創(chuàng)建模型的時候,如果需要一個子系統(tǒng),也可以直接在子系統(tǒng)窗口中創(chuàng)建。這樣就省去了上面的壓縮子系統(tǒng)和重新安排窗口的步驟。例7.5.1 模擬如圖7.5.7所示
12、的彈簧質(zhì)量系統(tǒng)的運(yùn)動狀態(tài)。單個小車系統(tǒng)的運(yùn)動方程如下:nnnnnnnxxknxkmx1111 1x2x3x圖圖7.5.7 彈簧質(zhì)量系統(tǒng)彈簧質(zhì)量系統(tǒng) 先建立如圖7.5.8所示的單個小車系統(tǒng)的子系統(tǒng) nx1nx1nx圖圖7.5.8 單個小車系統(tǒng)單個小車系統(tǒng) 使用子系統(tǒng)模塊創(chuàng)建如圖7.5.9所示的子系統(tǒng),此子系統(tǒng)用來模擬一個小車的運(yùn)動。子系統(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 7.5.9 小車小車1 1的子系統(tǒng)模型的子系統(tǒng)模型 圖圖7.5.10 使用子系
13、統(tǒng)的三小車模型使用子系統(tǒng)的三小車模型為了可以對每個小車的參數(shù)進(jìn)行賦值,要做以下設(shè)置: 對小車1,將標(biāo)簽為LeftSpring的增益模塊的增益系數(shù)設(shè)置為k1,標(biāo)簽為RightSpring 的增益模塊的增益系數(shù)設(shè)置為k2,標(biāo)簽為1/mass的增益模塊的增益系數(shù)設(shè)置為1/m1。設(shè)置速度積分模塊的初始值為0,位置積分模塊的初始值為1。 對小車2,將標(biāo)簽為LeftSpring 的增益模塊的增益系數(shù)設(shè)置為k2,標(biāo)簽為RightSpring 的增益模塊的增益系數(shù)設(shè)置為k3,標(biāo)簽為1/mass的增益模塊的增益系數(shù)設(shè)置為1/m2。設(shè)置速度積分模塊的初始值為0,位置積分模塊的初始值為1。 對小車3,將標(biāo)簽為Lef
14、tSpring的增益模塊的增益系數(shù)設(shè)置為k3,標(biāo)簽為RightSpring 的增益模塊的增益系數(shù)設(shè)置為k4,標(biāo)簽為1/mass的增益模塊的增益系數(shù)設(shè)置為1/m3。設(shè)置速度積分模塊的初始值為0,位置積分模塊的初始值為1。7.5.2 子系統(tǒng)的封裝子系統(tǒng)的封裝封裝技術(shù)是將Simulink子系統(tǒng)“包裝”成一個模塊,并可以如同使用Simulink內(nèi)部模塊一樣使用的技術(shù)。每個封裝模塊都可以有一個自定義的圖標(biāo)用來設(shè)定參數(shù)的對話框,參數(shù)設(shè)定方法也與Simulink模塊庫中的內(nèi)部模塊完全相同。為了更好的理解封裝的含義,見圖7.5.10所示的模型。此模型與例7.5.1中的模型完全等價,但它要更容易使用。雙擊Spr
15、ing-mass1模塊可以打開該模塊屬性的對話框。與例7.5.1中打開每個模塊去修改參數(shù)不同,這里可以直接在此對話框中輸入?yún)?shù)。對話框的結(jié)構(gòu)與形式都和“原裝”的模型毫無兩樣。本節(jié)將主要以此彈簧質(zhì)量系統(tǒng)為例來詳細(xì)介紹創(chuàng)建一個封裝模塊的步驟。創(chuàng)建一個封裝模塊的主要步驟分為三步: 創(chuàng)建一個子系統(tǒng); 選中子系統(tǒng),選擇模型窗口菜單中的【EditMask subsystem】選項(xiàng)生成封裝模塊; 使用封裝編輯器設(shè)置封裝文本、對話框和圖標(biāo)。一、子系統(tǒng)到封裝模塊的轉(zhuǎn)換一、子系統(tǒng)到封裝模塊的轉(zhuǎn)換當(dāng)按照上節(jié)中介紹的方法創(chuàng)建以彈簧質(zhì)量子系統(tǒng)模塊之后(如圖7.5.10所示),將其復(fù)制到一個新的窗口中,如圖7.5.11所
16、示。選中此模塊,在窗口的菜單中執(zhí)行【EditMask subsystem】指令,彈出如圖7.5.12所示的一個封裝編輯對話框。該對話框有三個選項(xiàng)卡。下面分別討論這三個選項(xiàng)卡的功能和使用。圖圖7.5.11 將子系統(tǒng)復(fù)制到新窗口將子系統(tǒng)復(fù)制到新窗口 圖圖7.5.12 封裝編輯對話框封裝編輯對話框(1) 文本頁文本頁 Documentation圖7.5.13是編輯器的文本頁。它也包括三個區(qū)域,每個區(qū)域都為一個自由區(qū),既可填寫也可以不填寫。 Mask type:該區(qū)內(nèi)容將作為模塊的類型顯示在封裝模塊的對話框中。 Block description:此區(qū)中的內(nèi)容將顯示在封裝模塊對話框的上部,它的位置在后
17、面的圖中可能看得更清楚。其內(nèi)容腦殼描述模塊的功用的簡短語句或其它關(guān)于使用此模塊的注意事項(xiàng)等。 Block help:當(dāng)對話框中的【help】按鈕按下時,MATLAB的幫助系統(tǒng)將顯示此區(qū)中的內(nèi)容,其內(nèi)容應(yīng)當(dāng)包括使用此模塊的詳細(xì)說明。(2) 初始化頁初始化頁 Initialization初始化頁是用來設(shè)置封裝模塊參數(shù)項(xiàng)的,如圖7.5.14所示。此頁也包括三個區(qū)域。 上區(qū)為Mask type區(qū)。此封裝類型區(qū)與文本頁中的封裝類型區(qū)是等同的,可以在任意一頁中定義或改變封裝類型。 中區(qū)是用來設(shè)置封裝模塊對話框中的輸入變量項(xiàng)目,如輸入變量或操作選擇等等。此區(qū)包括一個滾動項(xiàng)目列表、一套“加入”、“刪除”和“移
18、動”按鈕,以及5個設(shè)置項(xiàng)目屬性的編輯區(qū)。 底區(qū)為Initialization commands,在此區(qū)中可以輸入MATLAB語句,如定義變量、初始變量值等等。 封裝子系統(tǒng)與非封裝子系統(tǒng)的一個重要的區(qū)別在于模塊對話框中變量的作用范圍。非封裝子系統(tǒng)模塊中的變量可以直接在MATLAB工作間中賦值。而封裝子系統(tǒng)的模塊則不能。封裝子系統(tǒng)有一個獨(dú)立于MATLAB工作間及其它子系統(tǒng)的內(nèi)部存儲空間、這個特點(diǎn)可以防止模塊變量與其它工作間中無關(guān)變量的沖突。因此,在封裝模塊中用到的變量要在封因此,在封裝模塊中用到的變量要在封裝編輯器對話區(qū)或初始命令區(qū)中設(shè)置。裝編輯器對話區(qū)或初始命令區(qū)中設(shè)置。圖圖7.5.13 封裝編
19、輯器的文本頁封裝編輯器的文本頁 圖圖7.5.14 封裝編輯器的初始化頁封裝編輯器的初始化頁(3) 圖標(biāo)頁圖標(biāo)頁 Icon編輯器的圖標(biāo)頁如圖7.5.12所示,它是用來給封裝模塊設(shè)計(jì)自定義圖標(biāo)的。此頁分6個區(qū)。頂區(qū)的【Mask type】同其它兩頁中的【Mask type】是等同的?!綝eawing commands】區(qū)是以MATLAB語句來繪制圖標(biāo)的編輯區(qū)。其余的4個區(qū)是用來指定圖標(biāo)的屬性,理解了圖標(biāo)的這些屬性再來分析圖標(biāo)的繪制命令是很容易的。 Icon fram: 第一個屬性為圖標(biāo)框選項(xiàng),他由一個下拉菜單組成,分別有可見、不可見選項(xiàng)。所謂的圖標(biāo)框即圖標(biāo)的邊界線。 Icon transparen
20、cy:第二個屬性為圖標(biāo)的透明度選項(xiàng),也是由一個下拉菜單組成,有兩個選項(xiàng),透明和不透明。 Icon rotation:第三個選項(xiàng)為圖標(biāo)旋轉(zhuǎn)選項(xiàng),其下拉菜單選項(xiàng)為固定和旋轉(zhuǎn)。這個選項(xiàng)決定了當(dāng)執(zhí)行【FormatFlip block】或【FormalRotate Block】指令時的圖標(biāo)形狀。 Drawing cooedenates:最后一個區(qū)是圖形坐標(biāo)區(qū),用來設(shè)置繪圖的比例。它有三個選項(xiàng): Pixed:用來設(shè)置繪圖系為絕對坐標(biāo)系,其效果為當(dāng)模塊圖調(diào)整大小時,圖標(biāo)不隨其大小的改變而改變。此參數(shù)下的坐標(biāo)系應(yīng)為象素點(diǎn)坐標(biāo),圖標(biāo)的左下角為坐標(biāo)系的原點(diǎn)。 Autoscale:該選項(xiàng)使得圖標(biāo)圖形恰好充滿整個模塊
21、。 Normalized:該選項(xiàng)是設(shè)置繪圖比例在0河1之間的選項(xiàng)。圖標(biāo)的左下角的坐標(biāo)定義為(0,0),模塊的右上角坐標(biāo)定義為(1,1)。當(dāng)模塊調(diào)整大小的時候,坐標(biāo)系同樣被調(diào)整。 二、查看封裝和解封裝二、查看封裝和解封裝對于一個已封裝的子系統(tǒng)要想查看其封裝前子系統(tǒng)的具體內(nèi)容,可以選著菜單命令【EditLook Under mask】。若要對已經(jīng)封裝的模塊進(jìn)行解封裝操作,要先選中此模塊,打開封裝編輯器,按下Unmask按鈕,則封裝就被解開。若要再次封裝此子系統(tǒng),選著【EditMask subsystem】即可。回調(diào)是一種回調(diào)是一種MATLAB命令,他在某種事件,如打開模塊或命令,他在某種事件,如打
22、開模塊或雙擊模塊等情況發(fā)生時執(zhí)行。雙擊模塊等情況發(fā)生時執(zhí)行。例如,通常雙擊一個模塊時,屏幕上將會顯示出此模4塊的對話框。而對示波器模塊,雙擊它將會執(zhí)行一個顯示示波器的回調(diào)函數(shù)?;卣{(diào)與回調(diào)與MATLAB的圖形處理有著很緊密的聯(lián)系。的圖形處理有著很緊密的聯(lián)系。例如,當(dāng)使用圖形處理工具創(chuàng)建一個菜單時,每個菜單選項(xiàng)通常是與同一個回調(diào)相對應(yīng)的,它會在選項(xiàng)被選中時自動執(zhí)行?;卣{(diào)可以是一句非常簡單的MATLAB命令。例如,若菜單選項(xiàng)為【Close Figure】,比較合適的回調(diào)語句是MATLAB命令close?;卣{(diào)在更多的情況下是一個可以完成指定操作的回調(diào)在更多的情況下是一個可以完成指定操作的M文文件。件。
23、7.6.1 回調(diào)函數(shù)的介紹回調(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。 par
24、ameter是一個包含回調(diào)參數(shù)的MATLAB字符串。 value是包含回調(diào)函數(shù)名的字符串。例如,回調(diào)一名為set_gain.m的M文件,則value應(yīng)為字符串set_gain。例7.6.1 考慮圖7.6.1所示的Simulink模型。若模型以callb_1.mdl為名保存,其中常數(shù)塊的值設(shè)置為In_val。希望在用戶打開模型的時候,模型會自動提示要求輸入In_val的值。圖圖7.6.1 使用回調(diào)初始化的模型圖使用回調(diào)初始化的模型圖用下面名為initm_1.m的簡單M文件來實(shí)現(xiàn)回調(diào),此M文件只有一個一條語句: In_val=input(Enter the valuv:);為了在模型打開的時候自動
25、加載此回調(diào),打開模型,并在MATLAB命令窗口中輸入: set_param(callb_1,PreloadFcn,inetm_1)保存此模型并關(guān)閉。下一次打開模型的時候,MATLAB會自動提示: Enter the value:并將輸入值賦給In_val變量。若希望當(dāng)仿真開始之前而不是模型打開時再輸入?yún)?shù)值,則需要下面的命令來加載回調(diào): set_param(callb_1,InitFcn,inetm_1)7.6.2 基于回調(diào)的圖形用戶界面基于回調(diào)的圖形用戶界面使用回調(diào)可以很容易地為使用回調(diào)可以很容易地為Simulink模型創(chuàng)建一個圖形用戶界模型創(chuàng)建一個圖形用戶界面。面。線性模塊庫中的滑塊增益模
26、塊就是一個很好的例子。此模塊是一個帶有回調(diào)所產(chǎn)生的用戶界面的增益模塊,其界面如圖7.6.2所示。本小節(jié)介紹這種圖形界面的創(chuàng)建過程和相關(guān)的程序問題。圖圖7.6.2 滑塊增益模塊的用戶界面窗口滑塊增益模塊的用戶界面窗口 在Simulink模型中,帶有基于回調(diào)的圖形界面的模塊可以通過雙擊使回調(diào)函數(shù)加載。打開后應(yīng)響應(yīng)如下事件: 雙擊模塊打開用戶界面(OpenFcn)。此回調(diào)應(yīng)包括創(chuàng)建界面圖形并對其初始化的程序,而且程序還要確認(rèn)在打開之前沒有其它同一模塊的圖形界面打開。 刪除該模塊(DeleteFcn),則關(guān)閉相應(yīng)的界面圖形。 包含該模塊的模型被關(guān)閉(ModelCloseFcn),則關(guān)閉界面。 包含該模
27、塊的子系統(tǒng)被關(guān)閉(ParentCloseFcn),則關(guān)閉界面。 界面窗口的控制按鈕操作。經(jīng)驗(yàn)表明在回調(diào)M文件中加入加載回調(diào)的語句是非常有用的。一旦程序被執(zhí)行,則回調(diào)將會成為模型的一個參數(shù)部分,運(yùn)行速度大大提高。如下所示的一段程序代碼可以作為回調(diào)函數(shù)M文件的一個樣板,讀者可以從中看出此類文件的一般規(guī)律,稍作修改,即可應(yīng)用于其它情況。function clbktplt(varargin)% Callback function template% Install this callback by invoking it with the command% clbktplt(init_block)%
28、at the MATLAB prompt with the appropriate model file open and selected.% To use the template, save a copy under a new name. Then replace % clbktplt with the new name everywhere it appears.action = varargin1 ;switch action, case init_block, init_fcn ; % Block initialization function, % located in thi
29、s M-file case create_fig, if(findobj(UserData,gcb) % Dont open two for same block disp(Only open one instance per block can be opened) else % Here, put all commands needed to set up the figure and its % callbacks. left = 100 ; % Figure position values bottom = 100 ; width = 100 ; height = 100 ; h_fi
30、g = figure(Position,left bottom width height, . MenuBar,none) ; set(h_fig,UserData,gcb) ; % Save name of current block in % the figures UserData. This is % used to detect that a clbktplt fig % is already open for the current block, % so that only one instance of the figure % is open at a time. end c
31、ase close_fig, % Close if open when model is closed. h_fig = findobj(UserData,gcb) ; if(h_fig) % Is the figure for current block open? close(h_fig) ; % If so, close it. end case rename_block, % Change the name in the figure UserData. h_fig = findobj(UserData,gcb) ; if(h_fig) % Is the figure open? se
32、t(h_fig,UserData,gcb) ; % If so, change the name. end %*%* init_fcn * %* case UserAction1, % Place cases for various user actions % here. These callbacks should be defined % when the figure is created.endfunction init_fcn()% Configure the block callbacks% This function should be executed once when t
33、he block is created% to define the callbacks. After it is executed, save the model% and the callback definitions will be saved with the model. There is no need% to reinstall the callbacks when the block is copied; they are part of the% block once the model is saved.sys = gcs ;block = sys,/InitialBlo
34、ckName ; % Replace InitialBlockName with the % name of the block when it is % created and initialized. This does % not need to be changed when the block % is copied, as the callbacks wont be % reinstalled.set_param(block,OpenFcn, clbktplt create_fig,. ModelCloseFcn,clbktplt close_fig, . DeleteFcn, c
35、lbktplt close_fig, . NameChangeFcn,clbktplt rename_block) ;S函數(shù)函數(shù)是擴(kuò)展Simulink功能的強(qiáng)有力工具,它使用戶可以利用MATLAB、C語言、C+語言等程序創(chuàng)建自己定義的Simulink模塊。例如,對一個工程的幾個不同的控制系統(tǒng)進(jìn)行設(shè)計(jì),而此時已經(jīng)用M文件建立了一個動態(tài)模型,在這種情況下,可以將模型加入到S函數(shù)中,然后使用獨(dú)立的Simulink模型來模擬這些控制系統(tǒng)。S函數(shù)還可以改善仿真的效率,尤其是在帶有代數(shù)環(huán)的模型中。S函數(shù)使用一種特殊的調(diào)用規(guī)則來使得用戶可以與Simulink的內(nèi)部解法器進(jìn)行交互,這種交互通Simulink內(nèi)
36、部解法器與內(nèi)置的模塊之間的交互非常相似。而且可以適用于不同性質(zhì)的系統(tǒng),例如連續(xù)系統(tǒng)、離散系統(tǒng)以及混合系統(tǒng)。 圖圖7.7.1 包含包含S函數(shù)的模型函數(shù)的模型 圖圖7.7.2 S函數(shù)模塊的對話框函數(shù)模塊的對話框 7.7.2 S函數(shù)的工作原理函數(shù)的工作原理S函數(shù)具有一套不同的調(diào)用方法,可以在仿真的不同階段完成不同的調(diào)用任務(wù)。在模型仿真的不同階段,Simulink會對模型中S函數(shù)模塊選擇適當(dāng)?shù)姆椒▉硗瓿烧{(diào)用。S函數(shù)可以完成的任務(wù)大體分為以下幾種。(1) 初始化初始化。在進(jìn)入仿真循環(huán)之間,Simulink首先初始化S函數(shù),主要完成任務(wù): 初始化包含S函數(shù)信息的仿真結(jié)構(gòu)SimStruct。 設(shè)置輸入輸出端
37、口的數(shù)目和維數(shù)。 設(shè)置模塊的采樣時間。分派內(nèi)存區(qū)和sizes數(shù)組。(2) 計(jì)算下一個采樣點(diǎn)計(jì)算下一個采樣點(diǎn)。若用戶使用了可變采樣時間的模塊,在這一階段需要計(jì)算下一個采樣點(diǎn)時間,也就是說要計(jì)算下一個時間步長。(3) 計(jì)算主時間步的輸出量。計(jì)算主時間步的輸出量。此調(diào)用結(jié)束后,所有模塊的輸出端口對當(dāng)前的時間步都是有效的。(4) 更新主時間步的離散狀態(tài)。更新主時間步的離散狀態(tài)。(5) 積分計(jì)算積分計(jì)算。這一步只有當(dāng)模型帶有連續(xù)狀態(tài)或帶有非采樣過零點(diǎn)時才有效。若S函數(shù)帶有連續(xù)狀態(tài),則Simulink以較小的時間步長來調(diào)用S函數(shù)的輸出和微分方法;若S函數(shù)具有非采樣過零點(diǎn),Simulink將以較小的時間步來
38、計(jì)算S函數(shù)的輸出和過零點(diǎn)部分。7.7.3 S函數(shù)中的幾個概念函數(shù)中的幾個概念S函數(shù)中有幾個關(guān)鍵的概念需要詳細(xì)解釋,對這幾個概念的深入理解對正確使用S函數(shù)是非常重要的。(1) 直接饋入直接饋入所謂的直接饋入是指模塊的輸出或采樣時間是由它的一個輸入端口的值直接控制。判斷S函數(shù)地輸入端口是否有直接饋入的判據(jù)有: 輸出函數(shù)(mdlOutpits或者flag=3)是一個參數(shù)包含u的函數(shù)。 若改S函數(shù)是一個可變采樣時間的S函數(shù),且下一個采樣時間點(diǎn)的計(jì)算中要用到輸入?yún)?shù)u時,也可以判斷此S函數(shù)為直接饋入型。(2) 動態(tài)尺寸的輸入動態(tài)尺寸的輸入S函數(shù)可以支持任意維的輸入,此時,輸入的維數(shù)是由輸入變量的維數(shù)動態(tài)
39、確定的。同時,輸入變量的維數(shù)也決定了連續(xù)和離散狀態(tài)量的個數(shù)以及輸出變量的維數(shù)。M文件S函數(shù)只能有一個輸入端口,并且輸入端口只能接收一維信號。然而,信號可以是變寬度的。在一個M文件S函數(shù)里,為了指定輸入的寬度是動態(tài)的,可以指定sizes結(jié)構(gòu)的適當(dāng)區(qū)域的值為1。也可以在S函數(shù)調(diào)用的時候使用length(u)來確定實(shí)際輸入的寬度。若指定寬度值為0,則輸入端口會從S函數(shù)模塊中去掉。例如,圖7.7.3所示表示了在同一個模型中使用同一個S函數(shù)模塊的兩種情況,前者的S函數(shù)模塊是由一個三元素向量驅(qū)動,后者則是由一個標(biāo)量輸出模塊信號驅(qū)動,為了表明S函數(shù)函數(shù)模塊的輸入是動態(tài)的,兩個S函數(shù)模塊是完全相同的Simul
40、ink自適應(yīng)地使用合適的尺寸來調(diào)用函數(shù)。類似地,若其它模塊屬性如輸出變量數(shù)和狀態(tài)數(shù)也被指定為動態(tài)尺寸的,Simulink將會定義這些變量與輸入變量同維。圖圖7.7.3 同一個模型中使用同一個同一個模型中使用同一個S函數(shù)模塊的兩種情況函數(shù)模塊的兩種情況 (3) 采樣時間的設(shè)置與采樣延遲采樣時間的設(shè)置與采樣延遲M文件S函數(shù)和C語言S函數(shù)都在指定S函數(shù)的運(yùn)行時間上有高度的自適應(yīng)度。Simulink為采樣時間提供了下面的幾種選著。 連續(xù)采樣時間連續(xù)采樣時間:適用于具有連續(xù)狀態(tài)和非采樣過零點(diǎn)的S函數(shù)。這種S函數(shù)的輸出按最小時間步改變。 連續(xù)但固定最小步長的采樣時間連續(xù)但固定最小步長的采樣時間:適用于需要
41、在每一個主仿真時間步執(zhí)行,但在最小仿真步內(nèi)值不改變的。 離散采樣時間離散采樣時間:若S函數(shù)得行為發(fā)生具有離散時間間隔的函數(shù),用戶可以定義一個采樣時間來規(guī)定Simulink何時調(diào)用函數(shù)。而且用戶還可以定義一個延遲時間offset來延遲采樣點(diǎn),但offset的值不能超過采樣周期。若用戶定義了一個離散采樣時間,則Simulink就會在所定義的每個采樣點(diǎn)調(diào)用S函數(shù)的mdlOutpit和mdlUpdate方法。 可變采樣時間可變采樣時間:相鄰采樣點(diǎn)的時間間隔可變得離散采樣時間。在這種采樣時間的情況下,S函數(shù)要在每一步仿真的開始,計(jì)算下一個采樣點(diǎn)的時刻。 繼承采樣時間繼承采樣時間:在有些情況下,S函數(shù)模塊
42、自身沒有特定的采樣時間,它本身的狀態(tài)是連續(xù)的還是離散的完全取決于系統(tǒng)中的其它模塊。此時,該S函數(shù)模塊的采樣時間屬性可以設(shè)為繼承。例如gain模塊就是一個繼承輸入信號采樣時間的例子。一般,一個模塊可以從以下幾個方式來繼承采樣時間: 繼承驅(qū)動模塊的采樣時間; 繼承目標(biāo)模塊的采樣時間; 繼承系統(tǒng)中最快的采樣時間。7.7.4 S函數(shù)動畫函數(shù)動畫基于S函數(shù)地動畫就是一個由沒有狀態(tài)函數(shù)、沒有輸出變量的S函數(shù)生成的動畫。因此它們只能作常規(guī)顯示。這種S函數(shù)有兩個主要部分:初始化部分初始化部分和更新部分更新部分。 在初始化過程中要創(chuàng)建圖形窗口及動畫對象; 在更新過程中,動畫對象的屬性將作為S函數(shù)模塊的輸入函數(shù),
43、且它的變化導(dǎo)致動畫對象的運(yùn)動可能會以其它形式變化。(1) 動畫的初始化S函數(shù)動畫的初始化語句包括S函數(shù)的初始化和圖形的初始化。采樣時間應(yīng)設(shè)置為較小的數(shù)值以便動畫可以看起來更加連續(xù)。但同時也不能太小,因?yàn)槟菚沟梅抡孢^程運(yùn)行起來太慢。首先需要檢驗(yàn)與當(dāng)前S函數(shù)模塊相聯(lián)系的動畫圖形是否已打開。這里使用的方法是將當(dāng)前模塊的路徑保存到圖形的UserData參數(shù)中。此時使用gcd函數(shù)是一種比較安全的方法,因?yàn)樵赟函數(shù)的執(zhí)行過程中,gcd總會返回S函數(shù)模塊的路徑。完成此任務(wù)的MATLAB命令可為如下形式: if(findobj(UserData,gcb) % 若模型已經(jīng)打開,則不作任何事 else % 初始
44、化圖形 end其中的初始化圖形語句可由figure命令實(shí)現(xiàn),例如 h_fig=figure(Position,x_pos,y_pos,width,height然后,將當(dāng)前S函數(shù)模塊的路徑保存到圖形UserData中,這樣對圖形的存在性檢驗(yàn)才會正常工作。下面的語句可以用來設(shè)置UserData: set(h_fig,UserData,gcb);使用MATLAB繪圖命令繪制動畫圖形。接著保存這些圖形元素的句柄。例如,要繪制由向量x_array和y_array定義的曲線,使用下面的語句: hdl=plot(x_array,y_array);圖形初始化的最后一步是保存這些仿真元素的句柄。這里使用的方法是
45、將這些元素成組地保存到一個MATLAB變量中,并把此變量保存到S函數(shù)模塊的UserData中。UserData中可以保存MATLAB的任何變量,包括單元數(shù)組合結(jié)構(gòu)。假設(shè)要繪制兩個圖形元素的動畫,而它們的句柄名分別為hd1和hd2,下面的語句會把它們保存到一個結(jié)構(gòu)中。 t_data.hd1=hd1; t_data.hd2=hd2; set_param(gcd,UserData,t_data);(2) 動畫的更新動畫的更新由于設(shè)置采樣時間為正數(shù),所以動畫S函數(shù)可以被看成是離散模塊。Simulink將以flag=2在采樣時間執(zhí)行S函數(shù)。更新函數(shù)會從S函數(shù)模塊UserData中讀取即將改變得圖形對象的
46、句柄。例如,如果句柄以結(jié)構(gòu)變量的形式儲存,則它們可以寫成如下形式。 T_data=get_param(gcd,UserData); hd1=t_data.hd1; hd2=t_data.hd2;然后計(jì)算改變得對象屬性的新值,并使用set命令更新屬性。 Set(handle,propertyName,propertyValue);其中handle為對象的句柄,propertyName為有即將改變得對象屬性的對象名構(gòu)成的MATLAB字符串。propertyValue為新的屬性值。例7.7.1 在本例中,將創(chuàng)建一個在半球形槽內(nèi)往復(fù)滾動的圓盤的動畫。分析:假設(shè)圓盤在槽內(nèi)做無滑動的滾動,則系統(tǒng)的運(yùn)動方程
47、為)(5.1sinrRg 2 .32, 2,12grRg其中:,為重力加速度,和的動力學(xué)關(guān)系為rrR 圖7.7.4為此系統(tǒng)運(yùn)動方程的Simulink模型,它用一個動畫S函數(shù)模塊來顯示圓盤運(yùn)動。 S函數(shù)為一個M文件,其程序代碼如下,function sys,x0,str,ts = s_anm81s(t,x,u,flag)% S-file animation example 1% This example demonstrates buidling an animation % using a single S-file with no callbacks.% Based on sfuntmpl.
48、m, supplied with SIMULINK% Copyright (c) 1990-96 by The MathWorks, Inc.% switch flag, case 0, % Initialization sys,x0,str,ts=mdlInitializeSizes; case 1, % Derivatives sys=mdlDerivatives(t,x,u); case 2, sys=mdlUpdate(t,x,u); case 3, sys=mdlOutputs(t,x,u); % Compute output vector case 4, % Compute tim
49、e of next sample sys=mdlGetTimeOfNextVarHit(t,x,u); case 9, % Finished. Do any needed sys=mdlTerminate(t,x,u); otherwise % Invalid input error(Unhandled flag = ,num2str(flag);end%*%* mdlInitializeSizes * %*function sys,x0,str,ts=mdlInitializeSizes()% Return the sizes of the system vectors, initial %
50、 conditions, and the sample times and offets.sizes = simsizes; % Create the sizes structuresizes.NumContStates = 0;sizes.NumDiscStates = 0;sizes.NumOutputs = 0;sizes.NumInputs = 1;sizes.DirFeedthrough = 0; sizes.NumSampleTimes = 1;sys = simsizes(sizes); x0 = ; % There are no statesstr = ; % str is a
51、lways an empty matrix % Update the figure every 0.25 sects = 0.25 0; %initialize the array of sample times. % Initialize the figure% The handles of the disk and index mark are stored % in the blocks UserData. if(findobj(UserData,gcb) % Figure is open, do nothingelse h_fig = figure(Position,200 200 4
52、00 300, . MenuBar,none,NumberTitle,off, . Resize,off, . Name,gcs, Rolling Disk) ; set(h_fig,UserData,gcb) ; % Save name of current block % in the figures UserData. % This is used to detect % that a rolling disk figure % is already open for the % current block, so that % only one instance of the % fi
53、gure is open at a time % for a given instance of the % block. r = 2 ; R = 12 ; q = r ; thp = 0:0.2:pi ; xp = R*cos(thp); yp = -R*sin(thp) ; xp = xp,-R,-(R+q),-(R+q),(R+q), (R+q),R ; yp = yp,0,0,-(R+q),-(R+q),0,0 ; cl_x = 0,0 ; cl_y = 0,-R ; % Make the disk thp = 0:0.3:2.3*pi ; xd = r*cos(thp); yd =
54、r*sin(thp) ; hd = fill(xp,yp,0.85,0.85,0.85); % Draw trough hold on ; % So it wont get erased set(hd,erasemode,none); axis(equal);axis(off); hd0 = plot(cl_x,cl_y,k-); % Draw the centerline set(hd0,erasemode,none); % During this initialization pass, create the disk % (hd2) and the index mark (hd3). t
55、heta = 0 ; xc = (R-r)*sin(theta); % Find center of disk yc = - (R-r)*cos(theta) ; psi = theta*(R-r)/r ; xm_c = r*sin(psi) ; % Relative position of index mark ym_c = r*cos(psi) ; xm = xc + xm_c ; % Translate mark ym = yc + ym_c ;hd2 = fill(xd+xc, yd+yc, . 0.85,0.85,0.85) ; % Draw disk and markhd3 = p
56、lot(xc,xm,yc,ym,k-); set_param(gcb,UserData,hd2,hd3) ;End%*%* mdlDerivatives *%*function sys=mdlDerivatives(t,x,u)% Compute derivatives of continuous statessys = ; % Empty since no continuous states%*%* mdlUpdate *%*function sys=mdlUpdate(t,x,u)% Compute update for discrete states.sys = ; % Empty since this model has no states.% Update the figurer = 2 ; R = 12 ;q = r ;userdat = get_param(gcb,UserData) ;hd
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 宜賓市荒山土地承包合同范本
- 動漫作品授權(quán)合作合同范本
- 企業(yè)用人正式合同范例
- 淺析京劇發(fā)聲與民歌唱法美聲唱法的關(guān)系
- 加盟押金店合同范例
- 2025年度市政道路施工建設(shè)投資合作協(xié)議
- MW光伏電站項(xiàng)目EC總承包合同范本
- 三方合租協(xié)議合同范本
- 制砂機(jī)租賃合同范本
- 保險內(nèi)勤銷售合同范例
- 餐飲服務(wù)與管理(高職)PPT完整全套教學(xué)課件
- 成人學(xué)士學(xué)位英語1000個高頻必考詞匯匯總
- 2023年菏澤醫(yī)學(xué)??茖W(xué)校單招綜合素質(zhì)模擬試題及答案解析
- 常見食物的嘌呤含量表匯總
- 人教版數(shù)學(xué)八年級下冊同步練習(xí)(含答案)
- SB/T 10752-2012馬鈴薯雪花全粉
- 2023年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招(英語)試題庫含答案解析
- 濕型砂中煤粉作用及檢測全解析
- 積累運(yùn)用表示動作的詞語課件
- 機(jī)動車登記證書英文證書模板
- 第8課《山山水水》教學(xué)設(shè)計(jì)(新人教版小學(xué)美術(shù)六年級上冊)
評論
0/150
提交評論