Main Content

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

重新编译

说明

选择适当的方法来确定在对引用模型进行更新、仿真或从其生成代码之前,应于何时对其引用模型的仿真和 Simulink® Coder™ 目标进行重新编译。

类别:模型引用

设置

默认值:If any changes detected

Always

始终重新编译引用模型的目标。此设置需要的处理时间最多,因为它可能触发不必要的编译。要使所有模型引用目标保持最新,请在部署模型之前使用此设置。

If any changes detected

当 Simulink 检测到可能影响仿真结果的更改时,有条件地为引用模型重新编译目标。要对引用模型的依存关系执行广泛的更改检测,请使用此设置。

如果 Simulink 在已知的依存关系中没有发现任何变化,它将计算模型的结构校验和。结构校验和会检测用户创建的而非使用 Model dependencies 配置参数指定的依存关系中发生的更改。如果结构校验和已更改,则 Simulink 将重新编译模型引用目标。

If any changes in known dependencies detected

当 Simulink 检测到可能影响仿真结果的更改时,有条件地为引用模型重新编译目标。要减少更改检测所需的时间,请使用此设置。

如果 Simulink 未发现已知或潜在依存关系发生变化,则不会计算模型的结构校验和,也不会重新编译模型引用目标。为了避免无效的仿真结果,您必须在 Model dependencies 参数中列出用户创建的所有依存关系。

Never

不重新编译引用模型的目标。此设置需要的处理时间最少,并且它会使用 Simulink 缓存文件(如果可用)以加快仿真速度。要避免在开发模型时重新编译,请使用此设置。

如果模型引用目标已过期,仿真可能会显示无效结果。要让 Simulink 检查已知目标依存关系中的更改并报告模型引用目标是否已过期,请使用 Never rebuild diagnostic 参数。要手动重新编译模型引用目标,请使用 slbuild 函数。

有关使用和共享 Simulink 缓存文件的信息,请参阅共享 Simulink 缓存文件以加快仿真速度

定义

已知的目标依存关系

已知的目标依存关系是模型文件外部的文件和数据,Simulink 在检查模型引用目标是否为最新时会检查这些外部文件和数据是否发生更改。Simulink 会自动计算一组已知的目标依存关系。已知的目标依存关系的示例如下:

  • 对模型工作区的更改(如果模型工作区的数据源是 MAT 文件或 MATLAB® 文件)

  • 枚举类型定义

  • 用户编写的 S-Function 及其 TLC 文件

  • Model dependencies 参数中指定的文件

  • Stateflow®、MATLAB Function 模块或 MATLAB System 模块使用的外部文件

  • 数据流子系统 - 数据流子系统的分析要求仿真目标重新编译两次,第一次用于探查运行成本,第二次用于划分子系统。此外,如果运行仿真的计算机的内核数少于子系统在分区时指定要使用的内核数(例如,仿真目标在具有更多内核的计算机上最后编译可能出现这种情况),则仿真目标必须重新编译。有关详细信息,请参阅Simulation of Dataflow Domains (DSP System Toolbox)

潜在的目标依存关系

潜在的目标依存关系是模型文件和模型配置设置外部的文件和数据,Simulink 在检查模型引用目标是否为最新时会检查这些外部文件和数据是否发生更改。Simulink 会自动计算一组潜在的目标依存关系。潜在的目标依存关系的示例如下:

  • 对全局变量的更改

  • 对此模型引用的模型目标的更改

  • Configuration Parameters > Diagnostics > Data Validity > Signal resolution 参数(当设置为 “Explicit and implicit” 或 “Explicit and warn implicit” 时)

Simulink 会检查每个潜在的目标依存关系,以确定其状态是否触发结构校验和检查。

用户创建的依存关系

用户创建的依存关系是 Simulink 不自动标识的文件,尽管它们可能会对仿真结果产生影响。用户创建的依存关系的示例如下:

  • 包含由回调执行的代码的 MATLAB 文件

  • MAT 文件,其中包含模型所使用的且作为自定义初始化脚本的一部分加载的变量的定义

您可以通过使用 Model dependencies 参数将用户创建的依存关系添加到一组已知的目标依存关系。

结构校验和

结构校验和是一项计算,用于检测模型中可能影响仿真结果的更改。当 Simulink 计算结构校验和时,它会加载并编译模型。要编译模型,Simulink 必须执行回调并访问模型使用的所有变量。无论您是否在 Model dependencies 参数中指定了用户创建的依存关系,结构校验和都会检测这些用户创建的依存关系中的更改。

有关影响结构校验和的更改的种类的详细信息,请参阅 Simulink.BlockDiagram.getChecksum

提示

  • 模型层次结构中的模型可以具有不同的重新编译设置。当您更新、仿真或生成模型的代码时,该模型的重新编译设置会应用于其所有引用模型。

  • 在 Normal 模式下执行的模型不会生成仿真目标,并且不受 Rebuild 设置的影响。

  • 要提高重新编译检测速度和精确度,请使用 Model dependencies 配置参数指定用户创建的依存关系。

  • 下面的流程图说明当 Rebuild 设置为 “If any changes detected” 或 “If any changes in known dependencies detected” 时 Simulink 执行的处理。

  • 此示例说明 “If any changes detected” 和 “If any changes in known dependencies detected” 设置之间的差异。

    如果更改了某 MATLAB 文件,而该文件作为未在 Model dependencies 参数中列出的回调脚本的一部分执行:

    • If any changes detected” 会导致重新编译,因为该更改会影响模型的结构校验和。

    • If any changes in known dependencies detected” 不会导致重新编译,因为没有已知的目标依存关系发生更改。

依存关系

选择 “Never” 将启用 Never rebuild diagnostic 参数。

命令行信息

参数: UpdateModelReferenceTargets
'Force' | 'IfOutOfDateOrStructuralChange' | 'IfOutOfDate' | 'AssumeUpToDate'
默认值'IfOutOfDateOrStructuralChange'
UpdateModelReferenceTargets等效的 Rebuild
'Force'Always
'IfOutOfDateOrStructuralChange'If any changes detected
'IfOutOfDate'If any changes in known dependencies detected
'AssumeUpToDate'Never

推荐的设置

应用场景设置
调试无影响
可追溯性无影响
效率无影响
安全预警

If any changes detected” 或 “Never

如果使用 “Never” 设置,则将 Never rebuild diagnostic 参数设置为 “Error if rebuild required”。

兼容性注意事项

从 R2019b 开始,“If any changes detected” 忽略外观变化,例如模块位置更改。

另请参阅

模块

Simulink 配置参数

函数

相关主题