# Switch


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

库: Sysblock模块库 / SignalRouting

# 描述

Switch 模块根据第二个输入的值,传递第一个输入或第三个输入信号。第一个和第三个输入是数据输入。第二个输入是控制输入。可以使用首个输入传递条件阈值参数指定模块传递第一个输入的条件。

# 总线支持

Switch 模块支持总线。数据输入可以是满足下列限制条件的虚拟或非虚拟总线信号:

  • 所有总线必须相同(所有元素的层次结构相同并具有相同的名称和属性);
  • Switch 模块的非虚拟总线输入中的所有信号必须具有相同的采样时间。即使关联总线对象的元素指定了继承的采样时间,此要求也同样适用。

可使用总线数组作为 Switch 模块的输入信号。

# 限制

如果 Switch 模块的数据输入是总线,两个总线的元素名称必须相同。使用相同的元素名称可以确保输出总线具有相同的元素名称,而不管模块选择了哪些输入总线。要确保您的模型满足此要求,请使用总线对象定义总线并将元素名称不匹配诊断设置为“错误”。

# 示例

参考模型示例

# 示例说明

  • Step 模块:提供不同的步变信号作为 Switch 模块的输入信号;
  • Ramp 模块:提供线性增加的信号作为 Switch 模块的控制信号。控制信号的值决定了哪个输入信号被选择作为输出;
  • Switch 模块:根据控制信号选择两个输入信号中的一个作为输出。如果控制信号为 0,输出第一个输入信号;如果控制信号为 1,输出第二个输入信号;
  • Scope 模块:用于显示模型的输出结果,即根据控制信号选择的输入信号。

# 端口

# 输入

u1 — 第一个数据输入信号
标量 | 向量

两个数据输入中的第一个。模块将第一个或第二个数据输入传播到输出。模块根据控制输入选择要传递的输入。使用首个输入传递条件阈值参数指定控制输入传递第一个输入的条件。

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | boolean | fixedPoint | enum | bus

u2 — 控制输入信号
标量 | 向量

控制信号,模块用该信号来确定是将第一个还是第二个数据输入传递给输出。如果控制输入满足首个输入传递条件参数中设置的条件,则模块将传递第一个数据输入。否则,模块将传递第二个数据输入。

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | boolean | fixedPoint | enum

u3 — 第二个数据输入信号
标量 | 向量

两个数据输入中的第二个。模块将第一个或第二个数据输入传播到输出。模块根据控制输入选择要传递的输入。使用首个输入传递条件阈值参数指定控制输入传递第一个或第二个输入的条件。

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | boolean | fixedPoint | enum | bus

# 输出

y — 输出信号
标量 | 向量

根据控制信号值从第一个或第二个输入信号传播而来的输出信号。

数据类型: float | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | boolean | fixedPoint | enum | bus

# 参数

# 主要

首个输入传递条件 — 传递第一个数据输入的条件
“u2 > 阈值” (默认) | “u2 >= 阈值” | “u2~=0”

选择模块传递第一个数据输入的条件。如果控制输入满足首个输入传递条件参数中设置的条件,模块将传递第一个输入。否则,模块将从输入 Port_3 传递第二个数据输入信号。

  • “u2 >= 阈值”

    检查控制输入是否大于或等于阈值。

  • “u2 > 阈值”

    检查控制输入是否大于阈值。

  • “u2~=0”

    检查控制输入是否非零。

注意

对于枚举数据类型,Switch 模块不支持 “u2 ~= 0” 模式。

提示

当控制输入为布尔信号时,可使用条件和阈值的以下组合之一:

  • “u2 >= 阈值”,其中阈值等于 1;
  • “u2 > 阈值”,其中阈值等于 0;
  • “u2~=0”。

否则,Switch 模块将忽略阈值,并使用布尔值进行信号路由。如果值为 1,模块将传递第一个输入;如果值为 0,模块将传递第三个输入。

阈值 — 条件中使用的阈值
0 (默认) | scalar

指定首个输入传递条件中使用的阈值,该阈值用于确定模块将哪个输入传递给输出的条件。阈值必须大于输出最小值且小于输出最大值

依存关系:首个输入传递条件设置为 “u2 ~= 0” 将禁用此参数。

# 信号属性

单击显示数据类型帮助按钮 以显示数据类型帮助,帮助您设置数据类型属性。

输出数据类型 — 输出数据类型
“Inherit: internalRule” (默认) | “Inherit: backPropagation” | “Inherit: sameAsFirstInput” | “double” | “float” | “int8” | “uint8” | “int16” | “uint16” | “int32” | “uint32” | “boolean” | “fixdt(1,16,0)” | “fixdt(1,16,2^0,0)” | “fixdt(1,16,1.0,0,0.0)”

指定输出数据类型。

  • “Inherit: internalRule”

    使用以下规则确定输出数据类型。第一个输入端口的数据类型输出数据类型大于第三个输入端口的正数范围从第一个输入端口继承等于第三个输入端口的正数范围从第三个输入端口继承具有比第三个输入端口更小的正数范围是布尔值,第三个输入端口是 uint8是 uint8,第三个输入端口是布尔值是布尔值,另一个是 int8设置为布尔值是 uint8,另一个是布尔值两个输入端口的数据类型输出数据类型一个输入类型为布尔值,另一个是 uint8设置为第三个数据端口的数据类型一个输入是布尔值,另一个是 int8设置为布尔值。

  • “Inherit: backPropagation”

    使用驱动模块的数据类型。

  • “Inherit: sameAsFirstInput”

    使用第一个数据输入端口的数据类型。

  • “double”

    指定输出数据类型为 double。

  • “float”

    指定输出数据类型为 float。

  • “half”

    指定输出数据类型为 half。

  • “int8”

    指定输出数据类型为 int8。

  • “uint8”

    指定输出数据类型为 uint8。

  • “int16”

    指定输出数据类型为 int16。

  • “uint16”

    指定输出数据类型为 uint16。

  • “int32”

    指定输出数据类型为 int32。

  • “uint32”

  • “boolean”

    指定输出数据类型为 boolean。

  • “fixdt(1,16,0)”

    指定输出数据类型为定点 fixdt(1,16,0)。

  • “fixdt(1,16,2^0,0)”

    指定输出数据类型为定点 fixdt(1,16,2^0,0)。

  • “fixdt(1,16,1.0,0,0.0)”

    指定输出数据类型为定点 fixdt(1,16,1.0,0,0.0)。

允许不同数据输入大小 — 允许不同数据输入大小
off (默认) | on

选中此复选框将允许输入信号具有不同大小。模块将输入信号大小传播到输出信号。如果两个数据输入都是可变大小信号,信号的最大大小可以相同,也可以不相同。

# 版本历史记录

  • 在 2024b 之前推出

# 限制信息

  1. 暂不支持启动过零检测的功能;
  2. 暂不支持要求所有数据端口输入具有相同的数据类型的复选框;
  3. 暂不支持设定输出的最大、最小值;
  4. 暂不支持设定为 int64、uint64、Enum: <class name>、字符串和 <data type expression> 的输出数据类型;
  5. 暂不支持锁定数据类型设置以防止被定点工具更改的复选框;
  6. 暂不支持设定整数舍入模式的功能;
  7. 暂不支持对整数溢出进行饱和处理的复选框;
  8. 控制信号暂不支持 half、int64、uint64、bus 和 image 的数据类型,输入和输出信号暂不支持 half、int64、uint64 和 imag 的数据类型。

# 另请参阅

MultiportSwitch