このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
モデル参照の動作と機能
モデルのサイズが大きくなり、複雑度が増してきたら、設計の一部を表す別のモデルを作成して参照できます。モデルごとに範囲を適切に定義し、要件によって定義された機能を実行しなければなりません。
モデルを別のモデルに含めるには、Model ブロックを使用します。各 Model ブロックは "モデル参照"、つまり別のモデルへの参照です。各モデルは別々のモデル ファイルに保存されます。同じモデルをモデルの階層構造で何度でも参照でき、同じモデルを複数の異なるモデルから参照することもできます。これらの参照は、"モデルの階層構造" を作成します。
モデルは、モデルやモデルから派生するエンティティに変更を加えなくても、参照モデルとスタンドアロン モデルの両方として機能します。
モデルを参照することで以下が実現します。
モジュール開発が可能になり、階層内のモデルをチームのメンバーやサード パーティと同時に開発できます。
インクリメンタルな動作により、モデルの読み込みが速くなり、シミュレーションとコード生成を高速化できます。
モデルの階層構造内のコンポーネントの動作をテストおよび検証するための分離された環境が提供されます。
知的所有権保護の有無に関係なく簡単に共有できる方法で設計の一部をカプセル化できます。
モデル参照、サブシステム参照、サブシステム、およびライブラリを比較するには、モデル コンポーネントのタイプの検討を参照してください。
モデル参照階層
モデルの階層構造では複数のコンポーネント化手法を使用できます。たとえば、モデルではサブシステム、参照モデル、および Stateflow® チャートを組み合わせて使用し、階層を作成できます。
モデルの階層構造に参照モデルが含まれている場合、Simulink® ウィンドウでは "最上位モデル" が最上位レベルのモデルです。
sldemo_mdlref_basic
モデルを開くとします。次に、CounterA
という名前の Model ブロックを介して参照モデルに移動します。
ウィンドウのタイトルには 2 つの要素が含まれています。
sldemo_mdlref_basic
— 最上位モデルの名前CounterA
— Model ブロックの名前
エクスプローラー バーには 3 つの要素が含まれています。
sldemo_mdlref_basic
— 最上位モデルの名前CounterA
— Model ブロックの名前sldemo_mdlref_counter
— 参照モデルの名前
モデル ブラウザーでは、最上位モデル、参照モデル、およびその他のモデル コンポーネントからなる階層が表示されます。
モデルには、同じモデルを参照する Model ブロックを複数含めることができますが、その参照モデルにグローバル データが定義されていないことが条件です。たとえば、sldemo_mdlref_basic
モデルには sldemo_mdlref_counter
モデルを参照する 3 つの Model ブロックが含まれています。
同じ参照モデルを任意のレベルの別のモデルに含めることもできます。
循環継承を避けるために、Model ブロックは、モデルの階層構造内で上位にあるモデルを参照できません。たとえば、モデルは、そのモデルを参照するモデルである "親モデル" を参照できません。
参照モデルを最上位モデルとして開くには、Model ブロック アイコンで をクリックします。参照モデルが、現在のモデルの階層構造のコンテキスト外で開きます。
モデルを編集すると、モデルが参照モデルと最上位モデルのどちらとして開かれているのかに関係なく、変更は同じモデル ファイルに影響します。
モデル参照インターフェイス
Model ブロック上の端子は参照モデルの最上位レベルのブロックに対応します。端子は、入力端子、出力端子、または制御端子にすることができます。
sldemo_mdlref_basic
モデルでは、各 Model ブロックは sldemo_mdlref_counter
モデルを参照し、以下を含んでいます。
upper、input、および lower という名前の 3 つの入力端子
output という名前の 1 つの出力端子
sldemo_mdlref_counter
参照モデルには以下が含まれています。
upper
、lower
、およびinput
という名前の 3 つの Inport ブロックoutput
という名前の 1 つの Outport ブロック
Model ブロックの端子に信号を接続する際には、参照モデルの対応する端子に信号を接続します。Model ブロックの出力は、参照モデルが同じであるのにもかかわらず、異なることがあります。
sldemo_mdlref_basic
では、各 Model ブロックの input という名前の端子は固有の Pulse Generator ブロックから信号を受け取ります。各 Pulse Generator ブロックからの入力信号は異なるサンプル時間を使用するため、参照モデルが同じであるのにもかかわらず、各 Model ブロックからの出力信号は異なります。
各 Model ブロックの出力信号がどのように異なるかを確認するには、シミュレーション データ インスペクターを使用します。
参照モデルの信号属性は、Model ブロックのコンテキストとは独立しています。たとえば、信号次元とデータ型は Model ブロック境界で伝播されません。参照モデルの信号属性を定義するには、ルートレベルの Inport ブロックと In Bus Element ブロックのブロック パラメーターを使用します。
モデル参照のファイルの管理
各モデル参照はモデル ファイルへの参照です。モデル参照では、チーム メンバーおよびサードパーティとのコラボレーションがサポートされています。たとえば、モデル参照は以下の要件を満たすのに役立ちます。
モジュール開発 — 参照モデルはそれを使用するモデルとは独立して開発できます。モデルの階層構造のコンテキストなしで参照モデルを開くことができます。その後、参照モデルをシミュレートしてそのコードを生成できます。参照モデルは、アセンブリで使用して他のコンポーネントに統合できるスタンドアロンのコンポーネントです。
インクリメンタルな読み込み処理 — モデルの階層構造の最上位モデルを読み込むときに、最上位モデルのみが読み込まれるため読み込み処理が速くなります。各参照モデルは、そのモデルが必要になった時点でそれぞれ読み込まれます。たとえば、モデルの階層構造をコンパイルするときは各参照モデルが読み込まれます。
知的所有権保護 (Simulink Coder™ または HDL Coder™ のライセンスを使用) — 参照モデルの内容を不明瞭化して、知的財産を開示することなく保護モデルとしてモデルを配布できます。保護モデルの表示、シミュレート、そのコードの生成を実行する権限を保護モデルの受信者に付与できます。詳細については、コンテンツを隠すためのモデルの保護 (Simulink Coder)または保護モデルを作成し内容を隠して HDL コードを生成する (HDL Coder)を参照してください。
モデル参照のデータ ストレージ
モデル参照では、複数のデータ ストレージ オプションがサポートされます。たとえば、以下の機能を考慮します。
モデル ワークスペース — 各モデルに、変数値を保存するための独自のモデル ワークスペースがあります。モデルの階層構造内で、各モデル ワークスペースは一意の名前空間として機能します。このため、同じ変数名を複数のモデル ワークスペース内で使用できます。
データ ディクショナリ — モデル間でデータを共有するには、データ ディクショナリを使用します。データ ディクショナリはデータを永続的に保存するスタンドアロンのファイルです。ヘッダー ファイルと同様に、データ ディクショナリでは、データ定義を保存して共有できる場所がモデルの外部に用意されています。
データ定義の重複は、以下の条件において、モデル参照階層内で存在することができます。
階層内の各モデルが 1 つの定義のみを参照する。
モデルの階層構造全体で定義が同じである。
参照モデルは上位モデルのデータに依存することがあります。参照モデルをスタンドアロンの最上位モデルとして開くときは、必要なデータを提供してください。
モデルのデータをどの方法で格納するかを決めるには、Simulink モデルの変数とオブジェクトの保存場所の決定を参照してください。
モデル参照の動作と実行
シミュレーションおよびコード生成中は、Model ブロックは単一ブロックまたはアトミック単位のように動作します。Model ブロックが実行されると、親システム内のブロックから割り込まれることなく、参照モデル内のブロックで現在のタスクが実行されます。
各参照モデルは独立してコンパイルされます。このスタンドアロンの動作により、モデルの階層構造のパフォーマンスを改善し、モデル化の目的を達成できます。
参照モデルの動作および実行タイミングを変更する場合は、以下の機能を考慮します。
独立したコンフィギュレーション セット — 参照モデルが使用するコンフィギュレーション セットはその親や他の参照モデルと同じである必要はありません。詳細については、モデル階層のコンフィギュレーション パラメーターの設定を参照してください。
インスタンス パラメーター — 既定では、再利用可能な参照モデルの各 Model ブロック インスタンスでブロック パラメーターに同じ値が使用されます。再利用可能な参照モデルのインスタンスごとに異なるブロック パラメーター値を指定するには、モデル引数を作成します。たとえば、Gain ブロックをモデル
sldemo_mdlref_counter
に追加すると、モデル引数によりこのモデルの 3 つのインスタンスはそれぞれ異なるゲイン値を使用します。参照モデルのブロック パラメーターに対するインスタンス固有の値の構成を参照してください。モデル マスク — モデル マスクでは、Model ブロックの外観を制御し、ブロックでのモデル引数の表示をカスタマイズできます。モデル マスク要件については、モデル マスクを参照してください。
条件付き実行 — 外部信号により、シミュレーション中に Model ブロックを実行するかどうかを制御できます。詳細については、参照モデルの条件付き実行を参照してください。
動的な起動と終了の動作 — Model ブロックの動的な起動と終了の動作をモデル化するには、カスタム ルーチンを Model ブロックの既定の初期化ルーチンおよび終了ルーチンに追加します。詳細については、初期化関数、再初期化関数、リセット関数および終了関数の使用を参照してください。
バリアント — 複数の Model ブロックを使用して、システム コンポーネントの複数の設計バリエーションを表すことができます。条件式により、アクティブなバリアントが決定されます。詳細については、バリアントとは、およびどのような場合にそれを使用するかを参照してください。
モデル参照シミュレーションとコード生成
モデルの階層構造をシミュレートすると、最上位モデルがシミュレートされます。
sldemo_mdlref_basic
モデルを開くとします。次に、CounterA
という名前の Model ブロックを介して参照モデルに移動します。
sldemo_mdlref_basic
モデルが最上位モデルです。[実行] をクリックすると、sldemo_mdlref_basic
モデルがシミュレートされます。
新しいウィンドウで sldemo_mdlref_counter
モデルを最上位モデルとして開くとします。
新しいウィンドウでは、sldemo_mdlref_counter
モデルが最上位モデルです。[実行] をクリックすると、sldemo_mdlref_counter
モデルがシミュレートされます。
スタンドアロンの最上位モデルとして参照モデルをシミュレートするには、スタンドアロンのコンテキストで実行するために必要なデータが参照モデルに含まれている必要があります。たとえば、参照モデルには、パラメーターおよび信号を定義する変数およびデータ型が含まれている必要があります。
コンポーネントがモデルの階層構造で複数回再利用され、多数のブロックを含んでいる場合は、コンポーネントをモデル参照として実装すると、シミュレーションおよびコード生成の速度を向上させることができます。たとえば、モデル参照を使用すると、以下から利点を得ることができます。
高速シミュレーション — 参照モデルがアクセラレータ モードでシミュレートされた場合、参照モデルはコードに変換されます。その後、そのコードを実行することによってモデルがシミュレートされます。これは、参照モデルをインタープリター形式 (ノーマル モード) でシミュレートするより高速です。シミュレーション モードのトレードオフの比較については、モデルの階層構造内のシミュレーション モードの選択を参照してください。
インクリメンタル ビルド — 参照モデルのコードは、最後にコード生成が行われてからモデルに変更が加えられた場合にのみ生成されます。チーム メンバーまたは継続的インテグレーション システムが参照モデルのコードを生成すると、Simulink キャッシュ ファイルによって再利用のためにそのコードがパッケージ化されます。これらのファイルのローカル コピーを使用することで、シミュレーションとコード生成を高速化できます。モデル参照階層向けのコード生成の詳細については、モデル参照階層向けのコードの生成 (Simulink Coder)を参照してください。
キャッシュされたビルド アーティファクト — Simulink キャッシュ ファイルには、シミュレーションとコード生成を高速化するビルド アーティファクトが含まれています。詳細については、シミュレーションを高速化するための Simulink キャッシュ ファイルの共有およびインクリメンタルなコード生成用の Simulink キャッシュ ファイル (Simulink Coder)を参照してください。
ローカル ソルバー (R2022a 以降) — 参照モデルでローカル ソルバーを使用すると、モデル参照は別個の微分方程式セットとして解かれます。ローカル ソルバーでは、より小さい (R2024a 以降)または大きい別のステップ サイズを使用できます。ソルバーとソルバー設定の選択には、シミュレーションの速度と精度とのトレードオフがあります。詳細については、Use Local Solvers in Referenced Modelsを参照してください。
並列計算 (Parallel Computing Toolbox™ のライセンスを使用) — 大きなモデル参照階層では、モデル参照ターゲットを並列でビルドすることにより、ブロック線図の更新の速度を上げることができます。参照モデルを並列でビルドするには、アクセラレータ モードで実行されるように参照モデルを構成する必要があります。詳細については、並列ビルドを使用した参照モデルの更新時間の短縮を参照してください。
モデル参照のテストと検証
モデル参照は、分離された環境を提供し、コンポーネントの動作を検証するのに役立ちます。たとえば、モデル参照では、以下によってテスト要件および認定要件がサポートされます。
単体テスト — 参照モデルを最上位モデルとしてシミュレートしてその動作を分離することで、参照モデルを独立してテストできます。さまざまなテスト シナリオを使用してテスト環境で参照モデルを実行するテスト ハーネスを作成することもできます。単体テストにより、変更されていないコンポーネントの再テストを排除し、検証にかかるコストを削減できます。詳細については、コンポーネント検証を参照してください。業界標準やガイドラインへの準拠を検証できるようにするには、モデル アドバイザーを使用したモデルのチェックを参照してください。
SIL/PIL テスト (Embedded Coder® のライセンスを使用) — ターゲット環境を再現する環境で参照モデルを検証するには、ソフトウェアインザループ (SIL) モードまたはプロセッサインザループ (PIL) モードで参照モデルをシミュレートできます。これらのシミュレーションを使用することで、SIL シミュレーションではホスト プラットフォーム、PIL シミュレーションではターゲット プラットフォーム用にコンパイルして実行される量産コードを生成してテストできます。詳細については、SIL シミュレーションおよび PIL シミュレーション (Embedded Coder)を参照してください。
単一ソースの生成コード — 各参照モデルには、モデルの階層構造にその参照モデルが含まれている回数に関係なく、1 つのソース コード セットが含まれます。単一ソースのコードにより、検証にかかるコストを低減できます。
生成コードの独立したトレーサビリティ — 参照モデルの生成コードを他のモデルとは独立してトレースできます。ベースラインの等価性テストおよび 100% のコード カバレッジを目標にする追加のテスト ベクトルを使用して生成コードが参照モデルに逆トレースすることを確認するとします。親モデルへの変更はこの検証テストに影響しないため、検証にかかるコストが削減されます。
Simulink Code Inspector™ のライセンスがあれば、各参照モデルのトレーサビリティ マトリクスを作成できます。トレーサビリティ マトリクスは、モデル オブジェクト、生成コード、およびモデル要件間のトレーサビリティを提供します。詳細については、Generate Traceability Matrices (Simulink Code Inspector)を参照してください。