多端口开关
根据控制信号选择输出信号。
类型: MultiPortSwitch
多端口开关 图书馆中的路径:
|
|
索引向量 图书馆中的路径:
|
说明
多端口开关 程序块根据第一个输入端的信号值,决定该程序块的几个输入端中的哪一个进入输出端。第一个输入称为控制输入,其他输入称为数据输入。控制输入的值决定了哪些输入数据会被传递到输出端。
下表显示了程序块如何解释控制信号并决定将哪个输入信号传递到输出端。
控制输入.2+h |
四舍五入.2+h |
设置数据端口编号2+h |
块在模拟期间的行为 |
数据输入选择的索引 |
---|---|---|---|---|
超出范围条件 |
整数值 |
无 |
基于零的连续编号 |
|
从零开始编号 |
控制输入端的信号小于 "0 "或大于数据输入端的数量减一。 |
基于一的连续编号 |
||
从一开始编号 |
控制输入端的信号小于 "1 "或大于数据输入端的数量。 |
指定索引"。 |
||
用户自定义编号 |
控制输入端的信号与任何数据输入端的编号不匹配。 |
非整数值 |
设备通过四舍五入将数值截断为整数。 |
零基连续"。 |
从零开始编号 |
输入信号的四舍五入值小于 "0 "或大于数据输入数减一。 |
基于一的连续编号 |
||
从一开始编号 |
输入信号的四舍五入值小于`1`或大于数据输入数。 |
指定索引`。 |
配置为索引矢量模块的多端口开关
索引矢量*是一种特殊的程序块配置 *多端口开关 ,其中只指定一个数据输入,控制输入从零开始计数。程序块的输出是输入矢量的元素,其索引与控制输入相对应。例如,如果输入向量为"[18 15 17 10]",控制输入为 "3",那么编号为 "3"(从零开始)、等于 "10 "的向量元素将成为输出值。
要将 多端口开关 程序块配置为*索引矢量*程序块,请将*数据端口数*设为`1`,将*数据端口顺序*设为`零基连续`。
程序块如何处理超出范围的控制输入
如果控制信号是一个整数,且其值小于 typemax(Int)
,则如果它与任何数据输入值不匹配,就会超出范围。如果控制信号不是整数,其取整后的值与任何数据端口索引不匹配,则会被视为超出有效范围。在这两种情况下,程序块的行为取决于*默认情况下的数据端口*和*默认情况下的诊断*设置。
如果控制信号的值大于 typemax(Int) ,程序块会将输入值转换为整数。
|
模拟行为
以下行为仅适用于模型的模拟。
*默认情况下的数据端口*2+h |
默认情况下的诊断 |
No |
---|---|---|
Error |
无 |
|
错误 |
最后数据端口"。 |
使用最后输入的数据,不会出现警告或错误。 |
出现错误信息,模拟停止。 |
附加数据端口 |
使用标有 "*"的可选数据输入端口,不会出现警告或错误。 |
代码生成行为
以下行为适用于从模型生成代码。
*默认情况下的数据端口 *2+h |
*默认情况下的诊断 * |
无 |
---|---|---|
错误 |
最后数据端口"。 |
|
正在使用最后一个数据输入。 |
正在使用最后一个数据输入。 |
附加数据端口"。 |
定义程序块行为的规则
数据输入的数量由*数据端口数*参数指定。
-
如果将 数据端口数 设为 "1",程序块的行为将与程序块*选择器* 相同,而不是 多端口开关 。
-
如果将 数据端口数 设置为大于`1`,则程序块的行为与 多端口开关 相同。程序块输出代表一个输入信号,其编号与控制输入的值相对应。如果至少有一个输入信号是矢量,则程序块的输出也是矢量。在这种情况下,程序块将所有标量输入参数扩展为矢量。
-
如果所有输入信号都是标量,则输出信号也是标量。
假设和限制
-
如果程序块的输入信号是总线,它们在不同端口上的结构(名称、类型和尺寸)必须完全相同。为了确保无论程序块选择哪种输入总线,输出总线都具有相同的结构,禁止将总线与常规信号混用。
-
要使用总线,*数据端口数*必须至少为 2。
-
对于总线,控制信号必须是标量信号。
有关总线类型的更多信息,请参阅自定义总线类型。 |
港口
输入
端口_1 - 控制信号
标量 | 向量 | 矩阵
控制信号,用于决定哪个输入信号会被传送到输出端。
数据类型: Float16
, Float32
, Float64
, Int8
, Int16
, Int32
, Int64
, Int128
, UInt8
, UInt16
, UInt32
, UInt64
, UInt128
, Bool
, Fixed
1 - 第一个输入信号
scalar
| vector
| matrix
| bus
作为标量、矢量、矩阵、数组或总线输入的第一个数据。
-
如果所有输入信号都是标量,则输出信号也是标量。
-
如果至少一个输入信号是矢量,则程序块的输出也是矢量。在这种情况下,程序块将所有标量输入信号扩展为矢量。
依赖关系
要使用总线,数据端口数 的值必须≥ 2。
数据类型: Float16
, Float32
, Float64
, Int8
, Int16
, Int32
, Int64
, Int128
, UInt8
, UInt16
, UInt32
, UInt64
, UInt128
, Bool
, Fixed
2 - 第二个输入信号
scalar
| vector
| matrix
| bus
以标量、矢量、矩阵、数组或总线形式输入的第二个数据。
-
如果所有输入信号都是标量,输出信号也是标量。
-
如果至少一个输入信号是矢量,则程序块的输出也是矢量。在这种情况下,程序块将所有标量输入信号扩展为矢量。
依赖关系
对于总线操作,*数据端口数*必须≥ 2。
数据类型: Float16
, Float32
, Float64
, Int8
, Int16
, Int32
, Int64
, Int128
, UInt8
, UInt16
, UInt32
, UInt64
, UInt128
, Bool
, Fixed
N - 第 n 个输入信号
scalar
| vector
| matrix
| bus
以标量、矢量、矩阵、数组或总线形式输入的第 N 个数据。
-
如果所有输入信号都是标量,输出信号也是标量。
-
如果至少一个输入信号是矢量,则程序块的输出也是矢量。在这种情况下,程序块将所有标量输入信号扩展为矢量。
依赖关系
对于总线操作,*数据端口数*必须≥ 2。
数据类型: Float16
, Float32
, Float64
, Int8
, Int16
, Int32
, Int64
, Int128
, UInt8
, UInt16
, UInt32
, UInt64
, UInt128
, Bool
, Fixed
* - 控制信号值超出范围的数据输入
scalar
| vector
| matrix
| bus
控制信号值超出范围的标量、矢量、矩阵、数组或总线的输入数据端口。
数据输入端的所有信号可以是 Engee 支持的任何数据类型。
依赖关系
要为超出范围的控制信号值创建额外的输入数据端口,请将*默认情况下的数据端口*参数设置为 "额外数据端口"。将*默认情况下的数据端口*参数设置为 "最后一个数据端口 "时,当控制信号值与任何数据端口索引不匹配时,程序块将使用最后一个数据端口进行输出。
对于总线操作,*数据端口数*的值必须≥ 2。
数据类型: Float16
, Float32
, Float64
, Int8
, Int16
, Int32
, Int64
, Int128
, UInt8
, UInt16
, UInt32
, UInt64
, UInt128
, Bool
, Fixed
参数
数据端口顺序 - 数据端口编号类型
基于一个的连续编号 | 基于零的连续编号 | 指定索引编号
指定数据端口编号类型。
-
基于零的连续"--程序块从零开始计算输入端口。这是 Index Vector 数据块的默认值。
-
基于一的连续"- 数据块从一开始计算输入端口。这是 多端口开关 数据块的默认值。
-
指定索引"--程序块对数据端口进行任意编号。
依赖关系
-
选择 "零基连续 "或 "单基连续 "可启用*数据端口数*参数。
-
选择 "指定索引 "包括*数据端口索引*参数。
块参数 |
|
价值观 |
|
默认值 |
|
数据端口数 - 数据输入端口数
1
| 3
| `从 1 到 65535 的整数
指定数据端口数。输入端口总数为您指定的数量,加上一个控制信号输入端口,如果将 * 默认情况下的数据端口* 设为 附加数据端口
,则再加上一个。
依赖关系
要使用该参数,请将*数据端口顺序*参数设置为 "零基连续 "或 "单基连续"。
块参数 |
|
价值观 |
`介于 1 和 65536 之间的整数 |
默认值 |
|
数据端口索引 - 数据端口索引数组
[1,2,3](默认)` | `索引数组
指定数据输入的索引数组。程序块图标将根据您指定的数据端口索引进行更改。
依赖关系
如果 数据端口顺序 设为 "指定索引",则该参数可用。
块参数 |
|
价值观 |
|
默认值 |
|
默认情况下的数据端口 - 控制信号值超出范围时的输入端口
最后数据端口(默认)` |`附加数据端口
指定在控制信号值超出范围时使用最后一个数据端口,还是使用一个可选端口。端口名称旁边的星号 (*) 表示当控制输入值与任何数据端口索引不匹配时,程序块使用的端口。
-
最后数据端口"- 当控制信号值与任何数据端口索引不匹配时,程序块使用最后数据端口进行输出。
-
附加数据端口` - 当控制信号值与任何数据端口索引不匹配时,程序块使用附加数据端口进行输出。
如果将此参数设置为 "附加数据端口",且 数据端口数 为 3,则程序块中的输入端口数为 5。第一个输入是控制端口,接下来的三个输入是数据端口,第五个输入是控制信号值超出范围时的默认端口。 |
块参数 |
|
值 |
|
默认值 |
|
默认情况下的诊断 - 诊断操作
错误(默认)
|`None
指定当控制端口值与任何数据端口索引不匹配时要采取的诊断操作。选项包括
-
None
- 系统不采取任何措施。 -
错误"- 模拟停止并显示错误。在这种情况下,默认情况下的数据端口 仅用于代码生成,不用于模拟。
块参数 |
|
价值观 |
|
默认值 |
|
信号属性
输出数据类型 - 输出数据类型
| Inherit: auto (default)
| Float64
| Float32
| Int8
| UInt8
| Int16
| UInt32
| UInt32
| Int64
| UInt64
| Int128
| UInt128
| Fixed-point
继承:自动(默认)。
指定输出数据类型。可以指定
-
继承:自动 "数据类型继承。
-
继承的数据类型,如
Float32
。 -
定点数据类型
Fixed-point
。
块参数 |
|
价值观 |
|
默认值 |
|
输出定点类型 - 定点输出数据类型
定点{Int16, 0} (默认)` |`定点数据类型描述
指定定点输出数据类型。
依赖关系
当*输出数据类型*中选择 "定点 "时,将显示此参数。
块参数 |
|
价值观 |
|
默认值 |
|
Integer rounding mode - 定点运算的舍入模式
下限(默认) | 上限 | 趋近 | 最近 | 圆形 | 零
选择定点运算的舍入模式。您可以选择
-
Floor` - 正数和负数都向下舍入(向负无穷)。
-
天花板"- 将正数和负数向上舍入(向正无穷舍入)。
-
收敛"- 将数字舍入到最接近的可表示值。如果数字的小数部分以 5 结尾,则将数字舍入为最接近的偶数整数。
-
最近"- 将数字舍入到最接近的可表示值。如果数字的小数部分以 5 结尾,则数字向上舍入(向正无穷)。
-
Round` - 将数字舍入到最接近的可表示值。如果数字的小数部分以 5 结尾,正数向上舍入(向正无穷),负数向下舍入(向负无穷)。
-
Zero
- 将数字舍入为零。
块参数总是四舍五入到最接近的可表示值。
块参数 |
|
价值观 |
|
默认值 |
|
整数溢出时饱和 - 整数溢出时饱和
已禁用(默认) | 已启用
选中该复选框时,将对整数和定点数使用饱和运算:发生溢出时,结果将自动替换为数据类型的最大可能(模)值。
操作 | 原理 | 对溢出的影响 | 示例 |
---|---|---|---|
已选中(启用)Saturate on integer overflow 复选框。 |
您的模型可能存在溢出,您希望生成的代码明确防止溢出。 |
当发生溢出时,结果将自动替换为数据类型可能的最大值(模)。 |
Int8(有符号 8 位整数)数据类型可表示的最大值是 127。 块操作的任何结果如果超过这个最大值,都会导致 8 位整数溢出。检查时,块输出饱和到 127。同样,在最小输出值为 -128 时,程序块输出也会饱和。 |
整数溢出时饱和*复选框未选中(禁用)。 |
您希望优化生成代码的效率。 您希望避免过度确定程序块如何处理超出范围的信号。 |
溢出将以数据类型所能表示的适当值承载。 |
Int8(有符号的 8 位整数)数据类型可表示的最大值为 127。 块操作的任何结果如果超过这个最大值,都会导致 8 位整数溢出。如果未选中复选框,软件会将导致溢出的值解释为 |
选择该复选框后,饱和将应用于程序块中的所有内部操作,而不仅仅是输入/输出数据或结果。
块参数 |
|
价值观 |
|
默认值 |
|
要求所有数据端口输入具有相同的数据类型 - 要求数据端口具有相同的数据类型
已禁用(默认) | 已启用
选择是否要求所有数据端口输入具有相同的数据类型。
块参数 |
|
价值观 |
|
默认值 |
|