本系列教程是根據孫忠潇編著的<<Simulink仿真及代碼生成技術入門到精通>>學習筆記。
目錄
Simulink仿真入門到精通(一) Simulink界面介紹
Simulink仿真入門到精通(二) Simulink子產品
Simulink仿真入門到精通(三) Simulink信号
Simulink仿真入門到精通(四) Simulink子系統
Simulink仿真入門到精通(五) Simulink模型的仿真
Simulink仿真入門到精通(六) Simulink模型儲存為圖檔
Simulink仿真入門到精通(七) Simulink的回調函數
Simulink仿真入門到精通(八) M語言對Simulink模型的自動化操作及配置
Simulink仿真入門到精通(九) Simulink的流控制
Simulink仿真入門到精通(十) S函數
Simulink仿真入門到精通(十一) 子產品的封裝
Simulink仿真入門到精通(十二) Publish釋出M檔案
Simulink仿真入門到精通(十三) Simulink建立自定義庫
Simulink仿真入門到精通(十四) Simulink自定義環境
Simulink仿真入門到精通(十五) Simulink在流程工業中的仿真應用
Simulink仿真入門到精通(十六) Simulink基于模型設計的工業應用概述
Simulink仿真入門到精通(十七) Simulink代碼生成技術詳解
Simulink仿真入門到精通(十八) TLC語言
Simulink仿真入門到精通(十九) 總結回顧
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為整數範圍之内,不支援小數的輸入判斷。