モデル内の代数ループの識別
Simulink® によってモデルに代数ループがあることが報告された場合、代数ループ ソルバーによってループを解くことができる可能性があります。Simulink でループが解けない場合に、ループを削除する方法がいくつかあります。
このワークフローを使用して、代数ループを削除する方法を決定します。
モデル内の代数ループの強調表示
getAlgebraicLoops
を使用してモデル内の代数ループを識別し、それらの代数ループを Simulink エディターで強調表示します。このアプローチを使用すると、次のことが可能になります。
モデルの階層構造の複数の階層を移動して代数ループを見つけることができます。
真の代数ループと疑似代数ループを識別できます。
モデル内のすべてのループを同時に可視化できます。
境界を越えて、モデルの内外に移動する必要はありません。
ループを順番に検出する必要はありません。また、ループを検出して解くたびに、モデルをコンパイルする必要はありません。したがって、ループをすばやく解くことができます。
特定のサブシステムではなく、モデル全体で代数ループの強調表示を実行します。
モデルを開きます。
[モデル コンフィギュレーション パラメーター] の [診断] ペインで、[代数ループ] を
[なし]
または[警告]
に設定します。このパラメーターを[エラー]
に設定すると、モデルはコンパイルされません。エラーなしでモデルをコンパイルします。代数ループを強調表示する前にモデルをコンパイルしなければなりません。
MATLAB® コマンド プロンプトで、次のように入力します。
Simulink.BlockDiagram.getAlgebraicLoops(bdroot)
関数 getAlgebraicLoops
によって、サブシステム内の代数ループを含め、モデル内の代数ループが強調表示されます。また、各ループに関する情報を含む以下のレポートが作成されます。
実線は真の代数ループを表します。
点線は疑似代数ループを表します。
代数変数が割り当てられたブロックの周りは赤で強調表示されます。
[ループ ID] を使用して、特定のループを含むシステムを識別できます。
ループの [表示] チェック ボックスのオン/オフを切り替えてレポートをカスタマイズします。
モデル内の代数ループを識別したら、モデルを編集してそれらの代数ループを削除できます。強調表示レポートを閉じて、モデルを変更します。レポートを閉じないとモデルは編集できません。
Simulink ではループの強調表示は保存されません。モデルを閉じるか、表示を終了すると、ループの強調表示は削除されます。
代数ループ診断の使用
Simulink はシミュレーションの初期化時に代数ループを検出します。たとえば、ブロック線図を更新したときなどです。[代数ループ] の診断を設定して、モデル内で代数ループが検出されたらエラーまたは警告が報告されるようにします。
[モデル コンフィギュレーション パラメーター] の [診断] ペインで、[代数ループ] パラメーターを設定します。
none
-- Simulink は代数ループの解を出そうとしますが、解を出せなければエラーを報告します。warning
-- 代数ループがあると警告が出ます。Simulink は代数ループの解を出そうとしますが、解を出せなければエラーを報告します。error
-- 代数ループは初期化を停止します。Simulink がループを解く前に、手動でループを確認します。
以下の例では、代数ループの診断を使用して sldemo_hydcyl
モデルで代数ループを強調表示する方法を示します。
sldemo_hydcyl
モデルを開きます。[モデル コンフィギュレーション パラメーター] の [診断] ペインで、[代数ループ] パラメーターを
error
に設定します。モデルをシミュレーションしてみます。
Simulink が初期化中に代数ループを検出すると、シミュレーションは停止します。診断ビューアーにエラー メッセージが表示され、代数ループの一部になっているすべてのブロックがリストされます。モデルでは、赤く強調表示された部分は、ループを構成するブロックと信号を示します。
強調表示を削除するには、診断ビューアーを閉じます。