Пакет: 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 выбирает условие в заданном коде. Используйте этот входной параметр с 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
Id — Идентификатор элемента моделиИдентификатор элемента модели в виде имени свойства элемента, указателя на элемент или идентификатора Simulink элемента. Используйте указатель или ID для селекторных типов, которые выбирают экземпляр. Используйте имя свойства, такое как значение 'BlockType' свойство блока, чтобы выбрать элементы многоуровневой модели.
SetAccess | protected |
Типы данных: char | string | handle | integer
FileName — C или файл C++, чтобы выбратьcharacter array | string arrayC или файл C++, чтобы выбрать в виде символьного массива или массива строк.
Пример: 'myfile.c'
SetAccess | protected |
Типы данных: char | string
FunctionName — C или C++ функционируют, чтобы выбратьcharacter array | string arrayC или 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.