Mealy チャートを設計する際の注意事項
Mealy マシンは、クロック エッジで遷移が発生する有限ステート マシンです。Mealy チャートでは、出力は入力とステートの関数です。タイム ステップごとに、Mealy チャートが起動し、入力を評価して、アクティブ ステートの新しい構成 ("次のステート") に遷移します。チャートは、次のステートへ遷移するときに出力を計算します。Mealy のセマンティクスは、MATLAB® 内のスタンドアロンの Stateflow® チャートではサポートされません。
Mealy のセマンティクス
出力が確実に入力とステートの関数となるように、Mealy ステート マシンは、以下のセマンティクスを適用します。
出力は次のステートに依存しない。
チャートは、ステートではなく、遷移でのみ出力を計算する。
チャートはシステム クロックに基づいて定期的に起動する。
メモ
チャートは、入力とクロックに対して単一の時間ベースを提供します (単一の時間ベースによる出力とステートの計算 を参照)。
Mealy チャートの設計ガイドライン
ステート マシンの Mealy 定義に準拠するためには、入力端子に変化が発生するたびにチャートで出力が確実に計算されるよう設定します。
条件アクションのみの出力の計算
外部遷移と内部遷移の条件アクションのみに基づいて、出力を計算できます。条件の入力をテストして、関連するアクションの出力を計算するというモデリング スタイルは、Mealy マシンで共通のものです。
ステート アクションまたは遷移アクションを使用しない
Mealy チャートでは、ステート アクションまたは遷移アクションは使用できません。この制限は、以下に基づいて Mealy のセマンティクスに適用されます。
チャートでの出力の計算時には入力端子の変化を考慮する。
出力は次のステートではなく現在のステートに基づいて判定する。
データ ストア メモリを使用しない
チャート外部のオブジェクトによってデータ ストア メモリ (DSM) を修正できるため、Mealy チャートでは DSM を使用できません。Stateflow チャートは、データ ストア メモリを使用して Simulink® モデルとデータを共有します。データ ストア メモリはグローバル データとして動作します。チャートが含まれる Simulink 階層では、その他のブロックとモデルは DSM を修正できます。予期しない形で変更される可能性があるデータに Mealy チャートがアクセスしてはなりません。
イベントの使用を制限する
Mealy チャートで、イベントの使用を以下のように制限します。
有効な使用:
入力イベントを使用して、チャートをトリガーする。
イベントベースの時相論理を使用して、遷移をガードする。
時相論理条件の値の変化は、Mealy チャートが内部的にスケジューリングしたイベントと同様に動作します。各タイム ステップで、時相イベント実行前の目盛りの数は、チャートのステートのみに依存します。詳細については、時相論理演算子を参照してください。
メモ
Mealy チャートでは、時相論理演算子の基本イベントは、
tick
(データとステートに基づく暗黙的イベントを参照) などの事前定義イベントでなければなりません。
無効な使用:
どのようなタイプのイベントもブロードキャストできません。
ローカル イベントを使用して、遷移をガードできません。ローカル イベントは、不確定であり、チャートが出力を計算中に発生する可能性があるため、Mealy のセマンティクスに違反します。
chg(data_name)
、en(state_name)
またはex(state_name)
などの暗黙的イベントは使用できません。
単一の時間ベースによる出力とステートの計算
クロックと入力に対して、Simulink ソルバーによって判定される単一の時間ベースを使用できます。Simulink ソルバーは、入力の変化を捕捉するのに十分な速さのクロック レートを設定します。結果として、Mealy チャートは通常、同じタイム ステップで出力を計算してステートを変更します。詳細については、ソルバーの比較 (Simulink)を参照してください。