Пакет: 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 свойство.
Type - Тип S-функции slcoverage.SFcnSelectorType перечислениеТип 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
Id - Идентификатор элемента моделиИдентификатор элемента модели, заданный как имя свойства элемента, указатель на элемент или идентификатор Simulink элемента. Используйте указатель или идентификатор для типов селектора, выбирающих образец. Используйте имя свойства, например значение 'BlockType' свойство блока, чтобы выбрать несколько элементов модели.
SetAccess | protected |
Типы данных: char | string | handle | integer
FileName - Файл C или C++ для выбораcharacter array | string arrayФайл C или C++ для выбора, заданный как символьный массив или строковые массивы.
Пример: 'myfile.c'
SetAccess | protected |
Типы данных: char | string
FunctionName - функция C или C++ для выбораcharacter array | string arrayФункция C или C++ для выбора, заданная как символьный массив или строковые массивы.
Пример: 'counterbusFcn'
SetAccess | protected |
Типы данных: char | string
Expr - Выражение для выбораcharacter array | string arrayВыражение, которое нужно выбрать, заданное как символьный массив или строковые массивы.
Пример: 'inputGElower'
SetAccess | protected |
Типы данных: char | string
ExprIndex - Индекс выраженияИндекс выражения, заданный как целое число. Если вы фильтруете результат, это свойство является индексом выражения, которому принадлежит этот результат. Если вы фильтруете выражение, это свойство является индексом этого выражения в теле функции.
Пример: 2
SetAccess | protected |
Типы данных: single | double | int
OutcomeIndex - Индекс выбранного результатаИндекс выбранного результата, заданный как целое число:
Для логического выражения введите 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
DecOrCondIndex - Индекс родительского выраженияИндекс родительского выражения, заданный как целое число. Используйте этот вход для фильтрации выражения, которое принадлежит родительскому решению или условию; это индекс родительского решения или условия относительно функции.
Пример: 2
SetAccess | protected |
Типы данных: single | double | int
Description - Описание селектораОписание селектора, возвращаемое как вектор символов. Simulink Coverage™ создает описание на основе селектора.
SetAccess | protected |
ConstructorCode - Код, используемый для создания этого объекта селектораКод, используемый для создания этого объекта селектора, возвращенный как вектор символов.
SetAccess | protected |
allSelectors | Селекторы для модели или элемента кода |
В этом примере показано, как создать селектор 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, чтобы увидеть отфильтрованный результат в разделе Объекты, отфильтрованные из анализа покрытия.
cv.cvdatagroup | getSimulinkBlockHandle | slcoverage.BlockSelector | slcoverage.Filter | slcoverage.FilterRule | slcoverage.MetricSelector
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.