Main Content

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

模型回调

模型回调在指定的操作点执行,例如在加载或保存模型后。

您可以为库设置这些回调中的大多数回调。只有可针对库执行的回调才可针对库进行设置。例如,您不能为库设置 InitFcn 回调(它作为仿真的一部分被调用),因为您不能对库进行仿真。

创建模型回调

  1. 在 Simulink® Editor 中,打开 Property Inspector。在 Modeling 选项卡中,在 Design 下,点击 Property Inspector

  2. 在未选择模型顶层的任何内容的情况下,在 Properties 选项卡上的 Callbacks 部分中,选择您要设置的回调。

  3. 在框中,输入您希望回调执行的函数。

要以编程方式创建模型回调,请使用 set_param 函数向模型回调参数分配 MATLAB® 代码。请参阅模型回调参数

引用模型回调

在模型层次结构中,回调的执行反映顶层模型及它引用的模型执行其回调的顺序。例如,假设:

  • 模型 A:

    • 在 Accelerator 模式下引用模型 B。

    • 具有在 MATLAB 工作区中创建变量的 PostLoadFcn 回调。

    • Rebuild 配置参数设置为 AlwaysIf changes detectedIf any changes in known dependencies detected

  • 模型 B:

    • 具有清空 MATLAB 工作区的 CloseFcn 回调。

    • 尚未编译或已过期。

对模型 A 进行仿真会触发对引用模型 B 的重新编译。当 Simulink 重新编译模型 B 时,它会打开和关闭模型 B,这会调用模型 B CloseFcn 回调。调用 CloseFcn 会清空 MATLAB 工作区,包括由模型 A OpenFcn 回调创建的变量。

您可以使用模型 A 中的 StopFcn 回调从 MATLAB 工作区清除模型使用的变量,而不是使用模型 B 的 CloseFcn 回调。您也可以对数据使用数据字典,这样就不必在基础工作区中使用变量。

如果模型在 Normal 模式下引用同一模型的多个实例,则回调会对每个实例执行。

对于在 Accelerator 模式下引用的模型,Simulink 不执行某些回调。如果一切都是最新的,并且 Rebuild 配置参数设置为 “If any changes in known dependencies detected”,则引用模型不会编译,其 InitFcn 回调也不会执行。StartFcnStopFcn 等回调不会执行,因为在 Accelerator 模式下,引用模型使用 S-Function 而不是引用模型来进行启动和停止。

注意

仿真输出在命令行仿真的 StopFcn 回调中不可用。

必须避免用于编辑模型结构体的模型 InitFcn 回调。Simulink 有时可能会根据模型加载状态而执行或忽略。

模型回调参数

 模型加载和关闭回调参数

 模型保存回调参数

 模型仿真回调参数

相关主题