exponenta event banner

Проверка компонента для создания кода

Сведения о примерной модели

В этом примере используется slvnvdemo_powerwindow , чтобы показать, как проверить компонент в контексте модели, содержащей этот компонент. При работе с этим примером используются функции проверки компонентов Simulink ® Design Verifier™ для создания тестовых примеров и измерения покрытия для ссылочной модели. Кроме того, ссылочную модель можно выполнить как в режиме моделирования, так и в режиме программного обеспечения в цикле (SIL) с помощью API проверки генерации кода (CGV).

Примечание

Для выполнения этого примера необходимо иметь следующие лицензии на продукты:

  • Поток данных Stateflow ®

  • Встроенный кодер ®

  • Симулинк Coder™

Проверяемый компонент является блоком модели с именем control. Этот компонент находится внутри power_window_control_system подсистема на верхнем уровне slvnvdemo_powerwindow модель. power_window_control_system подсистема показана ниже.

control Блок модели ссылается на slvnvdemo_powerwindow_controller модель.

Ссылочная модель содержит диаграмму Stateflow control, который реализует логику для контроллера окна питания.

Подготовка компонента к проверке

Проверка ссылочной модели slvnvdemo_powerwindow_controllerсоздайте модель электрического жгута, которая содержит входные сигналы, моделирующие контроллер в модели завода:

  1. Откройте окно slvnvdemo_powerwindow пример модели и ссылочная модель:

    open_system('slvnvdemo_powerwindow');
    open_system('slvnvdemo_powerwindow_controller');
    
  2. Откройте окно power_window_control_system в примерной модели.

    Блок модели с именем control в power_window_control_system подсистема ссылается на компонент, проверенный в этом примере, slvnvdemo_powerwindow_controller.

  3. Моделирование блока модели, который ссылается на slvnvdemo_powerwindow_controller модель и протоколирование входных сигналов в блок Модель:

    loggedSignalsPlant = sldvlogsignals( ...
    	'slvnvdemo_powerwindow/power_window_control_system/control');

    sldvlogsignals сохраняет зарегистрированные сигналы в loggedSignalsPlant.

  4. Создайте модель электрического жгута с зарегистрированными сигналами:

    harnessModelFilePath = sldvmakeharness( ...
    	'slvnvdemo_powerwindow_controller', loggedSignalsPlant);
    

    sldvmakeharness создает и открывает модель кабельных трасс с именем slvnvdemo_powerwindow_controller_harness. Блок Signal Builder содержит один тестовый пример, содержащий записанные сигналы.

    Дополнительные сведения о моделях кабелей см. в разделе Simulink Design Verifier Модели кабелей.

  5. Для последующего использования в этом примере сохраните имя модели кабельных трасс:

    [~, harnessModel] = fileparts(harnessModelFilePath);
  6. Оставьте все окна открытыми для следующей части этого примера.

Далее вы запишете покрытие для slvnvdemo_powerwindow_controller модель.

Запись покрытия для компонента

Охват модели - это показатель того, насколько тщательно тестовый случай тестирует модель, и процент путей, которые выполняет тестовый случай. Запись покрытия для slvnvdemo_powerwindow_controller модель:

  1. Создайте объект параметров по умолчанию, необходимый для sldvruntest функция:

    runOpts = sldvruntestopts;
  2. Укажите, чтобы смоделировать модель и записать покрытие:

    runOpts.coverageEnabled = true;
  3. Моделирование ссылочной модели и покрытия записей:

    [~, covDataFromLoggedSignals] = sldvruntest( ...
    	'slvnvdemo_powerwindow_controller', loggedSignalsPlant, runOpts);
  4. Просмотрите отчет о покрытии в формате HTML:

    cvhtml('Coverage with Test Cases', covDataFromLoggedSignals);

    slvnvdemo_powerwindow_controller модель достигнута:

    • Охват принятием решений: 40%

    • Охват условиями: 35%

    • Охват MCDC: 10%

    Дополнительные сведения о покрытии решений, покрытии условий и покрытии MCDC см. в разделе Типы покрытия модели (покрытие Simulink).

Потому что вы не достигли 100% покрытия для slvnvdemo_powerwindow_controller Далее модель анализируется для записи дополнительного покрытия и создания дополнительных тестовых примеров.

Использование программного обеспечения Simulink Design Verifier для записи дополнительного покрытия

Вы можете использовать Simulink Design Verifier для анализа slvnvdemo_powerwindow_controller моделирование и сбор покрытия. Можно указать, что анализ игнорирует любые ранее выполненные цели и записывает дополнительное покрытие.

Для записи дополнительного покрытия для модели:

  1. Сохраните данные покрытия, записанные для зарегистрированных сигналов, в файле:

    cvsave('existingCovFromLoggedSignal', covDataFromLoggedSignals);
  2. Создайте объект опций по умолчанию для анализа:

    opts = sldvoptions;
  3. Укажите, что анализ генерирует тестовые примеры для записи решения, условия и покрытия измененного условия/решения:

    opts.ModelCoverageObjectives = 'MCDC';
  4. Укажите, что анализ игнорирует цели, удовлетворяемые при регистрации сигналов в блоке Модель (Model):

    opts.IgnoreCovSatisfied = 'on';
  5. Укажите имя файла, содержащего удовлетворенные целевые данные:

    opts.CoverageDataFile = 'existingCovFromLoggedSignal.cvt';
  6. Укажите, что анализ создает длительные тестовые примеры, удовлетворяющие нескольким целям:

    opts.TestSuiteOptimization = 'LongTestcases';

    Создание меньшего числа тестовых примеров, каждый из которых удовлетворяет нескольким целям тестирования, экономит время при выполнении созданного кода в следующем разделе.

  7. Укажите, чтобы создать модель электрического жгута, которая ссылается на компонент с помощью блока «Модель»:

    opts.saveHarnessModel = 'on';
    opts.ModelReferenceHarness = 'on';

    Модель электрического жгута, созданная на основе зарегистрированных сигналов в разделе «Подготовка компонента к проверке», использует блок модели, который ссылается на slvnvdemo_powerwindow_controller модель. В модели кабельных трасс, которую создает анализ, также должен использоваться блок модели, который ссылается на slvnvdemo_powerwindow_controller. Можно добавить данные тестового примера к первой модели кабельных трасс, создав единый набор тестов.

  8. Проанализируйте модель с помощью Simulink Design Verifier:

    [status, fileNames] = sldvrun('slvnvdemo_powerwindow_controller', ...
    	opts, true);

    Анализ создает и открывает модель электрического жгута slvnvdemo_powerwindow_controller_harness. Блок Signal Builder содержит один длинный тестовый пример, удовлетворяющий 74 контрольным целям.

    Этот тестовый случай можно объединить с тестом, созданным в окне Подготовка компонента к проверке, для записи дополнительного покрытия для slvnvdemo_powerwindow_controller модель.

  9. Сохраните имя новой модели электрического жгута и откройте ее:

    [~, newHarnessModel] = fileparts(fileNames.HarnessModel);
    open_system(newHarnessModel); 

Затем необходимо объединить две модели кабельных трасс для создания единого набора тестов.

Объединение моделей кабелей

Две модели кабельных трасс были созданы при выполнении следующих действий:

  • Регистрируют сигналы в блоке модели управления, который ссылается на slvnvdemo_powerwindow_controller модель.

  • Проанализировал slvnvdemo_powerwindow_controller модель.

При объединении тестовых примеров в обеих моделях кабельных трасс можно записать покрытие, которое приближает вас к достижению 100% покрытия:

  1. Объедините модели кабельных трасс путем добавления последних тестовых примеров к тестовым случаям для регистрируемых сигналов:

    sldvmergeharness(harnessModel, newHarnessModel);

    Блок построителя сигналов в slvnvdemo_powerwindow_controller_harness модель теперь содержит оба тестовых случая.

  2. Запишите сигналы в модель электрического жгута:

    loggedSignalsMergedHarness = sldvlogsignals(harnessModel);
  3. Использование комбинированных тестовых примеров для регистрации покрытия для slvnvdemo_powerwindow_controller_harness модель. Сначала настройте объект options для sldvruntest:

    runOpts = sldvruntestopts;
    runOpts.coverageEnabled = true;
  4. Смоделировать модель и записать и просмотреть данные покрытия:

    [~, covDataFromMergedSignals] = sldvruntest( ...
    	'slvnvdemo_powerwindow_controller', loggedSignalsMergedHarness, ...
    	runOpts);
    cvhtml('Coverage with Merged Test Cases', covDataFromMergedSignals);

    slvnvdemo_powerwindow_controller модель теперь достигает:

    • Охват принятием решений: 100%

    • Охват условиями: 80%

    • Охват MCDC: 60%

Выполнение компонента в режиме моделирования

Чтобы убедиться, что созданный код для модели дает те же результаты, что и при моделировании модели, используйте методы API проверки генерации кода (CGV).

Примечание

Для выполнения модели в различных режимах выполнения используйте API CGV для проверки числовой эквивалентности результатов. Дополнительные сведения о CGV API см. в разделе Программная проверка генерации кода (встроенный кодер).

При выполнении этой процедуры моделирование компилирует и выполняет код модели с использованием обоих тестовых примеров.

  1. Создание объекта параметров по умолчанию для sldvruncgvtest:

    runcgvopts = sldvruntestopts('cgv');
  2. Укажите выполнение модели в режиме моделирования:

    runcgvopts.cgvConn = 'sim';
  3. Выполните команду slvnv_powerwindow_controller модель с использованием двух тестовых случаев и runcgvopts объект:

    cgvSim = sldvruncgvtest('slvnvdemo_powerwindow_controller', ...
    	loggedSignalsMergedHarness, runcgvopts);

    Эти шаги позволяют сохранить результаты в переменной рабочей области. cgvSim.

Затем выполните одну и ту же модель с одинаковыми тестовыми примерами в режиме программного обеспечения в цикле (SIL) и сравните результаты обоих моделирований.

Дополнительные сведения о режиме нормального моделирования см. в разделе Выполнение модели (встроенный кодер).

Выполнение компонента в режиме программного обеспечения в цикле (SIL)

При выполнении модели в режиме программного обеспечения в цикле (SIL) моделирование компилирует и выполняет сгенерированный код на главном компьютере.

В этом разделе выполняется slvnvdemo_powerwindow_controller модель в режиме SIL и сравнить результаты с предыдущим разделом при выполнении модели в режиме моделирования.

  1. Укажите выполнение модели в режиме SIL:

    runcgvopts.cgvConn = 'sil';
  2. Выполните команду slvnv_powerwindow_controller модель с использованием двух тестовых случаев и runcgvopts объект:

    cgvSil = sldvruncgvtest('slvnvdemo_powerwindow_controller', ...
    	loggedSignalsMergedHarness, runcgvopts);

    Переменная рабочей области cgvSil содержит результаты выполнения режима SIL.

  3. Сравнение результатов в cgvSil к результатам в cgvSim, созданный при выполнении режима моделирования. Используйте compare (Embedded Coder) способ сравнения результатов двух моделирований:

    for i=1:length(loggedSignalsMergedHarness.TestCases)
        simout = cgvSim.getOutputData(i);
        silout = cgvSil.getOutputData(i);
        [matchNames, ~, mismatchNames, ~ ] = ...
    			cgv.CGV.compare(simout, silout);
    end
  4. Результаты сравнения отображаются в окне команд MATLAB ®:

    fprintf(['\nTest Case(%d):%d Signals match, %d Signals mismatch\r'],...
    	i, length(matchNames), length(mismatchNames));
    

    Как и ожидалось, результаты двух симуляций совпадают.

Дополнительные сведения о моделировании ПО в цикле (SIL) см. в разделе Что такое моделирование SIL и PIL? (Встроенный кодер).