プログラムによるマスクの制御
マスクの設定と編集に役立つ一連の API が 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
メソッドを使用して、モデルにブロック マスクを作成します。
open_system('slexMaskingBasic.slx');
maskObj = Simulink.Mask.create(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' SkipCallbackOptimization: 'off' SaveCallbackFileWithModel: 'off' CallbackFile: '' ParameterConstraints: [0×0 Simulink.Mask.Constraints] PortConstraints: [0×0 Simulink.Mask.PortConstraint] Parameters: [0×0 Simulink.MaskParameter] PortIdentifiers: [0×0 Simulink.Mask.PortIdentifier] CrossParameterConstraints: [0×0 Simulink.Mask.CrossParameterConstraints] CrossPortConstraints: [0×0 Simulink.Mask.CrossPortConstraint] CrossPortParameterConstraints: [0×0 Simulink.Mask.CrossPortParameterConstraint] BaseMask: [0×0 Simulink.Mask]
マスク パラメーターの作成や編集、マスクのコピーや削除など、その他のマスク操作の例については、Simulink.Mask
およびSimulink.MaskParameter
を参照してください。
関数 set_param
と関数 get_param
には、マスクを設定および管理するためのパラメーターがあります。これらの関数を使用することで、MATLAB コマンド ラインから渡された値に基づいて、モデル内やライブラリ内の任意のブロックのマスクを設定できます。この例では、2 つのマスク編集パラメーター maskparameter1
と maskparameter2
を作成しています。
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');
ここで、
MaskStyle
とMaskStyleString
は、マスク パラメーターのタイプを定義します。MaskVariables
は、マスク パラメーターの名前を定義します。MaskPromptString
は、マスク パラメーターのプロンプトを定義します。MaskValues
とMaskValueString
は、マスク パラメーターに既定値を割り当てます。|
は、マスク パラメーターの個々の文字ベクトルの値を区切ります。@
は、パラメーター フィールドが評価されることを示します。&
は、パラメーター フィールドが評価されず、文字ベクトルとして代入されることを示します。
メモ
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('slexMaskingBasic.slx');
Simulink では、子のダイアログ コントロールは、それらを囲んでいる 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: [0×0 Simulink.dialog.Control]
メソッドinsertParameter
を使用すると、マスク パラメーターを作成して特定のインデックスの位置に挿入できます。ダイアログ ボックスのパラメーターの位置やその他のプロパティを Simulink.dialog.Control
コマンドを使用して変更することもできます。
たとえば、ダイアログ ボックス レイアウトのオプションを変更するために、Parameter2 という名前のポップアップ パラメーターが追加された Gain ブロックについて考えます。パラメーターのダイアログ ボックス レイアウトのオプションを設定するには、Simulink.dialog.parameter.Popup
クラスのインスタンスを使用できます。以下のコードは、ダイアログ ボックス レイアウトにおけるプロンプト位置の設定方法を示しています。
add_block('built-in/gain','slexMaskingBasic/gain2'); maskobj = Simulink.Mask.create(gcb); set_param(gcb,'MaskStyleString','popup',... 'MaskVariables','maskparameter2=&2;',... 'MaskPromptString','Mask Parameter 2:'); a = Simulink.Mask.get('slexMaskingBasic/gain2'); d = a.Parameters(1).DialogControl; d
d = Popup with properties: Name: 'Parameter1' PromptLocation: 'top' Row: 'new' HorizontalStretch: 'on' Tooltip: ''
ここで、PromptLocation
プロパティを設定するには、次のコマンドを使用します。
d.PromptLocation = 'left';
これで、PromptLocation
が 'left
' として設定されます。使用可能な値は 'left'
と 'top'
です。出力で、PromptLocation
プロパティの値が left
に変更されていることを確認します。
ダイアログのコントロールとそのプロパティの詳細については、Simulink.dialog.Control
を参照してください。