exponenta event banner

Система управления соотношением воздуха и топлива с картами статофлоу

Создание кода для системы управления соотношением воздуха и топлива, разработанной с помощью 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');

Настройка и построение модели с помощью встроенного кодера

®

Чтобы настроить и построить производственный код ANSI ® C/C + + для модели, задайте для параметра конфигурации модели System target file значениеert.tlc (Embedded Real-Time (ERT)). Параметр System target file можно задать программным путем.

rtwconfiguredemo('sldemo_fuelsys','ERT');

Создайте и проверьте код. Перейти к соответствующим сегментам кода в интерактивном режиме можно с помощью кнопок Предыдущий (Previous) и Следующий (Next). В контекстном меню диаграммы (щелкните правой кнопкой мыши блок Stateflow ®) выберите «Код C/C + +» > «Перейти к коду 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, см. в разделе