Цикл For

В этом примере показано, как реализовать for конструкция цикла при помощи блоков Simulink, диаграмм Stateflow и блоков MATLAB function.

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

y1 = 0;
for(inx = 0; inx <10; inx++)
{
  y1 = u1[inx] + y1;
}

Шаблон моделирования для цикла For: блок Подсистемы For-Iterator

Один из методов создания for цикл должен использовать блок For Iterator Subsystem из библиотеки Simulink > Ports and Subsystems.

1. Откройте пример модели ex_for_loop_SL.

Модель содержит блок For Iterator Subsystem, который повторяет выполнение содержимого подсистемы во время временного шага симуляции.

Наблюдайте следующие настройки в модели:

  • Откройте блок For Iterator. В диалоговом окне Параметры Блоков параметр Index-mode Zero-based и параметр предел равен 10.

  • Откройте блок Unit Delay. В диалоговом окне Параметров блоков параметр Initial Условий равен 0. Этот параметр инициализирует состояние в нуле.

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

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

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

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

/* Model step function */
void ex_for_loop_SL_step(void)
{
  int32_T rtb_y1;
  int32_T s1_iter;

  /* Outputs for Iterator SubSystem: '<Root>/For Iterator Subsystem' incorporates:
   *  ForIterator: '<S1>/For Iterator'
   */
  for (s1_iter = 0; s1_iter < 10; s1_iter++) {
    /* Sum: '<S1>/Add' incorporates:
     *  Inport: '<Root>/u1'
     *  MultiPortSwitch: '<S1>/Index Vector'
     *  UnitDelay: '<S1>/Unit Delay'
     */
    rtb_y1 = U.u1[s1_iter] + DWork.UnitDelay_DSTATE;

    /* Update for UnitDelay: '<S1>/Unit Delay' */
    DWork.UnitDelay_DSTATE = rtb_y1;
  }

  /* End of Outputs for SubSystem: '<Root>/For Iterator Subsystem' */

  /* Outport: '<Root>/y1' */
  Y.y1 = rtb_y1;
}

Шаблон моделирования для цикла: диаграмма Stateflow

1. Откройте пример модели ex_for_loop_SF.

График содержит For шаблон решения цикла, который вы добавляете, щелкнув правой нажатие внутри графика > Добавить шаблон в графике > Цикл > For.

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

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

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

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

/* Model step function */
void ex_for_loop_SF_step(void)
{
  int32_T inx;

  /* Chart: '<Root>/Chart' */
  for (inx = 0; inx < 10; inx++) {
    /* Outport: '<Root>/y1' incorporates:
     *  Inport: '<Root>/u1'
     */
    Y.y1 += U.u1[inx];
  }

  /* End of Chart: '<Root>/Chart' */
}

Шаблон моделирования для цикла: блок MATLAB Function

1. Откройте пример модели ex_for_loop_ML.

Этот Блок MATLAB function содержит следующую функцию:

function y1 = fcn(u1)
 
y1 = 0;
 
for inx=1:10
    y1 = u1(inx) + y1 ;
end

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

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

/* Exported block signals */
real_T u1[10];                         /* '<Root>/u1' */
real_T y1;                             /* '<Root>/MATLAB Function' */

/* Model step function */
void ex_for_loop_ML_step(void)
{
  int32_T inx;

  /* MATLAB Function: '<Root>/MATLAB Function' incorporates:
   *  Inport: '<Root>/u1'
   */
  y1 = 0.0;
  for (inx = 0; inx < 10; inx++) {
    y1 += u1[inx];
  }

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

См. также

Похожие примеры

Подробнее о