slcoverage.SFcnSelector class

Пакет: slcoverage

Выберите критерий S-функции для правила фильтрации

Описание

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

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

Создание

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

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

sel = slcoverage.SFcnSelector(type,id,fileName,functionName) создает SFcnSelector объект на основе заданных functionName C или C++ в указанном файле и устанавливает 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 выбирает условие в указанном коде. Используйте этот входной параметр с fileName, functionName, expr, и exprIndex аргументы.

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

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

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

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

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

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

Идентификатор элемента модели, заданный как имя свойства элемента, указатель на элемент или идентификатор Simulink элемента. Используйте указатель или идентификатор для типов селектора, выбирающих образец. Используйте имя свойства, например значение '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 результат.

  • Для оператора switch/case введите 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-Function.

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

load_system('slvnvdemo_covfilt');

Создайте селектор S-Функции при помощи slcoverage.SFcnSelector. Чтобы выбрать S-функцию на основе ее имени, введите 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 перечисление как первый вход. Второй вход является идентификатором блока или путем блока к 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-Function Покрытие Кода Results, чтобы увидеть отфильтрованный результат в разделе Объекты, отфильтрованные из анализа покрытия.

Введенный в R2017b