Система управления состава топливно-воздушной смеси с диаграммами Stateflow

Сгенерируйте код для системы управления состава топливно-воздушной смеси, спроектированной с Simulink® и Stateflow®.

Рисунки 1, 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');

Сконфигурируйте и создайте модель с Simulink® Coder™

Генератор кода производит типовой код С ANSI® для Simulink® и моделей Stateflow®, Когда Системный конечный файл параметра конфигурации модели установлен в grt.tlc (Типовой в реальном времени (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.tlc (Встроенный в реальном времени (ERT)). Можно установить Системный параметр конечного файла программно.

rtwconfiguredemo('sldemo_fuelsys','ERT');

Повторите процесс сборки и смотрите сгенерированный код. Можно перейти к сегментам соответствующих норм в интерактивном режиме при помощи кнопок 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 = 0U;
          rtDW.bitsForTID0.is_Fueling_Mode = 2U;
          switch (rtDW.bitsForTID0.was_Running) {
           case IN_Low_Emissions:
            rtDW.bitsForTID0.is_Running = 1U;
            rtDW.bitsForTID0.was_Running = 1U;
            rtDW.fuel_mode = LOW;
            switch (rtDW.bitsForTID0.was_Low_Emissions) {
             case IN_Normal:
              rtDW.bitsForTID0.is_Low_Emissions = 1U;
              rtDW.bitsForTID0.was_Low_Emissions = 1U;
              break;

Закройте отчет генерации кода и модель.

clear hDemo;
rtwdemoclean;
close_system('sldemo_fuelsys',0);

Связанные примеры

Для связанных примеров фиксированной точки, которые используют sldemo_fuelsys, смотрите