В этом примере показано, как собирать метрики покрытия кода во время моделирования программного обеспечения в цикле (SIL) или процессора в цикле (PIL) с помощью Simulink ® Coverage™.
Инструмент покрытия кода и отчет о покрытии кода используются для просмотра записанного покрытия кода для моделирования SIL.

В этом примере измеряется охват модели во время моделирования в обычном режиме, повторяется то же моделирование в режиме SIL и сравниваются записанные метрики из обоих моделирований.
Сравните результаты покрытия модели и покрытия кода, используя гиперссылки в отчетах покрытия модели и покрытия кода.
Дополнительные примеры измерения моделирования SIL и PIL см. в разделе Тестирование сгенерированного кода с моделированием SIL и PIL (встроенный кодер).
Откройте модель.
model = 'rtwdemo_sil_topmodel';
close_system(model,0)
open_system(model)Удалите все существующие папки построения.
buildFolder = RTW.getBuildDir(model); if isfolder(buildFolder.BuildDirectory) rmdir(buildFolder.BuildDirectory,'s'); end
Сконфигурируйте модель для сбора данных о покрытии.
set_param(model, 'CovEnable', 'on') clear covCumulativeData
Настройте входные данные.
T = 0.1; % sample time [ticks_to_count, reset, counter_mode, count_enable, ... counter_mode_values_run1, counter_mode_values_run2, ... count_enable_values_run1, count_enable_values_run2] = ... rtwdemo_sil_topmodel_data(T);
После завершения моделирования открывается отчет о покрытии модели. Для перехода от блоков в модели к соответствующим разделам отчета о покрытии используется окно просмотра покрытия.
counter_mode.signals.values = counter_mode_values_run1; count_enable.signals.values = count_enable_values_run1; set_param(model, 'SimulationMode', 'normal');
Используйте инспектор данных моделирования для просмотра и сравнения результатов моделирования.
Simulink.sdi.view; Simulink.sdi.clear;
Запустите моделирование.
simout_normal_run1 = sim(model, 'ReturnWorkspaceOutputs', 'on');
Зафиксируйте результаты.
Simulink.sdi.createRun('Run 1 (normal mode)', 'namevalue',... {'simout_normal_run1'}, {simout_normal_run1});
Для первого моделирования отчет показывает, что модель достигла менее 100% покрытия MCDC. Выполните второе моделирование с различными входными сигналами для увеличения уровня покрытия MCDC до 100%. Отчет о покрытии модели настроен для отображения совокупного покрытия в обоих прогонах моделирования.
counter_mode.signals.values = counter_mode_values_run2; count_enable.signals.values = count_enable_values_run2; set_param(model, 'SimulationMode', 'normal'); simout_normal_run2 = sim(model, 'ReturnWorkspaceOutputs', 'on'); Simulink.sdi.createRun('Run 2 (normal mode)', 'namevalue',... {'simout_normal_run2'}, {simout_normal_run2});
Перед запуском моделирования SIL настройте модель для сбора метрик покрытия кода.
coverageSettings = get_param(model, 'CodeCoverageSettings'); coverageSettings.CoverageTool = 'Simulink Coverage'; set_param(model, 'CodeCoverageSettings', coverageSettings);
При моделировании SIL можно использовать те же входные сигналы, что и при первом запуске моделирования в обычном режиме.
Выполните первое моделирование в режиме SIL.
counter_mode.signals.values = counter_mode_values_run1; count_enable.signals.values = count_enable_values_run1; set_param(model, 'SimulationMode', 'software-in-the-loop'); set_param(model, 'CodeExecutionProfiling', 'off'); set_param(model, 'CodeProfilingInstrumentation', 'off'); simout_sil_run1 = sim(model, 'ReturnWorkspaceOutputs', 'on');
### Starting build procedure for: rtwdemo_sil_topmodel ### Successful completion of build procedure for: rtwdemo_sil_topmodel Build Summary Top model targets built: Model Action Rebuild Reason ===================================================================================================== rtwdemo_sil_topmodel Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 21.297s ### Preparing to start SIL simulation ... Building with 'gcc'. MEX completed successfully. ### Updating code generation report with SIL files ... ### Starting SIL simulation for component: rtwdemo_sil_topmodel ### Stopping SIL simulation for component: rtwdemo_sil_topmodel
Simulink.sdi.createRun('Run 1 (SIL mode)', 'namevalue',... {'simout_sil_run1'}, {simout_sil_run1});
По завершении моделирования просмотрите результаты покрытия кода в модели с помощью подсветки покрытия. Чтобы просмотреть сводку покрытия кода SIL для элемента модели, наведите курсор на элемент модели.

Результаты покрытия кода также можно просмотреть в отчете покрытия кода HTML. В сводном разделе показано, что все функции были вызваны, но прогон моделирования SIL не достиг полного покрытия для решения, условия или покрытия MCDC.

Для перехода к соответствующим элементам модели в блок-схеме используйте гиперссылки в отчете об покрытии кода
Используйте те же входные сигналы в моделировании SIL, что и во втором прогоне моделирования в обычном режиме.
counter_mode.signals.values = counter_mode_values_run2; count_enable.signals.values = count_enable_values_run2; set_param(model, 'SimulationMode', 'software-in-the-loop'); set_param(model, 'CodeExecutionProfiling', 'off'); set_param(model, 'CodeProfilingInstrumentation', 'off'); simout_sil_run2 = sim(model, 'ReturnWorkspaceOutputs', 'on');
### Starting build procedure for: rtwdemo_sil_topmodel ### Generated code for 'rtwdemo_sil_topmodel' is up to date because no structural, parameter or code replacement library changes were found. ### Successful completion of build procedure for: rtwdemo_sil_topmodel Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================== rtwdemo_sil_topmodel Code compiled Compilation artifacts were out of date. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 2.5138s ### Preparing to start SIL simulation ... ### Starting SIL simulation for component: rtwdemo_sil_topmodel ### Stopping SIL simulation for component: rtwdemo_sil_topmodel
Simulink.sdi.createRun('Run 2 (SIL mode)', 'namevalue',... {'simout_sil_run2'}, {simout_sil_run2});
Подсветка покрытия кода показывает, что сгенерированный код из модели достиг полного покрытия.

Инспектор расчетных данных открывается автоматически после каждого прогона, что позволяет просматривать и анализировать результаты. Для подтверждения идентичности регистрируемых сигналов для прогонов SIL и нормального режима просмотрите информацию на панелях Compare and Inspect.