このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
アクティブ ステート データを使用したチャート アクティビティの監視
Stateflow® チャートにチャート階層と相関性をもつデータが含まれている場合は、アクティブ ステート データを用いて設計を簡略化できます。アクティブ ステート データを有効にすることで、以下が可能になります。
チャート アクティビティを反映させる手動のデータ更新を回避する。
シミュレーション データ インスペクターでチャート アクティビティのログを取り監視を行う。
チャート アクティビティ データを使用して他のサブシステムを制御する。
チャート アクティビティ データを他の Simulink ブロックにエクスポートする。
たとえば、次の信号機のモデルでは、アクティブなステートによって出力信号 color
の値が決まります。アクティブ ステート データを有効にすることで、チャートの設計を簡略化できます。この場合、Stateflow チャートはステート アクティビティを追跡することにより信号機の色を提示できるため、color
の値を明示的に更新する必要はありません。
アクティブ ステート データを有効にするには、監視するステートを選択します。その後、[プロパティ インスペクター] で次を行います。
1. [監視する出力の作成] を選択します。
2.以下のアクティビティ タイプのいずれかを選択します。
Self activity
— ステートがアクティブかどうかを示すブール値Child activity
— アクティブな子ステートを示す列挙値Leaf state activity
— アクティブなリーフ ステートを示す列挙値
3. アクティブ ステート データ シンボルの [データ名] を入力します。
4. オプションで、[Child activity]
または [Leaf state activity]
に対し、アクティブ ステートのデータ型として [Enum 名] を入力します。
既定では、Stateflow チャートはステート アクティビティを出力データとして Simulink モデルに報告します。アクティブ ステート データ シンボルのスコープをローカル データに変更するには、[シンボル] ペインを使用します。
信号機コントローラーのモデル化
この例では、アクティブ ステート データを使用して 1 組の信号機用のコントローラー システムをモデル化します。
この Traffic Controller
チャートでは、2 つのパラレル サブチャートにより、信号機を制御するロジックを管理しています。各サブチャートには 3 つの子ステート Red
、Yellow
、Green
で構成される同一の階層があります。出力データの Light1
と Light2
は、サブチャート内のアクティブな子ステートに対応します。これらの信号は以下を行います。
アニメーション化された信号機のフェーズを判定する。
各信号機で待機する自動車の台数を報告する。
2 つの信号機が同時に青になることが決してないように、Safety Assertion サブシステムを操作する。
Traffic Controller チャート内でサブチャートを表示するには、チャートの左下隅にある矢印をクリックします。
各トラフィック コントローラーは、その子ステートを、Red
から Green
、さらに Yellow
を経て、Red
に戻るという順序で繰り返します。各ステートは信号機のサイクルにおける 1 フェーズに対応します。出力信号の Light1
と Light2
は、特定の時点でどのステートがアクティブかを示します。
赤信号
Red
ステートがアクティブになると、信号機のサイクルが開始されます。短い遅延の後、コントローラーは交差点で待っている自動車がないか確認します。少なくとも 1 台の自動車が検知されるか、または一定の時間が経過すると、コントローラーは greenLightRequest
を true
に設定して青信号をリクエストします。リクエストを行った後、コントローラーはもう一方の信号機が赤であることを検出するまで Red
ステートを短時間維持します。その後、コントローラーは Green
へ遷移します。
青信号
Green
ステートがアクティブになると、コントローラーは greenLightRequest
を false
に設定してその青信号のリクエストをキャンセルします。コントローラーは greenLightLocked
を true
に設定し、もう一方の信号機が青に変わらないようにします。短い遅延の後、コントローラーはもう一方の信号機から青信号のリクエストがないか確認します。リクエストを受け取るか、または一定の時間が経過すると、コントローラーは Yellow
ステートへ遷移します。
黄色信号
Yellow
ステートが非アクティブになると、コントローラーは greenLightLocked
を false に設定し、もう一方の信号機が青になっても安全であることを示します。Red
ステートへ遷移する前に、コントローラーは一定の時間 Yellow
ステートを維持します。その後、信号機のサイクルが再開されます。
信号機のタイミング
信号機サイクルのタイミングはいくつかのパラメーターによって定義されます。信号機のタイミングを変更するには、Traffic Controller
チャートをダブルクリックして、ダイアログ ボックスに次のパラメーターの新しい値を入力します。
REDDELAY
— コントローラーが交差点に自動車がないか確認するまでの時間。この値は、コントローラーが青信号をリクエストした後に信号機が青に切り替わるまでの最短時間でもあります。既定値は 6 秒です。MAXREDDELAY
— 青信号をリクエストする前にコントローラーが自動車を確認する最長時間。既定値は 360 秒です。GREENDELAY
— 信号機が青を維持する最長時間。既定値は 180 秒です。MINGREENDELAY
— 信号機が青を維持する最短時間。既定値は 120 秒です。YELLOWDELAY
— 信号機が黄色を維持する時間。既定値は 15 秒です。
例の確認
左下隅にある矢印をクリックしてチャートを開きます。
[シンボル] ペインで、
greenLightRequested
を選択します。次に、[プロパティ インスペクター] の [ログ] で [信号データのログ] を選択します。greenLightLocked
、Light1
、およびLight2
について前の手順を繰り返します。[シミュレーション] タブで、[実行] をクリックします。
[シミュレーション] タブで、[結果の確認] にある [データ インスペクター] をクリックします。
シミュレーション データ インスペクターで、ログに記録された信号を個別の座標軸に表示します。boolean 信号の
greenLightRequested
とgreenLightLocked
は、0 または 1 の数値として表示されます。ステート アクティビティ信号のLight1
とLight2
は、値がGreen
、Yellow
、Red
、およびNone
の列挙データです。
シミュレーション時のチャート アクティビティを追跡するには、シミュレーション データ インスペクターのズーム ボタンとカーソル ボタンを使用できます。たとえば、シミュレーションの最初の 300 秒間における主要な瞬間は次のとおりです。
— シミュレーションの開始時は両方の信号機が赤です。
Light1
とLight2
はRed
、greenLightRequested
はfalse
、greenLightLocked
はfalse
です。— 6 秒後 (
REDDELAY
の既定値)、両方の通りで自動車が待機しているため、両方の信号機が青信号をリクエストします。Light1
とLight2
は引き続きRed
、greenLightRequested
はtrue
、greenLightLocked
はfalse
です。— さらに 6 秒後 (
REDDELAY
の既定値)、Light 1 が青になり、青信号のリクエストをキャンセルして、greenLightLocked
をtrue
に設定します。次に、Light 2 が青信号をリクエストします。Light1
はGreen
、Light2
はRed
、greenLightRequested
はfalse
になってからtrue
になり、greenLightLocked
はtrue
です。— 120 秒後 (
MINGREENDELAY
の既定値)、Light 1 が黄色に変わります。Light1
はYellow
、Light2
はRed
、greenLightRequested
はtrue
、greenLightLocked
はtrue
です。— 15 秒後 (
YELLOWDELAY
の既定値)、Light 1 が赤に変わり、greenLightLocked
をfalse
に設定します。次に、Light 2 が青に変わり、青信号のリクエストをキャンセルして、greenLightLocked
をtrue
に設定します。Light1
はRed
、Light2
はGreen
、greenLightRequested
はfalse
、greenLightLocked
はfalse
になってからtrue
になります。— 6 秒後 (
REDDELAY
の既定値)、Light 1 が青信号をリクエストします。Light1
はRed
、Light2
はGreen
、greenLightRequested
はtrue
、greenLightLocked
はtrue
です。— Light 2 が青になってから 120 秒後 (
MINGREENDELAY
の既定値)、Light 2 が黄色に変わります。Light1
はRed
、Light2
はYellow
、greenLightRequested
はtrue
、greenLightLocked
はtrue
です。— 15 秒後 (
YELLOWDELAY
の既定値)、Light 2 が赤に変わり、greenLightLocked
をfalse
に設定します。次に、Light 1 が青に変わり、青信号のリクエストをキャンセルして、greenLightLocked
をtrue
に設定します。Light1
はGreen
、Light2
はRed
、greenLightRequested
はfalse
、greenLightLocked
はfalse
になってからtrue
になります。— 6 秒後 (
REDDELAY
の既定値)、Light 2 が青信号をリクエストします。Light1
はGreen
、Light2
はRed
、greenLightRequested
はtrue
、greenLightLocked
はtrue
です。
シミュレーションが 秒で終了するまでサイクルが繰り返されます。