Main Content

モデル参照の基礎

Model ブロックを使用してモデルを別のモデルに含めることができます。Model ブロックの各インスタンスは "モデル参照" になります。シミュレーションとコード生成では、"参照モデル" 内のブロックが 1 つのユニットとして一緒に実行されます。参照モデルを含むモデルは "親モデル" になります。親モデルと参照モデルの集合は "モデルの階層構造" を形成します。

モデルは、モデルやその派生エンティティに変更を加えなくても、スタンドアロン モデルや参照モデルとして機能します。参照モデルをスタンドアロン モデルとして使用するには、参照モデルは上位モデルからしか取得できないデータに依存できません。

モデル参照のメリット

サブシステムと同様に、モデル参照を利用すると大規模なモデルを階層的に構成できます。ライブラリと同様に、モデル参照を利用すると、ブロックのセットを一度定義し、それを繰り返し使用することができます。モデル参照には、サブシステムやライブラリにはない利点がいくつかあります。以下の利点のいくつかは、Model ブロックのコンテキストとは独立して参照モデルをコンパイルできることによるものです。

  • モジュール開発

    参照モデルはそれを参照するモデルとは独立して開発できます。

  • モデルの保護

    Simulink® Coder™ のライセンスでは、参照モデルの内容が表示されないため、知的財産を開示することなくモデルを配布できます。

    Simulink のライセンスでは、サードパーティが提供する保護モデルを参照できます。保護モデルに付与された許可に応じて、保護モデルのコードの表示、シミュレーション、および生成を実行できます。

  • 参照による使用

    モデルは何度でも参照できるので、同じものを繰り返しコピーする必要がなく、同じモデルを複数の異なるモデルから参照できます。

  • インクリメンタルな読み込み処理

    Simulink ソフトウェアは、必要になった時点で参照モデルを読み込むため、モデルの読み込みが速くなります。

  • 高速シミュレーション

    Simulink ソフトウェアは参照モデルをコードに変換し、そのコードを実行することによってモデルのシミュレーションができるので、対話型のシミュレーションより速く実行できます。

  • インクリメンタルなコード生成

    高速シミュレーションでのコード生成は、最後にコード生成が行われてからモデルに変更が加えられた場合にのみ生成されます。

  • 独立したコンフィギュレーション セット

    参照モデルが使用するコンフィギュレーション セットはその親や他の参照モデルと同じである必要はありません。

モデル参照の利点をまとめたビデオについては、Modular Design Using Model Referencing (2 分 50 秒) を参照してください。

モデル参照、サブシステム、およびライブラリを比較するには、モデル コンポーネントのタイプの選択を参照してください。同じモデル内で複数のコンポーネント化手法を使用できます。

モデルの階層構造

参照モデルには、下位モデルを参照する Model ブロックを含めることができます。"最上位モデル"は、モデル参照の階層構造の中で最上位にあるモデルです。モデル参照のレベルが 1 層のみの場合、親モデルと最上位モデルは同じです。循環継承を避けるために、Model ブロックは直接的にも間接的にも、モデルの階層構造内で上位にあるモデルを参照できません。次の図は、循環継承を示しています。

A top model references model A, which references model B. The referenced models, model A and model B, cannot reference the top model. Model B also cannot reference model A, which is its parent model.

親モデルには、同じモデルを参照する Model ブロックを複数含めることができますが、その参照モデルにグローバル データが定義されていないことが条件です。たとえば、sldemo_mdlref_basic モデルには sldemo_mdlref_counter モデルを参照する 3 つの Model ブロックが含まれています。

Three Model blocks display the name of the referenced model (sldemo_mdlref_counter) on their block icons.

同じ参照モデルを任意のレベルの別の親モデルに含めることもできます。

Model ブロックと参照モデルのインターフェイス

Model ブロックには、その参照先モデルのルートレベルの入力端子、出力端子、および制御端子に対応する入力端子、出力端子、および制御端子が表示されます。参照モデルを親モデル内の別の要素に接続するには、Model ブロックの端子を使用します。Model ブロックの端子に信号を接続すると、参照モデル内の対応する端子に信号が接続されます。

モデル sldemo_mdlref_basic では、各 Model ブロックに、3 つの入力 (2 つの Constant ブロックと 1 つの Pulse Generator ブロック) があります。各 Model ブロックには、スコープに記録された 1 つの出力信号があります。各 Pulse Generator ブロックからの入力信号は異なるサンプル時間を使用するため、各 Model ブロックからの出力信号はモデル インスタンスごとに異なります。

親モデルに接続するために、参照モデル sldemo_mdlref_counter に 3 つの Inport ブロック (upperlower、および input) と 1 つの Outport ブロック (output) があります。

Blocks that represent model input and output are part of the block diagram for the model.

参照モデルの信号属性は、Model ブロックのコンテキストとは独立しています。たとえば、信号次元とデータ型は Model ブロック境界で伝播されません。参照モデルの信号属性を定義するには、ルートレベルの Inport ブロックと In Bus Element ブロックのブロック パラメーターを定義します。

詳細については、モデル参照のインターフェイスと境界を参照してください。

モデル ワークスペースとデータ ディクショナリ

各モデルには、変数値を保存するための独自のワークスペースが用意されています。モデルの階層構造内で、各モデル ワークスペースは一意の名前空間として機能します。このため、同じ変数名を複数のモデル ワークスペース内で使用できます。モデル間でデータを共有するには、データ ディクショナリを使用できます。

データ定義の重複は、以下の条件において、モデル参照階層内で存在することができます。

  • 階層内の各モデルが 1 つの定義のみ参照できる。

  • 階層内ではモデル間で定義は同じでなければならない。

変数やオブジェクトの格納場所の詳細については、Simulink モデルの変数とオブジェクトの保存場所の決定を参照してください。

参照モデルの実行

外部信号を使用して、外部シミュレーション中に Model ブロックを実行するかどうかを制御する方法については、参照モデルの条件付き実行を参照してください。

Variant Subsystem ブロックには、バリアント システムとして Model ブロックを含めることができます。バリアント システムの詳細については、バリアントとは、およびどのような場合にそれを使用するかを参照してください。

既定では、再利用可能な参照モデルの各 Model ブロック インスタンスでブロック パラメーターに同じ値が使用されます。再利用可能な参照モデルのインスタンスごとに異なるブロック パラメーター値を指定するには、モデル引数を作成します。たとえば、Gain ブロックをモデル sldemo_mdlref_counter に追加すると、モデル引数によりこのモデルの 3 つのインスタンスはそれぞれ異なるゲイン値を使用します。再利用可能な参照モデルのインスタンスのパラメーター化を参照してください。

モデル マスクでは、Model ブロックの外観を制御し、ブロックでのモデル引数の表示をカスタマイズできます。モデル マスク要件については、モデル マスクを参照してください。

参照モデルのシミュレーションとコード生成

参照モデルをインタープリターによってシミュレーションすることも (ノーマル モード)、参照モデルをコードにコンパイルし、そのコードを実行してシミュレーションすることもできます (アクセラレータ モード)。詳細については、モデルの階層構造内のシミュレーション モードの選択を参照してください。

Simulink キャッシュ ファイルには、シミュレーションとコード生成を高速化するビルド アーティファクトが含まれています。詳細およびワークフロー例については、シミュレーションを高速化するための Simulink キャッシュ ファイルの共有を参照してください。

モデル参照階層向けのコード生成の詳細については、モデル参照階層向けのコードの生成 (Simulink Coder)を参照してください。

参考

ブロック

関連する例

詳細