simulink動態(tài)系統(tǒng)建模仿真 第9章.ppt_第1頁
simulink動態(tài)系統(tǒng)建模仿真 第9章.ppt_第2頁
simulink動態(tài)系統(tǒng)建模仿真 第9章.ppt_第3頁
simulink動態(tài)系統(tǒng)建模仿真 第9章.ppt_第4頁
simulink動態(tài)系統(tǒng)建模仿真 第9章.ppt_第5頁
已閱讀5頁,還剩191頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、,第9章 使用子系統(tǒng),9.1 創(chuàng)建子系統(tǒng) 9.2 創(chuàng)建條件執(zhí)行子系統(tǒng) 9.3 控制流語句,9.1 創(chuàng)建子系統(tǒng)當(dāng)用戶模型的結(jié)構(gòu)非常復(fù)雜時,可以通過把多個模塊組合在子系統(tǒng)內(nèi)的方式來簡化模型的外觀。利用子系統(tǒng)創(chuàng)建模型有如下優(yōu)點:減少了模型窗口中顯示的模塊數(shù)目,從而使模型外觀結(jié)構(gòu)更清晰,增強了模型的可讀性;在簡化模型外觀結(jié)構(gòu)圖的基礎(chǔ)上,保持了各模塊之間的函數(shù)關(guān)系;可以建立層級方塊圖,Subsystem模塊是一個層級,組成子系統(tǒng)的其他模塊在另一層上。,9.1.1 Simulink子系統(tǒng)定義1虛擬子系統(tǒng)虛擬子系統(tǒng)在模型中提供了圖形化的層級顯示。它簡化了模型的外觀,但并不影響模型的執(zhí)行,在模型執(zhí)行期間,Si

2、mulink會平鋪所有的虛擬子系統(tǒng),也就是在執(zhí)行之前就擴展子系統(tǒng)。這種擴展類似于編程語言,如C或C+中的宏操作。,2非虛擬子系統(tǒng)(1) 原子子系統(tǒng)(Atomic Subsystem)。原子子系統(tǒng)與虛擬子系統(tǒng)的主要區(qū)別在于,原子子系統(tǒng)內(nèi)的模塊作為一個單個單元執(zhí)行,Simulink中的任何模塊都可以放在原子子系統(tǒng)內(nèi),包括以不同速率執(zhí)行的模塊。用戶可以在虛擬子系統(tǒng)內(nèi)通過選擇Treat as atomic unit選項來創(chuàng)建原子子系統(tǒng)。,(2) 使能子系統(tǒng)(Enabled Subsystem)。使能子系統(tǒng)的動作類似原子子系統(tǒng),不同的是它只有在驅(qū)動子系統(tǒng)使能端口的輸入信號大于零時才會執(zhí)行。用戶可以通過在

3、子系統(tǒng)內(nèi)放置Enable模塊的方式來創(chuàng)建使能子系統(tǒng),并通過設(shè)置使能子系統(tǒng)內(nèi)Enable端口模塊中的States when enabling參數(shù)來配置子系統(tǒng)內(nèi)的模塊狀態(tài)。此外,利用Outport輸出模塊的Output when disabled參數(shù)可以把使能子系統(tǒng)內(nèi)的每個輸出端口配置為保持輸出或重置輸出。,(3) 觸發(fā)子系統(tǒng)(Triggered Subsystem)。觸發(fā)子系統(tǒng)只有在驅(qū)動子系統(tǒng)觸發(fā)端口的信號的上升沿或下降沿到來時才會執(zhí)行,觸發(fā)信號沿的方向由Trigger端口模塊中的Trigger type參數(shù)決定。Simulink限制放置在觸發(fā)子系統(tǒng)內(nèi)的模塊類型,這些模塊不能明確指定采樣時間,也

4、就是說,子系統(tǒng)內(nèi)的模塊必須具有-1值的采樣時間,即繼承采樣時間,因為觸發(fā)子系統(tǒng)的執(zhí)行具有非周期性,即子系統(tǒng)內(nèi)模塊的執(zhí)行是不規(guī)則的。用戶可以通過在子系統(tǒng)內(nèi)放置Trigger模塊的方式來創(chuàng)建觸發(fā)子系統(tǒng)。,(4) 函數(shù)調(diào)用子系統(tǒng)(Function-Call Subsystem)。函數(shù)調(diào)用子系統(tǒng)類似于用文本語言(如M語言)編寫的S-函數(shù),只不過它是通過Simulink模塊實現(xiàn)的。用戶可以利用Stateflow圖、函數(shù)調(diào)用生成器或S-函數(shù)執(zhí)行函數(shù)調(diào)用子系統(tǒng)。Simulink限制放置在函數(shù)調(diào)用子系統(tǒng)內(nèi)的模塊類型,這些模塊不能明確指定采樣時間,也就是說,子系統(tǒng)內(nèi)的模塊必須具有-1值的采樣時間,即繼承采樣時間

5、,因為函數(shù)調(diào)用子系統(tǒng)的執(zhí)行具有非周期性。用戶可以通過把Trigger端口模塊放置在子系統(tǒng)內(nèi),并將Trigger type參數(shù)設(shè)置為function-call的方式來創(chuàng)建函數(shù)調(diào)用子系統(tǒng)。,(5) 觸發(fā)使能子系統(tǒng)(Enabled and Triggered Subsystem)。觸發(fā)使能子系統(tǒng)在系統(tǒng)被使能且驅(qū)動子系統(tǒng)觸發(fā)端口的信號的上升沿或下降沿到來時才執(zhí)行,觸發(fā)邊沿的方向由Trigger端口模塊中的Trigger type參數(shù)決定。Simulink限制放置在觸發(fā)使能子系統(tǒng)內(nèi)的模塊類型,這些模塊不能明確指定采樣時間,也就是說,子系統(tǒng)內(nèi)的模塊必須具有-1值的采樣時間,即繼承采樣時間,因為觸發(fā)使能子系

6、統(tǒng)的執(zhí)行具有非周期性。用戶可以通過把Trigger端口模塊和Enable模塊放置在子系統(tǒng)內(nèi)的方式來創(chuàng)建觸發(fā)使能子系統(tǒng)。,(6) Action子系統(tǒng)。Action子系統(tǒng)具有使能子系統(tǒng)和函數(shù)調(diào)用子系統(tǒng)的交叉特性,其只能限制一個采樣時間,即連續(xù)采樣時間、離散采樣時間或繼承采樣時間。Action子系統(tǒng)必須由If模塊或Switch Case模塊執(zhí)行,與這些子系統(tǒng)模塊連接的所有Action子系統(tǒng)必須具有相同的采樣時間。用戶可以通過在子系統(tǒng)內(nèi)放置Action端口模塊的方式來創(chuàng)建Action子系統(tǒng),子系統(tǒng)圖標會自動反映執(zhí)行Action子系統(tǒng)的模塊類型,也就是If模塊或Switch Case模塊。,Action

7、子系統(tǒng)至多執(zhí)行一次,利用Output端口模塊的Output when disabled參數(shù),Action子系統(tǒng)也可以控制是否保持輸出值,這是與使能子系統(tǒng)類似的地方。Action子系統(tǒng)與函數(shù)調(diào)用子系統(tǒng)類似,因為函數(shù)調(diào)用子系統(tǒng)在任何給定的時間步內(nèi)可以執(zhí)行多于一次,而Action子系統(tǒng)至多執(zhí)行一次。這種限制就表示Action子系統(tǒng)內(nèi)可以放置非周期性的模塊,而且也可以控制狀態(tài)和輸出的行為。,(7) While-子系統(tǒng)。While-子系統(tǒng)在每個時間步內(nèi)可以循環(huán)多次,循環(huán)的次數(shù)由While Iterator模塊中的條件參數(shù)控制。用戶可以通過在子系統(tǒng)內(nèi)放置While Iterator模塊的方式來創(chuàng)建Whil

8、e-子系統(tǒng)。While-子系統(tǒng)與函數(shù)調(diào)用子系統(tǒng)相同的地方在于它在給定的時間步內(nèi)可以循環(huán)多次,不同的是它沒有獨立的循環(huán)指示器(如Stateflow圖),而且,通過選擇While Iterator模塊中的參數(shù),While-子系統(tǒng)還可以存取循環(huán)次數(shù),通過設(shè)置States when starting參數(shù)還可以控制當(dāng)子系統(tǒng)開始執(zhí)行時狀態(tài)是否重置。,(8) For-子系統(tǒng)。For-子系統(tǒng)在每個模型時間步內(nèi)可執(zhí)行固定的循環(huán)次數(shù),循環(huán)次數(shù)可以由外部輸入給定,或者由For Iterator模塊內(nèi)部指定。用戶可以通過在子系統(tǒng)內(nèi)放置For Iterator模塊的方式來創(chuàng)建For-子系統(tǒng)。For-子系統(tǒng)也可以通過選擇

9、For Iterator模塊內(nèi)的參數(shù)來存取當(dāng)前循環(huán)的次數(shù)。For-子系統(tǒng)在給定時間步內(nèi)限制循環(huán)次數(shù)上與While-子系統(tǒng)類似。,9.1.2 創(chuàng)建子系統(tǒng)在Simulink中創(chuàng)建子系統(tǒng)的方法有兩種:把Ports /* 設(shè)置第一個輸出分量 */ssSetCallSystemOutput (S, 1);/* 設(shè)置第二個輸出分量 */,在mdlInitializeSampleTimes函數(shù)中指定S-函數(shù)是否能夠使能或關(guān)閉函數(shù)調(diào)用子系統(tǒng)。只有明確地指出使能和關(guān)閉函數(shù)調(diào)用子系統(tǒng)的S-函數(shù),才能重置系統(tǒng)的狀態(tài)和輸出,就如同函數(shù)調(diào)用子系統(tǒng)中的Trigger模塊和Outport模塊所定義的那樣。例如:ssSetE

10、xplicitFCSSCtrl (S, 1);這條語句表示在mdlInitializeSampleTimes函數(shù)中指定S-函數(shù)能夠使能和關(guān)閉函數(shù)調(diào)用子系統(tǒng),這樣,S-函數(shù)在使用ssCallSystemWithTid函數(shù)執(zhí)行子系統(tǒng)前必須調(diào)用ssEnableSystemWithTid。,在mdlOutputs或mdlUpdate的S-函數(shù)程序中執(zhí)行子系統(tǒng)。例如:static void mdlOutputs ()if (int)*uPtrs0) % 2 = 1) if (!ssCallSystemWithTid (S, 0, tid) /* Error occurred, which will be

11、 reported by Simulink*/return; else if (!ssCallSystemWithTid (S, 1, tid) /* Error occurred, which will be reported by Simulink*/return;,需要注意的是,在發(fā)出函數(shù)調(diào)用信號的S-函數(shù)輸出中不要用ssSetOutputPortDataType或ssGetOutputPortDataType函數(shù),Simulink會控制這些輸出信號的數(shù)據(jù)類型。,9.3 控制流語句控制流模塊用來在Simulink中執(zhí)行類似C語言的控制流語句??刂屏髡Z句包括:for;if-else;swi

12、tch;while (包括while和do-while控制流)。雖然以前所有的控制流語句都可以在Stateflow中實現(xiàn),但Simulink中控制流模塊的作用實際是想為Simulink用戶提供一個滿足簡單邏輯要求的工具。用戶可以用子系統(tǒng)和表9-1中Ports break; case u1=2 or u1=3: Action Subsystem2; break; default: Action Subsystem2;,構(gòu)造Simulink中Switch控制流語句的步驟如下:(1) 在當(dāng)前系統(tǒng)中放置Switch Case模塊,并為Switch Case模塊的變量輸入端口提供輸入數(shù)據(jù)。標簽為u1的輸

13、入端口的輸入數(shù)據(jù)是switch控制流語句的變量,這個值決定了執(zhí)行的case條件,這個端口的非整數(shù)輸入均被四舍五入。(2) 打開Switch Case模塊的參數(shù)對話框,如圖9-44所示,在對話框內(nèi)設(shè)置模塊的參數(shù)。,圖9-44, Case conditions:在該參數(shù)文本框內(nèi)輸入case值,每個case值可以是一個整數(shù)或一個整數(shù)組,用戶也可以添加一個可選的缺省case值。例如,輸入1,7,9,4,表示當(dāng)輸入值是1時,執(zhí)行輸出端口case1;當(dāng)輸入值是7、9或4時,執(zhí)行輸出端口case7 9 4。用戶也可以用冒號指定case條件的執(zhí)行范圍,例如,輸入1:5,表示當(dāng)輸入值是1、2、3、4或5時,執(zhí)行

14、輸出端口case1 2 3 4 5。 Show default case:選擇該復(fù)選框后,將在Switch Case模塊上顯示缺省的case輸出端口。如果所有的case條件均為否,則執(zhí)行缺省的case條件。, Enable zero crossing detection:選擇該復(fù)選框后,表示啟用過零檢測。 Sample time(-1 for inherited):指定模塊的采樣時間,若設(shè)置為-1,則表示使用繼承采樣時間。(3) 向系統(tǒng)中添加Switch Case Action Subsystem子系統(tǒng)模塊。Switch Case模塊的每個case端口與子系統(tǒng)連接,這些子系統(tǒng)內(nèi)包含Action

15、 Port模塊,當(dāng)在子系統(tǒng)內(nèi)放置Action Port模塊時,這些子系統(tǒng)就成為原子子系統(tǒng),并帶有標簽為Action的輸入端口。,(4) 把Switch Case模塊中的每個case輸出端口和缺省輸出端口與Switch Case Action Subsystem子系統(tǒng)模塊中的Action端口相連,被連接的子系統(tǒng)就成為一個獨立的case語句體。這些子系統(tǒng)的Action端口被重新命名為case,在仿真Switch控制流語句時,從Switch Case模塊到Switch Case Action Subsystem子系統(tǒng)模塊的Action信號線會由實線變?yōu)樘摼€。(5) 在每個Switch Case Ac

16、tion Subsystem子系統(tǒng)中添加執(zhí)行相應(yīng)case條件的Simulink模塊。在Switch Case Action Subsystem子系統(tǒng)中的所有模塊必須與其驅(qū)動模塊Switch Case模塊運行在相同的速率上,做到了這一點,可以把每個模塊的采樣時間設(shè)置為-1(繼承采樣時間),或者都設(shè)置為Switch Case模塊的采樣時間。,例9-6 Switch控制流系統(tǒng)。要求:利用Switch Case Action Subsystem子系統(tǒng)模塊建立一個執(zhí)行如下算法的Switch控制流系統(tǒng):,求解: 按照系統(tǒng)要求,輸入的控制信號可以選擇為梯形波,這里可以利用Signal Builder模塊創(chuàng)建

17、波形。,根據(jù)系統(tǒng)要求選擇的Simulink模塊如下:Sources模塊庫中的Signal Builder模塊和Sine Wave模塊;Ports iteration_number = 0;cond = (max_sum 0);while (cond != 0) iteration_number = iteration_number + 1; sum = sum + iteration_number; if (sum max_sum OR iteration_number max_iterations) cond = 0;,例9-7 利用Newton法求取非線性方程。 要求:利用Newton迭代

18、法求取非線性方程的根,直到滿足|f(x)|10-8為止。求解:牛頓迭代公式為,因此,如果給出x1和f(x),先找到f(x1),再通過f(x1)作切線,則可求出x2,即,圖9-50,在仿真參數(shù)對話框內(nèi)選擇變步長ode1(Euler)求解器,將Fixed step size參數(shù)設(shè)置為1,運行仿真,最后在Display模塊中顯示的結(jié)果值為-7.4e-014。這個模型相當(dāng)于執(zhí)行下列語句:,9.3.4 For控制流語句Ports iterations = 20;sum_increment = 10;for (i = 0; i iterations; i+) sum = sum + sum_increme

19、nt;,例9-8 利用For子系統(tǒng)或While子系統(tǒng)求取1N的累加和。要求:利用For子系統(tǒng)循環(huán)累加求取1N的累加和,即Sum = 1+2+3+N。求解:根據(jù)系統(tǒng)要求選擇的Simulink模塊如下:Sources模塊庫中的Constant模塊;Ports & Subsystems模塊庫中的For Iterator Subsytem模塊;Discrete模塊庫中的Unit Delay模塊;Sinks模塊庫中的Display模塊。,從數(shù)學(xué)的角度來看,這個公式很容易求得,即Sum = (N*(N+1)/2。利用For子系統(tǒng)建立的Simulink模型如圖9-55所示。模型中添加了一個Fcn模塊,該模塊

20、的表達式參數(shù)Expression為(u*(u+1)/2,這個模塊在模型中不起什么作用,只是用來驗證For子系統(tǒng)的循環(huán)結(jié)果。模型還有一個Data Type Conversion模塊,如果選擇模型窗口中Format菜單下的Port data types命令就會發(fā)現(xiàn),F(xiàn)or Iterator模塊輸出的是int32型數(shù)據(jù),而其驅(qū)動模塊的輸入數(shù)據(jù)類型卻是double型,因此添加了Data Type Conversion模塊進行數(shù)據(jù)類型轉(zhuǎn)換。,設(shè)置For Iterator模塊參數(shù)對話框中的State when starting參數(shù)為reset,Iteration limit source參數(shù)為extern

21、al,給定常值N為10,這是一個時間步內(nèi)循環(huán)變量的最大限制值。設(shè)置Unit Delay模塊中的Initial conditions為0,模塊當(dāng)前時間步的輸出是前一個時間步的輸入值。,圖9-55,在仿真參數(shù)對話框內(nèi)選擇定步長離散求解器,設(shè)置仿真時間為10個時間單位,定步長參數(shù)Fixed step size為1,這樣,仿真步數(shù)為11。運行仿真,從結(jié)果可以看到,Display模塊中顯示的是55,這與(N*(N+1)/2公式求得的結(jié)果相同。但是,如果把State when starting參數(shù)設(shè)置為held,那么在一個時間步內(nèi)循環(huán)10次,循環(huán)的累加結(jié)果為55,這個結(jié)果值不再改變,而是一直保持到下一個時

22、間步開始,這樣經(jīng)過11步仿真后最后的輸出結(jié)果就會是605。如果利用While控制流子系統(tǒng)執(zhí)行該任務(wù),則建立的系統(tǒng)模型如圖9-56所示,模型的運行結(jié)果與圖9-55中的模型相同。,圖9-56,用戶也可以把For Iterator模塊和Assignment模塊結(jié)合在一起使用,這樣可以在向量或矩陣內(nèi)重新賦值,從而更佳地執(zhí)行程序。圖9-57就是For Iterator模塊和Assignment模塊結(jié)合在一起使用的例子。,圖9-57,這個模型用包含Assignment模塊的For Iterator Subsystem子系統(tǒng)輸出sin值,輸入是25矩陣。模型的執(zhí)行過程如下:(1) 將一個25矩陣輸入到Sel

23、ector模塊和Assignment模塊。(2) Selector模塊用For Iterator模塊的當(dāng)前循環(huán)值指定的列位置把輸入矩陣變?yōu)?1矩陣。(3) 求取21矩陣的正弦值。(4) 將21矩陣的正弦值傳遞到Assignment模塊。(5) Assignment模塊用原25矩陣作為該模塊的一個輸入,并把21矩陣按循環(huán)值指定的列位置賦值回原矩陣。,在這個模型中,Assignment模塊參數(shù)對話框中指定的重新分配的行是1,2,因為原矩陣只有兩行,也可以指定-1值,也就是重新分配所有行。注意:sin模塊本身就可以求取矩陣的正弦值,這里使用sin模塊只是在Assignment模塊和For Itera

24、tor模塊結(jié)合使用中作為改變矩陣中每個分量的一個例子。,9.3.5 Stateflow圖和控制流語句的比較如果Simulink模型中包含Stateflow圖,那么在仿真運行時,Stateflow圖與模塊一樣被執(zhí)行。模型中的Stateflow模塊通過輸入和輸出信號與其他模塊相連,利用這種連接方式,Stateflow和Simulink共享數(shù)據(jù),并對模型和Stateflow圖之間傳遞的事件進行響應(yīng)。Stateflow已經(jīng)具有Simulink控制流語句的邏輯功能,它可以依條件調(diào)用Function-Call子系統(tǒng)或循環(huán)調(diào)用Function-Call子系統(tǒng)。但是,由于Stateflow提供了大量繁雜的邏輯功能,如果用戶的要求很簡單,可能會發(fā)現(xiàn)只使用Simulink控制流模塊的功能就可以充分滿足用戶要求。此外,控制流語句也有如下一些優(yōu)勢:,1采樣時間Stateflow可以調(diào)用的Function-Call子系統(tǒng)是觸發(fā)子系統(tǒng),觸發(fā)子系統(tǒng)從調(diào)用模塊中繼承采樣時間。但是,在if-else和switch控制流語句中使用的Action子系統(tǒng),以及構(gòu)成While和For控制流語句的While和For子系統(tǒng)卻都是使能子系統(tǒng),使能子系統(tǒng)不依賴于調(diào)用模塊,而是有它們自己的采樣時間。這樣,它就允許用戶在循環(huán)子系統(tǒng)內(nèi)使用比Functi

溫馨提示

  • 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

提交評論