天天看點

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

本系列教程是根據孫忠潇編著的<<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

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

如果條件為真,那麼子系統在目前的步長内反複執行,直到達到最大循環次數或者判斷條件為假。

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
參數标簽 功能說明
Maximum number of iteration 最大循環次數
While loop type 循環類型:while/do while
States when starting Held(保持上次狀态)/reset(狀态恢複預設值)
Show iteration number port 勾選則多出一個輸出循環次數的輸出端口
Output data type 結合上一個參數使用,為輸出循環次數設定資料類型
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

階躍信号1s階躍,最大循環次數保持預設值5。

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

第一個步長計數器輸出結果為4,因為在第一個循環時,子產品執行一次(初始化)輸出Unit Delya的初始值為0,然後再執行4次。

在計數達到99時,再執行2次不滿足小于等于100的條件,退出循環。

do-while

仿真進行時,子系統内子產品首先要執行一次,然後再去檢查cond輸入條件是否為真,如果為真則繼續循環,直到cond條件不滿足時退出目前步長的仿真,進入下一個步長。

沒有IC輸入,僅需要cond條件即可反複循環。

9.3 For循環控制

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
參數标簽 功能說明
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 循環變量輸出時的資料類型

示例:循環次數由内部決定,不輸出循環變量的值。

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

示例:循環次數由外部輸入,且輸出循環變量的值。

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

雖然Sine Wave子產品本身輸出的時double信号,但接入For Iterator之後被強制轉化為整形資料,并取不超過其值的非負整數值。

示例:外部設定Next_i,即下一個循環例循環變量的初始值。

外部框圖同上。

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

9.4 If else控制

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

 根據輸入u1判斷,如果滿足條件則從上支輸出信号,不滿足則從下支輸出信号,這2個信号再分别使能一個Action Subsystem,使用Merge子產品将所有If Action Subsystem的輸出集總,得到一個完整的邏輯輸出。If子產品的輸出/輸出端口可由使用者設定。

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
參數标簽 功能說明
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。

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

模型中Merge子產品的作用是将多個Action子系統的輸出合并到一個信号中,這些被合并的子系統需要具備一個條件:在某一個時刻,最多有一個子系統被使能計算,其他子系統是不計算的。

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

9.5 Switch Case控制

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制

輸入u1如比對case分支值得要求,則可以觸發次分支後所連接配接的Switch Case Action Subsystem。

Simulink仿真入門到精通(九) Simulink的流控制9.1 Simulink流控制分類9.2 While流控制9.3 For循環控制9.4 If else控制9.5 Switch Case控制
參數标簽 功能說明
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為整數範圍之内,不支援小數的輸入判斷。

繼續閱讀