Пакет: 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
свойство.
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 элемента. Используйте указатель или ID для селекторных типов, которые выбирают экземпляр. Используйте имя свойства, такое как значение '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
результат.
Для переключателя/оператора выбора введите 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-функции.
Загрузите модель при помощи 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/Mode Logic/ SFunction' ConstructorCode: 'slcoverage.SFcnSelector(slcoverage.SFcnSelectorType.SFcnName, 'slvnvdemo_covfilt/Mode Logic/ SFunction')'
В этом примере показано, как создать селектор для 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/BR2021bd_1724986_151598/publish_examples1/tp718984b1/ex97019589 -I/ -I/ /tmp/BR2021bd_1724986_151598/publish_examples1/tpdab113f9_8713_4239_b4d2_8a68f10204a9/tp9b898c5b_425f_46cc_b1ce_18c1f8535826.c /tmp/BR2021bd_1724986_151598/publish_examples1/tpdab113f9_8713_4239_b4d2_8a68f10204a9/tp26671d2a_85b5_413a_a6a9_50c4e7847b9b.c -L/mathworks/devel/bat/BR2021bd/build/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output RejectDoublePress_sfun Building with 'gcc'. MEX completed successfully. mex -I/tmp/BR2021bd_1724986_151598/publish_examples1/tp718984b1/ex97019589 -I/ -I/ /tmp/BR2021bd_1724986_151598/publish_examples1/tpdab113f9_8713_4239_b4d2_8a68f10204a9/RejectDoublePress_sfun.c RejectDoublePress_sfun_wrapper.c /tmp/BR2021bd_1724986_151598/publish_examples1/tpdab113f9_8713_4239_b4d2_8a68f10204a9/tp67e53015_8bef_4fe3_9153_9f43109bfa83.c /tmp/BR2021bd_1724986_151598/publish_examples1/tpdab113f9_8713_4239_b4d2_8a68f10204a9/tp85e36f2c_004e_4f72_83e4_32de315462ca.c -L/mathworks/devel/bat/BR2021bd/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.Justify); 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-функции видеть отфильтрованный результат под Объектами, Фильтрованными от Анализа покрытия.
getSimulinkBlockHandle
| cv.cvdatagroup
| slcoverage.Filter
| slcoverage.FilterRule
| slcoverage.MetricSelector
| slcoverage.BlockSelector
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.