主要内容

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

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

この例では,別のモデルを複数回参照するモデルのシミュレーションとコード生成について詳しく説明します。この例では,金宝app仿真软件®がアクセラレータシミュレーション向けのコードを生成し,仿真软件®编码器™がスタンドアロンアプリケーションに配布できるコードを生成します。

モデル参照の動作

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

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

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

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

  • 参照モデルは必要になるまで読み込まれません。このインクリメンタルな読み込み処理により,モデルの読み込み時間が加速されます。

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

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

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

モデル例を開きます。

open_system (“sldemo_mdlref_basic”

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

モデルの階層構造内の最上位モデルを開いた後,メモリに読み込まれるモデルを特定するには,次のコマンドを入力します。

get_param 金宝app(Simulink.allBlockDiagrams“名字”
ans = ' sldemo_mdlref_basic '

読み込まれていないため,参照モデルは表示されません。

任意の模型ブロックをダブルクリックするか,次のコマンドを入力して参照モデルを開きます。

open_system (“sldemo_mdlref_counter”

メモリに読み込まれたモデルを再度クエリします。

get_param 金宝app(Simulink.allBlockDiagrams“名字”
Ans = 2x1 cell array {'sldemo_mdlref_counter'} {'sldemo_mdlref_basic'}

参照モデルが表示され,モデルが必要に応じてインクリメンタルに読み込まれることが示されます。

継承サンプル時間

親モデルsldemo_mdlref_basicに戻ります。

sldemo_mdlref_basicはコンパイル時にサンプル時間の色を表示するように設定されています。[デバッグ]タブで,[モデルの更新)をクリックします。

参照モデルsldemo_mdlref_counterでサンプル時間が明示的に指定されていないため,模型ブロックは異なるサンプル時間を継承します。

コード生成を介したシミュレーション(仿金宝app真软件编码器が不要)

模型ブロックには,参照モデルのシミュレーション方法を制御する[シミュレーションモード]パラメーターがあります。このパラメーターが正常的に設定されている場合,参照モデルのシミュレーションは解釈されたモードで実行されます。このパラメーターが加速器に設定されている場合,参照モデルのシミュレーションはコード生成を介して実行されます。このプロセスでは,アクセラレータモードで参照される一意のモデルごとに“シミュレーションターゲット”と呼ばれるバイナリファイルを使用します。シミュレーションターゲットの生成に仿真金宝app软件编码器ライセンスは必要ありません。

このモデルでは,CounterAとCounterBがsldemo_mdlref_counterをノーマルモードで参照します。このことを示すために,模型ブロックアイコンの四隅が白抜きになっています。他のインスタンス,CounterCは,sldemo_mdlref_counterをアクセラレータモードで参照します。このことを示すために,模型ブロックアイコンの四隅が塗りつぶされています。

以下のいずれかのアクションを実行して,sldemo_mdlref_counterモデルのシミュレーションターゲットを作成できます。

  • sldemo_mdlref_basicの更新

  • sldemo_mdlref_basicのシミュレーション

シミュレーションターゲットをプログラムでビルドするには,次のコマンドを使用します。

slbuild(“sldemo_mdlref_counter”、“ModelReferenceSimTarget”)

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

参照モデルの3つのすべてのインスタンスがノーマルモードでシミュレーションするように設定されていた場合,シミュレーションターゲットはビルドされません。

スタンドアロンアプリケーションに対するコード生成(仿真金宝app软件编码器が必要)

sldemo_mdlref_basicに対するスタンドアロン実行可能ファイルを作成するときに,sldemo_mdlref_counter“モデル参照编码器ターゲット”に対するコードとバイナリが最初にビルドで生成されます。モデル参照Coder ターゲットの生成には Simulink Coder ライセンスが必要です。

sldemo_mdlref_counterに対するモデル参照编码器ターゲットとsldemo_mdlref_basicに対するスタンドアロン実行可能ファイルを,以下のいずれかのアクションを実行してビルドできます。

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

  • sldemo_mdlref_counterのモデル参照编码器ターゲットのビルドと,sldemo_mdlref_basicに対するスタンドアロン実行可能ファイルのビルド。

スタンドアロン実行可能ファイルをプログラムでビルドするには,次のコマンドを使用します。

slbuild(“sldemo_mdlref_basic”、“StandaloneCoderTarget”)

モデル参照编码器ターゲットがビルドされた後にsldemo_mdlref_basicをビルドしても,sldemo_mdlref_counterが変更されていなければ,モデル参照编码器ターゲットはリビルドされません。参照モデルsldemo_mdlref_counterに対して生成されたコードが再使用されます。

sldemo_mdlref_basicに対するコード生成レポートは,(参照モデル]セクションのsldemo_mdlref_counterのレポートにリンクされています。

参考

関連するトピック