9.1 Simulink流控制分類
simulink中流控制時通過自帶的模塊實現的,包括If else、Switch、For和While4個種類。
9.2 While流控制
while
如果條件為真,那么子系統在當前的步長內反復執行,直到達到最大循環次數或者判斷條件為假。
參數標簽 | 功能說明 |
Maximum number of iteration | 最大循環次數 |
While loop type | 循環類型:while/do while |
States when starting | Held(保持上次狀態)/reset(狀態恢復默認值) |
Show iteration number port | 勾選則多出一個輸出循環次數的輸出端口 |
Output data type | 結合上一個參數使用,為輸出循環次數設置數據類型 |
階躍信號1s階躍,最大循環次數保持默認值5。
第一個步長計數器輸出結果為4,因為在第一個循環時,模塊執行一次(初始化)輸出Unit Delya的初始值為0,然后再執行4次。
在計數達到99時,再執行2次不滿足小於等於100的條件,退出循環。
do-while
仿真進行時,子系統內模塊首先要執行一次,然后再去檢查cond輸入條件是否為真,如果為真則繼續循環,直到cond條件不滿足時退出當前步長的仿真,進入下一個步長。
沒有IC輸入,僅需要cond條件即可反復循環。
9.3 For循環控制
參數標簽 | 功能說明 |
States when starting | 每次循環時保持子系統內的狀態或恢復默認 |
Iteration limit source | 循環次數選擇從內部限制或外部輸入限制 |
Iteration limit | 內部限制時輸入的循環次數 |
Set next i(iteration variable) externally | 通過外部輸入當前循環的循環變量值 |
Show iteration variable | 選擇是否輸出循環變量值 |
Index mode | 循環變量的初始值從0/1開始 |
Iteration variable data type | 循環變量輸出時的數據類型 |
示例:循環次數由內部決定,不輸出循環變量的值。
示例:循環次數由外部輸入,且輸出循環變量的值。
雖然Sine Wave模塊本身輸出的時double信號,但接入For Iterator之后被強制轉化為整形數據,並取不超過其值的非負整數值。
示例:外部設定Next_i,即下一個循環例循環變量的初始值。
外部框圖同上。
9.4 If else控制
根據輸入u1判斷,如果滿足條件則從上支輸出信號,不滿足則從下支輸出信號,這2個信號再分別使能一個Action Subsystem,使用Merge模塊將所有If Action Subsystem的輸出集總,得到一個完整的邏輯輸出。If模塊的輸出/輸出端口可由用戶設定。
參數標簽 | 功能說明 |
Number of inputs | 輸入端口的數目 |
If expression | If分支的判斷條件 |
Elseif expression | Else分支的判斷條件, 如果期望多個elseif,之間用逗號分隔 |
Show else condition | 是否顯示Else分支的輸出Action信號 |
Enable zero-crossing detection | 使能過零檢測與否 |
If expression的條件表達式收到的限制比較大:
- 不支持+-*/和^等數學運算符號;
- 不支持邏輯關系運算符&&和||;
- 不支持數據類型函數,如int8,uint16。
If expression也好,Elseif experssion也好,后面都要跟着一個If Action Subsystem。
模型中Merge模塊的作用是將多個Action子系統的輸出合並到一個信號中,這些被合並的子系統需要具備一個條件:在某一個時刻,最多有一個子系統被使能計算,其他子系統是不計算的。
9.5 Switch Case控制
輸入u1如匹配case分支值得要求,則可以觸發次分支后所連接的Switch Case Action Subsystem。
參數標簽 | 功能說明 |
Case conditions | 通過元胞數組形式輸入分支判斷的值 |
Show default case | 勾選后會出現default分支 |
Enable zero-crossing detection | 勾選后使能過零檢測算法 |
參數Case condition要求必須使用元胞數組形式輸入,每個分支的case值以單獨的元胞數組形式輸入,並且數據類型必須是int32或者枚舉型。
每條case分支可以對應一個或多個數值,混合使用時,此參數最外層使用{ },內部使用[ ]將參數分組,如{3, [5 8]}表示當輸入為3時觸發case[3]所對應的子系統,當輸入為5或8時觸發case[5 8]所對應的子系統。
Switch Case模塊所能判斷的分支是離散的數據點,與if else區間連續的判斷不同。並且要求輸入數據、參數Case conditions等數據類型保持一致,長度保持在有符號32為整數范圍之內,不支持小數的輸入判斷。