引用模型的多个实例的模型覆盖率
Model 模块本身只接收模块执行覆盖率。如果将 Model 模块的仿真模式设置为普通、软件在环(SIL) 或处理器在环(PIL),则 Simulink® Coverage™ 会分析 Model 模块引用的模型的覆盖率。
您的 Simulink 模型可以包含多个具有相同仿真模式且引用相同模型的 Model 模块。分析覆盖率时,您可以为引用模型的每个实例指定不同的输入或参数。您可以使用此方法来满足引用模型的额外覆盖率目标。
Simulink Coverage 分析具有相同仿真模式的引用模型的所有实例的覆盖率,并将该引用模型的覆盖率数据合并到最终结果中。
要了解覆盖率如何处理引用模型的多个实例,仿真模型两次。第一次,您在普通仿真模式下记录一个 Model 模块的覆盖率。第二次,在普通仿真模式下记录两个 Model 模块的覆盖率。两个 Model 模块引用相同的模型。在这两种仿真中,您只能看到处于正常仿真模式的模型引用实例的覆盖率结果,因为您无法在一次仿真中收集多种仿真模式的覆盖率。
引用模型的第一个实例的记录覆盖率
记录一个 Model 模块的覆盖率。
打开您的顶层模型。例如,该模型包含三个引用
sldemo_mdlref_counter_datamngt
模型的 Model 模块。每个 Model 模块的角落表示其仿真模式参数的值:
Counter1 - 仿真模式:普通
Counter2 - 仿真模式:加速
Counter3 - 仿真模式:加速
配置您的模型以记录仿真期间的覆盖率:
在 Simulink 编辑器中的建模选项卡上,选择模型设置。
在“配置参数”对话框的左侧窗格中,点击覆盖率。
在覆盖率窗格中,选择启用覆盖率分析,然后选择引用模型单选按钮。
点击选择模型。在选择覆盖率分析模型对话框中,您只能选择仿真模式为普通、SIL 或 PIL 的引用模型。该对话框针对每个仿真模式显示一次模型。在这个示例中,您只能选择引用
sldemo_mdlref_counter_datamngt
的第一个 Model 模块,因为它代表使用正常仿真模式的模型实例。点击确定退出“选择要进行覆盖率分析的模型”对话框。
点击确定保存覆盖率设置并退出配置参数对话框。
通过点击运行(覆盖率)按钮来仿真模型。
当仿真完成后,覆盖率详细信息窗格将打开并显示覆盖率报告。对于这种情况,参考模型
sldemo_mdlref_counter_datamngt
的覆盖率数据显示该模型实现了 85% 的覆盖率。要查看引用模型的内容,点击 Model 模块左下角的箭头。覆盖率详细信息窗格显示引用模型的覆盖率报告,并突出显示模块以显示覆盖率结果。
在此示例中,对于
Range Check
子系统:Saturate Count 模块执行 50 次。该模块有四个决策结果。决策覆盖率为 50%,因为四个决策结果中有两个不满足:
决策
input >= lower limit
永远不会是false
。决策
input > upper limit
永远不会是true
。
DetectOverflow
函数执行 50 次。这个脚本有五个决策。DetectOverflow
脚本实现了 60% 的覆盖率,因为五个决策结果中有两个不满足。表达式count >= CounterParams.UpperLimit
永远不会是true
,并且表达式count > CounterParams.LowerLimit
永远不会是false
。
引用模型的第二个实例的记录覆盖率
记录两个 Model 模块的覆盖率。将第二个 Model 模块的仿真模式设置为普通并仿真模型。在此示例中,Counter2
模块增加了从两个 Model 模块引用的模型的覆盖率。
在顶层模型的 Simulink 编辑器中,右键点击第二个 Model 模块并选择模块参数 (ModelReference)。
打开“模块参数”对话框。
将仿真模式参数设置为普通。
点击确定保存更改并退出“模块参数”对话框。
Model 模块的角发生变化,表明该模块的仿真模式为普通。
记录此模型两个实例的覆盖率:
在建模选项卡上,选择模型设置。
在覆盖率窗格上,选择启用覆盖率分析。
选择引用模型并点击选择模型。
在“选择覆盖率分析模型”对话框中,验证是否选择了引用的模型。在此示例中,列表现在如下所示。
点击确定关闭“选择要进行覆盖率分析的模型”对话框。
再次仿真模型。
当仿真完成时,覆盖率详细信息窗格会使用额外的覆盖率数据更新覆盖率报告。
参考模型实现了 85%的覆盖率。在
Range Check
子系统内部:Saturate Count 模块执行 100 次。
Counter2
模型模块的仿真导致饱和计数模块额外执行 50 次。在本次仿真中,决策
input > upper limit
是true
18 次,而第一次仿真期间为 0 次。第四个决策input > lower limit
仍然永远不会是false
。仿真期间记录了四个决策中的三个,因此该模块实现了 75% 的决策覆盖率。DetectOverflow
函数执行 100 次。Counter2
模块的仿真额外执行了DetectOverflow
函数 50 次。DetectOverflow
函数有 5 个决策。在本次仿真中,表达式count >= CounterParams.UpperLimit
出现了 21 次true
,而第一次仿真中则为 0 次。表达式count > CounterParams.LowerLimit
永远不会是false
。仿真期间五个决策中有四个得到满足,因此DetectOverflow
函数实现了 80% 的决策覆盖率。