プログラムによるマスクの制御
Simulink® は、マスクの設定および編集を容易にする一連のパラメーターを定義しています。MATLAB® コマンド ラインからマスクを設定および編集するために、Simulink.Mask
クラスおよび Simulink.MaskParameter
クラスのメソッドを使用できます。get_param
および set_param
関数を使用してマスクを設定および編集することもできます。ただし、これらの関数で使用される区切り記号では Unicode® (英語以外) の文字がサポートされないため、マスクの制御には Simulink.Mask
クラスおよび Simulink.MaskParameter
クラスのメソッドを使用することをお勧めします。
Simulink.Mask
と Simulink.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' BlockDVGIcon: '' Display: '' SaveImageFileWithModel: 'off' IconFrame: 'on' IconOpaque: 'opaque' RunInitForIconRedraw: 'analyze' IconRotate: 'none' PortRotate: 'default' IconUnits: 'autoscale' SaveCallbackFileWithModel: 'off' CallbackFile: '' ParameterConstraints: [0x0 Simulink.Mask.Constraints] PortConstraints: [0x0 Simulink.Mask.PortConstraint] Parameters: [0x0 Simulink.MaskParameter] PortIdentifiers: [0x0 Simulink.Mask.PortIdentifier] CrossParameterConstraints: [0x0 Simulink.Mask.CrossParameterConstraints] CrossPortConstraints: [0x0 Simulink.Mask.CrossPortConstraint] BaseMask: [0x0 Simulink.Mask]
マスク パラメーターの作成や編集、マスクのコピーや削除など、その他のマスク操作の例については、Simulink.Mask
およびSimulink.MaskParameter
を参照してください。
get_param
と set_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 を使用したマスク パラメーターの変更について一定の制約があります。自己修正可能でないリンク付きブロックでは、Value
、Visible
、Enable
などのマスク パラメーターのプロパティを変更できます。自己修正可能なリンク付きブロックでは、Value
、Visible
、Enable
のほかに、いくつかのプロパティしか変更できません。
マスク パラメーターおよびダイアログのプログラムによる作成
この例では、この単純なマスク ダイアログを作成し、ダイアログにコントロールを追加して、コントロールのプロパティを変更する方法を示します。
手順 1: モデルで選択したブロックにマスクを作成します。
手順 2: ダイアログをカスタマイズする場合と、既定のグループではなくタブを使用する場合は、[パラメーター] グループ ボックスを削除します。
maskObj.removeDialogControl('ParameterGroupVar'); open_system('mask_example/subsystem');
Simulink では、子のダイアログ コントロール (この例では 2 つのチェック ボックス) が、これらを囲んでいる ParametersGroupVar
グループを削除した場合でも保持されます。これらのコントロールはパラメーターであり、ダイアログ コントロールのメソッドを使用して削除することはできません。
パラメーターは、Simulink.Mask
クラスに属する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
を参照してください。