В этом примере показано, как записывать покрытие в нескольких параллельных моделированиях Simulink ®, соответствующих различным тестовым случаям, с помощью объектов CountingInput и parsim команда. Если в системе установлена панель инструментов Parallel Computing Toolbox, parsim команда выполняет моделирование параллельно. В противном случае моделирование выполняется в серийном формате.
slvnvdemo_powerwindow_parsim модель содержит контроллер окна питания и модель установки низкого порядка. Компонент slvnvdemo_powerwindow_parsim/power_window_control_system/control является блоком модели, который ссылается на модель slvnvdemo_powerwindow_controller, который реализует контроллер с диаграммой Stateflow ®.
mdl = 'slvnvdemo_powerwindow_parsim';
isModelOpen = bdIsLoaded(mdl);
open_system(mdl);

Определите количество тестовых случаев в блоке редактора сигналов с помощью NumberOfScenarios параметр. Количество тестовых случаев определяет количество выполняемых итераций.
sigEditBlk = [mdl '/Input']; numCases = str2double(get_param(sigEditBlk,'NumberOfScenarios'));
Создание массива объекты для определения набора моделируемых объектов для выполнения. Каждый объект Input соответствует одному моделированию и хранится в массиве Simulink.SimulationInputsimIn. Для каждого моделирования задайте следующие параметры:
ActiveScenario указать, какой сценарий блока редактора сигналов должен выполняться
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
Используйте для параллельного выполнения моделирования. Передайте массив объектов Input, parsimsimIn, в parsim в качестве первого аргумента. Установите ShowProgress опция для on для отображения хода моделирования в окне команд MATLAB. Выходные данные parsim команда - simOut, массив Simulink.SimulationOutput объекты.
simOut = parsim(simIn, 'ShowProgress', 'on');
[27-Jan-2021 07:37:36] 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 07:38:13] Starting Simulink on parallel workers... [27-Jan-2021 07:39:02] Configuring simulation cache folder on parallel workers... [27-Jan-2021 07:39:03] Loading model on parallel workers... [27-Jan-2021 07:39:42] Running simulations... [27-Jan-2021 07:40:17] Completed 1 of 2 simulation runs [27-Jan-2021 07:40:17] Completed 2 of 2 simulation runs [27-Jan-2021 07:40:17] Cleaning up parallel workers...
Каждый объект содержит зарегистрированные результаты покрытия, сохраненные как Simulink.SimulationInput. Эти результаты покрытия хранятся в поле с именем cv.cvdatagroup objectscovdata, как ранее указано в CovSaveName параметр. Используя parsim выполнение нескольких моделирований означает, что ошибки фиксируются таким образом, что последующее моделирование может продолжаться. Любые ошибки записываются в ErrorMessage свойства объекта ExecutionOutput.
covdata ссылается на файл, содержащий результаты покрытия. Данные покрытия из файла ссылки автоматически загружаются в память при covdata используется функцией покрытия.
simOut(1).covdata
ans = ... cvdata
file: /tmp/BR2021ad_1584584_202060/publish_examples3/tp76447b8e/ex16619798/slcov_output/slvnvdemo_powerwindow_parsim/slvnvdemo_powerwindow_parsim_cvdata_1.cvt
date: 27-Jan-2021 07:40:16
Получение данных покрытия из каждого элемента 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);