exponenta event banner

класс slcoverage.SFcnSelector

Пакет: slcoverage

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

Описание

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

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

Создание

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

Загрузка модели с помощью 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 Code Coverage Results, чтобы увидеть отфильтрованный результат в разделе Объекты, отфильтрованные из анализа покрытия.

Представлен в R2017b