Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

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

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

  • 有効な遷移が存在せず、チャートが安定したアクティブなステートのコンフィギュレーションにある

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

スーパー ステップでは、入力に対するチャートの対応は高速になりますが、タイム ステップあたりに実行される計算数は増加します。このため、組み込みターゲットに対するコードの生成時には、単一のタイム ステップ内でチャートが計算を完了できるようにする必要があります。この動作を実現するには、チャートで実行されるタイム ステップあたりの遷移回数に上限を設定することでスーパー ステップ パラメーターを微調整します (最大反復回数を参照)。

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

最大反復回数

スーパー ステップでは、チャートは常に少なくとも 1 回の遷移を行います。このため、各スーパー ステップに最大反復回数を設定すると、チャートではこの回数に 1 を足した回数の遷移が実行されます。たとえば、最大反復回数に 10 を指定すると、チャートは各スーパー ステップで 11 回の遷移を実行します。各スーパー ステップの最大反復回数を設定する方法の詳細は、スーパー ステップのセマンティクスを有効にするを参照してください。

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

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

  1. チャートの最上位レベルを右クリックし、コンテキスト メニューから [プロパティ] を選択します。

  2. [チャート] プロパティ ダイアログ ボックスで、[スーパー ステップのセマンティクスを有効にする] チェック ボックスをオンにします。

    チェック ボックスの下に 2 つの追加フィールドが表示されます。

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

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

  4. [多すぎる反復後の動作] フィールドのドロップダウン メニューからアクションを選択します。

    選択したアクションに応じて、安定したステートに到達する前にスーパー ステップで反復回数の上限を超過した場合の、シミュレーション中のチャートの動作が判定されます。

    動作説明
    続行

    最後のアクティブなステート コンフィギュレーションで、この場合はスーパー ステップの最後に有効な遷移でローカル データを更新してから、スリープ状態に戻ります。

    エラー発生

    シミュレーションが停止して、安定したステートに到達する途中で反復回数が上限に達したことを示すエラーがチャートによって生成されます。

    メモ

    [エラー発生] を選択すると、遷移サイクル内の無限ループを検出しやすくなります (遷移サイクル内の無限ループの検出 を参照)。

    メモ

    このオプションに関連するのは、シミュレーション ターゲットのみです。組み込みターゲットについては、コードを生成すると、エラーは生成されずに次のタイム ステップに移行します。

スーパー ステップの例

以下のモデルは、スーパー ステップ セマンティクスが既定のセマンティクスとどのように異なるかを示しています。

上記のモデルでは、Constant ブロックから定数値 20 が出力され、Stateflow チャートの u に入力されています。u の値は常に 20 になるので、チャートの各遷移は有効になります。

既定の設定では、シミュレーション ステップごとに遷移が 1 回だけ実行され、毎回 y ずつインクリメントします。

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

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

複数のアクティブ入力イベントを含むチャートに対してスーパー ステップ セマンティクスを有効にすると、最初のアクティブ イベントに対して有効な遷移がすべて実行されてから、次のアクティブ イベントの処理が開始されます。たとえば、以下のモデルを考えます。

このモデルでは、Sum ブロックにより、時間 t = 1 で、[0,0] から [1,1] を範囲とする 2 行 1 列のベクトル信号が生成されます。結果として、チャートが起動すると、イベント E1E2 の両方がアクティブになります。

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

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

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

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

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