Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Moore チャートを設計する際の注意事項

Moore マシンは、クロック エッジで出力が変更される有限ステート マシンです。Moore チャートでは、出力は現在のステートのみの関数として表現されます。タイム ステップごとに、Moore チャートは起動して、出力を計算します。さらに、次のタイム ステップに対応するために、その入力を評価して、チャート自体を再設定します。たとえば、入力を評価した後、チャートはアクティブ ステートの新しい構成に遷移する可能性があります。チャートは、出力を計算してから、入力を評価してステートを更新します。Moore のセマンティクスは、Simulink® モデルの Stateflow® チャートでのみサポートされます。

Moore のセマンティクス

出力が確実に現在のステート "のみ" の関数となるように、Moore ステート マシンは以下のセマンティクスを適用します。

  • 出力は入力に依存しない。

  • 出力は前の出力に依存しない。

  • 出力は時相論理に依存しない。

Moore チャートの設計ルール

ステート マシンの Moore 定義に準拠するためには、Moore チャートの起動時は常に、出力が、入力とは無関係に、現在アクティブな一連のステートに基づき確実に計算されるようにします。

ステート アクションの制限

出力が確実に現在のステートのみに依存するようにするため、以下の制約に従って、ステート アクションの出力を計算できます。

  • アクションを組み合わせる。Moore チャートでは、各ステートにつき 1 つのアクションのみを含めることができます。アクションは、複数のコマンド ステートメントで構成できます。Stateflow は上位レベルから下位レベルに向かって Moore チャートのステートを評価します。Moore チャートのアクティブ ステートは遷移を評価する前にステート アクションを実行します。したがって、外部遷移が有効であるかどうかにかかわらず、各タイム ステップで出力が計算されます。

  • ステート アクションにラベルを付けない。entryduringexit などのキーワードを使用して、Moore チャートのステート アクションにラベルを付加しないでください。既定では、Moore チャートはアクティブ ステートでアクションを実行してから、入力を評価してステートを更新します。

遷移アクションの制限

Moore チャート内の遷移には、条件アクションと遷移アクションを含めることができます。ただし、これらのアクションによって出力値と入力値の間に依存関係が発生しない場合に限ります。たとえば、以下のチャートでは、各遷移で条件の入力 u がテストされ、条件アクションの出力 y が変更されます。出力値が入力の値に依存するため、この構成は Moore のセマンティクスに違反し、エラーが発生します。

入力を出力の計算に使用しない

Moore チャートでは、出力は入力に依存できません。出力の計算に入力を使用して、直接または間接的に影響を与えた場合、エラーが発生します。

データ スコープの制限

Moore チャートでは以下のデータ制限が適用されます。

  • マシンを親とするデータを制限する。マシンを親とするデータは、Stateflow マシンに対して定義するデータです。Stateflow マシンは、Stateflow 階層の最上位に位置します。この階層に定義されたデータは、マシン内のすべてのチャートによる読み取りと修正が可能です。Moore チャートがチャート外部で予期できない形で修正される可能性があるデータにアクセスしないようにするため、マシンを親とするデータを使用しないでください。

  • データ ストア メモリを定義しない。チャート外部のオブジェクトによってデータ ストア メモリ (DSM) オブジェクトを修正できるため、Moore チャートでは DSM を定義できません。Stateflow チャートは、データ ストア メモリを使用して Simulink モデルとデータを共有します。データ ストア メモリはグローバル データとして動作します。チャートが含まれる Simulink 階層では、その他のブロックとモデルは DSM を修正できます。予期しない形で変更される可能性があるデータに Moore チャートがアクセスしてはなりません。

外部関数の呼び出しに coder.extrinsic を使用しない

coder.extrinsic を使って外部関数を呼び出すと、出力が現在のステートのみに依存するよう強制することはできなくなります。Moore チャートで coder.extrinsic を使って外部関数を呼び出すと、エラーが発生します。

Simulink 関数を使用しない

Moore チャートでは、Simulink 関数を使用できません。この制限により、チャートの実行時に Moore のセマンティクス違反が生じるのを回避できます。

関数をエクスポートしない

Moore チャートでは、関数をエクスポートできません。

インライン化を無効にしない

Moore チャートのセマンティクスでは、インライン化が必要です。

スーパー ステップのセマンティクスを有効にしない

Moore チャートでは、スーパー ステップのセマンティクスを使用できません。

メッセージを使用しない

Moore チャートでは、メッセージを使用できません。

イベントの使用を制限する

Moore チャートでは、イベントの使用は制限されます。

  • 有効な使用:

    • 1 つの入力イベントのみを使用してチャートをトリガーする。

    • イベントベースの時相論理を使用して、遷移をガードする。

      時相論理条件の値の変化は、Moore チャートが内部的にスケジューリングしたイベントと同様に動作します。各タイム ステップで、時相イベント実行前の目盛りの数は、チャートのステートのみに依存します。詳細については、時相論理演算子を参照してください。

      メモ

      Moore チャートでは、時相論理演算子の基本イベントは、tick (データとステートに基づく暗黙的イベントを参照) などの事前定義イベントでなければなりません。

  • 無効な使用:

    • どのようなタイプのイベントもブロードキャストできません。

    • ローカル イベントを使用して、遷移をガードできません。ローカル イベントは、不確定であり、チャートが出力を計算中に発生する可能性があるため、Moore のセマンティクスに違反します。

    • chg(data_name)en(state_name) または ex(state_name) などの暗黙的イベントは使用できません。

連続時間モデリング システムでは Moore チャートを使用しない

Moore チャートでは、更新方法を Continuous に設定できません。Stateflow 内の連続時間をもつモデリング システムでは、Classic チャートまたは Mealy チャートを使用します。

関連するトピック