主要内容

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

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/Bdoc25a_2864802_2301124/tp7a227e30/slcoverage-ex13162396 -c /tmp/Bdoc25a_2864802_2301124/tp08473ece_76d3_45ed_bc16_f65e4850975c/counterbus.c -outdir /tmp/Bdoc25a_2864802_2301124/tp071e40f8_0521_4411_9384_31f9b38d287d
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/Bdoc25a_2864802_2301124/tp7a227e30/slcoverage-ex13162396 /tmp/Bdoc25a_2864802_2301124/tp08473ece_76d3_45ed_bc16_f65e4850975c/tpa56a7f68_ee7c_4435_bee6_13df20115150.c /tmp/Bdoc25a_2864802_2301124/tp071e40f8_0521_4411_9384_31f9b38d287d/counterbus.o -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output slcoverage_sfun_counterbus
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/Bdoc25a_2864802_2301124/tp7a227e30/slcoverage-ex13162396 -c /tmp/Bdoc25a_2864802_2301124/tp7a227e30/slcoverage-ex13162396/counterbus.c -outdir /tmp/Bdoc25a_2864802_2301124/tp071e40f8_0521_4411_9384_31f9b38d287d
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/Bdoc25a_2864802_2301124/tp7a227e30/slcoverage-ex13162396 /tmp/Bdoc25a_2864802_2301124/tp08473ece_76d3_45ed_bc16_f65e4850975c/slcoverage_sfun_counterbus.c /tmp/Bdoc25a_2864802_2301124/tp08473ece_76d3_45ed_bc16_f65e4850975c/tpa9dff003_c411_4444_b1bc_3fae814c646c.c /tmp/Bdoc25a_2864802_2301124/tp08473ece_76d3_45ed_bc16_f65e4850975c/tpb37382f7_70cb_4acd_97f1_14e8df889f95.c /tmp/Bdoc25a_2864802_2301124/tp071e40f8_0521_4411_9384_31f9b38d287d/counterbus.o -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/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 中推出