主要内容

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

allSelectors

类: slcoverage.BlockSelector, slcoverage.CodeSelector, slcoverage.Selector, slcoverage.MetricSelector, slcoverage.SFcnSelector
命名空间: slcoverage

模型或代码元素的选择器

语法

sel = slcoverage.Selector.allSelectors(element)
sel = slcoverage.BlockSelector.allSelectors(element)
sel = slcoverage.CodeSelector.allSelectors(element)
sel = slcoverage.CodeSelector.allSelectors(element,Name,Value)
sel = slcoverage.MetricSelector.allSelectors(element)
sel = slcoverage.SFcnSelector.allSelectors(element)
sel = slcoverage.Selector.allSelectors(element,Name,Value)

说明

sel = slcoverage.Selector.allSelectors(element) 返回模型元素的所有选择器。

sel = slcoverage.BlockSelector.allSelectors(element) 返回 element 的所有模块选择器。

sel = slcoverage.CodeSelector.allSelectors(element) 返回 element 的所有自定义 C/C++ 代码选择器。

sel = slcoverage.CodeSelector.allSelectors(element,Name,Value),其中 element 是一个模型,Name,Value 指定仿真模式,返回指定仿真模式下模型的所有自定义 C/C++ 代码选择器。

sel = slcoverage.MetricSelector.allSelectors(element) 返回 element 的所有度量选择器。

sel = slcoverage.SFcnSelector.allSelectors(element) 返回 element 的所有 S-Function 选择器。

sel = slcoverage.Selector.allSelectors(element,Name,Value) 返回 element 的选择器,并由一个或多个 Name,Value 对参量指定附加选项。

输入参数

全部展开

要选择的模型元素,指定为句柄或模型元素 Simulink 标识符。

示例: 'sldemo_lct_bus:18'

名称-值参数

全部展开

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来

示例: 'Type',slcoverage.BlockSelectorType.BlockInstance,'Description','F outcome'

选择器类型细化指定为 slcoverage.BlockSelectorTypeslcoverage.CodeSelectorTypeslcoverage.MetricSelectorTypeslcoverage.SFcnSelectorType 值之一。可能的值:

  • 模块选择器类型:

    • slcoverage.BlockSelectorType.BlockInstance - 由 MATLAB Function 模块调用的模块或外部 MATLAB 函数的实例。

    • slcoverage.BlockSelectorType.BlockType - 指定模块类型的所有模块。

    • slcoverage.BlockSelectorType.Chart — Stateflow® 图。

    • slcoverage.BlockSelectorType.MaskType - 使用指定封装类型的模块。

    • slcoverage.BlockSelectorType.State — Stateflow 状态。

    • slcoverage.BlockSelectorType.StateAllContent - Stateflow 状态及其内容。

    • slcoverage.BlockSelectorType.StateflowFunction — Stateflow 函数。

    • slcoverage.BlockSelectorType.Subsystem - 子系统模块。

    • slcoverage.BlockSelectorType.SubsystemAllContent - 子系统及其内容。

    • slcoverage.BlockSelectorType.TemporalEvent - Stateflow 时间事件。

    • slcoverage.BlockSelectorType.Transition — Stateflow 转移。

  • 代码选择器类型:

    • slcoverage.CodeSelectorType.File - 自定义 C 或 C++ 代码文件名。

    • slcoverage.CodeSelectorType.Function - 自定义 C 或 C++ 代码函数名称。

    • slcoverage.CodeSelectorType.Decision - 自定义 C 或 C++ 代码决策。

    • slcoverage.CodeSelectorType.Condition - 自定义 C 或 C++ 代码条件。

    • slcoverage.CodeSelectorType.DecisionOutcome - 自定义 C 或 C++ 代码决策结果。

    • slcoverage.CodeSelectorType.ConditionOutcome - 自定义 C 或 C++ 代码条件结果。

    • slcoverage.CodeSelectorType.MCDCOutcome - 自定义 C 或 C++ 代码 MCDC 结果。

    • slcoverage.CodeSelectorType.RelationalBoundaryOutcome - 自定义 C 或 C++ 代码关系边界结果。

  • 度量选择器类型:

    • slcoverage.MetricSelectorType.ConditionOutcome 对象选择条件度量目标结果。

    • slcoverage.MetricSelectorType.DecisionOutcome 对象选择决策度量目标结果。

    • slcoverage.MetricSelectorType.MCDCOutcome 对象选择 MCDC 度量目标结果。

    • slcoverage.MetricSelectorType.RelationalBoundaryOutcome 对象选择与关系边界结果相关的结果度量。

    • slcoverage.MetricSelectorType.SaturationOverflowOutcome 对象选择与整数溢出结果饱和度相关的结果度量。

  • S-Function 选择器类型:

    • slcoverage.SFcnSelectorType.SFcnName 选择指定的 S-Function。

    • slcoverage.SFcnSelectorType.SFcnInstanceCppFileName 选择该模块生成的代码文件中的覆盖率数据。

    • slcoverage.SFcnSelectorType.SFcnInstanceCppFunction 选择一个函数。

    • slcoverage.SFcnSelectorType.SFcnInstanceCppCondition 选择 S-Function 模块的条件结果。

    • slcoverage.SFcnSelectorType.SFcnInstanceCppDecision 选择 S-Function 模块的决策结果。

与您想要返回的选择器匹配的描述文本,指定为字符向量或字符串。例如,如果您只想返回描述中包含文本 F outcome 的选择器,请使用以下语法:

s = slcoverage.Selector.allSelectors(id,'Description','F outcome')

选择代码过滤器时运行的仿真模式,输入以下之一:

对象设定描述

'normal'(默认值)

在普通仿真中提取自定义代码的代码选择器,例如从 C Caller 模块或 Stateflow 图调用的自定义代码。

'sil'

提取在环仿真 (SIL) 模式下生成的代码的代码选择器和顶层模型代码接口的代码选择器

'pil'

提取在处理器在环 (PIL) 模式下生成的代码的代码选择器和顶层模型代码接口的代码选择器

'xil'

如果存在 SIL 模式代码,则提取 SIL 模式下生成的代码的代码选择器,并提取顶层模型代码接口的代码选择器;否则,提取 PIL 模式下生成的代码的代码选择器,并提取顶层模型代码接口的代码选择器

'modelrefsil'

在 SIL 模式下提取模型参考代码接口的代码选择器

'modelrefpil'

PIL 模式下模型参考代码接口的提取代码选择器

'modelrefxil'

如果存在 SIL 模式代码,则在模型处于 SIL 模式时,提取 SIL 模式下模型参考代码接口的代码选择器;否则,在 PIL 模式下提取模型参考代码接口的代码选择器

输出参量

全部展开

模型或代码元素的选择器,以 Selector 对象数组的形式返回。

示例

全部展开

此示例说明如何获取一个 And 模块的所有选择器,然后添加一个规则来申述或排除某个选择器。度量选择器只能申述。

加载模型并设置覆盖率设置

modelName = 'slvnvdemo_covfilt';
load_system(modelName);
set_param(modelName,'CovEnable','on','CovMetricStructuralLevel','MCDC');

首先,获取 And 模块的模块句柄。

id = getSimulinkBlockHandle([modelName,'/Saturation']);

使用模块句柄获取选择器。

sel = slcoverage.Selector.allSelectors(id)
sel = 

  1×10 heterogeneous Selector (BlockSelector, MetricSelector) array with properties:

    Description
    Type
    Id
    ConstructorCode

该模块有十个选择器。您可以通过索引访问每个选择器,以查看其内容。在此示例中,您希望对第六个选择器进行申述。

sel(6)
ans = 

  MetricSelector with properties:

     ObjectiveIndex: 2
       OutcomeIndex: 2
        Description: 'T outcome of input > upper limit in Saturate block "Saturation"'
               Type: DecisionOutcome
                 Id: 'slvnvdemo_covfilt:5'
    ConstructorCode: 'slcoverage.MetricSelector(slcoverage.MetricSelectorType.DecisionOutcome, 'slvnvdemo_covfilt:5', 2, 2)'

创建一个申述规则,然后创建一个过滤器对象,并将该规则添加到该过滤器对象。

rule = slcoverage.FilterRule(sel(6),'Expected result');
filt = slcoverage.Filter;
filt.addRule(rule);

保存该过滤器并生成覆盖率报告。

filt.save('metrfilter');
csim = cvsim(modelName);
csim.filter = 'metrfilter';
cvhtml('cov',csim,'-sRT=0');

此示例显示如何通过类型和描述获取选择器。在此示例中,您将获得类型为 ConditionOutcome 的 And 模块的 False 结果的所有选择器。

将模型加载到内存中。

modelName = 'slcoverage_lct_bus';
load_system(modelName);
load slcoverage_lct_data.mat

Slcoverage_lct_bus 模型有一个 S-Function。使用 legacy_code 构建 S-Function。

def = legacy_code('initialize');
def.SFunctionName = 'slcoverage_sfun_counterbus';
def.OutputFcnSpec = ...
    ['void counterbusFcn(COUNTERBUS u1[1], '...
    'int32 u2, COUNTERBUS y1[1], int32 y2[1])'];
def.HeaderFiles   = {'counterbus.h'};
def.SourceFiles   = {'counterbus.c'};
def.Options.supportCoverage = true;
legacy_code('generate_for_sim', def);
### Start Compiling slcoverage_sfun_counterbus
mex -I/tmp/Bdoc25b_2988451_564546/tpb755df10/slcoverage-ex13162396 -c /tmp/Bdoc25b_2988451_564546/tpd0a1328e_91ff_457a_9579_06e404bde1a7/counterbus.c -outdir /tmp/Bdoc25b_2988451_564546/tp27a58b8a_ce32_498e_9bc4_b588f762026d
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/Bdoc25b_2988451_564546/tpb755df10/slcoverage-ex13162396 /tmp/Bdoc25b_2988451_564546/tpd0a1328e_91ff_457a_9579_06e404bde1a7/tpcda51e6d_9f1f_4fed_a476_4c7b9770b51f.c /tmp/Bdoc25b_2988451_564546/tp27a58b8a_ce32_498e_9bc4_b588f762026d/counterbus.o -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25b.2988451/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output slcoverage_sfun_counterbus
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/Bdoc25b_2988451_564546/tpb755df10/slcoverage-ex13162396 -c /tmp/Bdoc25b_2988451_564546/tpb755df10/slcoverage-ex13162396/counterbus.c -outdir /tmp/Bdoc25b_2988451_564546/tp27a58b8a_ce32_498e_9bc4_b588f762026d
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/Bdoc25b_2988451_564546/tpb755df10/slcoverage-ex13162396 /tmp/Bdoc25b_2988451_564546/tpd0a1328e_91ff_457a_9579_06e404bde1a7/slcoverage_sfun_counterbus.c /tmp/Bdoc25b_2988451_564546/tpd0a1328e_91ff_457a_9579_06e404bde1a7/tp977d8bf7_d3c0_4e8f_9403_9a58e8070db7.c /tmp/Bdoc25b_2988451_564546/tpd0a1328e_91ff_457a_9579_06e404bde1a7/tp471bd12c_cbac_45f8_a485_14a83e7f8a5b.c /tmp/Bdoc25b_2988451_564546/tp27a58b8a_ce32_498e_9bc4_b588f762026d/counterbus.o -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25b.2988451/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output slcoverage_sfun_counterbus
Building with 'gcc'.
MEX completed successfully.
### Finish Compiling slcoverage_sfun_counterbus
### Exit

通过搜索包含 F 的描述来获取 And 模块的 false 结果条件选择器。

id = getSimulinkBlockHandle([modelName,'/slCounter/And']);
sel = slcoverage.Selector.allSelectors(id, ...
         'Type',slcoverage.MetricSelectorType.ConditionOutcome, ...
         'Description','F')
sel = 

  1×2 MetricSelector array with properties:

    ObjectiveIndex
    OutcomeIndex
    Description
    Type
    Id
    ConstructorCode

查看返回的两个选择器的构造函数代码。

sel.ConstructorCode
ans =

    'slcoverage.MetricSelector(slcoverage.MetricSelectorType.ConditionOutcome, 'slcoverage_lct_bus:23', 1, 2)'


ans =

    'slcoverage.MetricSelector(slcoverage.MetricSelectorType.ConditionOutcome, 'slcoverage_lct_bus:23', 2, 2)'

版本历史记录

在 R2017b 中推出