То В этом примере показано, как записать покрытие в нескольких параллельных симуляциях Simulink®, соответствующих различным тестам при помощи SimulationInput, возражает и parsim
команда. Если Parallel Computing Toolbox установлен в вашей системе, parsim
команда запускает параллельные симуляции. В противном случае симуляции запущены в сериале.
slvnvdemo_powerwindow_parsim
модель содержит контроллер окна со стеклоподъемником и модель объекта управления младшего разряда. slvnvdemo_powerwindow_parsim/power_window_control_system/control
компонента блок Model, это ссылается на модель
slvnvdemo_powerwindow_controller
, который реализует контроллер с графиком Stateflow®.
mdl = 'slvnvdemo_powerwindow_parsim';
isModelOpen = bdIsLoaded(mdl);
open_system(mdl);
Определите количество тестов в блоке Signal Editor при помощи NumberOfScenarios
параметр. Количество тестов определяет количество итераций, чтобы запуститься.
sigEditBlk = [mdl '/Input']; numCases = str2double(get_param(sigEditBlk,'NumberOfScenarios'));
Создайте массив
объекты задать набор симуляций, чтобы запуститься. Каждый объект SimulationInput соответствует одной симуляции и хранится в массиве Simulink.SimulationInput
simIn
. Для каждой симуляции, установленной эти параметры:
ActiveScenario
указать который сценарий блока Signal Editor выполниться
CovEnable
включать анализ покрытия
CovSaveSingleToWokspaceVar
сохранить результаты покрытия в переменную рабочей области
CovSaveName
задавать имя переменной.
for idx = numCases:-1:1 simIn(idx) = Simulink.SimulationInput(mdl); simIn(idx) = setBlockParameter(simIn(idx), sigEditBlk, 'ActiveScenario', idx); simIn(idx) = setModelParameter(simIn(idx), 'CovEnable', 'on'); simIn(idx) = setModelParameter(simIn(idx), 'CovSaveSingleToWorkspaceVar', 'on'); simIn(idx) = setModelParameter(simIn(idx), 'CovSaveName', 'covdata'); end
Используйте
функция, чтобы выполнить параллельные симуляции. Передайте массив объектов SimulationInput, parsim
simIn
, в parsim
функционируйте как первый аргумент. Установите ShowProgress
опция к on
отобразить прогресс симуляций в командном окне MATLAB. Выход от parsim
командой является simOut
, массив Simulink.SimulationOutput
объекты.
simOut = parsim(simIn, 'ShowProgress', 'on');
[30-Jul-2020 03:37:00] Checking for availability of parallel pool... Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 12). [30-Jul-2020 03:38:02] Starting Simulink on parallel workers... [30-Jul-2020 03:38:36] Configuring simulation cache folder on parallel workers... [30-Jul-2020 03:38:37] Loading model on parallel workers... [30-Jul-2020 03:39:20] Running simulations... [30-Jul-2020 03:39:59] Completed 1 of 2 simulation runs [30-Jul-2020 03:39:59] Completed 2 of 2 simulation runs [30-Jul-2020 03:39:59] Cleaning up parallel workers...
Каждый
объект содержит регистрируемые результаты покрытия, сохраненные как Simulink.SimulationInput
. Эти результаты покрытия хранятся в поле под названием cv.cvdatagroup
объектыcovdata
, как ранее заданный CovSaveName
параметр. Используя parsim
запускать несколько симуляций означает, что ошибки фиксируются так, чтобы последующие симуляции могли продолжить запускаться. Любые ошибки зарегистрированы в ErrorMessage
свойство объекта SimulationOutput.
covdata
ссылается на файл, содержащий результаты покрытия. Данные о покрытии из файла, на который ссылаются, автоматически загружаются в память когда covdata
используется функцией покрытия.
simOut(1).covdata
ans = ... cvdata file: /tmp/BR2020bd_1444674_32127/publish_examples2/tpa5d638e0/ex16619798/slcov_output/slvnvdemo_powerwindow_parsim/slvnvdemo_powerwindow_parsim_cvdata_1.cvt date: 30-Jul-2020 03:39:58
Получите данные о покрытии из каждого элемента simOut
и накопите результаты.
coverageData = simOut(1).covdata; for i = 2 : numCases coverageData = coverageData + simOut(i).covdata; end
Просмотрите совокупные результаты покрытия на модели при помощи выделения покрытия.
cvmodelview(coverageData);
open_system('slvnvdemo_powerwindow_parsim/power_window_control_system');
Сгенерируйте совокупный отчет покрытия.
cvhtml('cummulative_cov_report.html', coverageData);