exponenta event banner

Выключатель

В этом примере показано, как реализовать switch конструирование с использованием блоков Simulink, диаграмм Stateflow и блоков MATLAB Function.

Конструкция C

switch (u1)
{
 case 2:
   y1 = u2;
   break;
 case 3:
   u3;
   break;
 default:
   y1 = u4;
   break;
}

Шаблон моделирования для коммутатора: Блок регистра коммутатора

Один метод создания switch оператор должен использовать блок Switch Case из библиотеки Simulink > Signal Routing.

1. Открыть пример модели ex_switch_SL.

Модель содержит подсистему действий в случае переключения. Блок Switch Case принимает целочисленный входной сигнал, следовательно, входной сигнал u1 является типом, приведенным к int32.

2. Чтобы построить модель и создать код, нажмите клавиши Ctrl + B.

Код, реализующий switch конструкция находится в ex_switch_SL_step функция в ex_switch_SL.c:

/* Exported block signals */
int32_T u1;                            /* '<Root>/u1' */

/* External inputs (root inport signals with default storage) */
ExternalInputs rtU;

/* External outputs (root outports fed by signals with default storage) */
ExternalOutputs rtY;

/* Model step function */
void ex_switch_SL_step(void)
{
  /* SwitchCase: '<Root>/Switch Case' incorporates:
   *  Inport: '<Root>/u1'
   */
  switch (u1) {
   case 2:
    /* Outputs for IfAction SubSystem: '<Root>/Switch Case Action Subsystem' incorporates:
     *  ActionPort: '<S1>/Action Port'
     */
    /* Outport: '<Root>/y1' incorporates:
     *  Inport: '<Root>/u2'
     *  Inport: '<S1>/u2'
     */
    rtY.y1 = rtU.u2;

    /* End of Outputs for SubSystem: '<Root>/Switch Case Action Subsystem' */
    break;

   case 3:
    /* Outputs for IfAction SubSystem: '<Root>/Switch Case Action Subsystem1' incorporates:
     *  ActionPort: '<S2>/Action Port'
     */
    /* Outport: '<Root>/y1' incorporates:
     *  Inport: '<Root>/u3'
     *  Inport: '<S2>/u3'
     */
    rtY.y1 = rtU.u3;

    /* End of Outputs for SubSystem: '<Root>/Switch Case Action Subsystem1' */
    break;

   default:
    /* Outputs for IfAction SubSystem: '<Root>/Switch Case Action Subsystem2' incorporates:
     *  ActionPort: '<S3>/Action Port'
     */
    /* Outport: '<Root>/y1' incorporates:
     *  Inport: '<Root>/u4'
     *  Inport: '<S3>/u4'
     */
    rtY.y1 = rtU.u4;

    /* End of Outputs for SubSystem: '<Root>/Switch Case Action Subsystem2' */
    break;
  }

  /* End of SwitchCase: '<Root>/Switch Case' */
}

Модель моделирования для коммутатора: Функциональный блок MATLAB

1. Открыть пример модели ex_switch_ML.

Функциональный блок MATLAB содержит следующую функцию:

function y1 = fcn(u1, u2, u3, u4)

switch u1
    case 2
        y1 = u2;
    case 3
        y1 = u3;
    otherwise
        y1 = u4;
end


2. Чтобы построить модель и создать код, нажмите клавиши Ctrl + B.

Код, реализующий switch конструкция находится в ex_switch_ML_step функция в ex_switch_ML.c:

/* External inputs (root inport signals with default storage) */
ExternalInputs rtU;

/* External outputs (root outports fed by signals with default storage) */
ExternalOutputs rtY;

/* Model step function */
void ex_switch_ML_step(void)
{
  /* MATLAB Function: '<Root>/MATLAB Function' incorporates:
   *  Inport: '<Root>/u1'
   */
  switch (rtU.u1) {
   case 2:
    /* Outport: '<Root>/y1' incorporates:
     *  Inport: '<Root>/u2'
     */
    rtY.y1 = rtU.u2;
    break;

   case 3:
    /* Outport: '<Root>/y1' incorporates:
     *  Inport: '<Root>/u3'
     */
    rtY.y1 = rtU.u3;
    break;

   default:
    /* Outport: '<Root>/y1' incorporates:
     *  Inport: '<Root>/u4'
     */
    rtY.y1 = rtU.u4;
    break;
  }

  /* End of MATLAB Function: '<Root>/MATLAB Function' */
}

Преобразовать оператор If-Elseif-Else в оператор Switch

Если используется функциональный блок MATLAB или диаграмма Stateflow if-elseif-else логика принятия решения, можно преобразовать блок или диаграмму в switch с помощью параметра конфигурации. Выберите параметр Параметры конфигурации > Создание кода > Стиль кода > Преобразовать шаблоны if-elseif-else в операторы switch-case. Дополнительные сведения см. в разделе Преобразование кода If-Elseif-Else в операторы Switch-Case. Дополнительные сведения об этом преобразовании с помощью диаграммы Stateflow см. в разделе Повышение читаемости кода для блок-схем.

См. также

Связанные темы