Цикл While

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

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

while(flag && (num_iter <= 100)
{
  flag = func ();
  num_iter ++;
}

Шаблон моделирования для цикла While: блок Iterator Subsystem

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

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

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

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

  • Блок Constant предоставляет начальное условие Подсистеме Итератор. Для блока Constant значение Constant 1 и тип выходных данных boolean. Начальное условие может зависеть от входа в блок.

  • В Подсистеме Итератор func блок подсистемы имеет выход flag от 0 или 1 в зависимости от результата алгоритма в func( ). func() - имя Функции в func подсистема.

  • В Подсистеме Итератор для блока While Iterator Максимальное количество итераций 100.

  • Для блока Итератор тип цикла While while.

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

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

/* Model step function */
void ex_while_loop_SL_step(void)
{
  int32_T s1_iter;
  boolean_T loopCond;

  /* Outputs for Iterator SubSystem: '<Root>/While Iterator Subsystem' incorporates:
   *  WhileIterator: '<S1>/While Iterator'
   */
  s1_iter = 1;

  /* SystemReset for Atomic SubSystem: '<S1>/func' */
  func_Reset();

  /* End of SystemReset for SubSystem: '<S1>/func' */
  loopCond = true;
  while (loopCond && (s1_iter <= 100)) {
    /* Outputs for Atomic SubSystem: '<S1>/func' */
    func();

    /* End of Outputs for SubSystem: '<S1>/func' */
    loopCond = flag;
    s1_iter++;
  }

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

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

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

В модели ex_while_loop_SF/Chart выполняет while цикл.

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

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

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

/* Model step function */
void ex_while_loop_SF_step(void)
{
  /* Chart: '<Root>/Chart' */
  num_iter = 1;
  while (flag && (num_iter <= 100)) {
    /* Outputs for Function Call SubSystem: '<Root>/func' */
    func();

    /* End of Outputs for SubSystem: '<Root>/func' */
    num_iter++;
  }

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

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

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

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

function fcn(func_flag)

flag = true; 
num_iter = 1;

while(flag && (num_iter<=100))
    func;
    flag = func_flag;
    num_iter = num_iter + 1;
end

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

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

/* Model step function */
void ex_while_loop_ML_step(void)
{
  int32_T num_iter;
  boolean_T flag;
  boolean_T func_flag_0;

  /* MATLAB Function: '<Root>/MATLAB Function' */
  func_flag_0 = func_flag;
  flag = true;
  num_iter = 1;
  while (flag && (num_iter <= 100)) {
    /* Outputs for Function Call SubSystem: '<Root>/func' */
    func();

    /* End of Outputs for SubSystem: '<Root>/func' */
    flag = func_flag_0;
    num_iter++;
  }

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

См. также

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

Подробнее о