Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

モデル参照によるコンポーネントベースのモデル化

この例では、Model Reference の使用方法を示します。別のモデルを複数回参照するモデルのシミュレーションとコード生成について詳しく説明します。

例の要件

この例の実行中、Simulink® と Simulink® Coder™ は、現在の作業ディレクトリ内に作成されたコード生成フォルダーにコードを生成します。このディレクトリ内にファイルを生成したくない (または生成できない) 場合は、作業ディレクトリを変更してください。

スタンドアロン アプリケーションに配布するコードを生成するには、Simulink Coder が必要です。

モデル例を変更する予定がある場合は、以下の手順に従います。

1. 以下のファイルを、名前を変更せずに MATLAB® インストール ディレクトリから他のディレクトリにコピーすることで、この例を元の状態で保存しておきます。

toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_basic.slx
toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_counter.slx

2. 現在の作業ディレクトリを、これらのファイルをコピーしたディレクトリに変更します。

3. 例を続けます。

モデル参照について

モデル例 sldemo_mdlref_basic を開きます。このモデルには、3 つの Model ブロックが含まれています。すなわち、CounterA、CounterB、CounterC です。これらのブロックは、同じモデル sldemo_mdlref_counter を参照します。これは別個のモデルで、sldemo_mdlref_basic のサブシステムではありません。

シミュレーション モード

Model ブロックには、参照モデルのシミュレーション方法を制御する、SimulationMode というパラメーターがあります。このパラメーターが Accelerator に設定されている場合、参照モデルのシミュレーションはコード生成を介して実行されます。このパラメーターが Normal に設定されている場合、参照モデルのシミュレーションは解釈されたモードで実行されます。このモデルでは、Model ブロック CounterA と CounterB が sldemo_mdlref_counter をノーマル モードで参照します。このことを示すために、Model ブロック アイコンの四隅が白抜きになっています。他のインスタンス、CounterC は、sldemo_mdlref_counter をアクセラレータ モードで参照します。このことを示すために、Model ブロック アイコンの四隅が塗りつぶされています。ノーマル モードで 1 回を超えて参照されるモデルの操作の詳細については、例 sldemo_mdlref_depgraph を参照してください。

図 1: 最上位モデル、sldemo_mdlref_basic

図 2: 参照モデル、sldemo_mdlref_counter

モデル参照には、サブシステムを使用する場合に比べ、以下のような利点があります。

  • 参照モデルが使用されるモデルとは別個に、参照モデルを開発できます。

  • 1 つのモデルを別のモデルで何度でも参照できるため、余計なコピーの作成が不要です。

  • 複数のモデルで同じモデルを参照できます。

  • "インクリメンタル ロード機能" により、参照モデルは必要になるまで読み込まれません。インクリメンタルな読み込み機能により、モデルの読み込み処理が加速されます。

  • モデルがアクセラレータ モードで参照される場合、Simulink は、シミュレーションで使用する必要がある特別なバイナリを作成します。これらのバイナリが作成されてから参照モデルが変更されなかったため、バイナリが最新である場合、バイナリを使用するモデルのシミュレーションまたはコンパイルの際にコード生成は行われません。このことを、"インクリメンタルなコード生成" と呼びます。バイナリを使用すると、シミュレーション速度が上がり、コード生成のモジュール性が向上します。

  • Model ブロックを含むモデル用のコードを生成する際にも、インクリメンタルなコード生成を利用します。

コード生成を介したシミュレーション (Simulink Coder が不要)

他のモデルをアクセラレータ モードで参照するモデルのシミュレーションには、固有の参照モデルそれぞれについて、シミュレーション ターゲットと呼ばれるバイナリ ファイルとコードの生成が必要です。このプロセスでは Simulink Coder は不要です。この例では、sldemo_mdlref_counter モデルに対するシミュレーション ターゲットがビルドされます。以下のいずれかのアクションでシミュレーション ターゲットを作成できます。

  • sldemo_mdlref_basic の更新

  • sldemo_mdlref_basic のシミュレーション

  • 以下のコマンドの発行

slbuild('sldemo_mdlref_counter','ModelReferenceSimTarget')

注意:

  • モデルがノーマル モードで参照される場合、その参照モデルに対してシミュレーション ターゲットはビルドされません。

  • シミュレーション ターゲットがビルドされた後にモデルのシミュレーションまたは更新を行っても、参照モデルが変更されていなければ、参照モデルのシミュレーション ターゲットはリビルドされません。

  • sldemo_mdlref_basic のサンプル時間の色分け表示をオンにしてください。Model ブロックがさまざまなサンプル時間を継承していることに注意してください。参照モデルでサンプル時間が明示的に指定されていない場合、Model ブロックはブロック自身のサンプル時間を継承します。

スタンドアロン アプリケーションに対するコード生成 (Simulink Coder が必要)

sldemo_mdlref_basic に対するスタンドアロン実行可能ファイルを作成するときに、sldemo_mdlref_counter のターゲットに対するコードとバイナリが最初に生成されます。必要なターゲットは、最新のものでない場合はビルドされます。sldemo_mdlref_counter に対するターゲットと sldemo_mdlref_basic に対するスタンドアロン実行可能ファイルを、以下のいずれかのアクションによってビルドできます。

  • sldemo_mdlref_basic に対するスタンドアロン実行可能ファイルのビルド。

  • sldemo_mdlref_counter のモデル参照ターゲットのビルドと、それに続く、sldemo_mdlref_basic に対するスタンドアロン実行可能ファイルのビルド。

注意:

  • sldemo_mdlref_counter のモデル参照 Coder ターゲットがビルドされた後に sldemo_mdlref_basic をビルドしても、sldemo_mdlref_counter が変化しなければ、sldemo_mdlref_counter はリビルドされません (インクリメンタルなコード生成)。

  • 参照モデル sldemo_mdlref_counter に対して生成されたコードが再使用されることに注意してください。

  • sldemo_mdlref_basic に対して生成されたコードの HTML レポートには、以下の参照モデル セクションで sldemo_mdlref_counter に対して生成されたコードの HTML レポートへのリンクが含まれています。

Build the Standalone Target and view the HTML report of the generated code

シミュレーション データのエクスポート

シミュレーションの時間、出力、状態、最終状態のデータのログを作成できます。ログは Dataset 形式を使用するように設定されています。

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

sldemo_mdlref_countersldemo_mdlref_basic を閉じ、sldemo_mdlref_basic を再び開きます。MATLAB プロンプトで、以下のコマンドを発行します。

find_system('type','block_diagram')

読み込まれていないため、参照モデルは表示されません。任意の Model ブロックをダブルクリックします。MATLAB プロンプトで、以下のコマンドを発行します。

find_system('type','block_diagram')

参照モデルが表示され、インクリメンタル ロードの動作がわかります。