Main Content

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

Delay

按固定或可变采样期间延迟输入信号

  • 库:
  • Simulink / Commonly Used Blocks

    Simulink / Discrete

    HDL Coder / Commonly Used Blocks

    HDL Coder / Discrete

  • Delay block

说明

Delay 模块会在一段延迟之后再输出模块的输入。此模块根据 Delay length 参数的值来确定延迟时间。此模块支持:

  • 可变延迟长度

  • 来自输入端口的初始条件的规范

  • 状态存储

  • 使用环形缓冲区而不是数组缓冲区来存储状态

  • 用外部重置信号重置初始条件的状态

  • 利用外部使能信号控制模块在每一时间步的执行

初始模块输出取决于几个因素,例如 Initial condition 参数和仿真开始时间等。有关详细信息,请参阅初始模块输出External reset 参数确定模块输出是否在触发时重置为初始条件。Show enable port 参数确定是否由外部使能信号控制每一时间步的模块执行。

初始模块输出

在仿真的前几个时间步的输出取决于模块的采样时间、延迟长度和仿真开始时间。此模块支持指定或继承离散采样时间,以确定采样之间的时间间隔。有关详细信息,请参阅指定采样时间

下表显示了 Delay 模块在采用以下设置时前几个时间步的输出。模块继承离散采样时间 [Tsampling,Toffset],其中 Tsampling 是采样期间,Toffset 是初始时间偏移量。nDelay length 参数的值,Tstart 是模型的仿真开始时间。

仿真时间范围模块输出

(Tstart)(Tstart + Toffset)

(Tstart + Toffset)(Tstart + Toffset + n * Tsampling)

Initial condition 参数

(Tstart + Toffset + n * Tsampling) 之后

输入信号

使用外部使能信号时的行为

选中 Show enable port 复选框将启用 Enable 端口。如果启用了使能端口,则该模块将按以下顺序运行:

  1. 检查是否满足使能条件。

  2. 如果启用了重置端口,将检查重置条件。

  3. 执行 Delay 模块功能。

该模块通过 Enable 端口执行以下操作:

  • 当出现第一个模块使能信号时,模块输出是初始条件值 (x0)。

  • 对于连续的使能信号,该模块取输入信号 u 的最后一个状态。

  • 如果端口在仿真开始时未启用,则 Delay 模块输出 0

  • 在仿真期间,如果端口在启用后变为禁用,则该模块不执行并保持其最后值。

可变大小支持

Delay 模块为可变大小信号提供下列支持:

  • 数据输入端口 u 接受可变大小信号。其他输入端口不接受可变大小信号。

  • 对于可变大小输入,输出端口与数据输入端口 u 具有相同的信号维度。

对可变大小信号应用的规则取决于 Delay 模块的输入处理模式。

输入处理模式对可变大小信号的支持规则
Elements as channels (sample based)
  • 信号维度仅在启用模块时的状态重置期间发生变化。

  • 初始条件必须为标量。

Columns as channels (frame based)
  • 不支持

总线支持

Delay 模块为总线信号提供下列支持:

  • 数据输入 u 接受虚拟和非虚拟总线信号。除了输入端口 x0,其他输入端口不接受总线信号。

  • 初始条件 x0 端口接受非虚拟总线信号。

  • 对于总线输入,输出端口与数据输入端口 u 具有相同的总线类型。

  • 总线使用:

    • 基于采样和基于帧的处理

    • 固定和可变延迟长度

    • 数组和环形缓冲区

要使用总线信号作为 Delay 模块的输入,请在对话框中或通过 x0 端口指定初始条件。对虚拟和非虚拟总线的支持取决于您指定的初始条件,以及 State name 参数是否为空。对于 x0 输入端口,仅支持非虚拟总线。

初始条件State Name
非空
支持虚拟和非虚拟总线仅支持非虚拟总线
非零标量支持虚拟和非虚拟总线不支持总线
非标量不支持总线不支持总线
结构体支持虚拟和非虚拟总线仅支持非虚拟总线
非完全结构体支持虚拟和非虚拟总线仅支持非虚拟总线

字符串支持

仅在以下情况下,Delay 模块才能接受和输出字符串数据类型:

  • 模块配置为采用 Initial condition 参数的默认值 (0)。

  • Delay length 值等于或小于 1。

端口

输入

全部展开

根据参数设置延迟的输入数据信号。

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

指定为从输入端口继承的延迟长度。当您对 Delay length:Source 参数选择 “Input port” 时启用。

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

使能信号,用于启用或禁用模块的执行。要创建此端口,请选择 Show enable port 参数。

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

将模块的执行重置为初始状态的外部信号。要创建此端口,请选择 External reset 参数。

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

指定为从输入端口继承的初始条件。当您对 Initial Condition:Source 参数选择 “Input port” 时启用。

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

输出

全部展开

输出信号,它是按参数 Delay length 指定的时间长度延迟后的输入信号。输出信号的初始值取决于几个条件。请参阅初始模块输出

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

参数

全部展开

Main

指定是直接在对话框中输入延迟长度(固定延迟),还是从输入端口继承(可变延迟)。

  • 如果将 Source 设置为 “Dialog”,请在 Value 下面的编辑框中输入延迟长度。

  • 如果将 Source 设置为 “Input port”,请验证上游信号为 d 输入端口提供了延迟长度。您还可以通过指定参数 Upper limit 来指定其最大值。

将标量延迟长度指定为非负实数整数。如果对话框中的值(固定延迟)超出范围或者为非整数,将返回错误。如果来自输入端口的值(可变延迟)超出范围,将被转换为位于范围之内的值。如果来自输入端口的值(可变延迟)为非整数,将截断为整数。

编程用法

模块参数DelayLengthSource
类型:字符向量
'Dialog' | 'Input port'
默认值'Dialog'
模块参数DelayLength
类型:字符向量
:标量
默认值'2'
模块参数DelayLengthUpperLimit
类型:字符向量
:标量
默认值'100'

指定是直接在对话框中输入初始条件,还是从输入端口继承初始条件。

  • 如果将 Source 设置为 “Dialog”,请在 Value 下面的编辑框中输入初始条件。

  • 如果将 Source 设置为 “Input port”,请验证上游信号为 x0 输入端口提供了初始条件。

Simulink® 使用舍入到最接近值运算和饱和处理,将 Initial condition 的数据类型脱机转换为输入信号 u 的数据类型。

注意

如果选中了 State Attributes 窗格上的 State name must resolve to Simulink signal object,模块会将信号对象的初始值复制到 Initial condition 参数中。但是,如果 Initial condition 的源是 “Input port”,模块将忽略信号对象的初始值。

编程用法

模块参数InitialConditionSource
类型:字符向量
'Dialog' | 'Input port'
默认值'Dialog'
模块参数InitialCondition
类型:字符向量
:标量
默认值'0.0'

指定模块是执行基于采样还是基于帧的处理:

  • Columns as channels (frame based)” - 将输入信号的每一列视为一个单独的通道(基于帧的处理)。

    注意

    基于帧的处理需要具有 DSP System Toolbox™ 许可证。

    有关详细信息,请参阅Sample- and Frame-Based Concepts (DSP System Toolbox)

  • Elements as channels (sample based)” - 将输入信号的每个元素视为一个单独的通道(基于采样的处理)。

可以使用 Input processing 指定模块是执行基于采样的处理还是基于帧的处理。对于输入 u,模块接受基于帧的信号。所有其他输入信号都必须基于采样。

输入信号 u输入处理模式模块是否支持?
基于采样基于采样
基于帧不,生成错误
基于采样基于帧
基于帧

有关这两种处理模式的详细信息,请参阅Sample- and Frame-Based Concepts (DSP System Toolbox)

编程用法

模块参数InputProcessing
类型:字符向量
'Columns as channels (frame based)' | 'Elements as channels (sample based)'
默认值'Elements as channels (sample based)'

选择在仿真和代码生成时使用环形缓冲区来存储状态。在其他情况下,则使用数组缓冲区来存储状态。

当延迟长度值很大时,使用环形缓冲区可以提高执行速度。对于数组缓冲区,复制操作的数量随着延迟长度的增加而增加。对于环形缓冲区,不管延迟长度如何增加,复制操作的数量保持不变。

如果符合下列任一条件,都应使用数组缓冲区来存储状态,因为环形缓冲区不会提高执行速度。

  • 对于基于采样的信号,延迟长度为 1。

  • 对于基于帧的信号,延迟长度不大于帧大小。

编程用法

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

对于 Input processing 模式,选择此项可将延迟长度从零增加到下限值。

  • 对于基于采样的信号,将最小延迟长度增加到 1。

  • 对于基于帧的信号,将最小延迟长度增加到帧的长度。

选中此复选框可防止从输入端口 u 到输出端口的直接馈通。但是,此复选框无法阻止从初始条件端口 x0 到输出端口的直接馈通。

依存关系

要启用此参数,请将 Delay length:Source 设置为 “Input port” 时,此复选框可用。

编程用法

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

选择此选项可删除用来检查超出范围的延迟长度的代码。

复选框结果何时使用

选中

生成的代码中未包含用来检查超出范围的延迟长度的条件语句。

提高代码效率

清除

生成的代码中包含检查超范围延迟长度的条件语句。

适用于安全性至关重要的应用领域

依存关系

要启用此参数,请将 Delay length:Source 设置为 “Input port” 时,此复选框可用。

编程用法

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

指定当输入 d 小于下限或大于 Delay length:Upper limit 时是否生成警告或错误。下限取决于 Prevent direct feedthrough 的设置。

  • 如果清除此复选框,则下限为零。

  • 如果选中此复选框,对于基于采样的信号,下限为 1;对于基于帧的信号,下限为帧的长度。

诊断选项包括:

  • None - Simulink 软件不执行任何操作。

  • Warning - Simulink 软件显示警告并继续进行仿真。

  • Error - Simulink 软件终止仿真并显示错误。

依存关系

要启用此参数,请将 Delay length:Source 设置为 “Input port” 时,此复选框可用。

编程用法

模块参数DiagnosticForDelayLength
类型:字符向量
'None' | 'Warning' | 'Error'
默认值'None'

此选项使用使能端口来控制此模块的执行。当此端口的输入非零时,模块被视为启用;当输入为 0 时,模块被视为禁用。输入的值在执行模块的同一时间步进行检查。

编程用法

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

指定用于将状态重置为初始条件的触发事件。

重置模式行为
None不重置。
Rising在上升边重置。
Falling在下降边重置。
Either在上升或下降边重置。
Level

在下列任一情况下重置:

  • 当重置信号在当前时间步为非零值时

  • 当重置信号值从上一时间步的非零更改为当前时间步的零时

Level hold当重置信号在当前时间步为非零值时重置

编程用法

模块参数ExternalReset
类型:字符向量
'None' | 'Rising' | 'Falling' | 'Either' | 'Level' | 'Level hold'
默认值'None'

指定采样时间间隔。要继承采样时间,请将此参数设置为 -1。此模块支持离散采样时间,但不支持连续采样时间。

编程用法

模块参数SampleTime
类型:字符向量
:实数标量
默认值'-1'

State Attributes

使用此参数为模块状态指定唯一名称。默认值为 ' '。如果此字段为空,则表示未指定任何名称。使用此参数时,请记住以下注意事项:

  • 有效的标识符以字母或下划线字符开始,后跟字母数字或下划线字符。

  • 状态名称仅适用于所选模块。

当您点击 Apply 时,此参数将启用 State name must resolve to Simulink signal object

有关详细信息,请参阅模型接口元素的 C 代码生成配置 (Simulink Coder)

编程用法

模块参数:StateName
类型:字符向量
值:唯一名称
默认值:''

选中此复选框会要求将状态名称解析为 Simulink 信号对象。

依存关系

要启用此参数,请为 State name 指定值。仅当将模型配置参数 Signal resolution 设置为除 “None” 以外的值时,才会显示此参数。

选中此复选框将禁用 Code generation storage class

编程用法

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

通过选择目标包定义的信号对象类,来选择自定义存储类包。例如,要应用来自内置包 mpt 的自定义存储类,请选择 “mpt.Signal”。除非您将基于 ERT 的代码生成目标与 Embedded Coder® 一起使用,否则自定义存储类不会影响生成的代码。

要使用除 Simulink 包之外的存储类包,您必须将该包加载到模型的 Embedded Coder 字典中。请参阅Load Storage Class Packages into Embedded Coder Dictionary (Embedded Coder)

有关使用存储类配置模型数据的信息,请参阅模型接口元素的 C 代码生成配置 (Embedded Coder)。有关自定义存储类的信息,请参阅Organize Data into Structures in Generated Code (Embedded Coder)

编程用法

模块参数:StateSignalObject
类型:字符向量
值:'Simulink.Signal' | '<StorageClass.PackageName>'
默认值:'Simulink.Signal'

选择用于代码生成的状态存储类。

使用 Signal object classSimulink 以外的包中选择自定义存储类。

依存关系

要启用此参数,请为 State name 指定值。

编程用法

模块参数:StateStorageClass
类型:字符向量
值:'Auto' | 'Model default' | 'ExportedGlobal' | 'ImportedExtern' | 'ImportedExternPointer' | 'Custom' | ...
默认值:'Auto'

模块特性

数据类型

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

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。

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

在 R2006a 之前推出