Этот пример показывает, как проверить сгенерированный код для компонента модели. Вы используете функции верификации компонента, чтобы создать тесты и покрытие меры для модели, на которую ссылаются. Кроме того, вы выполняете модель, на которую ссылаются, и в режиме симуляции и в программном обеспечении в цикле (SIL) или процессоре в режиме (PIL) цикла с помощью API Верификации генерации кода (CGV) и затем сравниваете результаты.
Компонент, который вы проверяете, является блоком Model под названием control
, который является частью подсистемы power_window_control_system
в модели slvnvdemo_powerwindow
.
Блок Model ссылается на модель slvnvdemo_powerwindow_controller
.
Модель, на которую ссылаются, реализует логику контроллера с графиком Stateflow®.
Начните путем создания модели тестовой обвязки, содержащей входные сигналы, которые моделируют контроллер в модели объекта управления:
1. Откройте модель slvnvdemo_powerwindow
в качестве примера и загрузите модель, на которую ссылаются.
addpath(fullfile(matlabroot,'toolbox','slcoverage','slcovdemos')); open_system(fullfile(matlabroot,'toolbox','slcoverage','slcovdemos',... 'slvnvdemo_powerwindow.slx')) load_system('slvnvdemo_powerwindow_controller');
2. Моделируйте блок Model и регистрируйте входные сигналы к блоку Model:
modelController = 'slvnvdemo_powerwindow/power_window_control_system/control'; evalc('loggedSignalsPlant = slvnvlogsignals(modelController)');
slvnvlogsignals
хранит регистрируемые сигналы в переменной loggedSignalsPlant
.
3. Сгенерируйте модель тестовой обвязки для добавления тестов.
harnessModelFilePath = slvnvmakeharness('slvnvdemo_powerwindow_controller');
slvnvmakeharness
создает модель тестовой обвязки под названием slvnvdemo_powerwindow_controller_harness
. Модель тестовой обвязки включает:
Протестируйте Модуль - блок Model, который ссылается на модель slvnvdemo_powerwindow_controller
.
Входные параметры - блок Signal Builder, который содержит один тест. Тот тест задает значения входных сигналов, регистрируемых, когда модель slvnvdemo_powerwindow
моделировалась.
Блок Test Case Explanation - A DocBlock, который описывает тест.
Тип размера - блок Subsystem, который передает сигналы от блока Inputs до блока Test Unit. Выходные сигналы этого блока совпадают с входными сигналами для блока Model, который вы проверяете.
moveUp и moveDown - Два выходных порта, которые совпадают с выходными портами от блока Model.
4. Получите имя модели тестовой обвязки:
[~,harnessModel] = fileparts(harnessModelFilePath);
5. Оставьте все модели открытыми для следующих шагов.
Затем, создайте тест, который тестирует значения на входные сигналы к компоненту.
Добавьте тест для своего компонента, чтобы помочь вам стать ближе к 100%-му покрытию.
Добавьте тест в блок Signal Builder в модели тестовой обвязки с помощью функции signalbuilder
. Тест задает входные сигналы к компоненту.
1. Загрузите файл, содержащий данные о тесте в рабочее пространство MATLAB:
load('slvnvdemo_powerwindow_controller_newtestcase.mat');
Переменные newTestData
и newTestTime
рабочей области содержат данные о тесте.
2. Добавьте тест в блок Signal Builder в модели тестовой обвязки.
signalBuilderBlock = slvnvdemo_signalbuilder_block(harnessModel); signalbuilder(signalBuilderBlock,'Append',... newTestTime, newTestData,... {'endstop','obstacle','driver(1)','driver(2)','driver(3)',... 'passenger(1)','passenger(2)','passenger(3)'},'New Test Case');
3. Моделируйте модель тестовой обвязки с обоими тестами, затем регистрируйте сигналы к модели, на которую ссылаются, и сохраните результаты:
loggedSignalsHarness = slvnvlogsignals(harnessModel);
Затем, запишите покрытие для модели slvnv_powerwindow_controller
.
У вас есть два набора данных о тесте:
loggedSignalsPlant
- Регистрируемые сигналы к управлению блоком Model
loggedSignalsHarness
- Регистрируемые сигналы к тестам вы добавили к пустой обвязке
Чтобы моделировать все тестовые данные одновременно, объедините эти два файла данных в один файл:
1. Объедините данные о тесте:
mergedTestCases = slvnvmergedata(loggedSignalsPlant, loggedSignalsHarness);
2. Просмотрите объединенные данные:
disp(mergedTestCases);
Затем, моделируйте модель, на которую ссылаются, с объединенными данными и получите покрытие для модели, на которую ссылаются, slvnv_powerwindow_controller
.
Покрытие записи для модели slvnv_powerwindow_controller
.
1. Создайте объект опций по умолчанию, требуемый функцией slvnvruntest
:
runopts = slvnvruntestopts;
2. Задайте, чтобы моделировать образцовое и покрытие записи:
runopts.coverageEnabled = true;
3. Моделируйте модель с помощью регистрируемых входных сигналов:
[~, covdata] = slvnvruntest('slvnvdemo_powerwindow_controller',... mergedTestCases,runopts);
4. Отобразите отчет покрытия HTML:
cvhtml('Coverage with Test Cases from Harness', covdata);
Модель slvnv_powerwindow_controller
достигла:
Decision Coverage: 44%
Покрытие условия: 45%
Покрытие MCDC: 10%
Для получения дополнительной информации о Decision Coverage, покрытие условия и покрытие MCDC, видят Типы Покрытия модели.
Чтобы проверить, что сгенерированный код приводит к тем же результатам как симуляция модели, используйте методы API Верификации генерации кода (CGV). Когда вы выполняете эту процедуру, симуляция компилирует и выполняет типовой код с помощью объединенных тестов:
1. Создайте объект опций по умолчанию для slvnvruncgvtest
:
runcgvopts = slvnvruntestopts('cgv');
2. Задайте, чтобы выполнить модель в режиме симуляции:
runcgvopts.cgvConn = 'sim';
3. Выполните модель slvnv_powerwindow_controller
с помощью этих двух тестов и объекта runopts
:
slmodel = 'slvnvdemo_powerwindow_controller'; evalc('cgvSim=slvnvruncgvtest(slmodel, mergedTestCases, runcgvopts)');
Эти шаги сохраняют результаты в переменной cgvSim
рабочей области.
Затем, выполните ту же модель с теми же тестами в программном обеспечении в режиме (SIL) цикла и сравните результаты обеих симуляций.
Для получения дополнительной информации о Нормальном режиме симуляции, смотрите, Выполняют Модель.
Когда вы выполняете модель в программном обеспечении в режиме (SIL) цикла, симуляция компилирует и выполняет сгенерированный код на вашем хосте - компьютере.
Чтобы выполнить модель в режиме SIL, у вас должна быть лицензия Embedded Coder™.
В этом разделе вы выполняете модель slvnvdemo_powerwindow_controller
в режиме SIL и сравниваете результаты с предыдущим разделом, где вы выполнили модель в режиме симуляции:
1. Задайте, чтобы выполнить модель в режиме SIL:
runcgvopts.cgvConn = 'sil';
2. Выполните модель slvnv_powerwindow_controller
с помощью объединенных тестов и объекта runopts
:
evalc('cgvSil = slvnvruncgvtest(slmodel, mergedTestCases, runcgvopts)');
Переменная cgvSil
рабочей области содержит результаты выполнения режима SIL.
3. Отобразите сравнение результатов в cgvSil
к результатам в cgvSim
(результаты выполнения режима симуляции). Используйте метод cgv.CGV.compare
, чтобы сравнить результаты этих двух симуляций:
for i=1:length(loggedSignalsHarness.TestCases) simout = cgvSim.getOutputData(i); silout = cgvSil.getOutputData(i); [matchNames, ~, mismatchNames, ~ ] = ... cgv.CGV.compare(simout, silout); fprintf('\nTest Case(%d): %d Signals match, %d Signals mismatch', ... i, length(matchNames), length(mismatchNames)); end
Для получения дополнительной информации о программном обеспечении в цикле (SIL) симуляции, смотрите то, Что SIL и PIL симуляции?