Main Content

以编程方式控制封装

Simulink® 定义了一组有助于设置和编辑封装的参数。要从 MATLAB® 命令行设置和编辑封装,您可以使用 Simulink.MaskSimulink.MaskParameter 类方法。也可以使用 get_paramset_param 函数来设置和编辑封装。但是,由于这些函数使用的分隔符不支持 Unicode®(非英文)字符,建议您使用 Simulink.Mask 方法和 Simulink.MaskParameter 类方法来控制封装。

使用 Simulink.MaskSimulink.MaskParameter

使用 Simulink.MaskSimulink.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.MaskSimulink.MaskParameter

使用 get_paramset_param

set_paramget_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 存在某些约束。在不可自修改的链接模块上,您可以更改封装参数的属性,如 ValueVisibleEnable。在可自修改的链接模块上,除了 ValueVisibleEnable 之外,您几乎无法更改其他属性。

以编程方式创建封装参数和对话框

此示例说明了如何创建此简单的封装对话框,向对话框中添加控件,并更改控件的属性。

步骤 1:为您在模型中选择的模块创建封装。

步骤 2:要自定义对话框并使用选项卡而不是默认组,请删除参数组框。

maskObj.removeDialogControl('ParameterGroupVar');
open_system('mask_example/subsystem');

Simulink 保留子对话框控件(本例中的两个复选框),甚至在您删除包含它们的 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)';

使第三个选项卡不可见。

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

相关主题