このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
この例では,別のモデルを複数回参照するモデルのシミュレーションとコード生成について詳しく説明します。この例では,金宝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软件编码器ライセンスは必要ありません。
このモデルでは,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つのすべてのインスタンスがノーマルモードでシミュレーションするように設定されていた場合,シミュレーションターゲットはビルドされません。
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
のレポートにリンクされています。