Выполните верификацию генерации кода для моделей контроллеров с помощью модели объекта управления в тестовой обвязке.
В этом примере показано, как выполнить верификацию генерации кода (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
шаг моделирует это состояние.
Тест затем продвигается через следующие режимы:
Test_Overspeed
: Дроссель сползается от 30 до 700
Reset_To_Normal_Speed
: Дроссель сползается вниз к 400
Test_EGO_Fault
: Симулируйте отказ в течение 3 секунд, затем возвратитесь к нормальному состоянию
Test_Throttle_Fault
: Симулируйте отказ в течение 3 секунд, затем возвратитесь к нормальному состоянию
Test_Speed_Fault
: Симулируйте отказ в течение 3 секунд, затем возвратитесь к нормальному состоянию
Test_Map_Fault
: Симулируйте отказ в течение 3 секунд, затем возвратитесь к нормальному состоянию
Test_Multi_Fault
: Симулируйте MAP и отказ EGO в течение 3 секунд
Reset_MAP
: Нормируйте датчик MAP и симулируйте только отказ EGO в течение 3 секунд
Reset_To_Normal
: Отключите тест
Блок Test Sequence Assess Controller
проверяет контроллер выход для различных тестов, смоделированных Sequence Sensor Failures
блок. Следующие оценки моделируются:
Утверждайте, что режим заправки находится в Warmup
режим в течение первых 4,8 секунд
Утверждайте, что заправка режима переключается на Overspeed
режим, когда фактическая скорость превышает 628
Утверждайте, что режим заправки не находится в 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;