Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

Merge

将多个信号合并为一个信号

  • 库:
  • Simulink / Signal Routing

  • Merge block

说明

Merge 模块可将多个输入合并为单个输出。输出值始终等于其驱动模块最近计算的输出。通过设置 Number of inputs 参数指定输入的数量。

请将 Merge 模块用于将在不同时间更新的输入信号交叉成一个合并信号,交叉值在合并信号中保留其各自的身份和时间。要将同时更新的信号合并成数组或矩阵信号,请使用 Concatenate 模块。

Merge 模块的使用原则

使用 Merge 模块时,请遵循以下原则:

  • 始终使用条件执行子系统来驱动 Merge 模块。

  • 确保在任何时间步都最多只有一个驱动条件执行子系统在执行中。

  • 确保所有输入信号具有相同的采样时间。

  • 如果为 Model Configuration Parameters > Diagnostics > Underspecified initialization detection 参数使用默认设置 “Classic”,请不要为 Merge 模块的输入信号创建分支。

  • 对于驱动 Merge 模块的所有条件执行子系统 Outport 模块,请将 Output when disabled 参数设置为 “held”。

  • 如果 Model 模块的输出来自 MATLAB Function 模块或 Stateflow® 图,不要将该输出端口连接到 Merge 模块的输入端口。

对于 Merge 模块的每个输入,位于最顶层的非原子和非虚拟源必须为条件执行子系统,而且不能是迭代子系统。

下一个图显示了有效的 Merge 模块用法,它合并来自两个条件执行子系统的信号。

总线支持

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

  • 输入数目必须大于一。

  • Initial output 必须为零、非零标量或有限数值结构体。

  • 必须禁用 Allow unequal port widths

  • Merge 模块的所有输入都必须为总线且必须相同(所有元素的层次结构相同,并具有相同的名称和属性)。

Merge 模块的非虚拟总线输入中的所有信号必须具有相同的采样时间。您可以使用 Rate Transition 模块更改总线中单个信号或所有信号的采样时间。

合并 S-Function 输出

对于来自 S-Function 模块的信号,仅当用来存储 S-Function 模块输出的内存可重用时,才能使用 Merge 模块合并该信号。如果某个模型将不可重用的 S-Function 模块端口连接到 Merge 模块,则当您尝试更新或仿真模型时,Simulink® 软件将显示错误消息。请参阅 ssSetOutputPortOptimOpts

限制

  • 所有连接到 Merge 模块的信号在功能上都是同一信号。因此,这些信号必须满足一个给定信号最多只能有一个关联信号对象的限制条件。有关详细信息,请参阅 Simulink.Signal

  • 如果 Merge 模块的输入来自单一发起方,则不会对其执行运行时诊断。例如,单一发起方可以是一个执行连接到 Merge 模块的函数调用子系统的 Stateflow 图。

  • 禁用时,不要将要合并的多个条件执行子系统的输出端口设置为重置。此操作可能导致多个子系统同时更新该模块。尤其是,禁用的子系统通过重置其输出来更新 Merge 模块,而使能子系统通过计算其输出来更新该模块。

    为了防止此行为的发生,对于要合并的每个条件执行子系统,请将 Outport 模块参数 Output when disabled 设置为 “held”。

    注意

    如果要使用简化初始化模式,请将 Outport 模块参数 Output when disabled 设置为 “held”。

  • Merge 模块不接受其元素被重新排序或者只有部分元素被选中的输入信号。此外,也不要将已在条件执行子系统外部进行了合并的输入信号连接到模块。

可使用总线数组作为 Merge 模块的输入信号,但存在以下限制:

  • Allow unequal port widths - 清除此参数。

  • Initial condition - 可为此参数指定:

    • 0。在这种情况下,总线数组中的每个信号都使用初始值 0

    • 结构体数组,为总线数组中的每个信号指定初始条件。

    • 单个标量结构体,为总线类型定义的每个元素指定初始条件。使用此方法可为数组中的每条总线指定相同的初始条件。

端口

输入

全部展开

第一个输入信号与其他输入信号合并。

数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

n 个输入信号与其他输入信号合并。

数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

输出

全部展开

由输入信号合并而成的输出信号。

数据类型: single | double | half | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

参数

全部展开

指定要合并的输入信号的数量。该模块为每个输入信号创建一个端口。

编程用法

模块参数:Inputs
类型:字符向量
值:整数
默认值:'2'

指定输出信号的初始值。如果不指定初始输出值,初始输出将取决于初始化模式和驱动模块。

在简化初始化模式下,若未指定 Initial output 的值(空矩阵 []),模块将使用输出数据类型的默认初始值。有关默认初始值的信息,请参阅初始化信号值。在经典初始化模式下,若未指定 Initial output 的值(空矩阵 []),则模块的初始输出等于最近计算的驱动模块的初始输出。由于这些来源的初始化顺序可能不同,因此模型的仿真和代码生成的初始化可能不一致。

编程用法

模块参数:InitialOutput
类型:字符向量
值:标量 | 向量
默认值:'[ ]'

选中此复选框将允许模块接受具有不同元素数目的输入。模块还允许您为每个输入信号指定相对于输出信号开始时的偏移量。输出信号的宽度为

max(w1+o1, w2+o2, ... wn+on)

其中 w1, ... wn 是输入信号的宽度,o1, ... on 是输入信号的偏移量。

如果清除该复选框,Merge 模块只接受相同维度的输入,并输出与输入具有相同维度的信号。

编程用法

模块参数:AllowUnequalInputPortWidths
类型:字符向量
值:'off' | 'on'
默认值:'off'

输入向量以指定每个输入信号相对于输出信号开始时的偏移量。

编程用法

模块参数:InputPortOffsets
类型:字符向量
值:标量 | 向量
默认值:'[ ]'

模块特性

数据类型

Boolean | bus | double | enumerated | fixed point | half | integer | single | string

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。

在 R2006a 之前推出