保護モデルで、子モデルの変数を変数として設定可能にするためには、子モデルの変数を Simulink.Paramter として設定するか、参照モデルのモデルワークスペースにモデルの引数となる変数を定義する必要があります。
モデル引数を使用した簡単な例題を元に、説明します。child5.mdl は子モデルで、変数 A と K を持ちます。
1.参照モデル側の設定
child5 モデルを開き、[表示] > [モデルエクスプローラ] を選択すると、モデルエクスプローラの画面が開きます。さらに[モデルの階層構造]から child5 > Model Workspace をクリックします。
画面の右側に変数 A、K が設定されています。
a) Simulink R2017a以後のバージョンの場合
変数が表示されている部分の右端にある、Argumentというチェックボックスにチェックを入れることで、指定した変数が参照モデルの引数に設定されます。
b) Simulink R2016b以前のバージョンの場合
右端の[モデル引数(このモデルの参照用)]の箇所に A,K と入力します。
2. 親モデル側の設定
child5.mdlに対して以下のコマンドを実行し、保護モデルを作成します。
[~, neededVars] = Simulink.ModelReference.protect('child5')
あるいは、親モデルであるparent5.mdlを開き、child5.mdlを指定しているmodelブロックを右クリック>サブシステムとモデル参照>選択したModelブロックの保護モデルの作成 をクリックして保護モデルを作成します。(GUI操作による方法は、比較的新しいバージョンのみ対応しています)
a) Simulink R2017a以後のバージョンの場合
Modelブロックを右クリック>ブロック パラメーターを選択し、「引数」タブを左クリックすると、モデルに引き渡す変数を設定するGUIが表示されます。Nameが参照モデル内に定義されている変数、Valueが親モデルから引き渡す値(今回はMATLABワークスペースで定義した変数)を意味します。
b) Simulink R2016b以前のバージョンの場合
Model ブロックを右クリックし、[モデルリファレンスパラメータ]を選択すると、モデル名に上記で作成した保護モデル child5.mdlp が設定され、また、グレーアウトしていますが、[モデルの引数]に A,K が入力されているのが確認できます。[モデル引数の値(このインスタンスに対して)]には、A,K に対応した順番でパラメータ変数(ここではX1,X2)を設定します。
3. 引き渡す変数の設定とモデルの実行
ベースワークスペースでX1,X2の値を定義し、parent5.mdlを実行します。
本ページで使用しているサンプルモデル(R2010aで作成)は回答欄上部からダウンロード頂けます。
参照モデルのパラメータ化の詳細は、以下のドキュメントリンクからご参照頂けます。