This example shows how to implement a while
loop construct by using Simulink blocks, Stateflow Charts, and MATLAB Function blocks.
while(flag && (num_iter <= 100) { flag = func (); num_iter ++; }
One method for creating a while
loop is to use a While Iterator Subsystem block from the Simulink > Ports and Subsystems library.
1. Open example model ex_while_loop_SL
.
The model contains a While Iterator Subsystem block that repeats execution of the contents of the subsystem during a simulation time step.
Observe the following settings in the model:
The Constant block provides an initial condition to the While Iterator Subsystem. For the Constant block, the Constant value is 1
and the Output data type is boolean
. The initial condition can be dependent on the input to the block.
In the While Iterator Subsystem, the func
subsystem block has an output flag
of 0
or 1
depending on the result of the algorithm in func( )
. func()
is the Function name in func
subsystem.
In the While Iterator Subsystem, for the While Iterator block, the Maximum number of iterations is 100
.
For the While Iterator block, the While loop type is while
.
2. To build the model and generate code, press Ctrl+B.
The code implementing the while
loop is in the ex_while_loop_SL_step
function in 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. Open example model ex_while_loop_SF
.
In the model, the ex_while_loop_SF/Chart
executes the while
loop.
The chart contains a While
loop decision pattern that you add by right clicking inside the chart > Add Pattern in Chart > Loop > While.
2. To build the model and generate code, press Ctrl+B.
The code implementing the while
loop is in the ex_while_loop_SF_step
function in 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. Open example model ex_while_loop_ML
.
The MATLAB Function Block contains this 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. To build the model and generate code, press Ctrl+B.
The code implementing the while
loop is in the ex_while_loop_ML_step
function in 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' */ }