# If


使用类似于 if-else 语句的逻辑选择子系统执行

库: Sysblock模块库 / SubSystems

# 描述

If 模块以及包含 ActionPort 模块的 IfActionSubsystem 模块实现 if-else 逻辑来控制子系统的执行。

# IfActionSubsystem

If Action Subsystem 模块是经过预先配置的 Subsystem 模块,可以作为一个起点,用来创建由 If 模块控制执行的子系统。If 模块计算逻辑表达式,然后根据计算结果输出动作信号。子系统的执行由放置在子系统内部的 ActionPort 模块控制。

# 示例

参考模型示例

# 示例说明

  • Step 模块:提供从 -1 变到 1 的输入信号,用于模拟实际输入值的变化。这个信号将被用作 If 模块的条件判断依据;
  • If 模块:计算逻辑表达式,并根据结果输出动作信号。如果条件为真,则输出一个动作信号,触发连接的 Subsystem 模块执行。如果条件为假,触发连接的 SubSystem1 模块执行。可以在工具栏仿真结果中查看;
  • IfActionSubsystem 模块:一个预配置的子系统模块,其执行由 If 模块控制。当接收到来自If模块的动作信号时,IfActionSubsystem 模块将执行其内部逻辑。

# 限制

If 模块具有以下限制:

  • 它不支持可调参数。在普通模式或加速模式下的仿真过程中,或在运行生成的代码时,不能调整 if 或 elseif 表达式的值;

    要实现可调整的 if-else 表达式,请在 If 模块外部调整表达式。例如,使用 RelationalOperator 模块计算 If 模块外部的外部表达式或将可调参数作为输入添加到 If 模块。

  • 它不支持自定义存储类;

  • If 表达式Elseif 表达式不能接受某些运算符,如 +、-、* 和 /。

# 端口

# 输入

u1 — 用于计算逻辑表达式的值
标量 | 向量

输入 u1,u2,...,un 必须具有相同的数据类型。输入不能是任何用户定义的类型,例如枚举类型。

If 模块不直接支持定点数据类型。但是,可以使用 CompareToConstant 模块解决此限制。

If 模块不支持布尔数据类型。如果要将布尔信号输入到 If 模块,请使用 DataTypeConversion 模块将该信号转换为整数类型。

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | boolean

# 输出

y — 用于 IfActionSubsystem 模块的动作信号
标量

来自 if、else 和 elseif 端口的输出是到 IfActionSubsystem 模块的动作信号。

# 参数

输入的数目 — 指定输入端口个数
1 (默认) | 整数
  • 1

    指定一个输入端口。

  • 整数

    指定输入端口个数。模块端口的标签为 'u' 字符后跟数字 1,2,...,n,其中 n 等于您指定的输入的数量。

If 表达式 — 指定逻辑表达式
u1 > 0 (默认) | 逻辑表达式

连接到 if 端口的 IfActionSubsystem 会在其关联的表达式计算结果为 true 时执行。

  • u1 > 0

    指定当输入 u1 大于 0 时在输出端口上发送动作信号。

  • 逻辑表达式

    指定逻辑表达式。此表达式在 If 模块上与 if 输出端口相邻显示。该表达式只能包含运算符 <, <=, ==, ~=, >, >=, &, |, ~, (), unary-minus。不允许使用 +, -, *, / 和 ^ 等运算符。该表达式不能包含数据类型表达式(例如 int8(6)),并且不能引用数据类型不是 double 或 single 的工作区变量。

Elseif 表达式 — 指定逻辑表达式
空 (默认) | 逻辑表达式列表

连接到 elseif 端口的 IfActionSubsystem 在其表达式计算结果为 true 且所有 if 和 elseif 表达式为 false 时执行。

  • 未指定逻辑表达式。

  • 逻辑表达式列表

    指定由以逗号分隔的逻辑表达式列表。当您选中显示 else 条件复选框时,表达式出现在 If 模块上的 if 端口下方及 else 端口上方。表达式只能包含运算符 <, <=, ==, ~=, >, >=, &, |, ~, (), unary-minus。不允许使用 +, -, *, / 和 ^ 等运算符。表达式不能包含数据类型表达式(例如 int8(6)),并且不能引用数据类型不是 double 或 single 的工作区变量。

显示 else 条件 — 控制 else 端口的显示
on (默认) | off

if 端口和所有 elseif 端口表达式为 false 时,else 端口发送动作信号来执行所连接的 IfActionSubsystem 模块。

  • on

    显示 else 端口。

  • off

    隐藏 else 端口。

# 版本历史记录

  • 在 2024b 之前推出

# 限制信息

暂不支持启用过零检测的功能。

# 另请参阅

Subsystem | ActionPort