主要内容

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

overflowsaturationinfo

cvdata 对象检索整数溢出覆盖率的饱和度

说明

coverage = overflowsaturationinfo(covdata,modelObject)cvdata 对象 covdata 中返回指定模型对象 object 及其所有后代对象的整数溢出饱和覆盖率结果。

示例

coverage = overflowsaturationinfo(covdata,modelObject,ignoreDescendants) 根据 ignoreDescendants 的取值,从 cvdata 对象 covdata 中返回指定模型对象 object 及其(也可能不包含)后代对象的整数溢出饱和覆盖率结果。

[coverage, description] = overflowsaturationinfo(covdata,modelObject)cvdata 对象 covdata 中返回指定模型对象 object 的整数溢出饱和覆盖率结果,并返回每个覆盖率结果的文本描述。

示例

示例

全部折叠

此示例显示如何使用 overflowsaturationinfoMinMax 对象中提取 cvdata 模块的整数溢出饱和数据。

生成覆盖率数据

打开模型并设置覆盖率设置。

load_system('slcoverage_fuelsys');

创建一个 Simulink.SimulationInput 对象来改变配置参数而不修改模型。

covSet = Simulink.SimulationInput('slcoverage_fuelsys');

打开覆盖率分析并配置 Simulink® 以将覆盖率数据保存在工作区中单独的 cvdata 对象中。

covSet = covSet.setModelParameter('CovEnable','on');
covSet = covSet.setModelParameter('CovSaveSingleToWorkspaceVar','on');
covSet = covSet.setModelParameter('CovSaveName','covData');
covSet = covSet.setModelParameter('CovScope','EntireSystem');

启用整数溢出饱和度收集覆盖率并通过调用 sim 并以 SimulationInput 对象作为输入来仿真模型。

covSet = covSet.setModelParameter('CovMetricSaturateOnIntegerOverflow','on');
simOut = sim(covSet);

提取整数溢出结果的饱和度

使用 get_param 获取 MinMax 模块的模块句柄,然后获取整数溢出饱和结果。

blockHandle = get_param(['slcoverage_fuelsys/',...
    'Engine Gas Dynamics/Mixing & Combustion/MinMax'],'Handle');
saturationResults = overflowsaturationinfo(covData,blockHandle)
percentSaturationCoverage = 100 * saturationResults(1)/saturationResults(2)
saturationResults =

     1     2


percentSaturationCoverage =

    50

对于 MinMax 子系统中的 Mixing & Combustion 模块,两个整数溢出饱和决策结果中的一个得到满足,因此它获得了 50% 的整数溢出饱和覆盖率。

此示例显示如何使用 overflowsaturationinfo 来确定模型中的模块是否发生整数溢出。

生成覆盖率数据

加载 slvnvdemo_saturation_on_overflow_coverage 示例模型。

load_system('slvnvdemo_saturation_on_overflow_coverage');

使用 Simulink.SimulationInput 对象设置覆盖率设置。打开覆盖率并配置 Simulink® 以将 cvdata 对象输出到工作区。

covSet = Simulink.SimulationInput('slvnvdemo_saturation_on_overflow_coverage');
covSet = covSet.setModelParameter('CovEnable','on');
covSet = covSet.setModelParameter('CovSaveSingleToWorkspaceVar','on');
covSet = covSet.setModelParameter('CovSaveName','covData');
covSet = covSet.setModelParameter('CovScope','EntireSystem');

提取整数溢出结果的饱和度

检索 Sum 子系统的 Controller 子系统中 Test Unit 模块的整数溢出覆盖率饱和度结果和描述。

covSet = covSet.setModelParameter('CovMetricSaturateOnIntegerOverflow','on');
simOut = sim(covSet);
[covResults, covDesc] = overflowsaturationinfo(covData, ...
		['slvnvdemo_saturation_on_overflow_coverage/Test Unit /' ...
		'Controller/Sum'])
percentSaturation = 100 * covResults(1)/covResults(2)
covResults =

     1     2


covDesc = 

  struct with fields:

           isFiltered: 0
          isJustified: 0
    justifiedCoverage: 0
      filterRationale: ''
             decision: [1×1 struct]


percentSaturation =

    50

对于 Sum 模块来说,两个整数溢出饱和决策结果中有一个得到满足,因此它获得了 50% 的整数溢出饱和覆盖率。

检查仿真中 Sum 模块对每个整数溢出饱和结果进行求值的次数。

outcome1 = covDesc.decision.outcome(1)
outcome2 = covDesc.decision.outcome(2)
outcome1 = 

  struct with fields:

          execCount: 3
     executionCount: 3
               text: 'false'
         isFiltered: 0
        isJustified: 0
    filterRationale: ''
         executedIn: []


outcome2 = 

  struct with fields:

          execCount: 0
     executionCount: 0
               text: 'true'
         isFiltered: 0
        isJustified: 0
    filterRationale: ''
         executedIn: []

在仿真中,Sum 模块中没有发生整数溢出,因为 'true' 结果的执行计数为 0

如果模型中的某个模块不可能发生整数溢出,请考虑清除整数溢出饱和模块参数,以优化生成的代码的效率。

输入参数

全部折叠

覆盖率结果数据,指定为 cvdata 对象。

模型对象,指定为字符数组、字符串数组、Simulink® 句柄、Stateflow® ID 或元胞数组。

要指定模型对象(例如模块或 Stateflow 图),请使用以下格式之一:

对象设定描述

BlockPath

模型或模块的完整路径

BlockHandle

模型或模块

slObj

Simulink API 对象的句柄

sfID

Stateflow ID

sfObj

来自单独实例化的 Stateflow 图的 Stateflow API 对象的句柄

{BlockPath,sfID}

包含 Stateflow 图或原子子图的路径以及该图或子图中包含的对象的 ID 的元胞数组

{BlockPath,sfObj}

包含 Stateflow 图或子图的路径以及该图或子图中包含的 Stateflow 对象 API 句柄的元胞数组

{BlockHandle,sfID}

带有 Stateflow 图或原子子图句柄的元胞数组以及该图或子图中包含的对象的 ID

是否忽略覆盖率结果中的后代,指定为数字或逻辑 1 (true)0 (false),其中:

  • 0 (false) 包括后代对象的覆盖率结果。

  • 1 (true) 忽略后代对象的覆盖率结果。

数据类型: single | double | logical

输出参量

全部折叠

溢出覆盖率饱和结果,存储在 [covered_outcomes total_outcomes] 形式的二元素向量中。这两个要素是:

covered_outcomesobject 满足的整数溢出结果的饱和度数量
total_outcomesobject 整数溢出结果的饱和总数

数据类型: double

object 指定的模型组件的覆盖率结果的文本描述,以结构体数组的形式返回。根据收集的模型覆盖率类型,结构体数组可以有不同的字段。如果仅收集溢出覆盖率饱和度,则结构体数组包含以下字段:

isFiltered

如果 object 指定的模型组件未从覆盖率记录中排除,则为 0。如果 object 指定的模型组件从覆盖率记录中排除,则为 1。有关从覆盖率中排除对象的详细信息,请参阅覆盖率过滤

decision.text'Saturate on integer overflow'
decision.outcome

包含每个覆盖率结果两个字段的结构体数组:

executionCountobject 整数溢出饱和的次数进行求值以得出 text 所描述结果。
text'true''false'

整数溢出饱和有两种可能的结果,'true''false'

decision.isFiltered

如果 object 指定的模型组件未从覆盖率记录中排除,则为 0。如果 object 指定的模型组件从覆盖率记录中排除,则为 1。有关从覆盖率中排除对象的详细信息,请参阅覆盖率过滤

decision.filterRationale

如果 object 被排除在覆盖率之外并且指定了理由,则过滤 object 指定的模型组件的理由。有关从覆盖率中排除对象的详细信息,请参阅覆盖率过滤

数据类型: struct

版本历史记录

在 R2013a 中推出