Пакет: 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 собственность.
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-функции.
Загрузка модели с помощью 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, чтобы увидеть отфильтрованный результат в разделе Объекты, отфильтрованные из анализа покрытия.
cv.cvdatagroup | getSimulinkBlockHandle | slcoverage.BlockSelector | slcoverage.Filter | slcoverage.FilterRule | slcoverage.MetricSelector
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.