收集 MinMax 模块的关系边界覆盖
此示例显示如何查看和解释三种信号尺寸配置中的 MinMax 模块的关系边界覆盖率结果。有关关系边界覆盖率的更多信息,请参阅模型覆盖率类型。覆盖率报告中关系边界覆盖率的更多信息,请参阅关系边界。
打开模型
打开模型。
modelName = "slcoverageMinMax";
open_system(modelName);
slcoverageMinMax
模型包括三个 Constant 模块,它们连接到一个 MinMax 模块,并将 Function 参数设置为 min
。在此示例中,您可以查看三组不同输入的关系边界覆盖率结果:
Case 1:标量输入
Case 2:相同大小的向量输入
Case 3:混合大小输入
在每种情况下,模型都使用默认数据类型 double,即浮点数据类型。
收集三个标量输入的覆盖率
MinMax 模块的第一个 case 是所有输入信号都是标量。slcoverageMinMax
模型已经使用 Constant 模块的标量值,因此您不需要针对这种情况进行更改。仿真模型,然后使用 cvmodelview
突出显示覆盖率结果。
scalarDoubleOut = sim(modelName); cvmodelview(scalarDoubleOut.covdata);
点击名为 Minimum
的 MinMax 模块并查看关系边界表。
关系边界表的第一行是 input1 - min(inputs after input 1)
。关系边界分析取 input2
和 input3
中的最小值,并从 input1
中减去结果。然后,Simulink Coverage 将结果与关系边界范围 [-tol 0]
进行比较,并报告结果是否在该范围内。在这种情况下,输入 1 的结果不在任何时间步的范围内,因此报告显示缺失覆盖率。对于浮点输入,输入 i
之前的输入的关系边界不包括零,而输入 i
之后的输入的关系边界包括零。您可以在配置参数对话框的覆盖率窗格中指定浮点容差的值。
在关系边界表中,每行第二列的分母表示该输入最小的时间步数。例如,第三个关系边界 input 2 - min(inputs after input 2)
的分母等于 2
,这意味着输入 2 是两个时间步的最小值。分子表示输入 2 与输入 2 之后的最小输入之间的差异在指示范围内的时间步数。对于输入 2 的情况,对于输入 2 为最小值的两个时间步,输入 2 和输入 3 之间的差值介于容差和零之间。
收集三个相同大小的矢量输入的覆盖率
如果您有 MinMax 模块的向量输入,该模块将报告每个向量的每个元素的关系边界覆盖率。
创建一个 Simulink.SimulationInput
对象,并使用 setBlockParameter
将 Constant 模块 C1
、C2
和 C3
的值设置为向量。然后在模型上仿真并突出显示覆盖率结果。
vectorDoubleIn = Simulink.SimulationInput(modelName); vectorDoubleIn = setBlockParameter(vectorDoubleIn,modelName + "/C1","Value","[1 1]"); vectorDoubleIn = setBlockParameter(vectorDoubleIn,modelName + "/C2","Value","[0 1]"); vectorDoubleIn = setBlockParameter(vectorDoubleIn,modelName + "/C3","Value","[0 0]"); vectorDoubleOut = sim(vectorDoubleIn); cvmodelview(vectorDoubleOut.covdata);
点击名为 Minimum
的 MinMax 模块并查看关系边界表。
输入 1 和输入 3 有两行,输入 2 有四行,因为每个输入都是一个具有两个元素的向量。
第一行是 input 1(1) - min(input elements 1 after input 1)
。为了理解这个值,将其扩展为 MATLAB® 语法:
input1(1) - min(input2(1),input3(1))
表的第一行评估输入 1 的第一个元素与其他输入的第一个元素的最小值之间的差异,然后检查该差异是否介于设定容差的负数和零之间(包括两者)。
收集混合大小输入的覆盖率
如果您对 MinMax 模块有混合大小的输入,例如两个标量输入和一个向量输入,则 Simulink 会将每个标量输入隐式扩展为与向量输入大小相同的向量。将 Constant 模块 C1
和 C2
分别设置为标量值 1
和 0
,并将 Constant 模块 C3
设置为具有两个元素的零列向量。
mixedSizeIn = Simulink.SimulationInput(modelName); mixedSizeIn = setBlockParameter(mixedSizeIn,modelName + "/C1","Value","1"); mixedSizeIn = setBlockParameter(mixedSizeIn,modelName + "/C2","Value","0"); mixedSizeIn = setBlockParameter(mixedSizeIn,modelName + "/C3","Value","[0 0]");
仿真模型并突出覆盖率结果。
mixedSizeOut = sim(mixedSizeIn); cvmodelview(mixedSizeOut.covdata);
点击名为 Minimum
的 MinMax 模块,查看关系边界表。
关系边界表显示结果时,好像所有三个 Constant 模块都有向量输入,因为 Simulink 执行了隐式扩展。在这种情况下,Simulink 将 C1
的 1
值扩展为向量 [1,1]
,并将 C2
的 0
值扩展为向量 [0,0]
。
如果混合数据类型,例如一个整数输入和两个双精度输入,则 MinMax 模块遵循与其他模块相同的严格规则。有关更多信息,请参阅关系边界覆盖率。