Выполните проверку генерации кода для модели. Авторское право 2015 The MathWorks, Inc.
В этом примере показано, как выполнить проверку генерации кода (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');


Тестовый жгут был смоделирован как тест с замкнутым контуром с блоком последовательности испытаний для управления регулятором расхода топлива. Вычисленный fuel_rate с выхода контроллера используется для привода модели бензинового двигателя. Расход топлива сочетается с фактическим потоком воздуха в Engine Gas Dynamics подсистема для определения полученного соотношения смеси, измеренного на выхлопе. Обратная связь от датчика кислорода к блоку последовательности испытаний обеспечивает замкнутую регулировку оценки скорости для поддержания идеального соотношения смесей.
Обратите внимание, что установка была смоделирована в тестовом жгуте вместо основной модели. Основная модель свободна от постороннего загромождения, так что код можно легко построить для ECU с минимальными изменениями в модели.
Блок тестовой последовательности с именем Sequence Sensor Failures моделирует различные сценарии отказа датчика и превышения скорости двигателя. Он принимает обратную связь от установки и управляет контроллером с данными датчиков. Этот шаблон моделирования позволяет блоку тестовой последовательности управлять сигналами обратной связи, принимаемыми блоком контроллера, и функционировать как холст для создания тестовых примеров. Откройте блок тестовой последовательности для просмотра смоделированных тестовых сценариев.
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Завершение теста
Блок тестовой последовательности Assess Controller проверяет выходные данные контроллера для различных тестовых случаев, смоделированных Sequence Sensor Failures блок. Смоделированы следующие оценки:
Убедитесь, что режим заправки находится в Warmup режим для первых 4,8 секунд
Убедитесь, что режим заправки переключается на Overspeed режим, когда фактическая скорость превышает 628
Убедитесь, что режим заправки не находится в Single_Failure режим, когда отказали несколько датчиков.
open_system('fuel_rate_control_cgv/Assess Controller');
Смоделировать тестовый жгут, нажав кнопку «Воспроизвести» на панели инструментов и наблюдая за сигналами соотношения fuel_rate и воздуха и топлива в области. В качестве альтернативы выполните следующую команду: sim('fuel_rate_control_cgv')
Обратите внимание, что во время моделирования никакие утверждения не запускаются, что указывает на то, что все оценки смоделированы в Assess Controller пройти.
В рамках проверки формирования кода (CGV) для системы контроллера важно утверждать, что функциональное поведение контроллера одинаково во время нормального и программного режимов моделирования в цикле (SIL). Для выполнения этой проверки используется менеджер тестирования.
Используйте функцию sltestmgr для открытия диспетчера тестирования и загрузки файла примера теста с помощью функции: sltest.testmanager.TestFile('sltestFuelRateControlComparisonTestSuite.mldatx')
Тест эквивалентности был сконфигурирован в диспетчере тестов таким образом, что контроллер моделируется в обычном режиме и режиме SIL, и численные результаты сравниваются между этими двумя запусками. Изучите структуру тестового случая, щелкнув по различным узлам иерархии тестов в обозревателе тестов.
Запустите тест в диспетчере тестов с помощью функции sltest.testmanager.run.
В качестве альтернативы в диспетчере тестирования выберите CGV Test1 в панели «Обозреватель тестов» и нажмите кнопку «Выполнить» на панели инструментов. Результат прохождения/отказа доступен на панели Результаты и артефакты.
Затем можно создать отчет для просмотра результатов теста эквивалентности. Для создания отчета используйте следующие команды. Можно также запустить отчет после создания с помощью API с помощью LaunchReport параметр имеет значение true.
sltest.testmanager.report(cgvresult,'cgvresult.zip','IncludeTestResults',int32(0));
close_system(mdl, 0);
clear mdl;