Main Content

关系和逻辑运算符

此示例说明如何使用 Simulink® 模块、Stateflow® 图和 MATLAB® Function 模块实现关系和逻辑运算符。

关系运算符或逻辑运算符的建模模式 - Simulink 模块

要在模型中包含逻辑运算,请使用 Logic and Bit Operations 库中的 Logical Operator 模块。

1.打开示例模型 ex_data_type_SL

Logical Operator 模块在模型中执行 OR 运算。要更改运算,请双击该模块并将运算符字段设置为菜单中的任何运算。

您可以通过用 Relational Operator 模块替换 Logical Operator 模块来实现关系运算符。

2.要编译模型并生成代码,请按 Ctrl+B

实现逻辑运算符 OR 的代码在 ex_logical_SL.cex_logical_SL_step 函数中。

/* Exported block signals */
boolean_T u1;                          /* '<Root>/u1' */
boolean_T u2;                          /* '<Root>/u2' */
boolean_T y1;                          /* '<Root>/y1' */

/* Model step function */
void ex_logical_SL_step(void)
{
  /* Outport: '<Root>/y1' incorporates:
   *  Inport: '<Root>/u1'
   *  Inport: '<Root>/u2'
   *  Logic: '<Root>/Logical Operator'
   */
  y1 = (u1 || u2);
}

关系运算符和逻辑运算符的建模模式 - Stateflow 图

1.打开示例模型 ex_data_type_SF

在 Stateflow 图中,关系或逻辑运算动作发生在从一个结点到另一个结点的转移上。关系语句指定有条件地允许某个转移的条件。在这种情况下,语句在方括号内。

2.要编译模型并生成代码,请按 Ctrl+B

实现逻辑运算符 OR 的代码在 ex_logical_SF.cex_logical_SF_step 函数中。

/* Exported block signals */
boolean_T u1;                          /* '<Root>/u1' */
boolean_T u2;                          /* '<Root>/u2' */
boolean_T y1;                          /* '<Root>/Logical Operator' */

/* Model step function */
void ex_logical_SF_step(void)
{
  /* Chart: '<Root>/Logical Operator' incorporates:
   *  Inport: '<Root>/u1'
   *  Inport: '<Root>/u2'
   */
  y1 = (u1 || u2);
}

关系运算符和逻辑运算符的建模模式 - MATLAB Function 模块

此示例说明一种 MATLAB Function 模块方法,它通过使用关系运算符将运算符合并到生成的代码中。

1.打开示例模型 ex_logical_ML

2.MATLAB Function 模块包含以下函数:

function y1 = fcn(u1, u2)
y1 = u1 > u2; 
end

3.要编译模型并生成代码,请按 Ctrl+B

生成的代码出现在 ex_data_type_ML.c 中:

/* Exported block signals */
real_T u1;                             /* '<Root>/u1' */
real_T u2;                             /* '<Root>/u2' */
boolean_T y;                           /* '<Root>/MATLAB Function' */

/* Model step function */
void ex_logical_ML_step(void)
{
  /* MATLAB Function: '<Root>/MATLAB Function' incorporates:
   *  Inport: '<Root>/u1'
   *  Inport: '<Root>/u2'
   */
  y = (u1 > u2);
}

另请参阅