ブロックの実行順序を変更するにはどうすればよいですか?
59 views (last 30 days)
Show older comments
MathWorks Support Team
on 25 Oct 2013
Edited: MathWorks Support Team
on 9 Jun 2021
Simulink モデルにおいて、各ブロックの実行順序を変更する方法を教えてください。
Accepted Answer
MathWorks Support Team
on 9 Jun 2021
Edited: MathWorks Support Team
on 9 Jun 2021
Simulink モデルの各ブロックの実行順序は、[書式] -> [ブロックの表示] -> [ソート順序](R2012a まで)、[情報表示]->[ブロック]->[ソートされた実行順序](R2012b以降)を選択すると各ブロック上に表示されますが、この実行順序を変更したい場合、ブロックの優先度を指定することで可能です。実際のプログラムの実行順序も、ソート順で表示された順番通りに行われます。
純粋にシステム解析が目的のシミュレーションであれば、特に優先度を設定する必要はありませんが、Real-Time Workshop等を使用したリアルタイムアプリケーションの構築や、組込みコード開発のためのシミュレーションの際に、実際のターゲット環境での処理に応じて実行順序を変更する場合にご利用いただく必要があります。
ブロックの実行順序を変更するには、ブロックプロパティの「一般」タブにある「優先度」を編集します。番号が小さいほど、優先順位は高くなります。(負の整数および 0も有効な優先順位の値として設定できます。)
ブロックプロパティを編集するには、ブロックを右クリック後、コンテキストメニューから「ブロックプロパティ」を選択します。
たとえば、A ブロックの優先度を[1]に設定し、B ブロックの優先度を[2]に設定すると、AブロックがBブロックより先に実行されます。
ただし、この設定が以下の実行順序の基本規則に反する場合は、設定が無視されます。
1. 直接フィードスルーを持つブロックよりも、それに入力を与えているブロックが必ず先に実行される。
2. 直接フィードスルーを持たないブロックは、1.を満たす任意の順序で実行される。
直接フィードスルーを持つブロックとは、出力値を計算する際に入力値が必ず必要になるブロックで、Gain、Product、Sum ブロックなどになります。一方、直接フィードスルーを持たないブロックとは、出力値を計算する際に入力値が直接は不要なブロックで、Integrator、Memory、UnitDelay など出力値が状態値のみによって決まるブロックです。
その際、[シミュレーション] -> [コンフィギュレーション] -> [診断] の [ブロックプライオリティ違反] が [ワーニング] あるいは [エラー] に設定している場合、シミュレーション実行時に MATLAB コマンドウィンドウに指定した優先度の通りにできなかった旨の警告あるいはエラーが表示されます。
Simulationの実行順と生成されるコードの実行順に関しては、下記をご参照ください。
・モデルのソート順序と生成コードの処理順序が一致していることを確認する方法はありますか?
0 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!