以编程方式控制封装
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
命令时反映出来。要以编程方式指定封装参数的值,建议在封装参数上使用
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('mask_example/subsystem');
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';
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 的 Popup 参数的 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
。