Main Content

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 模块。如果 u2TRUE,则软件选择 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' */
}

相关主题