隠蔽化は可能ですが、ご使用のバージョンにより方法が異なります。
■R2009b以降の場合
モデルリファレンス保護モード (Model Reference Protected Mode) によりモデルの隠蔽化および隠蔽モデルのシミュレーションが可能です。なお、この機能を使用するには Real-Time Workshop が必要となります。
1) 下記コマンドでモデルをひらき、所望のサブシステムを選択します。
2) 選択したブロック上で右クリックし、[Subsystemのパラメーター]を選択します。"Function Block Parameters"という窓が開かれます。
3) サブシステムが Atomic サブシステムではない場合、[Atomic サブシステムとして扱う] にチェックを入れ、OK ボタンを押下します。
4) 再度、サブシステムブロック上で右クリックし、[Model ブロックに変換] を選択します。
※R2012b以降のバージョンで参照モデルを作成するには、右クリックし[サブシステムとモデル参照]→[サブシステムの変換先]→[参照モデル]を選択します。
コンフィギュレーションパラメータの設定に不適切な部分がある場合は警告が出ますので、警告に従って修正します。新規モデル画面が起動し、Model ブロックに変換されたブロックが現れます。
モデル中で使用するワークスペース変数も隠蔽化したい場合は、参照先のモデルのモデルワークスペースに変数を定義しておきます。
5) このように参照モデルの mdl ファイルを生成した後、 MATLAB コマンドウィンドウ上で次のように実行して保護モデル化を行います。
Simulink.ModelReference.protect('参照モデルの名前')
6) 手順4)で生成されたModel ブロックを右マウスでクリック、「ModelReferenceパラメータ」を選択します。 「ModelReferenceパラメータ」エディタの「モデル名」に手順5)の実行で、
生成されたmdlpファイルを設定ください。これにより、mdlpファイルを取り込んだModelブロックをオリジナルのモデル上に配置頂けます。
また、 R2011a 以降では Simulink のエディタ上でも保護モデル化が可能です。
Model ブロックを右クリックし、[コード生成 > 保護されたモデルの生成] を選択します。再度、別のモデルウィンドウが起動し、保護されたブロックが現れます。
このモデルウィンドウに名前を付けて保存します。
以上のような手順の後、配布の際は拡張子 mdlp のファイルを配布します。
■R2009a以前の場合
Real-Time Workshop の S-Function ターゲット機能を利用することにより、Subsystem ブロックごとに内部を隠蔽化することができます。
以下に、Simulink で提供されるデモモデル(f14.mdl)を例として、Simulinkモデルの隠蔽化手順を示します。
1) 下記コマンドで f14.mdl を開きます。
2) 隠蔽化したいブロックをサブシステム化します。
複数のブロックを選択して右クリックし、[サブシステム化]を選択することでサブシステム化が行えます。
ここでは、既にサブシステム化されているControllerブロックの内部を隠蔽化します。
Contorollerブロックを右クリックし、[Real-Time Workshop]→[S-Functionを生成]を選択します。
※R2012b以降のバージョンでS-Functionを生成するには、右クリックし[C/C++コード]→[S-Functionの生成]を選択します。
3) S-Function化した後にブロックパラメータで編集したい変数の行の[チューナブル]にチェックを入れ、[ビルド]ボタンを押します。
4) ビルドが終了すると、Subsystemブロックが生成されます。
Subsystemブロックの内部は、緑色のブロックがS-Functionブロックとして作成されており、内部を確認することはできません。
また、カレントディレクトリ上に次のファイルやフォルダが作成されます。
○ファイル
・Controller_sf.mexw32(MEX-ファイル) (注1)
・Controller_sf.c(Cソースファイル)
・Controller_sf.h(Cヘッダファイル)
○フォルダ
・slprj
・Controller_sfcn_rtw
Simulinkモデル配布の際は、新たに生成されたSubsystemブロックと元のSubsystemブロック(Controllerブロック)を置き換え、MEX-ファイル(Controller_sf.mexw32)と共に配布します。
配布されたモデルは、S-Function化されたことによりブロック内部が隠蔽化されており、また、シミュレーション実行が可能です。
注1
隠蔽化モデルを作成した環境(MATLABパージョン、プラットフォーム)と配布先の環境が同じ必要があります。MEX-ファイルの拡張子は各プラットフォームごとに異なり、"mexext"コマンドで現在のプラットフォームに対する拡張子が確認できます。
なお、32-bit Windowsの場合、R14SP2までは「dll」でしたが、R14SP3から「mexw32」に変更されています。
注2
以下の通り、S-Function化に対応していないブロックがあります。
○MATLAB Fcnブロック
○下記のS-Functionブロック
・MATLAB コード S-ファンクション(ただし、R14SP3からはTLCファイルを作成することにより対応可能)
・Fortran S-function(ただし、R14SP3からはTLCファイルを作成することにより対応可能)
・内部で MATLAB 関数をコールする C/C++ MEX S-function
○Scopeブロック
○To Workspaceブロック
注3
上記の隠蔽化を行ったモデルから、Real-Time Workshopによるビルド行う場合は、ページ下部の関連ソリューションを参照してください。
注4
生成されたS-Functionブロックは、元のSubsystemブロックと全く同じ動作になるとは限りません。
例えば、S-Function化の対象となるSubsystemブロックがAtomic Subsystemではない場合、S-Function化によりSubsystem内のブロックの実行順序が変わることがあります。
このような動作によりシミュレーション結果に差異が生じる場合がありますので、動作確認を必ず行ってください。
また、生成されたS-Functionを使用した時に、エラーが発生するケースがあります。詳細につきましては、関連ソリューションをご参照ください。