Main Content

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

パラレル ステートの実行順序

パラレル ステートの順序付け

同じチャート内の複数のパラレル (AND) ステートは同時に実行されますが、Stateflow® チャートでは、シミュレーション時にそれぞれをアクティブ化するタイミングが判定されなければなりません。この順序付けによって、実行の全ステージを通して各パラレル ステートによりアクションが実行されていくタイミングが決定されます。

排他的 (OR) ステートとは異なり、パラレル ステートでは通常、遷移は使用されません。代わりに、実行順序は以下に依存します。

パラレル ステートには、実行順序に基づいて優先順位の番号が割り当てられます。番号が小さいほど、優先順位は高くなります。各ステートの優先順位の番号は右上隅に表示されます。

実行順序はチャートのプロパティであるため、チャート内のすべてのパラレル ステートにプロパティの設定が継承されます。同じ Stateflow チャート内に、明示的な順序付けと暗黙的な順序付けを混在させることはできません。しかし、同じ Simulink® モデル内に順序付けモードが異なるチャートを混在させることは可能です。

パラレル ステートを含む Stateflow チャートから生成されたコードでは、各ステートはその順序に基づいて実行されます。

パラレル ステートの明示的な順序付け

既定の設定では、Stateflow チャートは、設定した実行優先順位に基づいてパラレル ステートを明示的に順序付けします。

明示的な順序付けの動作

新しい Stateflow チャート (パラレル ステートが含まれていないチャート) を開くと、パラレル ステートに対してその作成順で優先順位が自動的に割り当てられます。親のコンテナー内で次に使用可能な番号から、番号が割り当てられます。

暗黙的に順序付けされたパラレル ステートが含まれているチャートで、明示的な順序付けを有効にすると、既存のパラレル ステートに対しては、暗黙的な優先順位が保持されます。新しいパラレル ステートを追加すると、新しい Stateflow チャートと同様に (ステートの作成順で) 実行順序が割り当てられます。

パラレル ステートの実行順序を個別に設定 の説明に従って、常時、ステートごとに実行順序の割り当てをリセットできます。パラレル ステートの実行順序を変更すると、他のパラレル ステートについてはそのままの順序で、Stateflow チャートによって自動的に番号が変更されます。詳細は、パラレル ステートの順序の維持 を参照してください。

パラレル ステートの明示的な順序付け

パラレル ステートに対して明示的な順序付けを使用するには、以下のタスクを実行します。

チャートレベルで明示的な順序付けを有効にする.  パラレル ステートに対して明示的な順序付けを有効にするには、以下のタスクを実行します。

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

    [チャート] プロパティ ダイアログ ボックスが表示されます。

  2. [ユーザー指定のステート/遷移実行順序] チェック ボックスをオンにします。

  3. [OK] をクリックします。

    暗黙的に順序付けられているパラレル ステートがチャートに既に含まれている場合は、既存のプロパティは明示的に変更しない限り保持されます。明示的なモードで新しいパラレル ステートを追加した場合は、作成の順序に基づいて優先順位が自動的に割り当てられます (明示的な順序付けの動作 を参照)。ただし、パラレル ステートの実行順序を個別に設定 の説明に従って、ステートごとに実行順序を明示的に変更できます。

パラレル ステートの実行順序を個別に設定.  明示的な順序付けモードでは、個別のパラレル ステートの実行順序を変更できます。対象のパラレル ステートを右クリックし、[実行順序] メニューから新しい優先順位をクリックします。

パラレル ステートの暗黙的な順序付け

パラレル ステートの暗黙的な順序付けのルール

暗黙的な順序付けモードでは、Stateflow チャートは、位置に基づいてパラレル ステートを暗黙的に順序付けます。優先順位は以下のルールに基づいて、上から下、続いて左から右という順序で設定されます。

  • チャート内でパラレル ステートの縦方向の位置が高いほど、そのステートの実行優先順位は高くなります。

  • 縦方向の位置が同じパラレル ステートでは、左端のステートに最も高い優先順位が割り当てられます。

以下の例は、各ルールを最上位のパラレル ステートとパラレル サブステートに対して適用したステートを示しています。

Stateflow chart with five top-level parallel states called a, b, c, f, and g. State c has two parallel substates called d and e. State g has three parallel substates called h, i, and j.

メモ

暗黙的な順序付けでは、設計レイアウトと実行優先順位の間に依存関係が生じます。チャート内のパラレル ステートの配置を変更すると、意図せずに実行順序が変更され、シミュレーション結果に影響が及ぶ可能性があります。設計管理を強化するには、既定の明示的な順序付けモードを使用して実行優先順位を設定します。

パラレル ステートの暗黙的な順序付け

パラレル ステートの暗黙的な順序付けを使用するには、以下の手順に従います。

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

  2. [チャート] プロパティ ダイアログ ボックスで、[ユーザー指定のステート/遷移実行順序] チェック ボックスをクリアします。

  3. [OK] をクリックします。

パラレル ステートの順序の維持

明示的な順序付けまたは暗黙的な順序付けのどちらを使用するかにかかわらず、パラレル ステートの削除、番号変更、または追加時には、実行の優先順位の調整が試みられます。こうした状況では、以下の目的でパラレル ステートの優先順位が再設定されます。

  • シーケンスのギャップを埋めることで、順序付けの連続性を維持する

  • 2 つのステートに同じ優先順位が設定されないようにする

  • 意図された相対的な実行優先順位を保持する

明示的なモードで相対的な優先順位が保持される仕組み

明示的な順序付けモードでは、ユーザー指定の優先順位が保持されます。明示的な順序付けについて、以下の例を考えます。

Stateflow chart with three top-level parallel states called a, b, and c. State a has three parallel substates called d, e, and f.

明示的な順序付けのため、各ステートの優先順位とサブステートはチャートの作成順と一致します。以下のアクションを実行した場合に、パラレル ステートとサブステートの優先順位が再設定されます。

  1. 最上位のステート b の優先順位を 3 に変更します。

  2. 最上位のステート g を追加します。

  3. サブステート e を削除します。

Stateflow chart with four top-level parallel states called a, b, c, and g. State a has two parallel substates called d and f.

最上位のステート b に明示的に設定された優先順位が保持されていますが、他のすべてのパラレル ステートの番号は、以前の相対的な順序を保持するように変更されています。

暗黙的なモードで相対的な優先順位が保持される仕組み

暗黙的な順序付けでは、配置に基づいて、意図された相対的な優先順位が保持されます。暗黙的な順序付けについて、以下の例を考えます。

Stateflow chart with three top-level parallel states called a, b, and c. State a has three parallel substates called d, e, and f.

最上位のステート b とサブステート e を削除した場合は、残りのパラレル ステートとサブステートの優先順位が、暗黙的な配置順序を保持するように自動的に再設定されます。

Stateflow chart with two top-level parallel states called a and c. State a has two parallel substates called d and f.

復元されたステートにおける実行優先順位

パラレル ステートを Stateflow チャートから削除した後に復元しなければならない場合があります。暗黙的な順序付けモードでは、ステートを復元した場所に基づいて実行優先順位が再割り当てされます。ステートをチャート内の元の場所に戻す場合は、元の優先順位を復元します。

ただし、明示的な順序付けモードでは、常に復元したステートに対して元の実行優先順位を復元できるわけではありません。復元できるかどうかは、ステートの復元方法によります。

ステートを削除した方法ステートを復元した方法優先順位の結果
削除、切り取り、親ステートの境界線外へのドラッグ、または境界線が親ステートに重なるようにドラッグundo コマンドの使用元の優先順位が復元されます。
親ステートの境界線外にドラッグするか境界線が親ステートに重なるようにドラッグして、さらにマウス ボタンをリリース親ステートの内側にドラッグ元の優先順位は失われます。Stateflow チャートは、復元されたステートを最後に作成されたステートとして扱い、最低の実行優先順位が割り当てます。
親ステートの境界線外にドラッグするか境界線が親ステートに重なるようにドラッグするが、マウス ボタンはリリースしない親ステートの内側にドラッグ元の優先順位が復元されます。
境界線が 1 つ以上の兄弟関係のステートに重なるようにドラッグ同じ親ステートの内側で境界線が重ならない場所にドラッグ元の優先順位が復元されます。
切り取り貼り付け元の優先順位は失われます。Stateflow チャートは、復元されたステートを最後に作成されたステートとして扱い、最低の実行優先順位を割り当てます。

明示的な順序付けと暗黙的な順序付けの切り替え

パラレル ステートを明示的に順序付けてから暗黙的な順序付けモードに切り替えた場合、Stateflow チャートは、実行順序を配置による暗黙的なルールに従ってリセットします。ただし、暗黙的な順序付けモードから明示的な順序付けモードに切り替えた場合、元の明示的な実行順序は復元されません。

ボックスとサブチャート内のパラレル ステートの実行順序

ボックス内で一連のパラレル ステートをグループ化しても、相対的な実行順序は保持されます。さらに、Stateflow チャートは、適用される明示的な順序付けまたは暗黙的な順序付けのルールに基づき、独自の優先順位をボックスに割り当てます。この優先順位は、ボックス内のパラレル ステートがアクティブになるときに判定されます。

パラレル構造を含むステートをサブチャートに変換すると、そのサブステートの相対的な実行順序は、現在の明示的または暗黙的な順序付けのルールに基づいて保持されます。