Simulink-Stateflow學習——計數器的搭建和stateflow工作過程
Stateflow 是一個基於有限狀態機和流程圖來構建組合和時序邏輯決策模型並進行模擬的環境。它可以將圖形表示和表格表示(包括狀態轉換圖、流程圖、狀態轉換表和真值表)結合在一起,針對系統對事件、基於時間的條件以及外部輸入訊號的反應方式進行建模。
Stateflow 可用於設計有關監控、任務排程以及故障管理應用程式的邏輯。Stateflow 包括狀態圖動畫及靜態和執行時檢查,可以在實施前測試設計的一致性和完整性。
Stateflow可以直接嵌入到Simulink模型中,並且在模擬的初始化階段,Simulink會把Stateflow繪製的邏輯圖形通過編譯程式轉換成C語言,使二者有機地結合在一起。 Stateflow可以在Simulink Extra模組庫中找到。
下面是一個簡單易學的stateflow例項:
題目:在simulink中搭建一個簡單的stateflow,實現在輸入的上升沿進行計數,然後輸出。
如上圖是搭建的stateflow,輸入為週期為1的脈衝訊號,設定最大值maxtime為18。模擬時間為10s,由於只在上升沿觸發,故最後結果只有9。
下圖為stateflow的內部:
輸出結果為:
下面詳細講解stateflow內部工作的過程:
首先講解stateflow內部的工作過程。stateflow的內部有兩個state,reset和count。當chart模組在第一個上升沿的條件下(注意是1s位置的上升沿,0s時沒有上升沿)觸發時,chart內部會首先進入到reset狀態。此時output=0。state進入節點,節點在sitch,即上升沿觸發時,兩個state都可以傳送至節點,而節點傳輸至哪個狀態,則由輸出轉換線生的條件決定。由於maxtime設定為18,所以後面再2s,3s……一直到10s計數才達到9,不會進入reset。
哈哈,在剛才繼續寫的時候突然發現我之前如果調整模擬時間遠遠大於10s,也就是讓計數可以達到18,突然想到為什麼結果不是18呢?如下圖:
然後才突然意識到output>maxtime出現了問題。。。
然後我把output>maxtime改成output>=maxtime,出來的結果就符合預期了!666
增添內容,修改日期2018.07.31
上述內容stateflow中變數設定和資料管理的問題。下面為增加的內容。
從上面的simulink模型可以看出,stateflow中的輸入輸出為maxtime和output,如何定義呢?
1、點選model explore,如下圖圈中標註區域。
2、依次點選下圖中的1,2,3,設定變數,並將scope改為input和output。
此時stateflow就會出現相應的輸入輸出。即可。