Mealy チャートを設計する際の注意事項
Mealy マシンは、クロック エッジで遷移が発生する有限ステート マシンです。Mealy チャートでは、出力は入力とステートの関数です。タイム ステップごとに、Mealy チャートが起動し、入力を評価して、アクティブ ステートの新しい構成 ("次のステート") に遷移します。チャートは、次のステートへ遷移するときに出力を計算します。
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)を参照してください。