Симулируйте модель тестовой обвязки с входным блоком редактора сигнала

В этом примере показано, как сгенерировать отчет покрытия модели путем симуляции модели тестовой обвязки с блоком Signal Editor Inputs. Можно симулировать один тест или контрпример путем выбора активного сценария в диалоговом окне Signal Editor. Для получения дополнительной информации смотрите, Симулируйте Модель тестовой обвязки при помощи редактора Инпутса Блока Сигнала.

Чтобы симулировать все тесты и измерить их объединенное покрытие модели, используйте cvsim или parsim команда.

В этом примере вы генерируете модель тестовой обвязки путем выбора Signal Editor как источника обвязки. Сценарии Редактора Сигнала состоят из источников сигнала, которые сопоставлены с тестами или контрпримерами. Затем чтобы сгенерировать объединенный отчет покрытия модели, вы симулируете все сценарии при помощи cvsim или parsim функция.

1. Откройте модель и сконфигурируйте опции обвязки

Создайте модель тестовой обвязки для sldvdemo_cruise_control модель при помощи sldvharnessopts опции. Установите HarnessSource опция к Signal Editor.

model = 'sldvdemo_cruise_control';
open_system(model);
opts = sldvoptions;
opts.Mode = 'TestGeneration';
opts.SaveHarnessModel = 'on';
opts.HarnessSource = 'Signal Editor';
opts.HarnessModelFileName = 'sldvdemo_cruise_control_harness';
opts.SaveReport = 'off';

2. Сгенерируйте тесты

Анализируйте модель при помощи sldvrun функция и sldvoptions.

sldvrun('sldvdemo_cruise_control', opts);
save_system('sldvdemo_cruise_control_harness');
Checking compatibility for test generation: model 'sldvdemo_cruise_control'
Compiling model...done
Building model representation...done

'sldvdemo_cruise_control' is compatible for test generation with Simulink Design Verifier.

Generating tests using model representation from 27-Jan-2021 09:44:07...
........................

Completed normally.

Generating output files:

    Harness model:
    /tmp/BR2021ad_1584584_202060/publish_examples4/tp686bd2dc/ex99648832/sldv_output/sldvdemo_cruise_control/sldvdemo_cruise_control_harness.slx

Results generation completed.

    Data file:
    /tmp/BR2021ad_1584584_202060/publish_examples4/tp686bd2dc/ex99648832/sldv_output/sldvdemo_cruise_control/sldvdemo_cruise_control_sldvdata.mat

3. Сгенерируйте объединенный отчет покрытия модели

После того, как анализ генерирует модель тестовой обвязки, используйте этот код, который использует cvtest и cvsim функции, чтобы сгенерировать объединенный отчет покрытия модели.

signalEditorBlock = 'sldvdemo_cruise_control_harness/Inputs';
numOfScenarios = str2double(get_param(signalEditorBlock,'NumberOfScenarios'));
harnessModel = 'sldvdemo_cruise_control_harness';
test = cvtest(harnessModel);
test.modelRefSettings.enable = 'On';
test.modelRefSettings.excludeTopModel = 1;
covData = [];
for id = 1:numOfScenarios
set_param(signalEditorBlock,'ActiveScenario',id);
aCovData = cvsim(harnessModel);
if isempty(covData)
covData = aCovData;
else
covData = covData + aCovData;
end
end
save_system('sldvdemo_cruise_control_harness');
cvhtml('Coverage_Harness',covData);

Опционально, можно использовать этот код, который использует parsim функция, чтобы сгенерировать объединенный отчет покрытия модели.

signalEditorBlock = 'sldvdemo_cruise_control_harness/Inputs';
numOfScenarios = str2double(get_param(signalEditorBlock,'NumberOfScenarios'));
harnessModel = 'sldvdemo_cruise_control_harness';

simIn  = Simulink.SimulationInput.empty(0,numOfScenarios);
for id = 1:numOfScenarios
    simIn(id) = Simulink.SimulationInput(harnessModel);
    simIn(id) = simIn(id).setBlockParameter(signalEditorBlock,'ActiveScenario', id);
    simIn(id) = simIn(id).setModelParameter('CovEnable', 'on');
    simIn(id) = simIn(id).setModelParameter('CovSaveSingleToWorkspaceVar', 'on');
end

simOut = parsim(simIn);
cvhtml('Coverage_Harness',simOut.covdata);
[27-Jan-2021 09:44:28] Checking for availability of parallel pool...
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 12).
[27-Jan-2021 09:45:12] Starting Simulink on parallel workers...
[27-Jan-2021 09:46:08] Configuring simulation cache folder on parallel workers...
[27-Jan-2021 09:46:09] Loading model on parallel workers...
[27-Jan-2021 09:46:40] Running simulations...
[27-Jan-2021 09:46:55] Completed 1 of 3 simulation runs
[27-Jan-2021 09:46:55] Completed 2 of 3 simulation runs
[27-Jan-2021 09:46:55] Completed 3 of 3 simulation runs
[27-Jan-2021 09:46:55] Cleaning up parallel workers...

Отчет покрытия указывает, что 100%-е покрытие достигается путем симуляции всех тестов для sldvdemo_cruise_control_model.

5. Вымыться

% To complete this example, close the models.
close_system('sldvdemo_cruise_control_harness', 0);
close_system('sldvdemo_cruise_control', 0);