重新编译
描述
选择适当的方法来确定在对引用模型进行更新、仿真或从其生成代码之前,应于何时对其引用模型的仿真和 Simulink® Coder™ 目标进行重新编译。
类别:模型引用
设置
默认值:“如果检测到任何变化
”
- “
始终
” 始终重新编译引用模型的目标。此设置需要的处理时间最多,因为它可能触发不必要的编译。要使所有模型引用目标保持最新,请在部署模型之前使用此设置。
- “
如果检测到任何变化
” 当 Simulink 检测到可能影响仿真结果的更改时,有条件地为引用模型重新编译目标。要对引用模型的依存关系执行广泛的更改检测,请使用此设置。
如果 Simulink 在已知的依存关系中没有发现任何变化,它将计算模型的结构校验和。结构校验和会检测用户创建的而非使用模型依存关系配置参数指定的依存关系中发生的更改。如果结构校验和已更改,则 Simulink 将重新编译模型引用目标。
- “
如果检测到已知依存关系的任何变化
” 当 Simulink 检测到可能影响仿真结果的更改时,有条件地为引用模型重新编译目标。要减少更改检测所需的时间,请使用此设置。
如果 Simulink 未发现已知或潜在依存关系发生变化,则不会计算模型的结构校验和,也不会重新编译模型引用目标。为了避免无效的仿真结果,您必须在模型依存关系参数中列出用户创建的所有依存关系。
- “
从不
” 不重新编译引用模型的目标。此设置需要的处理时间最少,并且它会使用 Simulink 缓存文件(如果可用)以加快仿真速度。要避免在开发模型时重新编译,请使用此设置。
如果模型引用目标已过期,仿真可能会显示无效结果。要让 Simulink 检查已知目标依存关系中的更改并报告模型引用目标是否已过期,请使用从不重新编译诊断参数。要手动重新编译模型引用目标,请使用
slbuild
函数。有关使用和共享 Simulink 缓存文件的信息,请参阅共享 Simulink 缓存文件以加快仿真速度。
定义
- 已知的目标依存关系
已知的目标依存关系是模型文件外部的文件和数据,Simulink 在检查模型引用目标是否为最新时会检查这些外部文件和数据是否发生更改。Simulink 会自动计算一组已知的目标依存关系。已知的目标依存关系的示例如下:
对模型工作区的更改(如果模型工作区的数据源是 MAT 文件或 MATLAB® 文件)
枚举类型定义
用户编写的 S-Function 及其 TLC 文件
模型依存关系参数中指定的文件
Stateflow®、MATLAB Function 模块或 MATLAB System 模块使用的外部文件
数据流子系统 - 数据流子系统的分析要求仿真目标重新编译两次,第一次用于探查运行成本,第二次用于划分子系统。此外,如果运行仿真的计算机的内核数少于子系统在分区时指定要使用的内核数(例如,仿真目标在具有更多内核的计算机上最后编译可能出现这种情况),则仿真目标必须重新编译。有关详细信息,请参阅Simulation of Dataflow Domains (DSP System Toolbox)。
- 潜在的目标依存关系
潜在的目标依存关系是模型文件和模型配置设置外部的文件和数据,Simulink 在检查模型引用目标是否为最新时会检查这些外部文件和数据是否发生更改。Simulink 会自动计算一组潜在的目标依存关系。潜在的目标依存关系的示例如下:
对全局变量的更改
对此模型引用的模型目标的更改
配置参数 > 诊断 > 数据有效性 > 信号解析参数(当设置为“
显式和隐式
”或“显式和隐式(警告)
” 时)
Simulink 会检查每个潜在的目标依存关系,以确定其状态是否触发结构校验和检查。
- 用户创建的依存关系
用户创建的依存关系是 Simulink 不自动标识的文件,尽管它们可能会对仿真结果产生影响。用户创建的依存关系的示例如下:
包含由回调执行的代码的 MATLAB 文件
MAT 文件,其中包含模型所使用的且作为自定义初始化脚本的一部分加载的变量的定义
您可以通过使用模型依存关系参数将用户创建的依存关系添加到一组已知的目标依存关系。
- 结构校验和
结构校验和是一项计算,用于检测模型中可能影响仿真结果的更改。当 Simulink 计算结构校验和时,它会加载并编译模型。要编译模型,Simulink 必须执行回调并访问模型使用的所有变量。无论您是否在模型依存关系参数中指定了用户创建的依存关系,结构校验和都会检测这些用户创建的依存关系中的更改。
有关影响结构校验和的更改的种类的详细信息,请参阅
Simulink.BlockDiagram.getChecksum
。
提示
模型层次结构中的模型可以具有不同的重新编译设置。当您更新、仿真或生成模型的代码时,该模型的重新编译设置会应用于其所有引用模型。
在普通模式下执行的模型不会生成仿真目标,并且不受重新编译设置的影响。
要提高重新编译检测速度和精确度,请使用模型依存关系配置参数指定用户创建的依存关系。
下面的流程图说明当重新编译设置为“
如果检测到任何变化
”或“如果检测到已知依存关系的任何变化
”时 Simulink 执行的处理。此示例说明“
如果检测到任何变化
”和“如果检测到已知依存关系的任何变化
”设置之间的差异。如果更改了某 MATLAB 文件,而该文件作为未在模型依存关系参数中列出的回调脚本的一部分执行:
“
如果检测到任何变化
”会导致重新编译,因为该更改会影响模型的结构校验和。“
如果检测到已知依存关系的任何变化
”不会导致重新编译,因为没有已知的目标依存关系发生更改。
依存关系
选择“从不
”将启用 从不重新编译诊断 参数。
命令行信息
参数: UpdateModelReferenceTargets |
值:'Force' | 'IfOutOfDateOrStructuralChange' | 'IfOutOfDate' | 'AssumeUpToDate' |
默认值:'IfOutOfDateOrStructuralChange' |
UpdateModelReferenceTargets 值 | 等效的重新编译值 |
---|---|
'Force' | “始终 ” |
'IfOutOfDateOrStructuralChange' | “如果检测到任何变化 ” |
'IfOutOfDate' | “如果检测到已知依存关系的任何变化 ” |
'AssumeUpToDate' | “从不 ” |
推荐的设置
应用场景 | 设置 |
---|---|
调试 | 无影响 |
可追溯性 | 无影响 |
效率 | 无影响 |
安全预警 | “ 如果使用“ |
兼容性注意事项
从 R2019b 开始,“如果检测到任何变化
”忽略外观变化,例如模块位置更改。