Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

Dynamic Mask 对话框

您可以为封装模块创建对话框,这些对话框的显示会根据用户输入而发生变化。以这种方式变化的封装对话框的特性包括:

  • 参数控制项的可见性 - 更改参数可能会导致另一个参数的控制项出现或消失。当某个控件显示或消失时,对话框会分别随之扩展或收缩。

  • 参数控制项的启用状态 - 更改参数可能会导致另一个参数的控制项允许或禁止输入。禁用的控件将灰显以指示其显示已禁用。

  • 参数值 - 更改封装对话框参数可能导致相关封装对话框参数设置为适当的值。

注意

您不能在封装回调中添加、删除或修改封装参数。

创建动态封装对话框需要结合使用 Mask Editor 和 set_param 命令。具体而言,您需要使用 Mask Editor 定义对话框的参数,包括静态和动态参数。对于每个动态参数,您需要输入一个回调函数,用于定义对话框如何响应对该参数所做的更改(请参阅执行回调代码)。该回调函数会使用 set_param 命令设置封装参数,这些封装参数影响对话框上其他控件的外观和设置(请参阅创建动态封装对话框)。最后,您保存包含封装子系统的模型或库,以完成动态封装对话框的创建。

要查看相关示例,请参阅创建动态封装对话框

Show Parameter

仅当此选项处于选中状态(默认值)时,所选参数才会显示在封装对话框中。

Enable Parameter

清除此选项会使所选参数的提示变灰,并禁用提示的编辑控件。

创建动态封装对话框

此示例说明如何创建其外观会随您的输入而改变的封装对话框模块。

您可以使用此封装对话框设置两个参数。第一个参数是弹出式菜单,您通过该菜单选择下列三个增益值之一:25User-defined。根据您在此弹出式菜单中选择的值,用于指定增益的编辑字段会显示或消失。

  1. 选择一个子系统,并在 Subsystem Block 选项卡上的 Mask 组中,点击 Create Mask

  2. 选择 Mask Editor 上的 Parameters & Dialog 窗格。

  3. 拖放 Popup 参数并在 Dialog box 窗格中选择它。

    1. Prompt 字段中,输入 Gain

    2. Name 字段中,输入 gainpopup

    3. 在 Property editor 窗格中,清除 Evaluate 以使 Simulink® 对弹出式菜单使用您指定的字面值。

    4. Type options 字段中,点击 Edit 按钮以在 Popup Options 对话框中输入以下三个值:

      2
      5
      User-defined

  4. Dialog callback 字段中输入以下代码:

    % Get the mask parameter values. This is a cell
    %   array of character vectors.
    maskStr = get_param(gcb,'gainpopup');
    
    % The pop-up menu is the first mask parameter.
    %   Check the value selected in the pop-up 
    if strcmp(maskStr(1),'U'),
    
        % Set the visibility of both parameters on when 
        %   User-defined is selected in the pop-up.
    
        set_param(gcb,'MaskVisibilities',{'on';'on'}),
    
    else
    
        % Turn off the visibility of the Value field
        %   when User-defined is not selected.
    
        set_param(gcb,'MaskVisibilities',{'on';'off'}),
        
        % Set the character vector in the Values field equal to the
        % character vector selected in the Gain pop-up menu.
    
        %maskStr{2}=maskStr{1};
        set_param(gcb,'editvalue',maskStr);
    end

  5. 拖放 Edit 参数并在 Dialog box 窗格中选择它。

    1. Prompt 字段中,输入 Value

    2. Name 字段中,输入 editvalue

    3. 在 Property editor 窗格中,清除 Visible 以使 Simulink 在默认情况下关闭此属性的可见性。

  6. 点击 Apply

  7. 要打开封装对话框,请双击封装子系统。

    如果您选择 25 作为 Gain,Simulink 会隐藏 Value。如果您选择 User-defined 作为 Gain,则 Value 是可见的。

设置嵌套封装模块参数

如果较低级别的封装子系统引用更高级别的封装子系统定义的符号,并且您尝试在较低级别的封装子系统中设置模块参数,则可能会出现未解析的符号错误。因此,如果模块位于一个封装子系统中,而该封装子系统又位于正在初始化的其他封装子系统中,则应避免使用 set_param 命令来设置这些模块的参数。尝试确定是否较低级别的封装子系统引用了更高级别的封装子系统定义的符号。

例如,假设封装子系统 A 包含封装子系统 B,后者又包含 Gain 模块 C,其 Gain 参数引用 B 定义的变量。再假设子系统 A 的初始化代码包含此命令:

set_param([gcb '/B/C'], 'SampleTime', '-1');

对包含 A 的模型进行仿真或更新将导致未解析的符号错误。

相关主题