# 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 之前推出
# 限制信息
暂不支持启用过零检测的功能。