Main Content

プログラムによるマスクの制御

Simulink® は、マスクの設定および編集を容易にする一連のパラメーターを定義しています。MATLAB® コマンド ラインからマスクを設定および編集するために、Simulink.Mask クラスおよび Simulink.MaskParameter クラスのメソッドを使用できます。get_param および set_param 関数を使用してマスクを設定および編集することもできます。ただし、これらの関数で使用される区切り記号では Unicode® (英語以外) の文字がサポートされないため、マスクの制御には Simulink.Mask クラスおよび Simulink.MaskParameter クラスのメソッドを使用することをお勧めします。

Simulink.MaskSimulink.MaskParameter の使用

Simulink.Mask クラスおよび Simulink.MaskParameter クラスのメソッドを使用して、次のマスク操作を行います。

  • マスクの作成、コピー、削除

  • マスク パラメーターの作成、編集、削除

  • マスクを所有するブロックの判定

  • マスクに対して定義されているワークスペース変数の取得

  • この例では、Simulink.Mask.createメソッドを使用して、ブロック マスクを作成します。

new_system('mask_example');
add_block('built-in/subsystem','mask_example/subsystem');
save_system;
open_system('mask_example');
maskObj = Simulink.Mask.create(gcb);

この例では、Simulink.Mask.getメソッドを使用してマスク オブジェクトが変数 maskObj に割り当てられています。

maskObj = Simulink.Mask.get(gcb);
maskObj
maskObj = 
  Mask with properties:

                         Type: ''
                  Description: ''
                         Help: ''
               Initialization: ''
               SelfModifiable: 'off'
                    ImageFile: ''
                      Display: ''
                    IconFrame: 'on'
                   IconOpaque: 'opaque'
         RunInitForIconRedraw: 'analyze'
                   IconRotate: 'none'
                   PortRotate: 'default'
                    IconUnits: 'autoscale'
                   Parameters: [0x0 Simulink.MaskParameter]
              PortIdentifiers: [0x0 Simulink.Mask.PortIdentifier]
         ParameterConstraints: [0x0 Simulink.Mask.Constraints]
    CrossParameterConstraints: [0x0 Simulink.Mask.CrossParameterConstraints]
              PortConstraints: [0x0 Simulink.Mask.PortConstraint]
                     BaseMask: [0x0 Simulink.Mask]

マスク パラメーターの作成や編集、マスクのコピーや削除など、その他のマスク操作の例については、Simulink.MaskおよびSimulink.MaskParameterを参照してください。

get_paramset_param の使用

関数 set_param と関数 get_param には、マスクを設定および管理するためのパラメーターがあります。これらの関数を使用することで、MATLAB コマンド ラインから渡された値に基づいて、モデル内やライブラリ内のブロックのマスクを設定できます。

set_param(gcb,'MaskStyleString','edit,edit',...
'MaskVariables','maskparameter1=@1;maskparameter2=&2;',...
'MaskPromptString','Mask Parameter 1:|Mask Parameter 2:',...
'MaskValues',{'1','2'});
get_param(gcb,'MaskStyleString');
set_param(gcb,'MaskStyles',{'edit','edit'},'MaskVariables',...
'maskparameter1=@1;maskparameter2=&2;','MaskPrompts',...
{'Mask Parameter 1:','Mask Parameter 2:'},...
'MaskValueString','1|2'); 
get_param(gcb,'MaskStyles');

ここで、

  • | は、マスク パラメーターの個々の文字ベクトルの値を区切ります。

  • @ は、パラメーター フィールドが評価されることを示します。

  • & は、パラメーター フィールドが評価されず、文字ベクトルとして代入されることを示します。

メモ

  • get_param を使用してマスク パラメーターの Value を取得すると、Simulink はマスク ダイアログを使用して最後に適用された値を返します。マスク ダイアログ ボックスに入力しても適用されていない値は、get_param コマンドを使用したときに反映されません。

  • マスク パラメーターの値をプログラムで指定する場合は、[MaskValues]set_param を使用する代わりに [マスク パラメーター]set_param コマンドを使用することをお勧めします。

R2014a より前のリリースでのプログラムによるマスク プロパティの制御については、マスク パラメーターを参照してください。

リンク付きブロックでの set_param およびマスク オブジェクト API の使用についての制限

Simulink には、リンク付きブロックでの set_param およびマスク オブジェクト API を使用したマスク パラメーターの変更について一定の制約があります。自己修正可能でないリンク付きブロックでは、ValueVisibleEnable などのマスク パラメーターのプロパティを変更できます。自己修正可能なリンク付きブロックでは、ValueVisibleEnable のほかに、いくつかのプロパティしか変更できません。

マスク パラメーターおよびダイアログのプログラムによる作成

この例では、この単純なマスク ダイアログを作成し、ダイアログにコントロールを追加して、コントロールのプロパティを変更する方法を示します。

手順 1: モデルで選択したブロックにマスクを作成します。

手順 2: ダイアログをカスタマイズする場合と、既定のグループではなくタブを使用する場合は、[パラメーター] グループ ボックスを削除します。

maskObj.removeDialogControl('ParameterGroupVar');
open_system('mask_example/subsystem');

Simulink では、子のダイアログ コントロール (この例では 2 つのチェック ボックス) が、これらを囲んでいる ParametersGroupVar グループを削除した場合でも保持されます。これらのコントロールはパラメーターであり、ダイアログ コントロールのメソッドを使用して削除することはできません。

パラメーターは、Simulink.Maskクラスに属するremoveAllParametersなどのメソッドを使用して削除することができます。

手順 3: タブ コンテナーを作成し、そのハンドルを取得します。

tabgroup = maskObj.addDialogControl('tabcontainer','tabgroup');

手順 4: このタブ コンテナー内にタブを作成します。

tab1 = tabgroup.addDialogControl('tab','tab1');
tab1.Prompt = 'First';
maskObj.addParameter('Type','checkbox','Prompt','Option 1',...
  'Name','option1','Container','tab1');
maskObj.addParameter('Type','checkbox','Prompt','Option 2',...
  'Name','option2','Container','tab1');
tab2 = tabgroup.addDialogControl('tab', 'tab2');
tab2.Prompt = 'Second';
tab3 = tabgroup.addDialogControl('tab','tab3');
tab3.Prompt = 'Third (invisible)';

3 番目のタブを非表示にします。

tab3.Visible = 'off';
tab3
tab3 = 
  Tab with properties:

              Name: 'tab3'
            Prompt: 'Third (invisible)'
           Enabled: 'on'
           Visible: 'off'
      AlignPrompts: 'off'
    DialogControls: [0x0 Simulink.dialog.Control]

ダイアログのパラメーターの位置やその他のプロパティは、Simulink.dialog.Control コマンドを使用して変更できます。

たとえば、ダイアログ レイアウトのオプションを変更するために、Parameter2 という名前のポップアップ パラメーターが追加された Gain ブロックについて考えます。パラメーターのダイアログ レイアウトのオプションを設定するには、Simulink.dialog.parameter.Popup クラスのインスタンスを使用できます。以下のコードは、ダイアログ レイアウトにおけるプロンプト位置の設定方法を示しています。

add_block('built-in/gain','mask_example/gain2');
maskobj = Simulink.Mask.create(gcb);
set_param(gcb,'MaskStyleString','popup',...
'MaskVariables','maskparameter2=&2;',...
'MaskPromptString','Mask Parameter 2:');
a = Simulink.Mask.get('mask_example/gain2');
d = a.Parameters(1).DialogControl;
d
d = 
  Popup with properties:

                 Name: 'Parameter1'
       PromptLocation: 'left'
                  Row: 'new'
    HorizontalStretch: 'on'
              Tooltip: ''

ここで、PromptLocation プロパティを設定するには、次のコマンドを使用します。

d.PromptLocation = 'left';

これで、PromptLocation'left' として設定されます。使用可能な値は 'left''top' です。出力で、PromptLocation プロパティの値が left に変更されていることを確認します。

d
d = 
  Popup with properties:

                 Name: 'Parameter1'
       PromptLocation: 'left'
                  Row: 'new'
    HorizontalStretch: 'on'
              Tooltip: ''

save_system;

ダイアログのコントロールとそのプロパティの詳細については、Simulink.dialog.Controlを参照してください。

関連するトピック