В этом примере показано, как реализовать 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' */ }