在Simulink中添加Stateflow模塊
在Simulink Library Browser中,可將Stateflow中常用的Chart模塊拖拽到Simulink中。
Chart模塊的編輯
雙擊Chart模塊,可進入Chart模塊編輯界面。
在Chart模塊編輯界面左欄中,可拖入表示狀態的框。
指向狀態的箭頭表示進入Chart后第一個進入的狀態,框中“?”部分可輸入表示狀態的標識名稱,輸入名稱按Enter換行即可輸入狀態中執行的動作。需要注意的是,進入Chart的箭頭並不一定指向某個狀態,也可指向某個分支點,用於處理不同情況的輸入。
狀態中的常用的動作包括如下三種類型:
狀態動作類型 | 說明 |
entry | 僅在進入狀態時執行此動作一次 |
during | 若處於狀態中則一直執行此動作 |
exit | 盡在退出狀態時執行此動作一次 |
在表示動作的行中,首先鍵入上述三種類型的關鍵字entry、during和exit及“:”,然后在“:”后輸入動作內容。也可在表示動作的行中直接輸入動作內容,Simulink會自動默認補全關鍵字entry。
而在兩個不同狀態之間添加連線,表示狀態的轉移。
在表示進入狀態及狀態轉移的連線上,可以添加狀態轉移的條件及狀態轉移時執行的動作。
其語法為:
[condition]{conditional_action}
其中,condition為布爾表達式,用於確定狀態是否轉移。若不指定條件,則默認為true;conditional_action是condition為true時執行的指令。此指令在對條件進行判斷后執行,但其執行早於任何exit或entry動作。也就是說,在判斷某個狀態是否滿足退出條件時,若退出條件為true,則執行conditional_action,然后執行將要退出的狀態中的exit動作(若存在),及要進入的狀態中的entry動作(若存在)。當然,在沒有condition_action指令時,要退出狀態中的exit動作也會在退出條件為true后執行。也可僅有conditional_action指令而無condition表達式。指令與表達式的括號可有Simulink自動補全。
在狀態轉移連線上的布爾表達式還包括時序邏輯運算符after、elapsed、duration等。如使用after運算符的表達式after(n, sec),其表示自關聯狀態激活以來經過的仿真時間達到n秒,返回true;否則返回false。
在condition與conditional_action處於不可輸入的未激活狀態時,可以單擊並拖動以修改表達式的位置。
在編輯Chart內部狀態的過程中,部分狀態涉及到Chart作為一個整體在Simulink中的輸入與輸出,因此,在編輯Chart內部模型時,可通過Chart → Add Inputs & Outputs菜單添加Chart的輸入與輸出。
在Name一欄中輸入由Simulink輸入Chart的變量名稱即可。可在Scope一欄選擇Output從而設置由Chart輸出Simulink的變量名稱。而在Port一欄中可以設置輸入或輸出在Chart塊上顯示的位置。
在Model Explorer中,可以通過左側的樹狀結構查看Simulink模型中的各部分內容,當然也可以對Chart模塊進行編輯,如刪除某Chart輸入或輸出等。