Stateflow® チャートの可読性を高めるには、列挙型データを使用します。列挙型データでは以下が可能です。
値の限定セットを作成し、名前によってこれらの値を参照します。
関連する値を別個のデータ型にグループ化します。
定数の長いリストを定義しなくても済みます。
列挙型データは Simulink® モデルの Stateflow でサポートされます。詳細については、列挙型データを使用した名前による値の参照を参照してください。
この例では、列挙値を使ってステータス キーワードを発行するチャートの作成方法を説明します。
シミュレーション中に、チャート アクションはステート A
とステート B
の間で切り替わります。
A
の実行
シミュレーションの開始に際し、ステート A
に入ります。
ステート A
が、値 RED
を列挙型データ color
に代入することで、entry
アクションを実行します。
条件 [y > 6]
が真になるまで、データ y
はタイム ステップ (0.2 秒間隔) ごとに 1 回増分されます。
チャートが、ステート A
からステート B
への遷移を取得します。
B
の実行
ステート A
からの遷移が発生した後、ステート B
が入力されます。
ステート B
が、値 GREEN
を列挙型データ color
に代入することで、entry
アクションを実行します。
条件 [y < 3]
が真になるまで、データ y
はタイム ステップ (0.2 秒間隔) ごとに 1 回減分されます。
チャートが、ステート B
からステート A
に遷移します。
空のチャートをもつ Simulink モデルを作成するには、MATLAB® コマンド プロンプトで sfnew
と入力します。
空のチャート内にステート A
および B
を追加します。テキスト プロンプトで、適切なアクション ステートメントを入力します。
ステート A
にデフォルト遷移を追加し、ステート A
とステート B
の間に遷移を追加します。
それぞれの遷移をダブルクリックします。テキスト プロンプトで、適切な条件を入力します。
データ型定義を保存するためのファイルを作成するには、MATLAB ツールストリップの [ホーム] タブから、[新規作成] 、 [クラス] を選択します。
MATLAB エディターで次のように入力します。
classdef TrafficColors < Simulink.IntEnumType enumeration RED(0) GREEN(10) end end
classdef
セクションは、TrafficColors
という名前の整数ベースの列挙データ型を定義します。enumeration
セクションには、このデータ型で許可される列挙値に続いて、その元となる数値が含まれています。ファイルを TrafficColors.m
として、 MATLAB 検索パス上のフォルダーに保存します。
未定義のデータを解決するには、[シンボル] ペインで [未定義のシンボルを解決] アイコン をクリックします。Stateflow エディターによってチャート内の各シンボルに適切なスコープが割り当てられます。
シンボル | スコープ |
---|---|
color | 出力データ |
y | ローカル データ |
GREEN | パラメーター データ |
RED | パラメーター データ |
color
を列挙型データとして指定するには、プロパティ インスペクターで以下を行います。
[データ型] フィールドで [Enum:<class name>]
を選択します。<class name>
を、以前に定義したデータ型の名前 TrafficColors
に置き換えます。
[ログ] で、[信号データのログ] チェック ボックスをオンにします。
y
のスコープと型を設定するには、プロパティ インスペクターで以下を行います。
[スコープ] フィールドで [出力]
を選択します。
[データ型] フィールドで [uint8]
を選択します。
[ログ] で、[信号データのログ] チェック ボックスをオンにします。
[シンボル] ペインで、シンボル GREEN
および RED
を削除します。color
を列挙型データとして指定する前は、Stateflow エディターではこれらのシンボルが誤ってパラメーターとして識別されていました。
モデルをシミュレートすると、[シミュレーション データ インスペクター] アイコン が強調表示されて、新しいシミュレーション データがあることが示されます。シミュレーション データ インスペクターを開くには、このアイコンをクリックします。
シミュレーション データ インスペクターで color
信号と y
信号のチェック ボックスをオンにして、それらが別々の座標軸に表示されるようにします。
MATLAB ワークスペース内でログ データにアクセスするには、信号のログ オブジェクト logsout
を呼び出します。たとえば、コマンド プロンプトで次のように入力します。
losgout = out.logsout; colorLog = logsout.getElement('color'); Tbl = table(colorLog.Values.Time,colorLog.Values.Data); Tbl.Properties.VariableNames = {'SimulationTime','Color'}
Tbl = 9×2 table SimulationTime Color ______________ _____ 0 RED 1.6 GREEN 2.8 RED 4 GREEN 5.2 RED 6.4 GREEN 7.6 RED 8.8 GREEN 10 RED