MWORKS.Sysplorer前瞻版功能簡介——狀態(tài)機圖形建模
1? 引言
狀態(tài)機是一種描述系統(tǒng)行為的模型,能夠清晰地表示系統(tǒng)中的狀態(tài)和狀態(tài)之間的轉換關系,從而使得開發(fā)者能夠更加精確地描述系統(tǒng)行為和邏輯,對于提升系統(tǒng)的正確性和可靠性具有重要的作用。此外,狀態(tài)機還可以用于分析系統(tǒng)性能、生成測試用例等,具有廣泛的應用價值。
MWORKS.Sysplorer 2023a前瞻版基于多領域建模語言Modelica?3.5的狀態(tài)機語義實現了狀態(tài)機建模功能,同時支持使用圖形界面來構建狀態(tài)機。在完全兼容Modelica的前提下,MWORKS.Sysplorer 2023a前瞻版對狀態(tài)機建模易用性、可讀性進行了改進,提供了一系列方便快捷、易于操作的圖形建模的功能。通過圖形界面,用戶可以使用拖拽和連接的方式輕松創(chuàng)建狀態(tài)機的各個狀態(tài)和狀態(tài)之間的轉換關系,降低建模難度和出錯的概率。
MWORKS.Sysplorer 2023a前瞻版具有符合Modelica?3.5的狀態(tài)機語義、易于使用的圖形界面以及與多領域建模的結合等特點,這些特點使得MWORKS.Sysplorer可以更好地滿足狀態(tài)機建模的需求,基本完成了MATLAB/Simulink的Stateflow工具常用功能的替代。
2??狀態(tài)機簡介
首先我們一起了解一下狀態(tài)機的概念。狀態(tài)機全稱為有限狀態(tài)自動機(Finite State Machine,FSM),也被稱為有限狀態(tài)機(Finite Automaton,FA)或有限狀態(tài)轉換機(Finite State Transition Machine,FSTM),它不是一個實際的機器設備,而是一種常見的計算模型。
狀態(tài)機有兩大特點,一是離散的,二是有限的,描述事物的有限狀態(tài)機模型的元素由以下部分組成:
狀態(tài)(State):表示系統(tǒng)可能處于的狀態(tài),可以用方塊或圓形表示。
事件(Event):觸發(fā)狀態(tài)轉移的事件,可以用標簽表示。
動作(Action):狀態(tài)轉移時執(zhí)行的動作,可以用標簽表示。
轉移(Transition):表示狀態(tài)之間的轉換關系,可以用箭頭表示。
FSM 通過定義狀態(tài)、轉移、事件和動作來描述系統(tǒng)的行為,是一種非常有效的行為建模工具。生活中有很多狀態(tài)機例子,下圖為交通信號燈例子,可以通行的時候為綠燈,不能通行的時候為紅燈,轉換條件為一種狀態(tài)的持續(xù)時間結束,或者主動切換指令。對應到FSM,狀態(tài)為燈的顏色,轉移為通行狀態(tài)的轉換,事件為狀態(tài)的持續(xù)時間結束或主動發(fā)送切換指令,動作為顏色的切換。

讀至此處,相信大家已經掌握了一些狀態(tài)機的基礎知識了。那么接下來,我們就一起來了解MWORKS/Modelica中的StateMachine建模功能。
3??狀態(tài)機圖形建模
3.1??狀態(tài)機顯示與交互
A. 狀態(tài)機與狀態(tài)的構建
支持拖拽式建模是圖形建模高易用性的體現,MWORKS.Sysplorer2023a前瞻版提供了SysplorerEmbeddedCoder.StateMachine模型庫,內含狀態(tài)機與狀態(tài)基礎模型,支持拖拽式構建狀態(tài)機與狀態(tài)組件。
◎??拖拽式構建狀態(tài)機
從SysplorerEmbeddedCoder.StateMachine模型庫中,將Chart模型拖拽到圖形視圖,即可在當前模型中添加一個狀態(tài)機組件。

◎??拖拽式構建狀態(tài)
雙擊狀態(tài)機組件進入狀態(tài)機,然后從SysplorerEmbeddedCoder.StateMachine模型庫中,將State模型拖拽到圖形視圖,即可在當前狀態(tài)機中添加一個狀態(tài)組件。

B.?數據管理
MWORKS.Sysplorer提供了純界面交互的方式實現狀態(tài)機變量的設置。在狀態(tài)機模型中右鍵點擊打開上下文菜單,選擇設置狀態(tài)機變量,即可打開狀態(tài)機變量設置面板。

點擊狀態(tài)機變量面板的左上角綠色【添加變量】按鈕,即可在表格中添加數據行,新添加數據行包括了范圍、類型、名稱、值、端口5個屬性。
范圍:表明數據的傳遞屬性,包括 Input(從外部輸入)、Local(內部數據)、Output(向外部輸出)、Parameter(參數)、Constant(常量)。
類型:數據類型包括 Real、Integer、Boolean 三種類型。
名稱:狀態(tài)機變量的名字,須為合法字符。
值:變量的初始值。
端口:當范圍選擇為 Input、Output 時,會在父層 Chart 組件上產生對應數據類型和數目的端口,此處端口號表示父層排列的順序,通過端口 Input、Output 可以將狀態(tài)機與其它組件連接起來共同構成模型來仿真。

3.2??狀態(tài)顯示與交互
A.?初始狀態(tài)設置
當在同一個狀態(tài)機中創(chuàng)建多個狀態(tài)時,根據創(chuàng)建的先后順序來看:第一個被創(chuàng)建的State左上角是黑色實心,表示其為初始狀態(tài),即系統(tǒng)模型運行時第一個被激活的狀態(tài)。根據設計需求,需要更改初始狀態(tài)時,單擊其它狀態(tài)左上角的空心圓圈,被選中的狀態(tài)將變?yōu)槌跏紶顟B(tài),同時原來狀態(tài)左上角的實心圓圈變?yōu)榭招膱A圈,自動滿足同一層次下僅能有一個初始狀態(tài)的約束條件。

B. 狀態(tài)方程編輯
狀態(tài)內的動作可以通過狀態(tài)方程實現。雙擊狀態(tài)組件后,會出現可用于編輯狀態(tài)方程的編輯框,編寫完畢單擊空白處即可在狀態(tài)內部顯示編輯的動作語句。

如果狀態(tài)方程不符合語法規(guī)范,在完成編輯后,狀態(tài)機的邊框會變成紅色。

3.3??轉移線顯示與交互
A. 轉移線的構建
如下圖所示:將光標位置移至狀態(tài)邊緣,當光標狀態(tài)變?yōu)椤?”時,拖動鼠標,便會自動生成一條轉移線;此時,拖動鼠標至狀態(tài)邊緣另一端釋放,轉移線即可連接到該狀態(tài)組件。

轉移線可以繪制成折線或光滑的曲線。在拖拽生成轉移線過程中,在空白處釋放鼠標,則會在此處形成一個錨點;然后將鼠標移動到另一個位置,點擊空白處,形成下一個錨點;依次類推,直到點擊到目標狀態(tài)邊緣。使用以上方法,即可繪制出經過各個錨點的折線或曲線。
鼠標右鍵點擊轉移線,通過勾選【光滑】按鈕,可以實現折線和曲線可以互相轉化;通過勾選【保持橫平豎直】,可以實現轉移線的曼哈頓化。

B. 轉移線的屬性
Modelica轉移線的屬性包括轉移條件、轉移優(yōu)先級、是否即時轉移、是否重置狀態(tài)、是否同步轉移,以上屬性在轉移函數中以函數參數表示。
以上屬性可通過交互式屬性面板進行設置。雙擊轉移線,或右鍵點擊轉移線,選擇上下文菜單【屬性】,彈出轉移線屬性對話框。

轉移條件:轉移條件以文本控件的樣式顯示在轉移線中點上方。在屬性對話框輸入欄輸入轉移條件,點擊確定后,刷新轉移條件文本。支持直接拖拽轉移條件文本以改變位置。

轉移優(yōu)先級:對于從同一個狀態(tài)發(fā)出的多個轉移,起始端帶有數字標記,表示轉移線的優(yōu)先級,數字越小,優(yōu)先級越高。在屬性對話框輸入欄輸入轉移優(yōu)先級數字,點擊確定后,在轉移線起始端顯示優(yōu)先級。

即時轉移:是否即時轉移在轉移線上以末端形狀區(qū)分,即時轉移為三角形,非即時轉移為菱形。在屬性對話框勾選即時轉移復選框即可完成設置。

是否重置:是否重置在轉移線上以末端形狀的填充屬性區(qū)分,重置轉移為實心,非重置轉移為空心。在屬性對話框勾選重置狀態(tài)復選框即可完成設置。

同步轉移:是否同步轉移在轉移線上以起始端的形狀區(qū)分,同步轉移為一個長方形,非同步轉移沒有長方形。在屬性對話框勾選同步轉移復選框即可完成設置。

C. 轉移線的狀態(tài)切換
轉移線兩端的狀態(tài)可以快速切換。按住轉移線的一端,將其拖拽到另一個狀態(tài)邊緣,則轉移線這一段的狀態(tài)將會切換成新的狀態(tài),同時會刷新各條轉移線的優(yōu)先級。

3.4??嵌套狀態(tài)的顯示與交互
A. 嵌套狀態(tài)的構建
Modelica3.5支持狀態(tài)的嵌套,通過在狀態(tài)中聲明子狀態(tài)組件實現。MWORKS.Sysplorer支持純圖形化操作,實現狀態(tài)嵌套。
在狀態(tài)機模型中,右鍵點擊狀態(tài),點擊【進入組件】上下文菜單,然后將狀態(tài)模型SysplorerEmbeddedCoder.StateMachine.State拖拽到新的圖形界面,即可實現狀態(tài)的嵌套。在狀態(tài)內部,子狀態(tài)之間的初始狀態(tài)規(guī)則與父層一致,同樣是只能有一個初始狀態(tài)。

點擊組件導航欄中的上一層或【實例層次結構中后退】按鈕,回到上一層,可以看到子狀態(tài)顯示在父狀態(tài)內部。

B. 嵌套狀態(tài)的數據管理
與狀態(tài)機的操作相似,在狀態(tài)模型內部右鍵點擊打開上下文菜單,選擇設置狀態(tài)變量,即可打開狀態(tài)變量設置面板。狀態(tài)內部的變量面板對于狀態(tài)本身與嵌套狀態(tài)生效。由于狀態(tài)沒有輸入輸出端口,因此狀態(tài)內部的變量范圍相對于狀態(tài)機的變量范圍,沒有輸入和輸出,只有常數、參數與內部變量。

4? 總結
本文介紹了MWORKS.Sysplorer針對狀態(tài)機圖形化建模需求,基于Modelica語言的狀態(tài)機語義,實現的一套方便快捷、易于操作的圖形建模的功能,并簡述了狀態(tài)機建模相比于傳統(tǒng)的使用代碼實現功能的優(yōu)勢。
MWORKS.Sysplorer不僅在控制器建模與代碼生成領域新增了狀態(tài)機建模功能,還實現了框圖建模、C Caller模塊、子系統(tǒng)設計、控制器仿真等許多服務于控制系統(tǒng)建模的常用功能。諸多新功能將于2023年3月隨MWORKS.Sysplorer2023a前瞻版正式上線,小伙伴們敬請期待~
原文鏈接:https://mp.weixin.qq.com/s/Oi6tleZIpDxQ4BWc-DLsRQ