В этом примере показано, как использовать функции Simulink ® Design Verifier™ для замены неподдерживаемых блоков и как настроить генерацию тестовых векторов для конкретных требований.
Пример модели включает в себя блок Switch, выход которого управляется блоком Sqrt. Для каждого положения выключателя продукция модели вычислена 1-D блоком Справочной таблицы. Для этой модели в примере основное внимание уделяется созданию тестовых примеров, удовлетворяющих следующим требованиям:
1. Достижение 100% покрытия таблицы поиска.
2. Тестовые векторы показывают положение каждого блока коммутатора, когда значения его первого и третьего входных портов различаются.
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 допустим только для двойных или одиночных типов, это правило гарантирует, что эти условия будут выполнены, прежде чем разрешить замену блока.
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
endopen_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';
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);