Выполните верификацию генерации кода для модели. Копирайт 2015 The MathWorks, Inc.
В этом примере показано, как выполнить верификацию генерации кода (CGV) для модели с помощью тестовых обвязок, блоков Test Sequence и менеджера тестирования. Переключитесь в директорию с разрешениями на запись.
mdl = 'sltestFuelRateControlExample';
open_system(mdl);
Этот пример использует модель контроллера скорости подачи топлива для бензинового двигателя. Контроллер использует четыре датчика из системы, чтобы определить правильный расход топлива. Четыре датчика, используемые системой, - это угол дросселя, скорость, EGO и абсолютное давление коллектора [MAP].
Модель использует три подсистемы, чтобы вычислить расход топлива с помощью входов датчика: control logic
, airflow calc
, и fuel_calc
. Логика управления ядром реализована в графике Stateflow ® с именем control_logic
. Логика управления обрабатывает отказы одного датчика и защиту двигателя от превышения скорости. Если один датчик отказывает, операция продолжается, но смесь воздух/топливо богаче, чтобы обеспечить более плавное вращение за счет более высоких выбросов. Если отказало более одного датчика, двигатель отключается в качестве меры безопасности, поскольку соотношение воздух/топливо не может управляться надежно.
Модель оценивает скорость воздушного потока и умножает оценку на взаимное требуемое отношение, чтобы задать скорость топлива.
A Тестовой обвязки с именем fuel_rate_control_cgv
была создана для всей модели. Обвязка можно открыть, щелкнув по значку «Perspectives pullout» в правом нижнем углу полотна модели и выбрав 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 секунд симуляции тест находится в режиме стабилизации, где входы замкнутого цикла от объекта передаются к контроллеру. Входы дросселя и скорости заданы в номинальных значениях, которые находятся в пределах нормальной рабочей огибающей контроллера. The 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');
Симулируйте тестовую обвязку нажатием Play на панели инструментов и наблюдайте сигналы fuel_rate и состава топливно-воздушной смеси в возможности. Также выполните следующую команду: sim('fuel_rate_control_cgv')
Заметьте, что никакие утверждения не запускаются во время симуляции, что указывает на то, что все оценки, смоделированные в Assess Controller
пройти.
Как часть верификации генерации кода (CGV) для системы контроллера, важно утверждать, что функциональное поведение контроллера одинаково во время режимов симуляции «нормальный» и «цикл» (SIL). Для выполнения этой верификации используется диспетчер тестов.
Используйте функцию sltestmgr
чтобы открыть менеджер тестов и загрузить пример тестового файла с помощью функции: sltest.testmanager.TestFile('sltestFuelRateControlComparisonTestSuite.mldatx')
Тест эквивалентности был сконфигурирован в менеджере тестирования так, что контроллер моделируется в режиме normal и SIL, и числовые результаты сравниваются между этими двумя запусками. Исследуйте структуру тестового примера, щелкнув по различным узлам иерархии тестов в Test Browser.
Запустите тест в менеджере тестов с помощью функции sltest.testmanager.run
.
Кроме того, в менеджере тестов выберите CGV Test1
узел на панели «Test Browser» и нажатии кнопки Запуска на панели инструментов. Результат прохождения/непрохождения доступен на панели Результаты и Программные продукты.
Затем может быть создан отчет для просмотра результатов теста эквивалентности. Для создания отчета используйте следующие команды. Запустить отчет после создания можно также с помощью API с LaunchReport
значение опции установлено в true
.
sltest.testmanager.report(cgvresult,'cgvresult.zip','IncludeTestResults',int32(0));
close_system(mdl, 0);
clear mdl;