В этом примере показано, как реализовать switch
создайте с помощью блоков Simulink, Диаграммы Stateflow и блока MATLAB Function.
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. Блок 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' */ }
1. Откройте пример модели ex_switch_ML
.
Этот Блок MATLAB function содержит следующую функцию:
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' */ }
Если используется блок MATLAB Function или диаграмма Stateflow if-elseif-else
логика принятия решений, можно преобразовать блок или график в switch
оператор при помощи параметра конфигурации. Выберите Параметры конфигурации > Генерация кода > Стиль кода > Преобразовать шаблоны if-elseif-else в операторы switch-case. Для получения дополнительной информации см. раздел Преобразование кода if-Elseif-Else в операторы Switch-Case. Для получения дополнительной информации об этом преобразовании с помощью диаграммы Stateflow, смотрите Улучшение Читаемости Кода для Flow Графиков.