Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

スーパー ステップのセマンティクス

既定では、Stateflow® チャートは入力イベントまたはタイム ステップごとに 1 回実行されます。入力に対して迅速に反応しなければならないシステムをモデル化する場合は、スーパー ステップ セマンティクスを有効にします。

スーパー ステップ セマンティクスを有効にすると、Stateflow チャートはアクティブな入力イベントごとに複数回実行されるか、入力イベントが発生していない場合はタイム ステップごとに実行されます。以下の "いずれか" の状況が発生するまで、チャートの遷移は有効です。

  • 有効な遷移が存在しないため、チャートが安定したアクティブ ステートの構成になっている

  • 遷移回数がユーザー指定の最大反復回数を超過した

シミュレーション ターゲットについては、処理の途中で反復回数の上限に達した場合に、チャートが次のタイム ステップに移行するか、エラーを生成するかを指定できます。組み込みターゲット用に生成されたコードでは、反復回数の上限に達すると、チャートは常に次のタイム ステップに移行します。

スーパー ステップのセマンティクスは、MATLAB® 内のスタンドアロンの Stateflow チャートではサポートされません。

最大反復回数

スーパー ステップでは、チャートは常に少なくとも 1 回の遷移を行います。このため、各スーパー ステップに最大反復回数を設定すると、チャートではこの回数に 1 を足した回数の遷移が実行されます。たとえば、最大反復回数に 10 を指定すると、チャートは各スーパー ステップで 11 回の遷移を実行します。

ヒント

組み込みターゲット用のコードの生成時には、単一のタイム ステップ内でチャートが計算を完了できるようにする必要があります。この動作を実現するには、チャートで実行されるタイム ステップあたりの最大反復回数を設定することでチャートを微調整します。

スーパー ステップのセマンティクスを有効にする

スーパー ステップ セマンティクスを有効にするには、以下の手順に従います。

  1. Stateflow チャートのプロパティの指定 の説明に従って、チャートの [スーパー ステップのセマンティクスを有効にする] プロパティをオンにします。

  2. [各スーパー ステップにおける最大反復回数] の値を入力します。

    チャートはスーパー ステップ中に常に 1 回の遷移を行います。このため、指定する N の値は、この 1 回に "追加して行われる" 遷移の最大回数を表します (合計 N+1 回)。チャートのモード ロジックに基づいて、チャートがタイム ステップ内に安定したステートに到達できるように値を設定してください。

  3. [多すぎる反復後の動作] のアクションを選択します。

    この選択により、1 つのタイム ステップにおける最大反復回数に達した後のシミュレーション中のチャートの動作が決定されます。

    動作説明
    続行次のタイム ステップまでチャートの実行が継続します。
    エラー発生

    シミュレーションが停止し、エラー メッセージが表示されます。この設定はシミュレーションに対してのみ有効です。生成コードでは、エラーを生成せずに、常にチャートの実行が次のタイム ステップに移行します。

    メモ

    [エラー発生] を選択すると、遷移サイクル内の無限ループを検出しやすくなります。詳細については、遷移サイクル内の無限ループの検出を参照してください。

スーパー ステップのセマンティクスをもつチャートの例

この例では、スーパー ステップのセマンティクスが既定のセマンティクスとどのように異なるかを説明します。モデルには 2 つの Stateflow チャートが含まれています。一方のチャートはスーパー ステップのセマンティクスを使用しています。もう一方では、スーパー ステップのセマンティクスが無効になっています。

それぞれのチャートに、遷移で接続された同一のステートのシーケンスが含まれています。

既定では、シミュレーション ステップごとに遷移が 1 回だけ実行され、ステート AB および C を通ります。

スーパー ステップ セマンティクスを有効にすると、1 ステップで有効な遷移がすべて実行され、ステート C で停止します。

スーパー ステップ セマンティクスによる複数の入力イベントの処理

複数のアクティブ入力イベントを含むチャートに対してスーパー ステップ セマンティクスを有効にすると、最初のアクティブ イベントに対して有効な遷移がすべて実行されてから、次のアクティブ イベントの処理が開始されます。たとえば、次のモデルでは、Add (Simulink) ブロックにより、時間 t = 1 で、[0,0] から [1,1] を範囲とする 2 行 1 列のベクトル信号が生成されます。

Simulink model that contains a chart with two input events.

結果として、チャートが起動すると、イベント E1E2 の両方がアクティブになります。

Stateflow chart with states called A, B, C, and D.

スーパー ステップ セマンティクスを有効にすると、チャートではイベント E1 に対して有効なすべての遷移が実行されます。ステート A から B への遷移に続いて、ステート B から C への遷移が単一のスーパー ステップで実行されます。Scope ブロックは、スーパー ステップの終了時点で y = 3 を示しています。

Scope block that shows the value of y increasing from 0 to 3.

スーパー ステップでは、ステート C からステート D に至るパスが存在しないので、このチャートがステート D に遷移することはありません。

遷移サイクル内の無限ループの検出

チャートに遷移サイクルが含まれている場合は、単一のタイム ステップ内で複数の遷移が実行されると、無限ループが発生する場合があります。次の例を考えます。

Stateflow chart with states called A and B.

上記の例では、x の値は 1 から変化しないので、ステート AB の遷移サイクルによって無限ループが発生します。無限ループを検出する方法としては、スーパー ステップ内の反復回数が上限に達した場合にエラーが生成されるようチャートを構成することが挙げられます。スーパー ステップのセマンティクスを有効にする を参照してください。

関連するトピック