Рабочий процесс верификации генерации кода

Выполните верификацию генерации кода для моделей контроллеров с помощью модели объекта управления в тестовой обвязке.

Этот пример показывает, как выполнить верификацию генерации кода (CGV) для модели с помощью тестовых обвязок, Тестовых блоков Последовательности и менеджера по тесту. Переключитесь на директорию с полномочиями записи.

mdl = 'sltestFuelRateControlExample';
open_system(mdl);

Описание модели

Этот пример использует модель топливного контроллера скорости для бензинового двигателя. Диспетчер использует четыре датчика от системы, чтобы определить соответствующий топливный уровень. Эти четыре датчика, используемые от системы, являются углом дросселя, скоростью, EGO и разнообразным абсолютным давлением [MAP].

Модель использует три подсистемы, чтобы вычислить топливный уровень с помощью входных параметров датчика: control logic, airflow calc и fuel_calc. Базовая управляющая логика реализована в графике Stateflow®, названном control_logic. Управляющая логика обрабатывает один отказы датчика и защиту превышения скорости механизма. Если один датчик перестал работать, операция продолжается, но смесь воздуха/топлива более богата, чтобы позволить более сглаженное выполнение за счет более высокой эмиссии. Если больше чем один датчик перестал работать, механизм закрывается как меры по обеспечению безопасности, поскольку отношением воздуха/топлива нельзя управлять надежно.

Модель оценивает уровень потока воздуха и умножает оценку обратной величины желаемого отношения, чтобы дать топливный уровень.

Открытие тестовой обвязки

Тестовая обвязка под названием fuel_rate_control_cgv была создана для целой модели. Обвязка может быть открыта путем нажатия на перспективный значок отступления в нижнем правом углу образцового холста и выбора миниатюры fuel_rate_control_cgv. Гарантируйте, что верхний уровень модели в поле зрения, прежде чем вы нажмете на значок. Поочередно, обвязка может быть открыта с помощью следующего API:

sltest.harness.open(mdl,'fuel_rate_control_cgv');

Моделирование объекта

Тестовая обвязка была смоделирована как тест с обратной связью с блоком Test Sequence, чтобы управлять топливным контроллером скорости. Вычисленный fuel_rate от вывода контроллера используется, чтобы управлять моделью бензинового двигателя. Топливный уровень объединяется с фактическим воздушным потоком в подсистеме Engine Gas Dynamics, чтобы определить получившееся отношение смеси, как обнаружено в выхлопе. Обратная связь от кислородного датчика до блока Test Sequence обеспечивает корректировку с обратной связью оценки уровня порядок поддержать идеальное отношение смеси.

Заметьте, что объект был смоделирован в тестовой обвязке вместо основной модели. Основная модель свободна от посторонней помехи так, чтобы код мог быть легко создан для ECU с минимальными изменениями в модели.

Моделирование отказов датчика

Блок Test Sequence назвал модели Sequence Sensor Failures различным отказом датчика и сценариями превышения скорости механизма. Это принимает обратную связь от объекта и управляет контроллером с данными о датчике. Этот шаблон моделирования позволяет блоку Test Sequence управлять сигналами обратной связи, полученными блоком Controller и функцией как холст для авторской разработки тестов. Откройте блок Test Sequence, чтобы видеть смоделированные сценарии тестирования.

open_system('fuel_rate_control_cgv/Sequence Sensor Failures');

Сценарии тестирования

В течение первых 10 секунд симуляции тест находится в режиме стабилизации, куда входные параметры замкнутого цикла от объекта передаются до контроллера. Дроссель и входные параметры скорости установлены в номинальную стоимость, которая является в нормальном рабочем диапазоне контроллера. Шаг Stabilize_Engine моделирует это состояние.

Тест затем продвигается через следующие режимы:

  1. Test_Overspeed: дроссель сползается от 30 до 700

  2. Reset_To_Normal_Speed: дроссель сползается вниз к 400

  3. Test_EGO_Fault: Моделируйте отказ в течение 3 секунд, затем возвратитесь к нормальному состоянию

  4. Test_Throttle_Fault: Моделируйте отказ в течение 3 секунд, затем возвратитесь к нормальному состоянию

  5. Test_Speed_Fault: Моделируйте отказ в течение 3 секунд, затем возвратитесь к нормальному состоянию

  6. Test_Map_Fault: Моделируйте отказ в течение 3 секунд, затем возвратитесь к нормальному состоянию

  7. Test_Multi_Fault: Моделируйте MAP и отказ EGO в течение 3 секунд

  8. Reset_MAP: Нормируйте датчик MAP и моделируйте только отказ EGO в течение 3 секунд

  9. Reset_To_Normal: Отключите тест

Протестируйте оценки

Блок Test Sequence Assess Controller проверяет контроллер вывод для различных тестов, смоделированных блоком Sequence Sensor Failures. Следующие оценки моделируются:

  1. Утверждайте, что режим заправки находится в режиме Warmup в течение первых 4,8 секунд

  2. Утверждайте, что заправка режима переключается на режим Overspeed, когда фактическая скорость превышает 628

  3. Утверждайте, что режим заправки не находится в режиме Single_Failure, когда несколько датчиков перестали работать.

open_system('fuel_rate_control_cgv/Assess Controller');

Выполнение симуляции

Моделируйте тестовую обвязку и наблюдайте сигналы состава топливно-воздушной смеси и fuel_rate. Заметьте, что никакие утверждения не инициировали во время симуляции, которые указывают, что все оценки смоделировали в передаче Assess Controller.

open_system('fuel_rate_control_cgv/Scope');
sim('fuel_rate_control_cgv');

Конфигурирование компенсационного Теста в менеджере по Тесту

Как часть верификации генерации кода (CGV) для системы контроллера, важно утверждать, что функциональное поведение контроллера - то же самое во время нормального и программного обеспечения в цикле (SIL) режимы симуляции. Менеджер по тесту используется, чтобы выполнить эту верификацию.

Используйте функциональный sltestmgr, чтобы открыть менеджера по тесту.

Загрузите тестовый набор в качестве примера, который моделирует тест CGV:

sltest.testmanager.load(fullfile(matlabroot, ...
                                'toolbox', 'simulinktest', 'simulinktestdemos', ...
                                'sltestFuelRateControlComparisonTestSuite.mldatx'));

Моделирование теста

Эквивалентный тест был сконфигурирован в менеджере по тесту так, чтобы контроллер был моделирован в нормальном и режиме SIL, и числовые результаты сравнены между этими двумя выполнениями. Исследуйте структуру теста путем нажатия на различные узлы тестовой иерархии в Тестовом Браузере.

Выполнение теста

Запустите тест в менеджере по тесту.

cgvresult = sltest.testmanager.run;

Поочередно, В менеджере по тесту, выберите узел CGV Test1 в Тестовом Браузере, разделяют на области и нажимают Run в панели инструментов. Результат передачи/сбоя доступен в панели Результатов и Артефактов.

Создание отчета

Отчет может затем быть сгенерирован, чтобы просмотреть результат эквивалентного теста. Используйте следующие команды, чтобы сгенерировать отчет. Можно также запустить отчет после создания с помощью API с набором опции LaunchReport к true.

sltest.testmanager.report(cgvresult,'cgvresult.zip','IncludeTestResults',int32(0));
close_system(mdl, 0);
clear mdl;
sltest.testmanager.clear;
sltest.testmanager.clearResults;