Main Content

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

ボックスを使用したチャート オブジェクトのグループ化

"ボックス" は、関数やステートなど、チャート内の他のオブジェクトを整理するグラフィカル オブジェクトです。ボックスを使用すると、ステートや関数を個別の名前空間にカプセル化できます。ボックスは、Simulink® モデルの Stateflow® チャートでのみサポートされます。

たとえば、以下のチャートでは、ボックス Heater は、関連性のあるステート OffOn をグループ化しています。

Chart modeling a bang-bang controller.

この例の詳細については、バンバン温度制御システムのモデル化を参照してください。

Stateflow ボックスのセマンティクス

ボックス内のグラフィカル オブジェクトの可視性

ボックスにより、階層レベルが Stateflow チャートに追加されます。このプロパティは、ボックス外のオブジェクトに対するボックス内の関数とステートの可視性に影響を及ぼします。ボックス外の場所からボックスを親とする関数またはステートを参照する場合は、パスにボックス名を含める必要があります。ボックスを使用した関数のグループ化 を参照してください。

パラレル ステートのアクティブ化の順序

ボックスは、チャート内のパラレル ステートの暗黙的なアクティブ化の順序に影響を及ぼします。チャートに暗黙的な順序付けが使用されている場合、ボックス内のパラレル ステートは、そのチャートで下位または右側に位置する他のパラレル ステートよりも前に起動されます。ボックス内では、パラレル ステートは上から下、左から右の順序で起動します。ボックスを使用したステートのグループ化 を参照してください。

メモ

アクティブ化の順序をステートごとに明示的に指定するには、[チャート] プロパティ ダイアログ ボックスで [ユーザー指定のステート/遷移実行順序] をオンにします。新しいチャートを作成する場合、このオプションは既定でオンになっています。詳細は、パラレル ステートの明示的な順序付け を参照してください。

ボックス使用時のルール

ボックスの使用時には、以下のルールが適用されます。

  • ボックス外の場所からドット表記を使って、ボックスを親とする関数またはステートを参照する場合は、パスにボックス名を含めます。

  • 関数やステートなど、ボックス内のグラフィカル オブジェクトを移動または描画できます。

  • ボックスにデータを追加し、ボックス内のすべての要素が同じデータを共有できるようにします。

  • ボックスとそのコンテンツを単一のグラフィカル要素にグループ化できます。ステートのグループ化 を参照してください。

  • ボックスをサブチャート化して、その要素を非表示にすることができます。サブチャートを使用したモーダル ロジックのカプセル化 を参照してください。

  • entryduringexit アクションなど、ボックスに対してアクション ステートメントを定義することはできません。

  • ボックス間の遷移を定義することはできません。ただし、ボックス内のステート間の遷移を定義することは可能です。

ボックスの描画と編集

ボックスの作成

以下に示すボックス ツールを使用して、チャートにボックスを作成します。

  1. ボックス ツールをクリックします。

  2. ポインターを描画領域に移動します。

  3. 任意の場所をクリックし、ボックスを作成します。

    新しいボックスは、左上隅に名前が疑問符 (?) のステートで表示されます。

  4. 疑問符のラベルをクリックします。

  5. ボックスの名前を入力してから、ボックスの外部をクリックします。

ボックスの削除

ボックスを削除するには、そのボックスを選択して Delete キーを押します。

ボックスの使用例

ボックスを使用した関数のグループ化

以下のチャートは、MATLAB® 関数をグループ化した Status という名前のボックスを示しています。

以下の要領でチャートが実行されます。

  1. ステート Cold が最初にアクティブになります。

  2. 入力後、ステート Cold によって関数 Status.msgCold が呼び出されます。

    この関数は、温度が低いことを示すステータス メッセージを表示します。

    メモ

    MATLAB 関数はボックス内に配置されているので、関数呼び出しのパスにはボックス名 Status を含めなければなりません。この接頭辞を省略した場合は、エラー メッセージが表示されます。

  3. 入力データ temp の値が 80 を上回った場合は、ステート Warm への遷移が発生します。

  4. 入力後、ステート Warm によって関数 Status.msgWarm が呼び出されます。

    この関数は、温度が高いことを示すステータス メッセージを表示します。

    メモ

    MATLAB 関数はボックス内に配置されているので、関数呼び出しのパスにはボックス名 Status を含めなければなりません。この接頭辞を省略した場合は、エラー メッセージが表示されます。

  5. 入力データ temp の値が 60 を下回った場合は、ステート Cold への遷移が発生します。

  6. シミュレーションが終了するまで、手順 2 から 5 が繰り返されます。

ボックスを使用したステートのグループ化

以下のチャートは、関連するステートをグループ化した Status という名前のボックスを示しています。このチャートでは、パラレル ステートに暗黙的な順序付け (既定の明示的モードではなく) が使用されています。(詳細は パラレル ステートの暗黙的な順序付け を参照してください)。

このチャートの主旨は、以下のとおりです。

  • ステート Temp が最初にアクティブになり、続いてステート Wind_Chill がアクティブになります。次に、ステート Monitor がアクティブになります。

    メモ

    この暗黙的なアクティブ化の順序は、TempWind_Chill がボックス内に配置されていることに起因します。ボックスを削除した場合は、暗黙的なアクティブ化の順序は、次のように変更されます。 Temp, Monitor, Wind_Chill.

  • 入力データ temp に基づいて、サブステート間の遷移がパラレル ステート Status.TempStatus.Wind_Chill で発生します。

  • Status.Temp.Cold から Status.Temp.Warm への遷移が発生した場合は、遷移条件 in(Status.Temp.Warm) が真になります。

  • Status.Temp.Warm から Status.Temp.Cold への遷移が発生した場合は、遷移条件 in(Status.Temp.Cold) が真になります。

    メモ

    サブステート Status.Temp.ColdStatus.Temp.Warm がボックス内に配置されているため、in 演算子の引数にボックス名 Status を含めなければなりません。この接頭辞を省略した場合は、エラー メッセージが表示されます。in 演算子の詳細は、in 演算子を使用したステート アクティビティのチェック を参照してください。