動(dòng)態(tài)系統(tǒng)建模仿真_第1頁
動(dòng)態(tài)系統(tǒng)建模仿真_第2頁
動(dòng)態(tài)系統(tǒng)建模仿真_第3頁
動(dòng)態(tài)系統(tǒng)建模仿真_第4頁
動(dòng)態(tài)系統(tǒng)建模仿真_第5頁
已閱讀5頁,還剩199頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rè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ù)雜時(shí),可以通過把多個(gè)模塊組合在子系統(tǒng) 內(nèi)的方式來簡化模型的外觀。利用子系統(tǒng)創(chuàng)建模型有如下優(yōu)點(diǎn): 減少了模型窗口中顯示的模塊數(shù)目,從而使模型外觀結(jié)構(gòu)更清晰,增 強(qiáng)了模型的可讀性; 在簡化模型外觀結(jié)構(gòu)圖的基礎(chǔ)上,保持了各模塊之間的函數(shù)關(guān)系; 可以建立層級方塊圖,Subsystem模塊是一個(gè)層級,組成子系統(tǒng)的 其他模塊在另一層上。 9.1.1 Simulink子系統(tǒng)定義 1虛擬子系統(tǒng) 虛擬子系統(tǒng)在模型中提供了圖形化的層級顯示。它簡化了模型的外觀, 但并不影響模型的執(zhí)行,在

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

3、號大于零時(shí)才 會(huì)執(zhí)行。用戶可以通過在子系統(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)的每個(gè)輸出端口 配置為保持輸出或重置輸出。 (3) 觸發(fā)子系統(tǒng)(Triggered Subsystem)。觸發(fā)子系統(tǒng)只有在驅(qū)動(dòng) 子系統(tǒng)觸發(fā)端口的信號的上升沿或下降沿到來時(shí)才會(huì)執(zhí)行,觸發(fā)信號沿的 方向由Trigger端口模塊中的Trigger type參數(shù)決定。Simulink限制放 置在觸發(fā)子系

4、統(tǒng)內(nèi)的模塊類型,這些模塊不能明確指定采樣時(shí)間,也就是 說,子系統(tǒng)內(nèi)的模塊必須具有-1值的采樣時(shí)間,即繼承采樣時(shí)間,因?yàn)橛| 發(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模塊實(shí)現(xiàn)的。用戶可以利用Stateflow圖、函數(shù)調(diào)用生成器或 S-函數(shù)執(zhí)行函數(shù)調(diào)用子系統(tǒng)。Simulink限制放置在函數(shù)調(diào)用子系統(tǒng)內(nèi)的 模塊類型,這些模塊不能明確指定采樣時(shí)間,也

5、就是說,子系統(tǒng)內(nèi)的模塊 必須具有-1值的采樣時(shí)間,即繼承采樣時(shí)間,因?yàn)楹瘮?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ū)動(dòng)子系統(tǒng)觸發(fā)端口的信號的上升沿或下降 沿到來時(shí)才執(zhí)行,觸發(fā)邊沿的方向由Trigger端口模塊中的Trigger type參數(shù)決定。Simulink限制放置在觸發(fā)使能子系統(tǒng)內(nèi)的模塊類型,這 些模塊不能明確指定采樣時(shí)間,也就是說

6、,子系統(tǒng)內(nèi)的模塊必須具有-1值 的采樣時(shí)間,即繼承采樣時(shí)間,因?yàn)橛|發(fā)使能子系統(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)的交叉特性,其只能限制一個(gè)采樣時(shí)間,即連續(xù)采樣時(shí)間、離散采樣時(shí) 間或繼承采樣時(shí)間。Action子系統(tǒng)必須由If模塊或Switch Case模塊執(zhí) 行,與這些子系統(tǒng)模塊連接的所有Action子系統(tǒng)必須具有相同的采樣時(shí) 間。用戶可以通過在子系統(tǒng)內(nèi)放置Action端口模塊的方式來創(chuàng)建Action 子系統(tǒng),子系統(tǒng)圖標(biāo)會(huì)自動(dòng)反映執(zhí)

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

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

9、部指 定。用戶可以通過在子系統(tǒng)內(nèi)放置For Iterator模塊的方式來創(chuàng)建For- 子系統(tǒng)。For-子系統(tǒng)也可以通過選擇For Iterator模塊內(nèi)的參數(shù)來存取 當(dāng)前循環(huán)的次數(shù)。For-子系統(tǒng)在給定時(shí)間步內(nèi)限制循環(huán)次數(shù)上與While- 子系統(tǒng) 類似。 9.1.2 創(chuàng)建子系統(tǒng) 在Simulink中創(chuàng)建子系統(tǒng)的方法有兩種: 把Ports /* 設(shè)置第一個(gè)輸出分量 */ ssSetCallSystemOutput (S, 1);/* 設(shè)置第二個(gè)輸出分量 */ 在mdlInitializeSampleTimes函數(shù)中指定S-函數(shù)是否能夠使能或 關(guān)閉函數(shù)調(diào)用子系統(tǒng)。只有明確地指出使能和關(guān)閉函數(shù)調(diào)用子

10、系統(tǒng)的S-函 數(shù),才能重置系統(tǒng)的狀態(tài)和輸出,就如同函數(shù)調(diào)用子系統(tǒng)中的Trigger模 塊和Outport模塊所定義的那樣。例如: ssSetExplicitFCSSCtrl (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) %

11、 2 = 1) if (!ssCallSystemWithTid (S, 0, tid) /* Error occurred, which will be 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ù), Simuli

12、nk會(huì)控制這些輸出信號的數(shù)據(jù)類型。 9.3 控制流語句 控制流模塊用來在Simulink中執(zhí)行類似C語言的控制流語句??刂屏髡Z句包括: for; if-else; switch; while (包括while和do-while控制流)。 雖然以前所有的控制流語句都可以在Stateflow中實(shí)現(xiàn),但Simulink中控制 流模塊的作用實(shí)際是想為Simulink用戶提供一個(gè)滿足簡單邏輯要求的工具。 用戶可以用子系統(tǒng)和表9-1中Ports break; case u1=2 or u1=3: Action Subsystem2; break; default: Action Subsystem2; 構(gòu)

13、造Simulink中Switch控制流語句的步驟如下: (1) 在當(dāng)前系統(tǒng)中放置Switch Case模塊,并為Switch Case模塊 的變量輸入端口提供輸入數(shù)據(jù)。標(biāo)簽為u1的輸入端口的輸入數(shù)據(jù)是 switch控制流語句的變量,這個(gè)值決定了執(zhí)行的case條件,這個(gè)端口的 非整數(shù)輸入均被四舍五入。 (2) 打開Switch Case模塊的參數(shù)對話框,如圖9-44所示,在對話 框內(nèi)設(shè)置模塊的參數(shù)。 圖9-44 Case conditions:在該參數(shù)文本框內(nèi)輸入case值,每個(gè)case 值可以是一個(gè)整數(shù)或一個(gè)整數(shù)組,用戶也可以添加一個(gè)可選的缺省case值。 例如,輸入1,7,9,4,表示當(dāng)輸入

14、值是1時(shí),執(zhí)行輸出端口 case1;當(dāng)輸入值是7、9或4時(shí),執(zhí)行輸出端口case7 9 4。用戶也 可以用冒號指定case條件的執(zhí)行范圍,例如,輸入1:5,表示當(dāng)輸 入值是1、2、3、4或5時(shí),執(zhí)行輸出端口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í)間,若 設(shè)置為

15、-1,則表示使用繼承采樣時(shí)間。 (3) 向系統(tǒng)中添加Switch Case Action Subsystem子系統(tǒng)模塊。 Switch Case模塊的每個(gè)case端口與子系統(tǒng)連接,這些子系統(tǒng)內(nèi)包含 Action Port模塊,當(dāng)在子系統(tǒng)內(nèi)放置Action Port模塊時(shí),這些子系統(tǒng) 就成為原子子系統(tǒng),并帶有標(biāo)簽為Action的輸入端口。 (4) 把Switch Case模塊中的每個(gè)case輸出端口和缺省輸出端口與 Switch Case Action Subsystem子系統(tǒng)模塊中的Action端口相連,被 連接的子系統(tǒng)就成為一個(gè)獨(dú)立的case語句體。這些子系統(tǒng)的Action端口被 重新命名為

16、case,在仿真Switch控制流語句時(shí),從Switch Case模塊到 Switch Case Action Subsystem子系統(tǒng)模塊的Action信號線會(huì)由實(shí)線 變?yōu)樘摼€。 (5) 在每個(gè)Switch Case Action Subsystem子系統(tǒng)中添加執(zhí)行相應(yīng) case條件的Simulink模塊。在Switch Case Action Subsystem子系統(tǒng) 中的所有模塊必須與其驅(qū)動(dòng)模塊Switch Case模塊運(yùn)行在相同的速率上,做 到了這一點(diǎn),可以把每個(gè)模塊的采樣時(shí)間設(shè)置為-1(繼承采樣時(shí)間),或者都 設(shè)置為Switch Case模塊的采樣時(shí)間。 例9-6 Switch控制流

17、系統(tǒng)。 要求:利用Switch Case Action Subsystem子系統(tǒng)模塊建立一個(gè) 執(zhí)行如下算法的Switch控制流系統(tǒng): 2u1sin(t) 3y(t) 1u1sin(t) 2y(t) 0u1sin(t)y(t) 求解: 按照系統(tǒng)要求,輸入的控制信號可以選擇為梯形波,這里可以利用Signal Builder模塊創(chuàng)建波形。 根據(jù)系統(tǒng)要求選擇的Simulink模塊如下: Sources模塊庫中的Signal Builder模塊和Sine Wave模塊; Ports iteration_number = 0; cond = (max_sum 0); while (cond != 0) i

18、teration_number = iteration_number + 1; sum = sum + iteration_number; if (sum max_sum OR iteration_number max_iterations) cond = 0; 例9-7 利用Newton法求取非線性方程。 要求:利用Newton迭代法求取非線性方程 的根,直到滿足|f(x)|10-8為止。 求解: 牛頓迭代公式為 )( )( 1 n n nn xf xf xx xxxxf)cos()sin()( 從圖 9-49 中可以看到,在幾何意義上,)( 1 x f 是曲線 f (x)在 x = x1點(diǎn)

19、處的切線斜率,即 21 1 1 )( )( xx xf xf 因此,如果給出x1和f(x),先找到f(x1),再通過f(x1)作切線,則可 求出x2,即 )( )( 1 1 12 xf xf xx Newtons Method 子系統(tǒng)是主子系統(tǒng),While Iterator 模塊中的最大循 環(huán)次數(shù) Maximum number of iterations為 5,While loop type 參數(shù)為 do -while,States when starting 參數(shù)為 reset。給出變量 x 的初值 x0,x0由 Memory 模塊中的初始條件 Initial condition 參數(shù)給定,

20、這里設(shè)置為 10, 然后利用迭代公式求取 x1值, 這就是牛頓的一步迭代過程,這個(gè)求解過程 在 Newton Subsystem 子系統(tǒng)內(nèi)執(zhí)行。Newton Subsystem 子系統(tǒng)計(jì)算當(dāng)前 x1值時(shí)的f(x1)和)( 1 x f 值, 并把f (x1)作為Abs模塊的輸入, 該模塊求取f (x1) 的絕對值,并與 Constant 模塊中的常值 1.0e-8進(jìn)行比較,如果不滿足 |f(x)|10-8,而且迭代次數(shù) n小于給定的最大值 5,則繼續(xù)迭代;如果滿足 |f(x)|0); while (cond!=0) iteration_number = iteration_number + 1;

21、 f(x) = sin (initial_x)+cos (initial_x)-x; df(x) = con (initial_x)-sin (initial_x)-1; x = initial_x-f(x)/df(x); if (iteration_number5 OR abs(initial_x)10e-8) cond = 0; initial_x = x; 9.3.4 For控制流語句 Ports iterations = 20; sum_increment = 10; for (i = 0; i iterations; i+) sum = sum + sum_increment; 例9

22、-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é)的角度來看,這個(gè)公式很容易求得,即Sum = (N*(N+1)/2。利用For子系統(tǒng)建立的Simulink模型如圖9-55所示。 模型中添加了一個(gè)Fcn模塊,該

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

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

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

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

27、使用sin模塊只是 在Assignment模塊和For Iterator模塊結(jié)合使用中作為改變矩陣中每 個(gè)分量的一個(gè)例子。 9.3.5 Stateflow圖和控制流語句的比較 如果Simulink模型中包含Stateflow圖,那么在仿真運(yùn)行時(shí), Stateflow圖與模塊一樣被執(zhí)行。模型中的Stateflow模塊通過輸入和輸出 信號與其他模塊相連,利用這種連接方式,Stateflow和Simulink共享數(shù) 據(jù),并對模型和Stateflow圖之間傳遞的事件進(jìn)行響應(yīng)。 Stateflow已經(jīng)具有Simulink控制流語句的邏輯功能,它可以依條件 調(diào)用Function-Call子系統(tǒng)或循環(huán)調(diào)用F

28、unction-Call子系統(tǒng)。但是,由于 Stateflow提供了大量繁雜的邏輯功能,如果用戶的要求很簡單,可能會(huì)發(fā) 現(xiàn)只使用Simulink控制流模塊的功能就可以充分滿足用戶要求。此外,控 制流語句也有如下一些優(yōu)勢: 1采樣時(shí)間 Stateflow可以調(diào)用的Function-Call子系統(tǒng)是觸發(fā)子系統(tǒng),觸發(fā)子 系統(tǒng)從調(diào)用模塊中繼承采樣時(shí)間。但是,在if-else和switch控制流語句 中使用的Action子系統(tǒng),以及構(gòu)成While和For控制流語句的While和 For子系統(tǒng)卻都是使能子系統(tǒng),使能子系統(tǒng)不依賴于調(diào)用模塊,而是有它 們自己的采樣時(shí)間。這樣,它就允許用戶在循環(huán)子系統(tǒng)內(nèi)使用比

29、Function-Call子系統(tǒng)內(nèi)更多種類的模塊。 2重新使能時(shí)的狀態(tài)設(shè)置 當(dāng)Action、For和While子系統(tǒng)被重新使能時(shí),Simulink的控制流 語句模塊允許用戶保持或重置(即重置為初始值)這些子系統(tǒng)的狀態(tài)值。 用戶也可以把Statefolw和控制流模塊結(jié)合在一起使用。下面給出的 例子說明了如何把這兩部分結(jié)合在一起使用。 3Stateflow與If-Else或Switch子系統(tǒng)結(jié)合 在圖9-58所示的模型中,Stateflow在Stateflow數(shù)據(jù)對象中放置 了一個(gè)變化值,Simulink的If控制流語句用這個(gè)數(shù)據(jù)進(jìn)行條件判斷。在 這個(gè)模型中,控制信號提供給Switch Case模

30、塊,該模塊利用控制值選擇 執(zhí)行哪一個(gè)Case子系統(tǒng)。 圖9-58 Stateflow與While子系統(tǒng)結(jié)合:在圖9-59中,Stateflow計(jì)算數(shù) 據(jù)對象的值,這個(gè)數(shù)據(jù)對象可用作do-while模式下While Iterator模 塊的條件輸入。 While Iterator模塊對它的主子系統(tǒng)進(jìn)行循環(huán)控制,該主子系統(tǒng)包 含Stateflow Chart模塊。在do-while模式下,While模塊在第一次 循環(huán)值(=1)時(shí)執(zhí)行,在這次執(zhí)行中,Stateflow chart被喚醒,并設(shè)置 While Iterator模塊中使用的數(shù)據(jù)值,然后求取While Iterator模塊的 值,并作為下次

31、While循環(huán)的條件。 在圖9-60中,While模塊設(shè)置在while模式下,在這個(gè)模式下, While Iterator模塊必須有輸入到模塊初始條件端口的輸入信號,以便 執(zhí)行模塊的第一次循環(huán)值。這個(gè)值必須來自于While子系統(tǒng)的外部。 如果初始條件為真,那么While Iterator模塊會(huì)喚醒Stateflow chart,并執(zhí)行完Stateflow,在此期間,Stateflow chart設(shè)置條件數(shù) 據(jù),While Iterator模塊的條件端口利用條件進(jìn)行下一次循環(huán)。 圖9-59 圖9-60 (3) 觸發(fā)子系統(tǒng)(Triggered Subsystem)。觸發(fā)子系統(tǒng)只有在驅(qū)動(dòng) 子系統(tǒng)觸發(fā)端口的信號的上升沿或下降沿到來時(shí)才會(huì)執(zhí)行,觸發(fā)信號沿的 方向由Trigger端口模塊中的Trigger type參數(shù)決定。Simulink限制放 置在觸發(fā)子系統(tǒng)內(nèi)的模塊類型,這些模塊不能明確指定采樣時(shí)間,也就是 說,子系統(tǒng)內(nèi)的模塊必須具有-1值的采樣時(shí)間,即繼承采樣時(shí)間,因?yàn)橛| 發(fā)子系統(tǒng)的執(zhí)行具有非周期性,即子系統(tǒng)內(nèi)模塊的執(zhí)行是不規(guī)則的。用戶 可以通過在子系統(tǒng)內(nèi)放置Trigger模塊的方式來創(chuàng)建觸發(fā)子系統(tǒng)。 Action子系統(tǒng)至多執(zhí)行一次,利用Output端口模塊的Output when disabled參數(shù),Action子系統(tǒng)也可以控制是否保持

溫馨提示

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

最新文檔

評論

0/150

提交評論