最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

時相論理を使用したチャート アクションのスケジューリング

Stateflow® チャートの動作をシミュレーション時間によって定義するには、チャートのステート アクションと遷移アクションに "時相論理演算子" を含めます。時相論理演算子は、ステートがアクティブのままであった時間や論理条件が真のままであった時間の長さを提示できる組み込み関数です。時相論理を使って、以下のタイミングを制御できます。

  • ステート間の遷移

  • 関数の呼び出し

  • 変数値の変化

詳細については、アクションを使用したチャート動作の定義を参照してください。

時相論理演算子

絶対時間の時相論理で最もよく使われる演算子は afterelapsed、および duration です。

演算子構文説明

after

after(n, sec)

関連するステートがアクティブになってから n 秒のシミュレーション時間が経過している場合、true を返します。それ以外の場合、演算子は false を返します。

elapsed

elapsed(sec)

関連するステートがアクティブになってから経過したシミュレーション時間の秒数を返します。

duration

duration(C)

論理条件 Ctrue になってから経過したシミュレーション時間の秒数を返します。

以下が発生するたびに、各演算子はその関連タイマーを 0 にリセットします。

  • 演算子を含むステートが再びアクティブになる。

  • 演算子を含む遷移の遷移元ステートが再びアクティブになる。

  • duration 演算子内の論理条件が false になる。

メモ

after などの一部の演算子は、イベントベースの時相論理および絶対時間の時相論理を、秒 (sec)、ミリ秒 (msec)、およびマイクロ秒 (usec) 単位でサポートしています。詳細については、時相論理を使用したチャート実行の制御を参照してください。

時相論理の例

この例は、時相論理を使用して、ボイラーの内部温度を制御するバンバン制御器をモデル化します。

例は Stateflow チャートと Simulink® サブシステムで構成されています。Bang-Bang Controller チャートは、現在のボイラー温度を基準指定値と比較して、ボイラーをオンにするかどうかを判定します。Boiler Plant Model サブシステムは、ボイラー内部のダイナミクスをモデル化し、制御器のステータスに従ってその温度を増減させます。その後、ボイラーの温度はシミュレーションの次のステップのために制御器のチャートに戻されます。

Bang-Bang Controller チャートは時相論理演算子 after を使用して以下を行います。

  • ボイラーのオン/オフが切り替わる際にバンバン サイクルのタイミングを調整する。

  • ボイラーの動作モードに応じてさまざまな速さで点滅するステータス LED を制御する。

ボイラー サブシステムと LED サブシステムの動作を定義するタイマーは、制御器のシミュレーションをブロックしたり中断することなく互いに独立して動作します。

バンバン サイクルのタイミング

Bang-Bang Controller チャートには、ボイラーの 2 つの動作モードを表す 1 組のサブステート OnOff が含まれています。グラフィカル関数 turn_boiler は出力データ boiler を更新して、どちらのサブステートがアクティブであるかを示します。

On サブステートと Off サブステート間の遷移を保護するアクションが、バンバン制御器の動作を定義します。

遷移アクション説明
On から Offafter(20,sec)On ステートを 20 秒維持した後 Off ステートに遷移します。
Off から Onafter(40,sec)[cold()]ボイラーの温度が基準指定値より低い (グラフィカル関数 cold()true を返す) 場合、Off ステートを少なくとも 40 秒維持した後 On ステートに遷移します。
On から Off[Heater.On.warm()]ボイラーの温度が基準指定値以上 (グラフィカル関数 Heater.On.warm()true を返す) の場合、Off ステートに遷移します。

これらの遷移アクションの結果、バンバン サイクルのタイミングは現在のボイラー温度に左右されることになります。シミュレーションの開始時、ボイラーは冷たく、制御器は Off ステートを 40 秒維持し、On ステートを 20 秒維持します。時間 t = 478 秒に、ボイラーの温度は基準点に達します。それ以降、ボイラーは Off ステートにある間に失われた熱だけを補填する必要があります。その後、制御器は Off ステートを 40 秒維持し、On ステートを 4 秒維持します。

ステータス LED のタイミング

Off ステートには、アクション after(5,sec) で保護された自己ループ遷移をもつサブステート Flash が含まれています。この遷移のため、Off ステートがアクティブな場合はサブステートがその entry アクションを実行してグラフィカル関数 flash_LED を 5 秒ごとに呼び出します。この関数は出力シンボル LED の値を 0 と 1 の間で切り替えます。

On ステートは、グラフィカル関数 flash_LEDduring タイプのステート アクションとして呼び出します。On ステートがアクティブな場合は、シミュレーションの各タイム ステップで (この場合は毎秒) 関数が呼び出され、出力シンボル LED の値が 0 と 2 の間で切り替わります。

その結果、ステータス LED のタイミングはボイラーの動作モードに左右されることになります。以下に例を示します。

  • t = 0 秒から t = 40 秒まではボイラーがオフになり、LED 信号は 5 秒ごとに 0 と 1 の間で切り替わる。

  • t = 40 秒から t = 60 秒まではボイラーがオンになり、LED 信号は毎秒 0 と 2 の間で切り替わる。

  • t = 60 秒から t = 100 秒まではボイラーがオフになり、LED 信号は 5 秒ごとに 0 と 1 の間で切り替わる。

例の確認

追加の時相論理を使用して、ボイラーの温度が基準指定値に近づくとバンバン サイクルのタイミングがどのように変化するかを調査します。

  1. elapsed および duration 演算子を呼び出す新しいステート アクションを入力します。

    • On ステートで、Timer1On ステートがアクティブである時間の長さに設定します。

      en,du,ex: Timer1 = elapsed(sec)

    • Off ステートで、Timer2 をボイラーの温度が基準指定値以上である時間の長さに設定します。

      en,du,ex: Timer2 = duration(temp>=reference)

    en,du,ex というラベルは、対応するステートがアクティブになるたびにこれらのアクションが発生することを示します。

  2. [シンボル] ペインで [未定義のシンボルを解決] をクリックします。Stateflow エディターが、シンボル Timer1Timer2 を出力データ として解決します。

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

    • boiler

    • Timer1

    • Timer2

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

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

  6. シミュレーション データ インスペクターで、信号 boiler および Timer1 を同じ座標軸のセットに表示します。プロットは次のことを示しています。

    • バンバン サイクルの On フェーズは通常、ボイラーが冷たい場合は 20 秒、ボイラーが温かい場合は 4 秒続く。

    • ボイラーがはじめて基準温度に達する際は、サイクルが途中で中断され、制御器の On ステートは 18 秒間しか維持されない。

    • ボイラーが温かい場合、制御器の On ステートが 3 秒しか維持されないため、最初のサイクルはその後のサイクルよりもわずかに短くなる。

  7. シミュレーション データ インスペクターで、信号 boiler および Timer2 を同じ座標軸のセットに表示します。プロットは次のことを示しています。

    • ボイラーが温まった後は、バンバン サイクルの Off フェーズで冷えるまでに通常 9 秒かかる。

    • ボイラーがはじめて基準温度に達する際は、冷却するよりも 2 倍以上の時間 (19 秒) がかかる。

サイクルが短く冷却時間が長いのは、On ステート内のサブステート階層による影響です。ボイラーがはじめて基準温度に達する場合、HIGH から NORM への遷移によって制御器は追加のタイム ステップの間オンが維持されるため、ボイラーは通常より温かくなります。それより後のサイクルでは、ヒストリ ジャンクション によって、On フェーズは NORM サブステートがアクティブな状態で開始されることになります。その後、制御器はボイラーが基準温度に達すると直ちにボイラーをオフにするので、ボイラーの温度はより低いものになります。

参考

| |

関連する例

詳細