slcoverage.SFcnSelector class

Пакет: slcoverage

Выберите критерий S-function фильтрации правила

Описание

Используйте объекты slcoverage.SFcnSelector класс, чтобы задать критерии выбора S-функции для правила фильтра.

slcoverage.SFcnSelector классом является handle класс.

Создание

sel = slcoverage.SFcnSelector(type,id) создает SFcnSelector объект заданного type на основе Блока s-function id и устанавливает Type и Id свойства.

sel = slcoverage.SFcnSelector(type,id,fileName) создает SFcnSelector основанный на объектах на заданном C или C++ fileName, и устанавливает FileName свойство.

sel = slcoverage.SFcnSelector(type,id,fileName,functionName) создает SFcnSelector основанный на объектах на заданном C или C++ functionName в заданном файле и наборах FunctionName свойство.

sel = slcoverage.SFcnSelector(type,id,fileName,functionName,expr,exprIndex) создает SFcnSelector основанный на объектах по заданному выражению и exprIndex и устанавливает Expr и ExprIndex свойства.

sel = slcoverage.SFcnSelector(type,id,fileName,functionName,expr,exprIndex,outcomeIndex) создает SFcnSelector основанный на объектах на заданном результате покрытия и наборах OutcomeIndex свойство.

sel = slcoverage.SFcnSelector(type,id,fileName,functionName,expr,exprIndex,outcomeIndex,parentExprIndex) создает SFcnSelector основанный на объектах на заданном результате покрытия, родительский элемент которого является другим выражением, заданным parentExprIndex и устанавливает DecOrCondIndex свойство.

Свойства

развернуть все

Тип S-функции, чтобы выбрать в виде перечисления slcoverage.SFcnSelectorTjype класс:

  • slcoverage.SFcnSelectorType.SFcnName выбирает заданную S-функцию.

  • slcoverage.SFcnSelectorType.SFcnInstanceCppFileName выбирает файл сгенерированного кода для этого блока. Используйте этот входной параметр с fileName аргумент.

  • slcoverage.SFcnSelectorType.SFcnInstanceCppFunction выбирает экземпляр функции C++ или C. Используйте этот входной параметр с fileName и functionName аргументы.

  • slcoverage.SFcnSelectorType.SFcnInstanceCppCondition выбирает условие в заданном коде. Используйте этот входной параметр с fileNameFunctionName expr), и exprIndex аргументы.

  • slcoverage.SFcnSelectorType.SFcnInstanceCppDecision выбирает решение в заданном коде. Используйте этот входной параметр с fileNameFunctionName expr), и exprIndex аргументы.

  • slcoverage.SFcnSelectorType.SFcnInstanceCppDecisionOutcome выбирает результат решения в заданном коде. Используйте этот входной параметр с fileNameFunctionName expr), exprIndex, и outcomeIndex аргументы.

  • slcoverage.SFcnSelectorType.SFcnInstanceCppConditionOutcome выбирает результат условия в заданном коде. Используйте этот входной параметр с fileNameFunctionName expr), exprIndex, и outcomeIndex аргументы. Если выражение, которое владеет результатом, принадлежит родительскому решению, также используйте parentExprIndex аргумент.

  • slcoverage.SFcnSelectorType.SFcnInstanceCppMCDCOutcome выбирает результат MCDC в заданном коде. Используйте этот входной параметр с fileNameFunctionName expr), exprIndex, и outcomeIndex аргументы.

  • slcoverage.SFcnSelectorType.SFcnInstanceCppRelationalBoundaryOutcome выбирает реляционный граничный результат в заданном коде. Используйте этот входной параметр с fileNameFunctionName expr), exprIndex, и outcomeIndex аргументы. Если результат оператора отношения принадлежит условию, которое является в решении, также используйте parentExprIndex аргумент.

Типы данных: slcoverage.SFcnSelectorType

Идентификатор элемента модели в виде имени свойства элемента, указателя на элемент или идентификатора Simulink элемента. Используйте указатель или ID для селекторных типов, которые выбирают экземпляр. Используйте имя свойства, такое как значение 'BlockType' свойство блока, чтобы выбрать элементы многоуровневой модели.

Атрибуты

SetAccess
protected

Типы данных: char | string | handle | integer

C или файл C++, чтобы выбрать в виде символьного массива или массива строк.

Пример: 'myfile.c'

Атрибуты:

SetAccess
protected

Типы данных: char | string

C или C++ функционируют, чтобы выбрать в виде символьного массива или массива строк.

Пример: 'counterbusFcn'

Атрибуты:

SetAccess
protected

Типы данных: char | string

Выражение, чтобы выбрать в виде символьного массива или массива строк.

Пример: 'inputGElower'

Атрибуты:

SetAccess
protected

Типы данных: char | string

Индекс выражения в виде целого числа. Если вы фильтруете результат, это свойство является индексом выражения, которое владеет тем результатом. Если вы фильтруете выражение, это свойство является индексом того выражения в теле функции.

Пример 2

Атрибуты:

SetAccess
protected

Типы данных: single | double | int

Индекс результата, чтобы выбрать в виде целого числа:

  • Для Булевого выражения введите 1 для F результат или 2 для T результат.

  • Для переключателя/оператора выбора введите 1 для первого случая, 2 для второго случая, и так далее.

  • Для реляционного контура

    • Целочисленный тип:

      • введите 1 для типа -1.

      • введите 2 для типа +1.

      • введите 3 для типа 0.

    • Тип плавающий:

      • введите 1 для [-tol 0] или [-tol 0).

      • введите 2 для (0 tol] или [0 tol] результат 2

    Для получения дополнительной информации о реляционном граничном покрытии, смотрите Реляционное Граничное Покрытие.

Пример 2

Атрибуты

SetAccess
protected

Типы данных: single | double | int

Родительский индекс выражения в виде целого числа. Используйте этот вход, чтобы отфильтровать выражение, которое принадлежит родительскому решению или условию; это - индекс родительского решения или условия относительно функции.

Пример 2

Атрибуты

SetAccess
protected

Типы данных: single | double | int

Описание селектора, возвращенного как вектор символов. Simulink Coverage™ создает описание на основе селектора.

Атрибуты

SetAccess
protected

Код, используемый, чтобы создать этот селекторный объект, возвратился как вектор символов.

Атрибуты

SetAccess
protected

Методы

развернуть все

Примеры

свернуть все

В этом примере показано, как создать селектор S-функции.

Загрузите модель при помощи load_system.

load_system('slvnvdemo_covfilt');

Создайте селектор S-функции при помощи slcoverage.SFcnSelector. Чтобы выбрать S-Function на основе его имени, введите slcoverage.SFcnSelectorType.SFcnName как первый вход. Второй вход является путем к S-функции.

sel = slcoverage.SFcnSelector(slcoverage.SFcnSelectorType.SFcnName,...
                         'slvnvdemo_covfilt/Mode Logic/ SFunction ')
sel = 

  SFcnSelector with properties:

           FileName: ''
       FunctionName: ''
               Expr: ''
       OutcomeIndex: []
     DecOrCondIndex: []
        Description: 'N/A'
               Type: SFcnName
                 Id: 'slvnvdemo_covfilt:6::46'
    ConstructorCode: 'slcoverage.SFcnSelector(slcoverage.SFcnSelectorType.SFcnName, 'slvnvdemo_covfilt:6::46', )'

В этом примере показано, как создать селектор для S-функции с помощью slcoverage.SFcnSelector класс.

В этом примере ваша модель имеет S-функцию-с-именем RejectDoublePress_sfun. В S-функции предположите что условие rtb_AccelResSwOUT никогда не является ложным, и вы хотите выровнять по ширине этот ложный результат в отчете покрытия.

Загрузите модель.

modelName = 'ex_cc_cruise_control_doublepress_sfun';
load_system(modelName)

Сконфигурируйте настройки покрытия с помощью Simulink.SimulationInput объект.

covSet = Simulink.SimulationInput(modelName);
covSet = covSet.setModelParameter('CovEnable','on');
covSet = covSet.setModelParameter('CovMetricStructuralLevel','ConditionDecision');
covSet = covSet.setModelParameter('CovSFcnEnable','on');
covSet = covSet.setModelParameter('CovSaveSingleToWorkspaceVar','on');
covSet = covSet.setModelParameter('CovSaveName','covData');
covSet = covSet.setModelParameter('SimAnalyzeCustomCode','on');

Симулируйте модель с помощью covSet как вход.

simOut = sim(covSet);
covData = simOut.covData;

Generating 'RejectDoublePress_sfun.c' ....Please wait
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ### <a href="matlab:edit('RejectDoublePress_sfun.c')">'RejectDoublePress_sfun.c'</a> created successfully                                                                                                                                                                                                                                                                                                                                                                                                           ### <a href="matlab:edit('RejectDoublePress_sfun_wrapper.c')">'RejectDoublePress_sfun_wrapper.c'</a> created successfully                                                                                                                                                                                                                                                                                                                                                                                           ### <a href="matlab:edit('RejectDoublePress_sfun.tlc')">'RejectDoublePress_sfun.tlc'</a> created successfully                                                                                                                                                                                                                                                                                                                                                                                                       
### Building S-function 'RejectDoublePress_sfun.c' for ex_cc_cruise_control_doublepress_sfun/RejectDoublePress
mex -I/tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex97019589 -I/ -I/ /tmp/BR2021ad_1584584_202060/publish_examples1/tp0842181f_8da5_484f_99d9_e8cb4a708984/tpa255575d_b8d0_4926_ad99_f61fac298936.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp0842181f_8da5_484f_99d9_e8cb4a708984/tpeea7f5a7_4cca_444e_ba36_e909e7afd743.c -L/mathworks/devel/bat/BR2021ad/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output RejectDoublePress_sfun
Building with 'gcc'.
MEX completed successfully.
mex -I/tmp/BR2021ad_1584584_202060/publish_examples1/tpa9509758/ex97019589 -I/ -I/ /tmp/BR2021ad_1584584_202060/publish_examples1/tp0842181f_8da5_484f_99d9_e8cb4a708984/RejectDoublePress_sfun.c RejectDoublePress_sfun_wrapper.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp0842181f_8da5_484f_99d9_e8cb4a708984/tp84dd1751_46bd_49ab_8f46_6a346f9f6eac.c /tmp/BR2021ad_1584584_202060/publish_examples1/tp0842181f_8da5_484f_99d9_e8cb4a708984/tp3eca71dc_bcdb_4930_a69f_e69b5b888801.c -L/mathworks/devel/bat/BR2021ad/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output RejectDoublePress_sfun
Building with 'gcc'.
MEX completed successfully.

Создайте селекторный объект для недостающего покрытия результата при помощи slcoverage.SFcnSelector класс. Чтобы выбрать результат условия в S-функции, используйте SFcnInstanceCppConditionOutcome перечисление как первый вход. Второй вход является блоком ID или блоком path к S-функции. Третий вход является именем файла исходного файла, который содержит выражение, RejectDoublePress_sfun_wrapper.c. Четвертый вход является именем функции, которое содержит условие, RejectDoublePress_sfun_Outputs_wrapper. Пятый вход является выражением, которое владеет результатом, который является rtb_AccelResSwOUT && CoastSetSwIn[0], потому что это родительское решение владеет условием rtb_AccelResSwOUT.

Шестой вход является индексом выражения, которое владеет результатом относительно его родительского элемента, и потому что rtb_AccelResSwOUT первое условие в его родительском решении, этим входом является 1. Седьмой вход является индексом результата, который является 1 потому что это - F случай Булевого выражения. Итоговый вход является индексом родительского выражения относительно функции, и потому что rtb_AccelResSwOUT && CoastSetSwIn[0] второе решение в функции, этим входом является 2.

enum = slcoverage.SFcnSelectorType.SFcnInstanceCppConditionOutcome;
SFunID = Simulink.ID.getSID([modelName, '/RejectDoublePress']);
sel = slcoverage.SFcnSelector(enum,SFunID,'RejectDoublePress_sfun_wrapper.c',...
   'RejectDoublePress_sfun_Outputs_wrapper','rtb_AccelResSwOUT && CoastSetSwIn[0]',1,1,2);

Создайте Filter возразите и правило на основе селектора, затем добавьте правило в фильтр.

filt = slcoverage.Filter;
rule = slcoverage.FilterRule(sel,'Tested elsewhere',...
           slcoverage.FilterMode.Exclude);
addRule(filt,rule);
setFilterName(filt,'S-Function Filter')

Сохраните фильтр как sfunfilter и добавьте его в объект cvdata для my_func.c путем установки filter свойство к имени файла фильтра.

save(filt,'sfunfilter');
covData.filter = 'sfunfilter';

Сгенерируйте отчет покрытия.

cvhtml('codeCovReport',covData)

Рассмотрите отчет. Нажмите RejectDoublePress_sfun соединитесь под Результатами Покрытия кода S-функции видеть отфильтрованный результат под Объектами, Фильтрованными от Анализа покрытия.

Введенный в R2017b