Real-Time Workshop User's Guide | ![]() ![]() |
リアルタイムでの速いブロックから遅いブロックへの遷移
速いブロックが遅いブロックを駆動するモデルでは、遅いブロックが2つ以上の速いブロックにまたがって実行できるようにしなければなりません。これは、遅いブロックの出力の計算が終わる前に、速いブロックの出力が変更される場合があることを意味します。つぎの図は、この問題が起こる状況を説明します。斜線の部分は、終了以前に優先度の高いタスクによりタスクが差し換えられる時間を表わします。
図 7-8: 速いブロックから遅いブロックへの遷移の時間のオーバーラップ (T=サンプル時間)
図 7-8では、遅いブロックの実行が終了する前に、速いブロックは2回実行します。遅いタスクへの入力データが変化するため、これは予期せぬ結果になります。
この状況を避けるためには、2秒(遅い)のブロックが実行を終了するまで1秒(速い)のブロックの出力を維持しなければなりません。これを行うためには、1秒と2秒のブロックの間にZero-Order Holdブロックを挿入します。Zero Order Holdブロックのサンプル時間は、2秒(遅いブロックのサンプル時間)に設定されなければなりません。
Zero Order Holdブロックは、遅いブロックのサンプル時間で実行しますが、速いブロックの優先度をもちます。
これにより、1秒のブロック(優先度が高い)よりも前にZero Order Holdブロックを実行し、2秒のブロックの実行中(遅いサンプルレートで実行される)には出力値が一定に保持されることが保証されます。
![]() | Simulinkでの速いブロックから遅いブロックへの遷移 | Simulinkでの遅いブロックから速いブロックへの遷移 | ![]() |