Main Content

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

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

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

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

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

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

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

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

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

明示的な順序付けの動作

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

メモ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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