以编程方式控制封装
Simulink® 定义了一组有助于设置和编辑封装的 API。要从 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 命令行传递的值设置模型或库中任何模块的封装。在此示例中,创建了两个封装编辑参数 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命令时反映出来。要以编程方式指定封装参数的值,建议在封装参数上使用
set_param命令,而不是在 MaskValues 上使用set_param。
对于 R2014a 之前的版本,要以编程方式控制封装属性,请参阅封装参数。
对链接模块使用 set_param 和封装对象 API 的限制
对链接模块使用 set_param 和封装对象 API 修改封装参数时,Simulink 存在某些约束。在不可自修改的链接模块上,您可以更改封装参数的属性,如 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)';
使第三个选项卡不可见。
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 的 Popup 参数的 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。