Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

初始化封装

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

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

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

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

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

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

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

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

注意

  • 避免从封装初始化代码中无条件修改子系统的内容。使用模型引用时,这种无条件修改不能正常工作。

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

  • 当使用 Simulink.Parameter 对象作为封装参数的值时,如果对象的值是数值,封装初始化代码可以将封装参数视为 MATLAB 变量。

使用封装编辑器的代码窗格添加 MATLAB 命令以初始化封装模块。

代码窗格包含以下部分:

  • 初始化和回调

  • 参数

code pane for initialization

对话框变量

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

您可以将该列表中的参数名称复制并粘贴到初始化代码部分。

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

初始化代码

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

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

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

封装初始化最佳做法

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

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

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

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

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

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

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

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

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

    • Simulink.Parameter 和子类

    • Simulink.Signal 和子类

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

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

注意

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

相关主题