プログラムによるマスクの制御
マスクの設定と編集に役立つ一連の 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);
maskObjmaskObj =
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';
tab3tab3 =
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を参照してください。