主要内容

If

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

  • If block

库:
Simulink / Ports & Subsystems

描述

If 模块以及包含 Action Port 模块的 If Action Subsystem 模块实现 if-else 逻辑来控制子系统的执行。有关使用 If 模块的示例,请参阅选择子系统执行

Model ex_if_block

示例

限制

If 模块具有以下限制:

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

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

  • 它不支持自定义存储类。请参阅使用 Struct 存储类将参数数据组织为结构体 (Embedded Coder)

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

端口

输入

全部展开

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

If 模块不直接支持定点数据类型。但是,可以使用 Compare To Constant 模块解决此限制。请参阅 选择子系统执行中对定点数据类型的支持。

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | Boolean

输出

全部展开

来自 ifelseelseif 端口的输出是到 If Action Subsystem 模块的动作信号。

参数

全部展开

1

指定一个输入端口。

整数

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

编程用法

模块参数NumInputs
类型:字符向量
'1' | 用引号引起来的整数
默认值'1'

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

on

显示 else 端口。

off

隐藏 else 端口。

编程用法

模块参数ShowElse
类型:字符向量
值:'on' | 'off'
默认值:'on'

控制过零检测。

on

检测过零点。

off

不检测过零点。

编程用法

模块参数ZeroCross
类型:字符向量
值:'on' | 'off'
默认值:'on'

自 R2025a 起

选择此参数可确保从 If 模块生成的代码中仅包含 if-else 语句。

on

在生成的代码中仅包含 if-else 语句。此选项可防止在生成的代码中包含 switch-case 语句。

off

当此参数为 off 时,从 If 模块生成的代码可能包含 switch-case 语句(这些语句执行与 If 模块相同的操作)。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

模块参数EnsureIfElseCode
类型:字符向量
值:'on' | 'off'
默认值:'off'

连接到 if 端口的 If Action Subsystem 模块在关联的 if 表达式的计算结果为 true 时执行。

u1 > 0

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

逻辑表达式

注意

从 R2025a 开始,要编辑默认 if 表达式 (u1 > 0),请使用表达式表。对于包含多个输入和运算符的复杂表达式,请选择 if 表达式并在表达式编辑器框中编辑。

对于 R2025a 之前的版本,此参数在模块对话框中显示为 If 表达式。您可以使用此参数指定逻辑表达式。

不过,对于所有 Simulink® 版本,此表达式在 If 模块上与 if 输出端口相邻显示。

该表达式只能包含运算符 <, <=, ==, ~=, >, >=, &, |, ~, () unary-minus。不允许使用 +, -, *, /^ 等运算符。该表达式不能包含数据类型表达式(例如 int8(6)),并且不能引用任何数据类型不是 doublesingle 的工作区变量。

编程用法

模块参数IfExpression
类型:字符向量
'u1 > 0' | 用引号引起来的逻辑表达式
默认值'u1 > 0'

连接到 elseif 端口的 If Action Subsystem 模块在关联的 elseif 表达式计算结果为 true 且所有其他 ifelseif 表达式为 false 时执行。

未指定逻辑表达式。

逻辑表达式列表

注意

从 R2025a 开始,要添加和编辑 elseif 表达式,请使用表达式表。使用表左侧的操作按钮添加、删除和移动表达式。该表允许您分别编写每个 elseif 表达式,而不是在以逗号分隔的列表中编写,并可根据建模需求组织表达式。对于包含多个输入和运算符的复杂表达式,请选择包含该 elseif 表达式的行并在表达式编辑器框中编辑它。

对于 R2025a 之前的版本,此参数在模块对话框中显示为 Else 表达式。在这些版本中,指定以逗号分隔的逻辑表达式列表。

不过,对于所有 Simulink 版本,当您选中显示 else 条件复选框时,表达式出现在 If 模块上的 if 端口下方及 else 端口上方。

表达式只能包含运算符 <, <=, ==, ~=, >, >=, &, |, ~, ()unary-minus。不允许使用 +, -, *, /^ 等运算符。表达式不能包含数据类型表达式(例如 int8(6)),并且不能引用任何数据类型不是 doublesingle 的工作区变量。

编程用法

模块参数ElseIfExpressions
类型:字符向量
'' | 用引号引起来的以逗号分隔的逻辑表达式列表
默认值''

模块特性

数据类型

Boolean | double | integer | single

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

全部展开

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2006a 之前推出

全部展开