Сгенерируйте код для системы управления составом топливно-воздушной смеси, разработанной Simulink ® и Stateflow ®.
На фигуры, 2 и 3 показаны соответствующие фрагменты модели sldemo_fuelsys, системы с обратной связью, содержащей объект и контроллер. Объект проверяет контроллер в симуляции в начале рабочего цикла. В этом примере вы генерируете код для соответствующей подсистемы контроллера, «fuel_rate_control.» Рисунок 1 показывает модель симуляции верхнего уровня.
Используйте команду rtwdemo_fuelsys
чтобы открыть sldemo_fuelsys
модели. Затем скомпилируйте модель, чтобы увидеть типы данных сигнала.
rtwdemo_fuelsys sldemo_fuelsys([],[],[],'compile'); sldemo_fuelsys([],[],[],'term');
Фигура 1: Модель верхнего уровня объекта управления и контроллера
Система управления составом топливно-воздушной смеси состоит из Simulink ® и Stateflow ®. Система управления является фрагментом модели, для которой вы генерируете код.
open_system('sldemo_fuelsys/fuel_rate_control');
Фигура 2: Подсистема контроллера состава топливно-воздушной смеси
Логика управления является диаграммой Stateflow, которая задает различные режимы работы.
open_system('sldemo_fuelsys/fuel_rate_control/control_logic');
Фигура 3: Логика контроллера расхода воздуха-топлива
Закройте эти окна.
close_system('sldemo_fuelsys/fuel_rate_control/airflow_calc'); close_system('sldemo_fuelsys/fuel_rate_control/fuel_calc'); close_system('sldemo_fuelsys/fuel_rate_control/control_logic'); hDemo.rt=sfroot;hDemo.m=hDemo.rt.find('-isa','Simulink.BlockDiagram'); hDemo.c=hDemo.m.find('-isa','Stateflow.Chart','-and','Name','control_logic'); hDemo.c.visible=false; close_system('sldemo_fuelsys/fuel_rate_control');
Чтобы сконфигурировать и создать производственный код ANSI ® C/C + + для модели, установите параметр конфигурации модели Системный целевой файл на ert.tlc
(Embedded Real-Time (ERT)). Можно задать параметр Системный целевой файл программно.
rtwconfiguredemo('sldemo_fuelsys','ERT');
Сгенерируйте и проверьте код. Перейдите к соответствующим сегментам кода в интерактивном режиме с помощью кнопок Previous и Next. В контекстном меню графика (щелкните правой кнопкой по блоку Stateflow ®) выберите C/C + + код > Navigate to C/C + + код. Программно используйте rtwtrace
утилита.
slbuild('sldemo_fuelsys/fuel_rate_control'); rtwtrace('sldemo_fuelsys/fuel_rate_control/control_logic')
### Starting build procedure for: fuel_rate_control ### Successful completion of build procedure for: fuel_rate_control Build Summary Top model targets built: Model Action Rebuild Reason ================================================================================================== fuel_rate_control Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 14.334s
Просмотрите логику управления составом топливно-воздушной смеси в сгенерированном коде.
rtwdemodbtype('fuel_rate_control_ert_rtw/fuel_rate_control.c',... '/* Function for Chart:','case IN_Warmup:',1,0);
/* Function for Chart: '<S1>/control_logic' */ static void Fueling_Mode(const int32_T *sfEvent) { switch (rtDWork.bitsForTID0.is_Fueling_Mode) { case IN_Fuel_Disabled: rtDWork.fuel_mode = DISABLED; switch (rtDWork.bitsForTID0.is_Fuel_Disabled) { case IN_Overspeed: /* Inport: '<Root>/sensors' */ if ((rtDWork.bitsForTID0.is_Speed == 2) && (rtU.sensors.speed < 603.0F)) { if (rtDWork.bitsForTID0.is_Fail != 1) { rtDWork.bitsForTID0.is_Fuel_Disabled = IN_NO_ACTIVE_CHILD; rtDWork.bitsForTID0.is_Fueling_Mode = IN_Running; /* The fuel is actively controlled while in this state. */ switch (rtDWork.bitsForTID0.was_Running) { case IN_Low_Emissions: rtDWork.bitsForTID0.is_Running = IN_Low_Emissions; rtDWork.bitsForTID0.was_Running = IN_Low_Emissions; rtDWork.fuel_mode = LOW; switch (rtDWork.bitsForTID0.was_Low_Emissions) { case IN_Normal: rtDWork.bitsForTID0.is_Low_Emissions = IN_Normal; rtDWork.bitsForTID0.was_Low_Emissions = IN_Normal; /* All sensors are in correct operating modes, so effective closed-loop mixture control can be used. */ break;
Закройте модель и отчет о генерации кода.
clear hDemo; rtwdemoclean; close_system('sldemo_fuelsys',0);
Для связанных примеров с фиксированной точкой, которые используют sldemo_fuelsys, см.
Проект с фиксированной точкой - Система управления расходом топлива с фиксированной точкой (Fixed-Point Designer)
Генерация кода C/C + + с фиксированной точкой - Система управления составом топливно-воздушной смеси с данными о фиксированной точке