В этом примере показано, как использовать функции Simulink ® Design Verifier™ для замены неподдерживаемых блоков и как настроить генерацию тестовых векторов для определенных требований.
Пример модели включает блок Switch, выход которого управляется блоком Sqrt. Для каждого положения переключателя выход модели вычисляется блоком 1-D Интерполяционная Таблица. Для этой модели пример сконцентрирован на генерации тестов, которые удовлетворяют следующему:
1. Обеспечьте 100% покрытие интерполяционных таблиц.
2. Тестовые векторы демонстрируют каждое положение блока Switch, когда значения его первого и третьего входных портов различаются.
open_system('sldvdemo_sqrt_blockrep');
Начиная с sqrt
функция не поддерживается, эта модель частично совместима с Simulink Design Verifier.
sldvcompat('sldvdemo_sqrt_blockrep');
Checking compatibility for test generation: model 'sldvdemo_sqrt_blockrep' Compiling model...done Building model representation...done 'sldvdemo_sqrt_blockrep' is partially compatible for test generation with Simulink Design Verifier. The model can be analyzed by Simulink Design Verifier. It contains unsupported elements that will be stubbed out during analysis. The results of the analysis might be incomplete. See the Diagnostic Viewer for more details on the unsupported elements.
Эта модель может быть проанализирована на предмет генерации тестов путем автоматического упрямства неподдерживаемого блока Sqrt. Однако тесты не могут быть сгенерированы для позиций блоков Switch, потому что Simulink Design Verifier не понимает блок Sqrt, и выход этого блока влияет на блок Switch. Поскольку вам нужны тесты для блока Switch, необходимо заменить блок Sqrt на поддерживаемый блок, который функционально эквивалентен. Область библиотечного блока sldvdemo_custom_blockreplib
показанный ниже, ограничивает входной сигнал области значений [0 10000]
и аппроксимирует sqrt
функция при помощи блока 1-D Интерполяционная Таблица.
Данные таблицы были рассчитаны, чтобы соответствовать значениям sqrt
, с максимальной ошибкой 0.2
в области значений [0 10000]
. См. панель инициализации маски блока Sqrt_Approx
в библиотеке sldvdemo_custom_blockreplib
для значений данных интерполяционной таблицы.
Правило замены находится в определенном фАЙЛЕ MATLAB sldvdemo_custom_blkrep_rule_sqrt.m
. Поскольку замещающий блок sldvdemo_custom_blockreplib
для блока Sqrt, действительного только для типов double или single, это правило гарантирует, что эти условия выполняются перед разрешением замены блока.
function rule = sldvdemo_custom_blkrep_rule_sqrt
rule = SldvBlockReplacement.blockreprule; rule.fileName = mfilename;
rule.blockType = 'Sqrt';
rule.replacementPath = sprintf('sldvdemo_custom_blockreplib/Sqrt_Approx');
rule.replacementMode = 'Normal';
parameter.OutMin = '$original.OutMin$'; parameter.OutMax = '$original.OutMax$'; parameter.OutDataTypeStr = '$original.OutDataTypeStr$'; rule.parameterMap = parameter;
rule.isReplaceableCallBack = @replacementTestFunction;
end
function out = replacementTestFunction(blockH)
out = false; acceptedOutDataTypeStr = {'double','single',... 'Inherit: Inherit via back propagation',... 'Inherit: Same as input'}; I = strmatch(get_param(blockH,'OutDataTypeStr'),acceptedOutDataTypeStr,'exact'); if ~isempty(I)
portDataTypes = get_param(blockH,'CompiledPortDataTypes');
out = any(strcmp(portDataTypes.Inport,{'double','single'})) && ... strcmp(portDataTypes.Inport,portDataTypes.Outport); end end
open_system('sldvdemo_custom_blockreplib'); open_system('sldvdemo_custom_blockreplib/Sqrt_Approx/1-D Lookup Table');
Будет запущен Simulink Design Verifier в генерацию тестов режиме с включенной заменой блоков. В порядок генерации тестов для позиций блока Switch необходимо использовать пользовательское правило замены sldvdemo_custom_blkrep_rule_sqrt.m
.
Поскольку вы также заинтересованы в покрытии интерполяционных таблиц, вам нужна встроенная замена блоков blkrep_rule_lookup_normal.m
, который вставляет цели тестирования для каждого интервала и значение точки останова для блока 1-D интерполяционной таблицы. Более того, вам нужно встроенное правило blkrep_rule_switch_normal.m
, что требует, чтобы каждое положение переключателя выполнялось, когда значения первого и третьего входных портов различаются. Список всех встроенных правил замены см. в документе Simulink Design Verifier, посвященном замене Блока.
Анализ будет выполняться максимум 30 секунд и производить модель тестовой обвязки. Также включена генерация отчетов. Для других опций Simulink Design Verifier заданы значения по умолчанию.
opts = sldvoptions; opts.Mode = 'TestGeneration'; opts.MaxProcessTime = 80; opts.BlockReplacement = 'on'; opts.BlockReplacementRulesList = ['sldvdemo_custom_blkrep_rule_sqrt.m,' ... 'blkrep_rule_lookup_normal.m,'... 'blkrep_rule_switch_normal.m']; opts.SaveHarnessModel = 'on'; opts.ModelReferenceHarness = 'on'; opts.SaveReport = 'on';
The sldvrun
функция анализирует модель с помощью настроек, определенных в sldvoptions
opts объекта
. Сгенерированный отчет включает главу, суммирующую замены блоков, выполненные на модели.
[status,fileNames] = sldvrun('sldvdemo_sqrt_blockrep', opts, true);
Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values. Warning: Cannot tune parameters in block 'sldvdemo_sqrt_blockrep/1-D Lookup Table' while using the Lookup Table Coverage option. The Coverage tool will ignore the new parameter values.
Включите метрику покрытия интерполяционных таблиц, а затем запустите тесты с помощью модели тестовой обвязки. Можно также выполнить набор тестов, нажав кнопку «Run all» в диалоговом окне Signal Builder после включения покрытия интерполяционных таблиц из меню «Analysis» > «Coverage» > «Settings».
Отчет о покрытии, показанный ниже, указывает, что вы можете достичь 100% покрытия интерполяционных таблиц с тестовыми векторами, которые сгенерировал Simulink Design Verifier.
[harnessModelPath,harnessModel] = fileparts(fileNames.HarnessModel); set_param(harnessModel,'covMetricSettings','dcmte'); sldvdemo_playall(harnessModel);
Чтобы завершить пример, закройте все модели и удалите файлы, которые сгенерировал Simulink Design Verifier.
close_system('sldvdemo_custom_blockreplib'); close_system(fileNames.HarnessModel,0); close_system(fileNames.BlockReplacementModel,0); close_system('sldvdemo_sqrt_blockrep',0); delete(fileNames.HarnessModel); delete(fileNames.BlockReplacementModel); delete(fileNames.DataFile);