主要内容

模块回调

您可以为模块事件(例如在加载、打开或编辑模块时)指定执行 MATLAB® 代码的模块回调。

  1. 建模选项卡上,在设计下,点击属性检查器

  2. 选择您要指定其回调的模块。

  3. 在属性检查器的属性选项卡上,请在回调部分中,选择您要定义的回调。

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

要以编程方式指定模块回调,请使用 set_param 函数为模块回调参数分配 MATLAB 代码。

如果模块回调在建模操作发生之前或之后执行,该回调将在该操作之前或之后紧接着发生。

对于激活时间为更新图Variant Subsystem 模块中的非活动变体选择项,以及带注释的模块,回调 LoadFcnContinueFcnInitFcnModelCloseFcnPauseFcnPostSaveFcnPreSaveFcnStartFcnStopFcn 不会执行。这种抑制可减少计算开销,并防止不影响当前模型迭代的模块发出不必要的诊断消息。例如,当在 find_system 函数中使用 @Simulink.match.allVariants 匹配过滤器来识别活动和非活动变体选择项时,Simulink® 会列出非活动变体选择项,但仅对活动变体选择项执行 LoadFcn 回调。它不会为非活动变体选择项执行 LoadFcn 回调,因为它们不影响模型执行。但是,对于带注释或非活动 Model 模块或 Subsystem Reference 模块内的模型或子系统文件中的模块,这些回调不会隐藏。此外,封装初始化和封装参数回调也不会隐藏。有关适用回调的列表,请参阅Author Mask Initialization and Callbacks封装参数

与模块打开相关的回调参数

模块回调参数在回调执行时

OpenFcn

打开模块时。

一般情况下,此参数与 Subsystem 模块结合使用。

当您双击模块,或者将 open_system 函数作为参量与模块结合使用时,将执行回调。OpenFcn 回调将会覆盖与打开模块相关联的正常行为,即,显示模块对话框或打开子系统。可以使用 OpenFcn 回调来执行的任务示例包括:为模块定义变量,执行 MATLAB 调用来生成仿真数据绘图,或生成图形用户界面。

OpenFcn 回调添加到模块后,双击模块不会打开模块对话框。此外,选择了模块时,模块参数不会出现在属性检查器中。要设置模块参数,请从模块上下文菜单中选择模块参数

LoadFcn

加载模块图之后。

当任何模块变为活动状态或取消注释时,将执行 LoadFcn 回调。一旦 LoadFcn 回调在迭代中运行,如果模块在后续迭代中从非活动状态转移为活动状态,该回调将不再触发以避免冗余执行。

对于 Subsystem 模块,将对子系统中定义了 LoadFcn 回调的任何模块(包括其他 Subsystem 模块)执行 LoadFcn 回调。

与模块编辑相关的回调参数

模块回调参数在回调执行时

MoveFcn

移动或调整模块大小时。

NameChangeFcn

模块的名称或路径更改之后。

如果 Subsystem 模块路径发生变化,Subsystem 模块将先调用其后代模块的 NameChangeFcn 回调,然后调用 NameChangeFcn 回调本身。

PreCopyFcn

在复制模块之前。如果使用 add_block 复制模块,也会执行 PreCopyFcn 回调。

如果您复制的 Subsystem 模块包含的模块定义了 PreCopyFcn 回调,也会执行该回调。

在执行所有 PreCopyFcn 回调后,将调用 CopyFcn 模块回调。

CopyFcn

在复制模块之后。如果使用 add_block 函数复制模块,也会执行该回调。

如果您复制的 Subsystem 模块包含的模块定义了 CopyFcn 参数,也会执行该回调。

ClipboardFcn

在将模块复制或剪切到系统剪贴板时。

PreDeleteFcn

在以图形方式删除模块之前。例如,当您以图形方式删除模块或对模块调用 delete_block 函数时。

当包含该模块的模型关闭时,不会调用 PreDeleteFcn 回调。除非 PreDeleteFcn 回调显式调用或通过在 PreDeleteFcn 回调中使用的命令调用 error 命令,否则会在 PreDeleteFcn 回调后调用 DeleteFcn 模块回调。

DeleteFcn

在图形意义上删除模块之后(例如,当您直接从图中删除模块,对模块调用 delete_block 函数,或关闭包含模块的模型时)。

在调用 DeleteFcn 回调后,模块句柄仍然有效并且可以使用 get_param 函数进行访问。如果通过调用 delete_block 函数或通过关闭模型在图形意义上删除模块,在删除后,将在内存中销毁该模块,并调用 DestroyFcn 模块回调。

对于 Subsystem 模块,将对子系统中定义了 DeleteFcn 回调的任何模块(包括其他 Subsystem 模块)执行 DeleteFcn 回调。

DestroyFcn

在内存中销毁该模块后(例如,当您对模块或包含该模块的子系统调用 delete_block 函数或关闭包含该模块的模型时)。

如果之前未在图形意义上删除模块,DeleteFcn 模块回调将在 DestroyFcn 回调之前调用。在调用 DestroyFcn 回调时,该模块句柄将不再有效。

UndoDeleteFcn

在撤消模块删除操作时。

与模块编译和仿真相关的回调参数

模块回调参数在回调执行时

InitFcn

编译模块图之前以及计算模块参数之前。有关 InitFcn 回调的详细信息,请参阅初始化函数

StartFcn

编译模块图之后、仿真开始之前。

如果是 S-Function 模块,StartFcn 回调将在第一次执行此模块的 mdlProcessParameters 函数之前立即执行。有关详细信息,请参阅 S-Function 回调方法

ContinueFcn

在仿真继续之前。

PauseFcn

在仿真暂停之后。

StopFcn

在仿真因任何原因终止时。

如果是 S-Function 模块,StopFcn 回调将在模块的 mdlTerminate 函数执行之后执行。有关详细信息,请参阅 S-Function 回调方法

模块保存和关闭回调参数

模块回调参数在回调执行时

PreSaveFcn

保存模块图之前。

对于 Subsystem 模块,将对子系统中定义了 PreSaveFcn 回调的任何模块(包括其他 Subsystem 模块)执行 PreSaveFcn 回调。

PostSaveFcn

保存模块图之后。

对于 Subsystem 模块,将对子系统中定义了 PostSaveFcn 回调的任何模块(包括其他 Subsystem 模块)执行 PostSaveFcn 回调。

CloseFcn

使用 close_system 函数关闭模块时。

当您以交互方式关闭模块参数对话框、以交互方式关闭包含模块的子系统或模型,或使用 close_system 函数关闭包含模块的子系统或模型时,将不会调用 CloseFcn 回调。

例如,若要关闭所有打开的 MATLAB 窗口,请使用如下命令:

set_param('my_model','CloseFcn','close all')

ModelCloseFcn

模块图关闭之前。

当模型关闭时,在 DeleteFcnDestroyFcn 模块回调(如果设置了任一项)之前调用 ModelCloseFcn 模块回调。

对于 Subsystem 模块,将对子系统中定义了 ModelCloseFcn 回调的任何模块(包括其他 Subsystem 模块)执行 ModelCloseFcn 回调。

Subsystem 模块回调参数

您可以对 Subsystem 模块使用其他模块回调参数,但此表中的回调参数特定于 Subsystem 模块。

注意

封装子系统的回调无法直接引用封装子系统的参数。请参阅创建模块封装。软件在 MATLAB 基础工作区中计算模块回调,而封装参数驻留在封装子系统的私有工作区中。模块回调可以使用 get_param 函数获取封装参数的值。例如,此处的 gain 是当前模块的封装参数的名称:

get_param(gcb,'gain')
模块回调参数在回调执行时

DeleteChildFcn

在子系统中删除模块或线条后。

如果模块有 DeleteFcnDestroyFcn 回调,这些回调将在 DeleteChildFcn 回调之前执行。

ErrorFcn

当子系统中发生错误时。

ErrorFcn 回调的回调代码使用以下格式:

newException = errorHandler(subsys,...
errorType,originalException)

其中

  • errorHandler 是函数的名称。

  • subsys 是发生错误的子系统的句柄。

  • errorType 是指示发生的错误类型的字符向量。

  • originalException 是一个 MSLException。有关详细信息,请参阅使用 MSLException 对象处理 Simulink 中的错误

  • newException 是一个 MSLException,指定要向用户显示的错误消息。

如果您提供原始异常,则不需要指定子系统和错误类型。

以下命令将子系统 subsysErrorFcn 回调设置为调用 errorHandler 回调。

set_param(subsys,'ErrorFcn','errorHandler')
在这种对 set_param 函数的调用中,不要包含回调代码的输入参量。软件显示由回调返回的错误消息。

ParentCloseFcn

在关闭包含模块的子系统之前,或者通过使用以下方式将模块纳入为新子系统的一部分时:

  • new_system 函数

  • 创建子系统图标在 Simulink 编辑器中的多个选项卡上。

当您关闭模型时,软件不会调模型根级的模块的 ParentCloseFcn 回调。

另请参阅

主题