Switch
基于第二个输入的值在第一个输入和第三个输入之间切换输出

库:
Simulink /
Commonly Used Blocks
Simulink /
Signal Routing
HDL Coder /
Commonly Used Blocks
HDL Coder /
Signal Routing
描述
模块输入的类型
Switch 模块根据第二个输入的值,传递第一个输入或第三个输入。第一个和第三个输入称为数据输入。第二个输入称为控制输入。可以使用首个输入传递条件和阈值参数指定模块传递第一个输入的条件。
要立即将已知的输出数据类型反向传播到第一个和第三个输入端口,请将输出数据类型参数设置为继承:通过内部规则继承并选中要求所有数据端口输入具有相同的数据类型复选框。
数据输入的限制
如果您选择允许不同数据输入大小,则两个数据输入的大小可以不同。然而,此模块不支持可变大小输入信号。因此,在仿真期间,每个输入的大小无法更改。
如果 Switch 模块的数据输入是总线,两个总线的元素名称必须相同。使用相同的元素名称可以确保输出总线具有相同的元素名称,而不管模块选择了哪些输入总线。要确保您的模型满足此要求,请使用总线对象定义总线并将元素名称不匹配诊断设置为错误。有关详细信息,请参阅模型配置参数:连接诊断。
布尔控制输入的模块行为
当控制输入为 Boolean
信号时,可使用条件和阈值的以下组合之一:
u2 >= 阈值,其中阈值等于
1
u2 > 阈值,其中阈值等于
0
u2 ~=0
否则,Switch 模块忽略阈值,并使用布尔输入进行信号路由。如果控制输入为 1
,该模块传递第一个输入;如果控制输入为 0
,该模块传递第三个输入。在本例中,模块图标在编译时后会发生变化,并使用 T
和 F
分别标记第一个和第三个输入。
数据类型支持
控制输入可以是 Simulink® 支持的任何数据类型,包括定点和枚举类型。控制输入不能为复数。如果控制输入为枚举,阈值参数必须为相同枚举类型的值。
数据输入可以是 Simulink 支持的任何数据类型。如果有任一个数据输入为枚举类型,另一个必须为相同的枚举类型。
如果输出是枚举类型,则两个数据输入必须使用与输出相同的枚举类型。
有关详细信息,请参阅 Simulink 支持的数据类型。
端口
输入
Port_1 — 第一个数据输入信号
标量 | 向量
两个数据输入中的第一个。模块将第一个或第二个数据输入传播到输出。模块根据控制输入选择要传递的输入。使用首个输入传递条件和阈值参数指定控制输入传递第一个输入的条件。
数据类型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
| enumerated
| bus
| image
Port_2 — 控制输入信号
标量 | 向量
控制信号,模块用该信号来确定是将第一个还是第二个数据输入传递给输出。如果控制输入满足首个输入传递条件参数中设置的条件,则模块将传递第一个数据输入。否则,模块将传递第二个数据输入。
数据类型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
| enumerated
| bus
| image
Port_3 — 第二个数据输入信号
标量 | 向量
两个数据输入中的第二个。模块将第一个或第二个数据输入传播到输出。模块根据控制输入选择要传递的输入。使用首个输入传递条件和阈值参数指定控制输入传递第一个或第二个输入的条件。
数据类型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
| enumerated
| bus
| image
输出
Port_1 — 输出信号
标量 | 向量
根据控制信号值从第一个或第二个输入信号传播而来的输出信号。
数据类型: single
| double
| half
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| Boolean
| fixed point
| enumerated
| bus
| image
参数
常设
首个输入传递条件 — 传递第一个数据输入的条件
u2 > 阈值 (默认) | u2 >= 阈值 | u2~=0
选择模块传递第一个数据输入的条件。如果控制输入满足首个输入传递条件参数中设置的条件,模块将传递第一个输入。否则,模块将从输入 Port_3
传递第二个数据输入信号。
- u2 >= 阈值
检查控制输入是否大于或等于阈值。
- u2 > 阈值
检查控制输入是否大于阈值。
- u2~=0
检查控制输入是否非零。
注意
对于枚举数据类型,Switch 模块不支持 u2 ~= 0 模式。
提示
当控制输入为布尔信号时,可使用条件和阈值的以下组合之一:
u2 >= 阈值,其中阈值等于 1
u2 > 阈值,其中阈值等于 0
u2~=0
否则,Switch 模块将忽略阈值,并使用布尔值进行信号路由。如果值为 1,模块将传递第一个输入;如果值为 0,模块将传递第三个输入。MATLAB® 命令行窗口中也会显示描述此行为的警告消息。
编程用法
模块参数:Criteria |
类型:字符向量 |
值:'u2 >= Threshold' | 'u2 > Threshold' | 'u2 ~= 0' |
默认值:'u2 > Threshold' |
阈值 — 条件中使用的阈值
0
(默认) | scalar
指定首个输入传递条件中使用的阈值,该阈值用于确定模块将哪个输入传递给输出的条件。阈值必须大于输出最小值且小于输出最大值。
要指定非标量阈值,请使用括号。例如,以下输入是有效的:
[1 4 8 12]
[MyColors.Red, MyColors.Blue]
依存关系
将首个输入传递条件设置为 u2 ~= 0 将禁用此参数。
编程用法
模块参数:Threshold |
类型:字符向量 |
值:标量 |
默认值:'0'
|
启用过零检测 — 启用过零检测
on
(默认) | off
信号属性
数据类型助手可帮助您设置数据属性。要使用数据类型助手,请点击显示数据类型助手 。有关详细信息,请参阅使用数据类型助手指定数据类型。
要求所有数据端口输入具有相同的数据类型 — 要求数据端口具有相同的数据类型
off
(默认) | on
要求所有数据输入具有相同的数据类型。
编程用法
模块参数:InputSameDT |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
输出最小值 — 范围检查的最小输出值
[]
(默认) | 标量
Simulink 检查的输出范围的下限值。
Simulink 使用最小值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
注意
输出最小值不会饱和或剪切实际输出信号。请改用 Saturation 模块。
编程用法
模块参数:OutMin |
类型:字符向量 |
值:'[ ]' | 标量 |
默认值:'[ ]' |
输出最大值 — 范围检查的最大输出值
[]
(默认) | 标量
Simulink 检查的输出范围的上限值。
Simulink 使用最大值执行下列操作:
某些模块的参数范围检查(请参阅指定模块参数的最小值和最大值)。
定点数据类型的自动定标。
从模型生成的代码的优化。此优化可删除算法代码,并影响某些仿真模式(如 SIL 或外部模式)的结果。有关详细信息,请参阅Optimize using the specified minimum and maximum values (Embedded Coder)。
注意
输出最大值不会饱和或剪切实际输出信号。请改用 Saturation 模块。
编程用法
模块参数:OutMax |
类型:字符向量 |
值:'[ ]' | 标量 |
默认值:'[ ]' |
输出数据类型 — 输出数据类型
Inherit: Inherit via internal rule (默认) | Inherit: Inherit via back propagation | Inherit: Same as first input | double | single | half | int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | fixdt(1,16) | fixdt(1,16,0) | fixdt(1,16,2^0,0) | 字符串 | Enum: <class name> | <数据类型表达式> | Simulink.ImageType(480,640,3)
指定输出数据类型。
- Inherit: Inherit via internal rule
使用以下规则确定输出数据类型。
第一个输入端口的数据类型 输出数据类型 大于第三个输入端口的正数范围 从第一个输入端口继承 等于第三个输入端口的正数范围 从第三个输入端口继承 具有比第三个输入端口更小的正数范围 是布尔值,第三个输入端口是 uint8
是 uint8
,第三个输入端口是布尔值是布尔值,另一个是 int8
设置为布尔值 是 uint8
,另一个是布尔值两个输入端口的数据类型 输出数据类型 一个输入类型为布尔值,另一个是 uint8
设置为第三个数据端口的数据类型 一个输入是布尔值,另一个是 int8
设置为布尔值 - Inherit: Inherit via back propagation
使用驱动模块的数据类型。
- Inherit: Inherit same as first input
使用第一个数据输入端口的数据类型。
- double
指定输出数据类型为
double
。- single
指定输出数据类型为
single
。- half
指定输出数据类型为
half
。- int8
指定输出数据类型为
int8
。- uint8
指定输出数据类型为
uint8
。- int16
指定输出数据类型为
int16
。- uint16
指定输出数据类型为
uint16
。- int32
指定输出数据类型为
int32
。- uint32
指定输出数据类型为
uint32
。- int64
指定输出数据类型为
int64
。- uint64
指定输出数据类型为
uint64
。- fixdt(1,16,0)
指定输出数据类型为定点
fixdt(1,16,0)
。- fixdt(1,16,2^0,0)
指定输出数据类型为定点
fixdt(1,16,2^0,0)
。- Enum: <class name>
使用枚举数据类型,例如
Enum: BasicColors
。- Simulink.ImageType(480,640,3)
如果您有 Computer Vision Toolbox™,请使用
Simulink.ImageType
(Computer Vision Toolbox) 对象。- 字符串
指定输出数据类型为字符串。
- <数据类型表达式>
使用数据类型对象,例如 Simulink.NumericType。
提示
如果输出是枚举类型,则两个数据输入必须使用与输出相同的枚举类型。
编程用法
模块参数:OutDataTypeStr |
类型:字符向量 |
值:'Inherit: Inherit via internal rule | 'Inherit: Inherit via back propagation' | 'Inherit: Same as first input' | 'double' | 'single' | 'half' | 'int8' | 'uint8' | 'int16' | 'uint16' , 'int32' | 'uint32' | 'int64' | 'uint64' | 'fixdt(1,16)' | 'fixdt(1,16,0)' | 'fixdt(1,16,2^0,0)' | Enum: <class name> | Simulink.ImageType(480,640,3) | 'string' | '<data type expression>' |
默认值:'Inherit: Inherit via internal rule' |
锁定数据类型设置以防止被定点工具更改 — 防止定点工具覆盖数据类型
off
(默认) | on
选择此参数可防止定点工具覆盖您对此模块指定的数据类型。有关详细信息,请参阅Lock the Output Data Type Setting (Fixed-Point Designer)。
编程用法
模块参数:LockScale |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
整数舍入模式 — 指定定点运算的舍入模式
向下 (默认) | 向上 | 收敛 | 最邻近值 | 舍入 | 最简 | 零
选择下列舍入模式之一。
- 向上
将正值和负值朝正无穷方向舍入。等同于 MATLAB
ceil
函数。- 收敛
将数值舍入到最邻近的可表示值。如果出现结值,则舍入到最邻近的偶数整数。等同于 Fixed-Point Designer™
convergent
函数。- 向下
将正值和负值朝负无穷方向舍入。等同于 MATLAB
floor
函数。- 最邻近值
将数值舍入到最邻近的可表示值。如果出现结值,则朝正无穷方向舍入。等同于 Fixed-Point Designer
nearest
函数。- 舍入
将数值舍入到最邻近的可表示值。如果出现结值,则将正数朝正无穷方向舍入,将负数朝负无穷方向舍入。等同于 Fixed-Point Designer
round
函数。- 最简
自动选择是向负无穷大方向舍入还是向零舍入,以生成尽可能有效的舍入代码。
- 零
将数值向零舍入。等同于 MATLAB
fix
函数。
编程用法
模块参数:RndMeth |
类型:字符向量 |
值:'Ceiling' | 'Convergent' | 'Floor' | 'Nearest' | 'Round' | 'Simplest' | 'Zero' |
默认值:'Floor' |
另请参阅
有关详细信息,请参阅舍入 (Fixed-Point Designer)。
对整数溢出进行饱和处理 — 溢出操作的方法
off
(默认) | on
指定对溢出是进行饱和处理还是绕回处理。
off
- 溢出将绕回到数据类型可以表示的合适值。例如,数字 130 不适合一个有符号的 8 位整数,因此绕回 -126。
on
- 将溢出饱和处理为数据类型能够表示的最小值或最大值。例如,一个有符号的 8 位整数的溢出可以饱和处理为 -128 或 127。
提示
如果您的模型存在可能的溢出,而您希望在生成的代码中进行显式饱和保护,请考虑选中此复选框。
如果您希望优化生成的代码的效率,请考虑清除此复选框。
清除此复选框还可以帮助您避免过度地指定信号超出范围时的处理方式。有关详细信息,请参阅信号范围错误故障排除。
如果选中此复选框,饱和将应用于模块中的每个内部操作,而不仅仅应用于输出或结果。
一般情况下,代码生成进程可以检测到何时不可能发生溢出。在这种情况下,代码生成器不会生成饱和代码。
编程用法
模块参数:SaturateOnIntegerOverflow |
类型:字符向量 |
值:'off' | 'on' |
默认值:'off' |
允许不同数据输入大小 — 允许不同数据输入大小
off
(默认) | on
选中此复选框将允许输入信号具有不同大小。模块将输入信号大小传播到输出信号。如果两个数据输入都是可变大小信号,信号的最大大小可以相同,也可以不相同。
编程用法
模块参数:AllowDiffInputSizes
|
类型:字符向量 |
值:'on' | 'off' |
默认值:'off'
|
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
生成的代码在特定条件下依赖于 memcpy
或 memset
函数 (string.h)。
HDL 代码生成
使用 HDL Coder™ 为 FPGA 和 ASIC 设计生成 Verilog 代码和 VHDL 代码。
HDL Coder™ 提供影响 HDL 实现和综合逻辑的额外配置选项。
此模块具有一个默认 HDL 架构。
ConstrainedOutputPipeline | 通过移动设计中现有延迟的方式来放置在输出端的寄存器的数量。分布式流水线处理不会重新分发这些寄存器。默认值为 |
InputPipeline | 要在生成的代码中插入的输入流水线阶段数。分布式流水线处理和受限输出流水线处理可以移动这些寄存器。默认值为 |
OutputPipeline | 要在生成的代码中插入的输出流水线阶段数。分布式流水线处理和受限输出流水线处理可以移动这些寄存器。默认值为 |
此模块支持复信号的代码生成。
PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。
定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。
版本历史记录
在 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)