В этом примере показано, как реализовать while построение цикла при помощи блоков Simulink, диаграмм Stateflow и блоков MATLAB function.
while(flag && (num_iter <= 100)
{
flag = func ();
num_iter ++;
}
Один метод для создания while цикл должен использовать некоторое время блок Subsystem Итератора от библиотеки Simulink> Ports и Subsystems.
1. Открытая модель ex_while_loop_SL в качестве примера.

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

Наблюдайте следующие настройки в модели:
Блок Constant предоставляет начальное условие В то время как Подсистема Итератора. Для блока Constant Постоянным значением является 1 и типом Выходных данных является boolean. Начальное условие может зависеть от входа с блоком.
В, в то время как подсистема итератора, func блок подсистемы имеет выход flag из 0 или 1 в зависимости от результата алгоритма в func( )func Имя функции в func подсистема.
В, В то время как Подсистема Итератора, для, В то время как блок Iterator, Максимальным количеством итераций является 100.
Для, В то время как блок Iterator, типом Цикла с условием продолжения является 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' */
}
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' */
}
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)
{
boolean_T func_flag_0;
boolean_T flag;
int32_T num_iter;
/* 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' */
}