代数ループを使用したモデル化における考慮事項
疑似代数ループをもつ大規模モデルの管理
代数ループをもつ大規模モデルでは、以下の設計法を採用します。
不連続または倍精度以外のデータ型を含むループの作成を避けます。代数ループ ソルバーは勾配に基づいて動作するため、精度の高い状態で代数制約を解かなければなりません。
Atomic Subsystem が直達であるかどうかを明確に識別するためのスキームを作成します。ブロックの色分けやブロックの命名規則など、視覚的にわかりやすいスキームを使用します。
モデルのコードを作成する計画がある場合は、すべての Atomic Subsystem の [代数ループの発生の最小化] パラメーターを有効にします。可能であれば、Atomic Subsystem の入力端子が非直達のブロックに直接接続されるようにします。
Bus Creator ブロックまたは Mux ブロックを使用する際に、非直達のパスと直達のパスが結合することを避けてください。その結果発生する疑似代数ループを、ソフトウェアで削除できなくなる場合があります。代わりに、非直達と直達のオブジェクトを別々のサブシステムにクラスタリングすることを検討します。
Bus Selector ブロックを使用して、必要な信号のみを Atomic Subsystem に渡します。
Model ブロックと直達
Model ブロックがループの一部となっていて、そのブロックに直達がある場合、代数ループになる可能性があります。モデル内の代数ループは必ずしもエラーにはなりませんが、予期しない結果になる場合があります。詳細は、以下を参照してください。
代数ループをグラフィカルに参照する場合、詳細については、モデル内の代数ループの強調表示を参照してください。
代数ループの自動検出方法の詳細は、モデル コンフィギュレーション パラメーター: 診断ペインのAlgebraic loopオプションを参照してください。
参照モデルの構造に起因する Model ブロックの直達
Model ブロックは、参照モデルの構造により直達ブロックになる場合があります。サブ モデル構造により直達が発生し、不要な代数ループが生成される場合は、以下のことを行うことができます。
以下に説明する手法を使って、代数ループを自動的に除きます。
代数ループをブレークするのに必要な数の Unit Delay ブロックを手動で挿入します。
モデル コンフィギュレーションが原因で起きる Model ブロックの直達
汎用リアル タイム (grt
) ベースおよび組み込みリアル タイム (ert
) ベースのターゲットにすると、[コンフィギュレーション パラメーター] ダイアログの [1 つの出力/更新関数] オプションを選択できます。このオプションは、生成コードが別々の出力をもつかどうか、関数や連結した出力/更新関数を更新するかどうかを決めます。詳細は、以下を参照してください。
出力関数や更新関数の、個別または組み合わせの詳細は、生成された C 関数インターフェイスをモデルのエントリポイント関数用に構成 (Simulink Coder)を参照してください。
コードが個別または組み合わせた関数をもつかどうか指定する場合、詳細は、1 つの出力/更新関数 (Simulink Coder)を参照してください。
[1 つの出力/更新関数] (既定の設定) が有効の場合、Model ブロックは組み合わせの出力/更新関数をもちます。これにより、参照されるモデルの構造にかかわらず、ブロックはすべての入力端子に対して直達ブロックになります。予想していない代数ループが生じた場合は、以下を行うことができます。
[1 つの出力/更新関数] を無効にします。Model ブロックのコードは、個別の出力関数と更新関数をもちます。直達を除くので、代数ループも除くことができます。
代数ループをブレークするのに必要な 1 つ以上の Unit Delay ブロックを手動で挿入します。
代数ループ ソルバー使用時のブロック優先順位の変更
シミュレーションの更新段階で、Simulink® はシミュレーション中にブロック メソッドを実行する順序を判断します。このブロックの呼び出し順序が "実行順序" です。
非バーチャル ブロックに優先準備を割り当て、Simulink にその他のブロックに対する相対的な実行順序を指示している場合には、代数ループ ソルバーが任意の代数ループを解こうとするときに、これらの優先順位は守られません。