Сгенерируйте код для системы управления состава топливно-воздушной смеси, разработанной с Simulink® и Stateflow®.
Рисунки 1, 2, и 3 показывают соответствующие фрагменты sldemo_fuelsys модели, система с обратной связью, содержащая объект и контроллер. Объект подтверждает контроллер в симуляции рано в рабочем цикле. В этом примере вы генерируете код для соответствующей подсистемы контроллера, "fuel_rate_control". Рисунок 1 показывает имитационную модель верхнего уровня.
Откройте sldemo_fuelsys через rtwdemo_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');
Simulink® Coder™ генерирует типичный код С ANSI® для Simulink® и моделей Stateflow® через цель Типичного в реальном времени (GRT). Можно сконфигурировать модель для генерации кода программно.
rtwconfiguredemo('sldemo_fuelsys','GRT');
В данном примере создайте только систему управления состава топливно-воздушной смеси. Если процесс генерации кода завершен, отчет HTML, детализирующий сгенерированный код, отображен. Основная часть кода расположена в fuel_rate_control.c.
rtwbuild('sldemo_fuelsys/fuel_rate_control');
### Starting build procedure for model: fuel_rate_control ### Successful completion of build procedure for model: fuel_rate_control
Embedded Coder® генерирует производство код ANSI® C/C ++ через цель Встроенного в реальном времени (ERT). Можно сконфигурировать модель для генерации кода программно.
rtwconfiguredemo('sldemo_fuelsys','ERT');
Повторите процесс сборки и осмотрите сгенерированный код. В Отчете Simulink® Coder™ можно перейти к сегментам соответствующих норм в интерактивном режиме при помощи кнопок Previous и Next. Из контекстного меню графика (щелкают правой кнопкой по блоку Stateflow®), выберите Code Generation> Navigate to Code. Программно, используйте rtwtrace утилиту.
rtwbuild('sldemo_fuelsys/fuel_rate_control'); rtwtrace('sldemo_fuelsys/fuel_rate_control/control_logic')
### Starting build procedure for model: fuel_rate_control ### Successful completion of build procedure for model: fuel_rate_control
Просмотрите управляющую логику состава топливно-воздушной смеси в сгенерированном коде.
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) { /* This state interprets the other states in the chart to directly control the fueling mode. */ switch (rtDW.bitsForTID0.is_Fueling_Mode) { case IN_Fuel_Disabled: rtDW.fuel_mode = DISABLED; /* The fuel is completely shut off while in this state. */ switch (rtDW.bitsForTID0.is_Fuel_Disabled) { case IN_Overspeed: /* Inport: '<Root>/sensors' */ /* The speed is dangerously high, so shut off the fuel. */ if ((rtDW.bitsForTID0.is_Speed == IN_normal) && (rtU.sensors.speed < 603.0F)) { if (rtDW.bitsForTID0.is_Fail != IN_Multi) { rtDW.bitsForTID0.is_Fuel_Disabled = IN_NO_ACTIVE_CHILD; rtDW.bitsForTID0.is_Fueling_Mode = IN_Running; switch (rtDW.bitsForTID0.was_Running) { case IN_Low_Emissions: rtDW.bitsForTID0.is_Running = IN_Low_Emissions; rtDW.bitsForTID0.was_Running = IN_Low_Emissions; rtDW.fuel_mode = LOW; switch (rtDW.bitsForTID0.was_Low_Emissions) { case IN_Normal: rtDW.bitsForTID0.is_Low_Emissions = IN_Normal; rtDW.bitsForTID0.was_Low_Emissions = IN_Normal; break;
Закройте отчет генерации кода и модель.
clear hDemo; rtwdemoclean; close_system('sldemo_fuelsys',0);
Для связанных примеров фиксированной точки, которые используют sldemo_fuelsys, смотрите
Проект фиксированной точки - Топливная Система управления Уровня Фиксированной точки (Fixed-Point Designer)
Производство фиксированной точки генерация кода C/C++ - Система управления Состава топливно-воздушной смеси с Данными Фиксированной точки (Simulink Coder)