If
使用类似于 if-else 语句的逻辑选择子系统执行
库:
Simulink /
Ports & Subsystems
描述
示例
If-Then-Else 模块
此示例说明将正弦波馈入 If Action Subsystem 模块的效果。它旨在说明 If Action Subsystem 模块和 Enabled Subsystem 模块之间的相似性。
Modeling Clutch Lock-Up Using If Blocks
Use If/Else subsystems to build a clutch model. An 'If' subsystem models the clutch dynamics in the locked position while an 'Else' subsystem models the unlocked position. One or the other is enabled using the 'If' block. The dot-dashed lines from the 'If' block denote control signals, which are used to enable If/Else (or other conditional) subsystems. Checking any of the boxes on the GUI produces a plot of any of the selected variables (versus time).
限制
If 模块具有以下限制:
它不支持可调参数。在普通模式或加速模式下的仿真过程中,或在运行生成的代码时,不能调整
if或elseif表达式的值。要实现可调整的 if-else 表达式,请在 If 模块外部调整表达式。例如,使用 Relational Operator 模块计算 If 模块外部的外部表达式或将可调参数作为输入添加到 If 模块。
它不支持自定义存储类。请参阅使用 Struct 存储类将参数数据组织为结构体 (Embedded Coder)。
If 表达式和 elseif 表达式不能接受某些运算符,如
+、-、*和/。
端口
输入
输出
来自 if、else 和 elseif 端口的输出是到 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)),并且不能引用任何数据类型不是double或single的工作区变量。
编程用法
模块参数:IfExpression |
| 类型:字符向量 |
值:'u1 > 0' | 用引号引起来的逻辑表达式 |
默认值:'u1 > 0' |
连接到 elseif 端口的 If Action Subsystem 模块在关联的 elseif 表达式计算结果为 true 且所有其他 if 和 elseif 表达式为 false 时执行。
- 空
未指定逻辑表达式。
- 逻辑表达式列表
注意
从 R2025a 开始,要添加和编辑 elseif 表达式,请使用表达式表。使用表左侧的操作按钮添加、删除和移动表达式。该表允许您分别编写每个 elseif 表达式,而不是在以逗号分隔的列表中编写,并可根据建模需求组织表达式。对于包含多个输入和运算符的复杂表达式,请选择包含该 elseif 表达式的行并在表达式编辑器框中编辑它。
对于 R2025a 之前的版本,此参数在模块对话框中显示为 Else 表达式。在这些版本中,指定以逗号分隔的逻辑表达式列表。
不过,对于所有 Simulink 版本,当您选中显示 else 条件复选框时,表达式出现在 If 模块上的 if 端口下方及 else 端口上方。
表达式只能包含运算符
<, <=, ==, ~=, >, >=, &, |, ~, ()和unary-minus。不允许使用+, -, *, /和^等运算符。表达式不能包含数据类型表达式(例如int8(6)),并且不能引用任何数据类型不是double或single的工作区变量。
编程用法
模块参数:ElseIfExpressions |
| 类型:字符向量 |
值:'' | 用引号引起来的以逗号分隔的逻辑表达式列表 |
默认值:'' |
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
此模块具有一个默认 HDL 架构。
| ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线不会重新分发这些寄存器。默认值为 |
| InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
| OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
版本历史记录
在 R2006a 之前推出
更新后的模块对话框允许您在表中指定逻辑表达式。您不再需要以逗号分隔的列表形式指定 elseif 表达式。此更改使整体逻辑流更易于可视化和解析。该表还包含新的操作按钮,允许您添加、删除和上下移动 if-else 表达式。这些按钮帮助您根据建模需求组织表达式。此外,新表达式编辑器框允许您编辑复杂表达式。
生成的代码包含 if-else 表达式。此更改可防止包含 switch-case 语句并增强生成代码的可读性。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)



