Main Content

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

アクティブ ステート データを使用したチャート アクティビティの監視

Stateflow® チャートにチャート階層と高い相関性をもつデータが含まれている場合は、"アクティブ ステート データ" を用いて設計を簡素化することができます。アクティブ ステート データを有効にすることで、以下が可能になります。

  • チャート アクティビティを反映させる手動のデータ更新を回避する。

  • シミュレーション データ インスペクターでチャート アクティビティのログを取り監視を行う。

  • チャート アクティビティ データを使用して他のサブシステムを制御する。

  • チャート アクティビティ データを他の Simulink® ブロックにエクスポートする。

詳細については、システムの複雑度を管理する階層の作成を参照してください。

アクティブ ステート データ

アクティブ ステート データの出力を使用すると、一部の Stateflow チャートの設計を簡素化できます。たとえば、次の信号機のモデルでは、アクティブなステートによってシンボル color の値が決まります。アクティブ ステート データを有効にすると、Stateflow はステート アクティビティを追跡することにより信号機の色を提示できます。color の明示的な更新が不要になるため、このシンボルを削除してチャートの設計を簡素化できます。

Chart modeling a traffic signal, with states called Red, Yellow, and Green. The value of the symbol color indicates which state is active.

Stateflow では、アクティブ ステート データを出力端子を介して Simulink に提供し、あるいはローカル データとしてチャートに提供します。次の表は、利用可能な各種モードのアクティブ ステート データをまとめています。

アクティビティ モードデータ型説明
自己アクティビティBooleanステートがアクティブかどうか
子アクティビティEnumerationアクティブな子ステートはどれか
リーフ ステート アクティビティEnumerationアクティブなリーフ ステートはどれか

アクティブ ステート データを有効にするには、プロパティ インスペクターを使用します。

  1. [監視する出力の作成] チェック ボックスを選択します。

  2. ドロップダウン リストからアクティビティ モードを選択します。

  3. アクティブ ステート データ シンボルの [データ名] を入力します。

  4. (オプション) 子ステート アクティビティまたはリーフ ステート アクティビティに対し、アクティブ ステートのデータ型として [Enum 名] を入力します。

既定では、Stateflow はステート アクティビティを出力データとして報告します。アクティブ ステート データ シンボルのスコープをローカル データに変更するには、[シンボル] ペインを使用します。

アクティブ ステート データの例

この例では、アクティブ ステート データを使用して 1 組の信号機用のコントローラー システムをモデル化します。

この Traffic Controller チャートでは、2 つのパラレル サブチャートにより、信号機を制御するロジックを管理しています。各サブチャートには 3 つの子ステート RedYellowGreen で構成される同一の階層があります。出力データの Light1Light2 は、サブチャート内のアクティブな子ステートに対応します。これらの信号は以下を行います。

  • アニメーション化された信号機のフェーズを判定する。

  • 各信号機で待機する自動車の台数を報告する。

  • 2 つの信号機が同時に青になることが決してないように、Safety Assertion サブシステムを操作する。

Traffic Controller チャート内でサブチャートを表示するには、チャートの左下隅にある矢印をクリックします。

Traffic Controller サブチャートの動作

各トラフィック コントローラーは、その子ステートを、Red から Green、さらに Yellow を経て、Red に戻るという順序で繰り返します。各ステートは信号機のサイクルにおける 1 フェーズに対応します。出力信号の Light1Light2 は、特定の時点でどのステートがアクティブかを示します。

Chart modeling a traffic signal. The chart uses active state data to indicate which state is active.

赤信号

Red ステートがアクティブになると、信号機のサイクルが開始されます。短い遅延の後、コントローラーは交差点で待っている自動車がないか確認します。少なくとも 1 台の自動車が検知されるか、または一定の時間が経過すると、コントローラーは greenLightRequesttrue に設定して青信号をリクエストします。リクエストを行った後、コントローラーはもう一方の信号機が赤であることを検出するまで Red ステートを短時間維持します。その後、コントローラーは Green へ遷移します。

青信号

Green ステートがアクティブになると、コントローラーは greenLightRequestfalse に設定してその青信号のリクエストをキャンセルします。コントローラーは greenLightLockedtrue に設定し、もう一方の信号機が青に変わらないようにします。ある程度の時間が経つと、コントローラーはもう一方の信号機から青信号のリクエストがないか確認します。リクエストを受け取るか、または一定の時間が経過すると、コントローラーは Yellow ステートへ遷移します。

黄色信号

Red ステートへ遷移する前に、コントローラーは一定の時間 Yellow ステートを維持します。Yellow ステートが非アクティブになると、コントローラーは greenLightLockedfalse に設定し、もう一方の信号機が青になっても安全であることを示します。その後、信号機のサイクルが再開されます。

信号機のタイミング

信号機サイクルのタイミングはいくつかのパラメーターによって定義されます。これらのパラメーターの値を変更するには、Traffic Controller チャートをダブルクリックして、[ブロック パラメーター] ダイアログ ボックスに新しい値を入力します。

パラメーター事前設定値説明
REDDELAY6 秒コントローラーが交差点で自動車の確認を開始するまでの時間。コントローラーが青信号をリクエストした後に信号機が青に切り替わるまでの最短時間でもあります。
MAXREDDELAY360 秒青信号をリクエストする前にコントローラーが自動車を確認する最長時間。
GREENDELAY180 秒信号機が青を維持する最長時間。
MINGREENDELAY120 秒信号機が青を維持する最短時間。
YELLOWDELAY15 秒信号機が黄色を維持する時間。

例の確認

  1. 次のシンボルのそれぞれでログを有効にします。[シンボル] ペインで、各シンボルを選択します。プロパティ インスペクターの [ログ] で、[信号データのログ] を選択します。

    • greenLightRequested

    • greenLightLocked

    • Light1

    • Light2

  2. [シミュレーション] タブで、[実行] をクリックします。

  3. [シミュレーション] タブで、[結果の確認] にある [データ インスペクター] をクリックします。

  4. シミュレーション データ インスペクターで、ログに記録された信号を個別の座標軸に表示します。boolean 信号の greenLightRequestedgreenLightLocked は、0 または 1 の数値として表示されます。ステート アクティビティ信号の Light1Light2 は、値が GreenYellowRed、および None の列挙型データとして表示されます。

Simulation Data Inspector showing the output of the chart.

シミュレーション時のチャート アクティビティを追跡するには、シミュレーション データ インスペクターのズーム ボタンとカーソル ボタンを使用できます。たとえば、次の表はシミュレーションの最初の 300 秒間についてアクティビティの詳細を示しています。

時間説明Light 1Light2greenLightRequestedgreenLightLocked
t = 0シミュレーションの開始時は両方の信号機が赤です。RedRedfalsefalse
t = 66 秒後 (REDDELAY)、両方の通りで自動車が待機しています。両方の信号機が greenLightRequested = true を設定して青信号をリクエストします。RedRedtruefalse
t = 12

さらに 6 秒後 (REDDELAY)、

  • Light 1 が青に変わり、greenLightLocked = true および greenLightRequested = false を設定します。

  • Light 2 が greenLightRequested = true を設定して青信号をリクエストします。

GreenRedfalse の後 truetrue
t = 132

120 秒後 (MINGREENDELAY)、Light 1 が黄色に変わります。

YellowRedtruetrue
t = 147

15 秒後 (YELLOWDELAY)、

  • Light 1 が赤に変わり、greenLightLocked = false を設定します。

  • Light 2 が青に変わり、greenLightLocked = true および greenLightRequested = false を設定します。

RedGreenfalsefalse の後 true
t = 153

6 秒後 (REDDELAY)、Light 1 が greenLightRequested = true を設定して青信号をリクエストします。

RedGreentruetrue
t = 267

Light 2 が青になってから 120 秒後 (MINGREENDELAY) に黄色に変わります。

RedYellowtruetrue
t = 282

15 秒後 (YELLOWDELAY)、

  • Light 2 が赤に変わり、greenLightLocked = false を設定します。

  • Light 1 が青に変わり、greenLightLocked = true および greenLightRequested = false を設定します。

GreenRedfalsefalse の後 true
t = 288

6 秒後 (REDDELAY)、Light 2 が greenLightRequested = true を設定して青信号をリクエストします。

GreenRedtruetrue

シミュレーションが t = 1000 秒で終了するまでサイクルが繰り返されます。

関連する例

詳細