主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

收集 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)。关系边界分析取 input2input3 中的最小值,并从 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 模块 C1C2C3 的值设置为向量。然后在模型上仿真并突出显示覆盖率结果。

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 模块 C1C2 分别设置为标量值 10,并将 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 将 C11 值扩展为向量 [1,1],并将 C20 值扩展为向量 [0,0]

如果混合数据类型,例如一个整数输入和两个双精度输入,则 MinMax 模块遵循与其他模块相同的严格规则。有关更多信息,请参阅关系边界覆盖率

另请参阅

主题