If
使用类似于 if-else
语句的逻辑选择子系统执行
库:
Simulink /
Ports & Subsystems
描述
If 模块以及包含 Action Port 模块的 If Action Subsystem 模块实现 if-else 逻辑来控制子系统的执行。有关使用 If 模块的示例,请参阅Select Subsystem Execution。
示例
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 表达式不能接受某些运算符,如
+
、-
、*
和/
。
端口
输入
Logical operands — 用于计算逻辑表达式的值
标量 | 向量
输入 u1,u2,...,un
必须具有相同的数据类型。输入不能是任何用户定义的类型,例如枚举类型。
If 模块不直接支持定点数据类型。但是,可以使用 Compare To Constant 模块解决此限制。请参阅 Select Subsystem Execution中对定点数据类型的支持。
If 模块不支持布尔数据类型。如果要将布尔信号输入到 If 模块,请使用 Data Type Conversion 模块将该信号转换为整数类型。
数据类型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
输出
Action — 用于 If Action Subsystem 模块的动作信号
标量
来自 if
、else
和 elseif
端口的输出是到 If Action Subsystem 模块的动作信号。
参数
输入的数目 — 指定输入端口个数
1
(默认) | 整数
1
指定一个输入端口。
- 整数
指定输入端口个数。模块端口的标签为
'u'
字符后跟数字1,2,...,n
,其中n
等于您指定的输入的数量。
编程用法
模块参数:NumInputs |
类型:字符向量 |
值:'1' | '<integer>' |
默认值:'1' |
If 表达式 — 指定逻辑表达式
u1 > 0
(默认) | 逻辑表达式
连接到 if
端口的 If Action Subsystem 会在其关联的表达式计算结果为 true 时执行。
u1 > 0
指定当输入
u1
大于0
时在输出端口上发送动作信号。- 逻辑表达式
指定逻辑表达式。此表达式在 If 模块上与 if 输出端口相邻显示。
该表达式只能包含运算符
<, <=, ==, ~=, >, >=, &, |, ~, (), unary-minus
。不允许使用+, -, *, /
和^
等运算符。该表达式不能包含数据类型表达式(例如int8(6)
),并且不能引用数据类型不是double
或single
的工作区变量。
编程用法
模块参数:IfExpression |
类型:字符向量 |
值:'u1 > 0' | '<logical expression>' |
默认值:'u1 > 0' |
Elseif 表达式 — 指定逻辑表达式
空 (默认) | 逻辑表达式列表
连接到 elseif 端口的 If Action Subsystem 在其表达式计算结果为 true
且所有 if
和 elseif
表达式为 false 时执行。
- 空
未指定逻辑表达式。
- 逻辑表达式列表
指定由以逗号分隔的逻辑表达式列表。当您选中显示 else 条件复选框时,表达式出现在 If 模块上的 if 端口下方及 else 端口上方。
表达式只能包含运算符
<, <=, ==, ~=, >, >=, &, |, ~, (), unary-minus
。不允许使用+, -, *, /
和^
等运算符。表达式不能包含数据类型表达式(例如int8(6)
),并且不能引用数据类型不是double
或single
的工作区变量。
编程用法
模块参数:ElseIfExpressions |
类型:字符向量 |
值:'' | '<list of logical expressions>' |
默认值:'' |
显示 else 条件 — 控制 else 端口的显示
on (默认) | off
当 if 端口和所有 elseif 端口表达式为 false
时,else 端口发送动作信号来执行所连接的 If Action Subsystem 模块。
- on
显示 else 端口。
- off
隐藏 else 端口。
编程用法
模块参数:ShowElse |
类型:字符向量 |
值: 'on' | 'off' |
默认值:'on' |
启用过零检测 — 控制过零检测
on (默认) | off
控制过零检测。
- on
检测过零点。
- off
不检测过零点。
编程用法
模块参数:ZeroCross |
类型:字符向量 |
值: 'on' | 'off' |
默认值:'on' |
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 VHDL、Verilog 和 SystemVerilog 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
此模块具有一个默认 HDL 架构。
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线不会重新分发这些寄存器。默认值为 |
InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线和受限输出流水线可以移动这些寄存器。默认值为 |
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)