Main Content

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

初始化封装

您可以在 Mask Editor 的 Initialization 窗格中添加 MATLAB® 代码以初始化封装模块。Simulink® 将执行这些初始化命令以便在关键时刻(如模型加载和仿真开始运行)初始化封装子系统。有关详细信息,请参阅 执行初始化命令

您可以针对以下情况添加封装初始化代码:

  • 指定封装参数的初始值。例如,要指定参数 a 的初始值,请在 Initialization 窗格中键入 a = 5

  • 指定子模块的值。例如,

    set_param('Child block Name','Parameter name','Parameter Value')
  • 创建可自修改的封装。有关详细信息,请参阅自修改封装

封装子系统的初始化代码只能引用其本地工作区中的变量。

当您通过模型引用模块或者将模块复制到模型中时,封装对话框将显示指定的默认值。您不能使用封装初始化代码来更改库模块或任何其他模块中的封装参数默认值。

需要确保在封装初始化代码中使用的封装参数已定义。编辑封装初始化命令时会显示封装初始化中出现的错误,但仅在所有封装参数值的计算都没有报错时才可能实现。

注意

  • 在使用模型引用时,包含初始化代码的模块将无法按预期方式工作。

  • Subsystem 模块的封装初始化代码中使用 set_param 时,也会计算子模块。

使用 Mask Editor 的 Initialization 窗格添加 MATLAB 命令以初始化封装模块。

Initialization 窗格包含以下各部分:

  • Dialog variables

  • Initialization commands

Dialog Variables

Dialog variables 部分显示与 Parameters 窗格中定义的封装模块的封装参数关联的变量名称。

您可以将该列表中的参数名称复制并粘贴到 Initialization commands 部分。

您可以通过双击并编辑列表中封装参数变量的名称来更改该名称。

Initialization Commands

您可以在此部分中添加初始化命令。初始化代码必须是有效的 MATLAB 表达式,其中包含 MATLAB 函数和脚本、运算符以及在封装工作区中定义的变量。初始化命令无法访问基础工作区变量。

要避免将结果回显到 MATLAB 命令行窗口,请使用分号终止初始化命令。

要查看相关示例,请参阅:

封装初始化最佳做法

封装初始化命令必须遵守以下规则:

  • 不要使用初始化代码来创建动态封装对话框(其外观或控件设置会随其他控件设置的更改而更改的对话框)。应改用专门用于此用途的封装回调。有关详细信息,请参阅 Dynamic Mask 对话框

  • 在模型加载期间,不要使用初始化代码添加或删除模块。

  • 对于嵌套封装子系统,不要对子模块的父模块使用 set_param。子模块封装和父模块封装可能都会对模块的同一个参数进行初始化,从而产生不可预知的行为。有关详细信息,请参阅不安全的封装回调错误

  • 不要对驻留在另一个封装子系统中、您正在初始化的模块使用 set_param 命令。如果较低级别的封装子系统引用较高级别的封装子系统定义的符号,尝试在较低级别的封装子系统中设置模块参数可能会触发未解析的符号错误。

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

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

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

  • 您不能使用封装初始化代码来创建数据对象。数据对象是以下类的对象:

    • Simulink.Parameter 和子类

    • Simulink.Signal 和子类

  • 不要添加初始化代码来删除同一封装模块。

  • 仅使用封装初始化代码来控制直接子模块。

注意

不要使用封装初始化代码来注释或取消注释模块。

相关主题