If-Else
此示例说明如何使用 Simulink® 模块、Stateflow® 图和 MATLAB® Function 模块实现 if-else 构造。
C 构造
if (u1 > u2) { y1 = u1; } else { y1 = u2; }
If-Else 的建模模式:Switch 模块
创建 if-else
语句的一种方法是使用 Simulink > 信号路由库中的 Switch 模块。
1.打开示例模型 ex_if_else_SL
。
该模型包含模块参数首个输入传递条件为 u2~=0
的 Switch 模块。如果 u2
为 TRUE
,则软件选择 u1
,否则 u2
通过。
2.要编译模型并生成代码,请按 Ctrl+B。
实现 if-else
构造的代码在 ex_if_else_SL.c
中的 ex_if_else_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_if_else_SL_step(void) { /* Switch: '<Root>/Switch' incorporates: * Inport: '<Root>/u1' * Inport: '<Root>/u2' * RelationalOperator: '<Root>/Relational Operator' */ if (U.u1 > U.u2) { /* Outport: '<Root>/y1' */ Y.y1 = U.u1; } else { /* Outport: '<Root>/y1' */ Y.y1 = U.u2; } /* End of Switch: '<Root>/Switch' */ }
If-Else 的建模模式:Stateflow 图
1.打开示例模型 ex_if_else_SF
。
该模型包含 If-Else
决策模式,您可以通过在图内右键点击并依次点击在图中添加构型 > 决策 > If-Else 来添加该模式。
2.要编译模型并生成代码,请按 Ctrl+B。
实现 if-else
构造的代码在 ex_if_else_SF.c
中的 ex_if_else_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_if_else_SF_step(void) { /* Chart: '<Root>/Chart' incorporates: * Inport: '<Root>/u1' * Inport: '<Root>/u2' */ /* If-Else */ if (U.u1 >= U.u2) { /* Outport: '<Root>/y1' */ Y.y1 = U.u1; } else { /* Outport: '<Root>/y1' */ Y.y1 = U.u2; } /* End of Chart: '<Root>/Chart' */ }
If-Else 的建模模式:MATLAB Function 模块
1.打开示例模型 ex_if_else_ML
。
2.MATLAB Function 模块包含以下函数:
function y1 = fcn(u1, u2) if u1 > u2; y1 = u1; else y1 = u2; end
2.要编译模型并生成代码,请按 Ctrl+B。
实现 if-else
构造的代码在 ex_if_else_ML.c
中的 ex_if_else_ML_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_if_else_ML_step(void) { /* MATLAB Function: '<Root>/MATLAB Function' incorporates: * Inport: '<Root>/u1' * Inport: '<Root>/u2' */ if (U.u1 >= U.u2) { /* Outport: '<Root>/y1' */ Y.y1 = U.u1; } else { /* Outport: '<Root>/y1' */ Y.y1 = U.u2; } /* End of MATLAB Function: '<Root>/MATLAB Function' */ }