Main Content

動的なマスク サブシステム

ブロックの構造的な内容を変更できるマスク ライブラリ ブロックを作成します。

ライブラリ ブロックで内容を変更することを許可

オプション [マスク初期化コードでサブシステムのコンテンツを変更できるようにする] を使用すると、ブロックの追加や削除またはこれらのブロックでのパラメーターの設定など、マスク サブシステムの内容をブロックの初期化コードで変更できるようになります。MATLAB® プロンプトでこのオプションを設定するには、自動変更ブロックを選択し、次のコマンドを入力してから、ブロックを保存します。

set_param(gcb, 'MaskSelfModifiable', 'on');
open_system("slexMaskSelfModifiableExample.slx")

ライブラリ ブロック用の自動変更マスクの作成

ブロックの構造的な内容を変更できるマスク ライブラリ ブロックを作成できます。これらの自動変更マスクでは、次のような操作ができます。

  • マスク ダイアログ ボックス内のパラメーターに基づいたマスク サブシステムの内容の変更またはサブシステムがライブラリから新しいモデルに当初からドラッグされた場合のマスク サブシステムの内容の変更。

  • ライブラリ内に常駐する複数の端子の S-Function ブロックにある端子数の変更。

ブロックを読み込むと、Simulink® では自己修正可能ライブラリ ブロックのマスクの初期化コードが実行されます。

マスク エディターを使用した自動変更マスクの作成

マスク エディターを使用して自動変更マスクを作成するには、以下のようにします。

1. ライブラリのロックを解除します。ライブラリのロックとロック解除を参照してください。

2. ライブラリ内のブロックを選択します。

3. [ブロック] タブの [マスク] グループで、[マスクの編集] をクリックします。マスク エディターが開きます。

4. マスク エディターの [コード] ペインで、[マスク初期化コードでサブシステムのコンテンツを変更できるようにする] オプションをオンにします。

5. そのマスクの [初期化] ペインにあるマスク サブシステムを変更するコードを入力します。

ダイアログ パラメーター コールバック内には、マスク サブシステムを構造的に変更するコードは入力しないでください (を参照)。それをすると、パラメーターを編集したときにエラーが発生します。

6. 変更内容を適用するには [適用] を、変更内容を適用してマスク エディターを終了するには [OK] をクリックします。

7. ライブラリをロックします。

自動変更マスクのコマンド ラインからの作成

コマンド ラインから自動変更マスクを作成するには、以下のようにします。

1. 次のコマンドを使用してライブラリのロックを解除します。

set_param(gcs,'Lock','off')

2. 次のコマンドを使用してブロックが自動変更であることを指定します。

set_param(block_name,'MaskSelfModifiable','on')

ここで、block_name には、ライブラリ内のブロックへの絶対パスが入ります。

自動変更マスクの作成

この例では、マスク ダイアログ ボックスの Time domain を変更すると、サブシステム内のブロックがそれに合わせて置き換えられます。たとえば、Time domainDiscrete を選択すると、"Integrator" ブロックが "Discrete-Time Integrator" ブロックに置き換わります。また、その逆も同様です。

1. ライブラリ ウィンドウの [ライブラリ] タブで、[ロックされたライブラリ] をクリックしてライブラリのロックを解除します。

2. [Subsystem ブロック] タブの [マスク] グループで、[マスクの編集] をクリックします。マスク エディターが開きます。

3. マスク エディターの [パラメーターとダイアログ] ペインでは、時間オプションの値を格納する Time domain パラメーターを定義します。このマスク ダイアログ ボックス コールバックは、"Integrator" ブロックを "Discrete-Time Integrator" ブロックで置き換えます。また、その逆も同様です。

4. ダイアログ ボックス コールバックを正常に機能させるには、マスク エディターの [コード] ペインで [マスク初期化コードでサブシステムのコンテンツを変更できるようにする] オプションがオンになっている必要があります。このオプションが選択されていない場合、ライブラリ ブロックのコピーはその構造的な内容を変更できません。また、Time Domain リストの選択を変更するとエラーが発生します。

関連するトピック