模型回调
模型回调在指定的操作点执行,例如在加载或保存模型后。
您可以使用模型回调来执行常见任务,例如:
您可以为库设置这些回调中的大多数回调。只有可针对库执行的回调才可针对库进行设置。例如,您不能为库设置 InitFcn
回调(它作为仿真的一部分被调用),因为您不能对库进行仿真。
创建模型回调
在 Simulink® 工具条中,在建模选项卡的设计库中,点击属性检查器。
在未选择模型或引用模型顶层的任何内容的情况下,在属性选项卡上的回调部分中,选择您要设置的回调。
注意
模块回调不同于模型回调。不要选择 Model 模块来为引用模型设置模型回调。
在框中,输入您希望回调执行的函数。
要以编程方式创建模型回调,请使用 set_param
函数向模型回调参数分配 MATLAB® 代码。
模型回调参数
模型回调参数 | 执行时间 |
---|---|
| 在模型加载之前。 不要在 为此参数定义回调代码对于加载该模型使用的变量很有用。 如果您想从 MATLAB 文件调用您的模型,而不打开模型,请使用 有关示例,请参阅Automatically Initialize Variables and Load Data。 限制包括: |
| 在模型加载之后。 为此参数定义回调代码对于生成需要已加载模型的接口可能很有用。 限制包括:
由于在此回调执行后 Simulink 编辑器会打开,因此 |
| 在计算模块参数之前的更新阶段。此回调在模型更新和仿真过程中调用。 避免用于编辑模型结构体的 避免对引用模型的内容进行编辑的 有关 有关示例,请参阅Call MATLAB Function Files in MATLAB Function Blocks。 |
| 在仿真阶段之前。在模型更新期间不调用此回调。 有关示例,请参阅使用回调自动执行仿真任务。 在快速重启中对每个仿真都会调用此回调。 |
| 在仿真暂停之后。 |
| 在仿真继续之前。 |
| 在仿真停止之后。 输出将在 仿真输出在命令行仿真的 在快速重启中对每个仿真都会调用此回调。 |
| 保存模型之前。 |
| 保存模型之后。 如果您使用 |
| 模块图关闭之前。 在模型中的模块上设置的任何 |
引用模型回调
在模型层次结构中,回调的执行反映顶层模型及它引用的模型执行其回调的顺序。例如,假设:
模型 A:
在加速模式下引用模型 B。
具有在 MATLAB 工作区中创建变量的
PostLoadFcn
回调。将重新编译配置参数设置为始终、如果检测到变化或如果检测到已知依存关系的变化。
模型 B:
具有清空 MATLAB 工作区的
CloseFcn
回调。尚未编译或已过期。
对模型 A 进行仿真会触发对引用模型 B 的重新编译。当 Simulink 重新编译模型 B 时,它会打开和关闭模型 B,这会调用模型 B CloseFcn
回调。调用 CloseFcn
会清空 MATLAB 工作区,包括由模型 A OpenFcn
回调创建的变量。
您可以使用模型 A 中的 StopFcn
回调从 MATLAB 工作区清除模型使用的变量,而不是使用模型 B 的 CloseFcn
回调。您也可以对数据使用数据字典,这样就不必在基础工作区中使用变量。
Model 模块的仿真模式影响引用模型的模型回调执行时间。
Model 模块的仿真模式 | 行为 |
---|---|
普通 | 在模型编译期间,Simulink 加载每个引用模型,该模型配置为在普通模式下仿真,但尚未加载。 在大多数情况下,Simulink 对每个普通模式引用模型编译一次,而不管引用它的 Model 模块的数量。
在模型编译后,引用模型仍保持加载状态。 |
加速 | 在模型编译期间,Simulink 可能会打开和关闭引用模型,这些模型配置为基于其重新编译设置和仿真目标在加速模式下进行仿真。在模型编译之前打开的模型保持打开状态。 Simulink 不执行某些回调。
|
有关模型引用仿真模式的详细信息,请参阅为模型层次结构选择仿真模式。