测试框架与模型关系
测试框架是一个模型模块,您可以用它来测试、编辑或调试 Simulink® 模型。在主模型中,您将框架与模型组件或顶层模型关联起来。测试框架包含单独的模型工作区和配置集。测试框架与主模型相关联,可以通过模型画布进行访问。
当您创建外部框架时,也会创建元数据 XML 文件。XML 文件包含设计模型的唯一 ID,该 ID 维护了模型与其框架之间的关联。元数据文件不需要与模型位于同一文件夹中,只要它们都在 MATLAB® 路径上即可。
围绕被测组件构建测试框架模型,将框架链接到主模型。如果您在框架中编辑被测组件,则关闭框架时主模型将会更新。您可以为以下内容生成测试框架:
模型组件,例如子系统、库模块、Subsystem Reference 模块、Model 模块或 System Composer™ 组件。测试框架将组件隔离在单独的仿真环境中。如果将 Subsystem 或 Subsystem Reference 模块转换为 Model 模块,则测试框架将转移到模型参考(参阅 测试框架注意事项)。
顶层模型。被测组件是引用主模型的 Model 模块。您还可以在子系统模型中构建测试框架。
模型组件的框架-模型关系
当您将测试框架与模型组件关联时,框架模型工作区将包含与该组件关联的参数的副本。例如,假设您为包含 Gain 模块的组件创建测试框架,然后向该框架添加第二个 Gain 模块。
参数 g 定义了被测组件的一部分,因此框架模型工作区包含 g 的副本。
参数 a 定义了被测组件之外的主模型部分,因此框架模型工作区不包含 a 的副本。
参数 h 是您添加到框架的 Gain 模块的增益。由于该模块位于被测组件之外,因此 h 仅存在于框架模型工作区中。
顶级模型的框架模型关系
当您将框架与主模型的顶层关联时,框架模型工作区不包含与该组件相关的参数的副本。被测组件是引用主模型的 Model 模块,因此参数保留在主模型工作区中。例如,假设您为包含 Gain 模块的顶级模型创建一个测试框架,然后向该框架添加第二个 Gain 模块。
被测组件引用了主模型,并且参数 g 存在于主模型工作区中。框架模型工作区不包含 g 的副本。
参数 h 是您添加到框架的 Gain 模块的增益。由于该模块位于被测组件之外,因此 h 仅存在于框架模型工作区中。
解析参数
测试框架中的参数解析到最本地的工作区。参数解析为框架模型工作区,然后是系统模型工作区,然后是基础 MATLAB 工作区。
测试框架注意事项
您可以为这些类型的模型组件构建测试框架:
Model 模块
Subsystem Reference 模块
Subsystem 模块
子系统和子系统参考模块组件
具有函数接口且位于库顶层的可重用库子系统
Stateflow® 区模块,包括 Stateflow 图、Truth Table 区模块、State Transition Table 区模块和 Test Sequence 区模块
System Composer 组件
C Caller 模块
MATLAB Function 模块
用户定义功能模块
以下类型的 Stateflow 对象不支持测试框架:
原子子图
基于 Simulink 的状态
Simulink 函数
MATLAB 函数
测试框架的存在(无论是内部保存还是外部保存)都不会对模型的仿真或代码生成产生影响。
Simulink 模型拥有的多个框架可以同时打开。当打开多个框架时,您无法使用推送同步将更改从框架到模型。
除非所有测试框架都已关闭,否则您无法删除测试框架。
不要注释掉测试框架中被测试的组件。注释掉测试中的组件可能会导致意外行为。
模型和测试框架锁定特定于每种类型的同步。有关同步的信息,请参阅 同步模式。
在测组件中使用的信号名称从模型传播到测试框架。对于子系统框架,某些传播的信号名称可能仅在编译框架后才可见。对于模块图框架,即使您未在“信号属性”对话框中选择显示传播的信号,系统也会传播信号名称。
子系统和子系统参考模块以及这些模块内的组件
连接至子系统模型的测试框架:
始终与底层模型同步
无需编译即可创建
不支持构建后回调
不自动调整输入形状
如果子系统具有测试框架,则无法将子系统内容扩展到包含该子系统的模型中。扩展子系统之前删除测试框架。有关更多信息,请参阅Expand Subsystem Contents。
当您将 Subsystem 或 Subsystem Reference 模块转换为 Model 模块时,测试框架将转移到模型参考。Subsystem 模块上的框架被转换为模块框架。子系统内的嵌套框架被复制到模型参考中的相同模块中。所有转移的框架均为模型参考中的内部框架。测试框架在转移时可能会被重命名。您可以在转换顾问的完全转换窗格或 MATLAB 命令行中查看有关框架传输的反馈。
这些限制适用于将 Subsystem 或 Subsystem Reference 模块转换为 Model 模块:
SIL 和 PIL 框架未被传输。
子系统测试框架中的需求不会被转移。您必须手动复制它们。
如果您的测试框架包含 To Workspace 模块,则测试运行完成后,该模块变量不会保存在基础工作区中。测试完成后,基础工作区恢复到原始状态。
测试框架模型不支持升级顾问和 XML 差异。
具有 Signal Editor 模块源的测试框架不支持:
基于帧的信号
可变维度信号
对于以 Test Sequence 模块或 Stateflow 图为源的测试框架,被测组件的所有输入都必须以相同的采样时间运行。
在测试框架中收集覆盖率时需要考虑以下几点:
将覆盖率结果加载到模型中,或者跨模型聚合覆盖率结果,需要与覆盖率结果一致的模型。因此,要执行聚合覆盖率收集,请使用配置为自动同步被测组件的测试框架。将同步模式设置为在框架打开和关闭时同步。有关更多信息,请参阅同步测试框架和模型之间的更改。
如果测试框架配置为在打开或关闭框架时同步被测组件,则测试框架的覆盖率结果将与主模型相关联。当您关闭测试框架时,覆盖率结果仍在内存中保持活动。您可以使用从主模型或另一个同步测试框架收集的附加结果来汇总覆盖率。
如果测试框架配置为仅在手动推送或重建时同步被测组件,则覆盖率结果与测试框架相关联。
当您关闭测试框架时,覆盖率结果将从内存中删除。
如果测试组件的设计在测试框架和主模型之间有所不同,则无法聚合覆盖率结果。
如果被测组件设计没有差异,则可以将覆盖率结果与主模型汇总,但必须手动将覆盖率结果加载到主模型中。参阅函数 cvload (Simulink Coverage)。
有关覆盖率的信息,请参阅 收集测试覆盖率
另请参阅
创建测试框架 | Model Reference Conversion Advisor