for 循环
此示例说明如何使用 Simulink® 模块、Stateflow® 图和 MATLAB® Function 模块实现 for
循环构造。
C 构造
y1 = 0; for(inx = 0; inx <10; inx++) { y1 = u1[inx] + y1; }
for 循环的建模模式:For-Iterator Subsystem 模块
创建 for
循环的一种方法是使用 Simulink > 端口和子系统库中的 For Iterator Subsystem 模块。
1.打开示例模型 ex_for_loop_SL
。
该模型包含一个 For Iterator Subsystem 模块,该模块在仿真时间步期间重复执行子系统的内容。
观察模型中的以下设置:
打开 For Iterator 模块。在“模块参数”对话框中,索引模式参数为
Zero-based
,迭代限制参数为 10。打开 Unit Delay 模块。在“模块参数”对话框中,初始条件参数为 0。此参数将状态初始化为零。
2.要编译模型并生成代码,请按 Ctrl+B。
实现 for
循环的代码位于 ex_for_loop_SL.c
中的 ex_for_loop_SL_step
函数中:
/* 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; }
for 循环的建模模式:Stateflow 图
1.打开示例模型 ex_for_loop_SF
。
该图包含 For
循环决策模式,您可以通过在图内右键点击并依次点击在图中添加构型 > 循环 > For 来添加该模式。
2.要编译模型并生成代码,请按 Ctrl+B。
实现 for
循环的代码位于 ex_for_loop_SF.c
中的 ex_for_loop_SF_step
函数中:
/* 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' */ }
for 循环的建模模式: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.c
中的 ex_for_loop_ML_step
函数中:
/* 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' */ }
另请参阅
相关示例
- 使用构型向导创建流程图 (Stateflow)