このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
時相論理を使用したチャート アクションのスケジューリング
Stateflow チャートの動作をシミュレーション時間によって定義するには、チャートのステート アクションと遷移アクションに時相論理演算子を含めます。時相論理演算子は、ステートがアクティブのままであった時間や論理条件が真のままであった時間の長さを提示する組み込み関数です。時相論理を使って、以下のタイミングを制御できます。
ステート間の遷移
関数の呼び出し
変数値の変化
絶対時間の時相論理で最もよく使われる演算子は次のとおりです。
after
—after(n,sec)
は、演算子を含むステートまたは演算子を含む遷移の遷移元ステートがアクティブになってからn
秒のシミュレーション時間が経過している場合、true
を返します。それ以外の場合、演算子はfalse
を返します。この演算子は、イベントベースの時相論理および絶対時間の時相論理を、秒 (sec
)、ミリ秒 (msec
)、およびマイクロ秒 (usec
) 単位でサポートしています。elapsed
—elapsed(sec)
は、関連するステートがアクティブになってから経過したシミュレーション時間の秒数を返します。duration
—duration(C)
は、論理条件C
がtrue
になってから経過したシミュレーション時間の秒数を返します。
バンバン温度制御器のモデル化
この例は、時相論理を使用して、ボイラーの内部温度を制御するバンバン制御器をモデル化します。
例は Stateflow チャートと Simulink® サブシステムで構成されています。Bang-Bang Controller
チャートは、現在のボイラー温度を基準指定値と比較して、ボイラーをオンにするかどうかを判定します。Boiler Plant Model
サブシステムは、制御器のステータスに従って温度を増減させることで、ボイラー内部のダイナミクスをモデル化します。その後、チャートではボイラーの温度がシミュレーションの次のステップに使用されます。
Bang-Bang Controller
チャートは時相論理演算子 after
を使用して以下を行います。
ボイラーのオン/オフが切り替わる際にバンバン サイクルのタイミングを調整する。
ボイラーの動作モードに応じてさまざまな速さで点滅するステータス LED を制御する。
ボイラー サブシステムと LED サブシステムの動作を定義するタイマーは、制御器のシミュレーションをブロックしたり中断することなく互いに独立して動作します。
バンバン サイクルのタイミング
Bang-Bang Controller
チャートには、ボイラーの 2 つの動作モードを表す 1 組のサブステート On
と Off
が含まれています。このチャートはアクティブ ステートの出力データ boiler
を使用して、どのサブステートがアクティブであるかを表しています。
On
サブステートと Off
サブステート間の遷移の条件が、バンバン制御器の動作を定義します。
On
からOff
への最初の遷移で、条件after(20,sec)
は、ボイラーを 20 秒間オンにした後オフにします。Off
からOn
への遷移で、条件after(40,sec)[cold()]
は、ボイラーの温度が基準指定値より低い状態が少なくとも 40 秒間続いたとグラフィカル関数cold()
によって示されたときに、ボイラーをオンにします。On
からOff
への 2 番目の遷移で、On
ステートの内部遷移ロジックによってボイラー温度が基準指定値以上であると判定された場合、自明な条件によってボイラーがオフになります。
これらの遷移アクションの結果、バンバン サイクルのタイミングは現在のボイラー温度に左右されることになります。シミュレーションの開始時、ボイラーは冷たく、制御器は Off
ステートを 40 秒維持し、On
ステートを 20 秒維持します。時間 秒に、ボイラーの温度は基準指定値に達します。それ以降、ボイラーは
Off
ステートにある間に失われた熱だけを補填する必要があります。その後、制御器は Off
ステートを 40 秒維持し、On
ステートを 4 秒維持します。
ステータス LED のタイミング
Off
ステートには、アクション after(5,sec)
でトリガーされた自己ループ遷移をもつサブステート Flash
が含まれています。この遷移のため、Off
ステートがアクティブな場合はサブステートがその entry
アクションを実行してグラフィカル関数 flash_LED
を 5 秒ごとに呼び出します。この関数は出力シンボル LED
の値を 0 と 1 の間で切り替えます。
On
ステートは、グラフィカル関数 flash_LED
を組み合わせた entry, during
ステート アクションとして呼び出します。On
ステートがアクティブな場合は、このアクションによってシミュレーションの各タイム ステップで関数が呼び出され、出力シンボル LED
の値が 0 と 2 の間で切り替わります。
その結果、ステータス LED のタイミングはボイラーの動作モードに左右されることになります。以下に例を示します。
秒から
秒まではボイラーがオフになり、LED 信号は 5 秒ごとに 0 と 1 の間で切り替わる。
秒から
秒まではボイラーがオンになり、LED 信号は毎秒 0 と 2 の間で切り替わる。
秒から
秒まではボイラーがオフになり、LED 信号は 5 秒ごとに 0 と 1 の間で切り替わる。
例の確認
追加の時相論理を使用して、ボイラーの温度が基準指定値に近づくとバンバン サイクルのタイミングがどのように変化するかを調査します。
1. elapsed
および duration
演算子を呼び出す新しいステート アクションを入力します。
On
ステートで、Timer1
をOn
ステートがアクティブである時間の長さに設定します。
en,du,ex: Timer1 = elapsed(sec);
Off
ステートで、Timer2
をボイラーの温度が基準指定値以上である時間の長さに設定します。
en,du,ex: Timer2 = duration(temp>=reference);
2.[シンボル] ペインで [未定義のシンボルを解決] をクリックします。Stateflow エディターが、シンボル Timer1
と Timer2
を出力データに解決します。
3. Timer1
と Timer2
のログを有効にします。[シンボル] ペインで、各シンボルを選択します。次に、[プロパティ インスペクター] の [ログ] で [信号データのログ] を選択します。
4. [シミュレーション] タブで、[実行] をクリックします。
5. [シミュレーション] タブで、[結果の確認] にある [データ インスペクター] をクリックします。
6. シミュレーション データ インスペクターで、信号 boiler
および Timer1
を同じ座標軸のセットに表示します。プロットは次のことを示しています。
バンバン サイクルの
On
フェーズは通常、ボイラーが冷たい場合は 20 秒、ボイラーが温かい場合は 4 秒続く。ボイラーがはじめて基準温度に達する際は、サイクルが途中で中断され、制御器の
On
ステートは 18 秒間しか維持されない。ボイラーが温かい場合、制御器の
On
ステートが 3 秒しか維持されないため、最初のサイクルはその後のサイクルよりもわずかに短くなる。
7. シミュレーション データ インスペクターで、信号 boiler
および Timer2
を同じ座標軸のセットに表示します。プロットは次のことを示しています。
ボイラーが温まった後は、バンバン サイクルの
Off
フェーズで冷えるまでに通常 9 秒かかる。ボイラーがはじめて基準温度に達する際は、冷却に 19 秒 (その他のサイクルよりも 2 倍以上の時間) かかる。
サイクルが短く冷却時間が長いのは、On
ステート内のサブステート階層による影響です。ボイラーがはじめて基準温度に達する場合、HIGH
から NORM
への遷移によって制御器は追加のタイム ステップの間オンが維持されるため、ボイラーは通常より温かくなります。その後のサイクルでは、ヒストリ ジャンクションによって、On
フェーズは NORM
サブステートがアクティブな状態で開始されます。その後、制御器はボイラーが基準温度に達すると直ちにボイラーをオフにするので、ボイラーの温度はより低いものになります。