Main Content

Variable Time Delay

按可变时间量延迟输入

  • Variable Time Delay block

库:
Simulink / Continuous

描述

Variable Transport DelayVariable Time Delay 模块在 Simulink® 模块库中显示为两个模块。但它们是同一个 Simulink 模块,只是选择延迟类型参数的设置不同。使用此参数可以指定模块的运行模式。

可变时滞

在此模式中,模块具有数据输入、时滞输入和数据输出。(有关各种模块方向的端口顺序的描述,请参阅标识旋转或翻转模块上的端口位置。)当前时间步的输出等于上一个时间步的数据输入值。此时间步等于当前仿真时间减去由时滞输入指定的延迟时间。

y(t)=u(tt0)=u(tτ(t))

在仿真过程中,模块将时间和输入值对存储在内部缓冲区。仿真开始时,模块会输出初始输出参数的值,直到仿真时间超过时滞输入。然后,在每个仿真步,模块会在相当于当前仿真时间减去延迟时间的时间输出信号。

如果您需要两个存储输入时间之间的某个时间的输出,且求解器是连续求解器,模块将在各点之间进行线性插值。如果时滞小于步长,模块将根据上一个点外插输出点。例如,假定一个定步长仿真的步长为 1,当前时间为 t = 5。如果延迟为 0.5,则模块必须在 t = 4.5 时生成点,但最新存储的时间值为 t = 4。那么,模块将根据 t = 4 时的输入外插 t = 4.5 时的输入,并将外插值作为 t = 5 时的输出。

根据上一个时间步向前外插产生的结果没有根据当前时间步向后外插产生的结果准确。但是,模块无法使用当前输入计算其输出值,因为输入端口没有直接馈通。

如果模型指定了离散求解器,模块将不会在时间步之间插值。相反,它将返回所需值前面的那个最近存储值。

可变传输延迟

在此模式中,当前时间步的模块输出等于之前的时间步(等于当前时间减去传输延迟)的数据(顶部或左侧)输入的值。

y(t)=u(ttd(t))

Simulink 软件通过解析下列方程来计算传输延迟 td(t)

ttd(t)t1ti(τ)dτ=1

此方程涉及到一个瞬时时滞 ti(t),由时滞(底部或右侧)输入指定。

假设您要使用此模块为管道内流速随时间改变的流体建模。在本例中,模块的时滞输入为

ti(t)=Lvi(t)

其中 L 代表管道长度,vi(t) 代表流速。

端口

输入

全部展开

输入信号,指定为标量、向量或矩阵。

当您选中处理零延迟参数时,此端口有直接馈通。当您选择线性化期间直接馈通输入参数时,此端口在配平和线性化操作期间有直接馈通。

数据类型: double

指定为标量、向量或矩阵的时滞输入。当模块处于可变时滞模式时,此值指定时滞。有关该计算的详细信息,请参阅可变时滞

此端口具有直接馈通。

依存关系

要启用此端口,请将选择延迟类型设置为可变时滞

数据类型: double

指定为标量、向量或矩阵的瞬时时滞输入。当模块处于可变传输延迟模式时,此值用于计算传输延迟。有关该计算的详细信息,请参阅可变传输延迟

此端口具有直接馈通。

依存关系

要启用此端口,请将选择延迟类型设置为可变传输延迟

数据类型: double

输出

全部展开

输出信号,指定为标量、向量或矩阵。

数据类型: double

参数

全部展开

将延迟类型指定为可变时滞可变传输延迟

此参数的默认值取决于模块实现:对于 Variable Time Delay 模块,默认值为可变时滞,对于 Variable Transport Delay 模块,默认值为可变传输延迟

依存关系

  • 将此参数设置为可变时滞将启用处理零延迟参数。

  • 将此参数设置为可变传输延迟将启用绝对容差状态名称参数。

编程用法

模块参数:VariableDelayType
类型:字符向量、字符串
'Variable transport delay' | 'Variable time delay'

设置时滞输入的最大值。此值定义此模块允许的最大时滞输入。模块会截减超过此值的任何延迟量。此值不能为负数。如果时滞变为负数,模块会将其截减为零并发出警告消息。

编程用法

模块参数:MaximumDelay
类型:字符向量、字符串
:标量 | 向量
默认值:'10'

指定模块在仿真时间首次超过输入的时滞量之前生成的输出。

依存关系

  • 此模块的初始输出不能为 infNaN

  • 不能在仿真运行时更改运行到运行可调参数。但是,在仿真开始之前更改此参数不会使得加速或快速加速重新生成代码。

编程用法

模块参数:InitialOutput
类型:字符向量、字符串
值:标量 | 向量
默认值:'0'

为要存储的输入点数定义初始内存分配。输入点定义了输入信号在当前仿真时间之前的历史记录。

  • 如果输入点数超出初始缓冲区大小,模块将分配更多内存。

  • 仿真结束后,如果缓冲区空间不足而必须分配更多内存,则会显示一条消息。

提示

  • 由于分配内存会降低仿真速度,因此如果仿真速度很重要,请谨慎选择此值。

  • 对于长时滞,此模块可能会占用大量内存,特别是对于维度化输入。

编程用法

模块参数:MaximumPoints
类型:字符向量、字符串
值:标量 | 向量
默认值:'1024'

选中此复选框将使用固定大小缓冲区保存来自之前时间步的输入数据。清除此复选框后,模块不使用固定大小缓冲区。

可通过初始缓冲区大小参数指定缓冲区大小。如果缓冲区已满,新数据将替换缓冲区中已有的数据。Simulink 软件使用线性外插来估算不在缓冲区内的输出值。

注意

即使您不选中此复选框,ERT 或 GRT 代码生成也使用固定大小缓冲区。

提示

  • 如果输入数据为线性,选中此复选框可节省内存。

  • 如果输入数据非线性,请勿选中此复选框。否则,生成的结果可能不准确。

编程用法

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

指定模块是否允许延迟值为 0

  • off - 该模块不允许零延迟。输入信号端口没有直接馈通。

  • on - 该模块允许零延迟。输入信号端口具有直接馈通。

依存关系

要启用此参数,请将选择延迟类型参数设置为可变时滞

编程用法

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

指定在配平或线性化操作期间是否对模块使用零延迟值。

提示

当您使用函数 linmoddlinmodtrim 时,选择此参数可能会导致模型中状态的顺序发生变化。要提取此新的状态顺序,请执行以下操作:

  1. 使用此命令编译模型,其中 model 是模型的名称。

        [sizes,x0,x_str] = model([],[],[],'lincompile'); 
  2. 使用下列命令终止编译。

      model([],[],[],'term'); 

    输出参量 x_str(在 Simulink 模型中为状态的元胞数组)包含新的状态顺序。当您将状态向量作为输入传递给 linmoddlinmodtrim 函数时,状态向量必须使用这种新的状态顺序。

编程用法

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

为线性化例程设置帕德逼近的阶。

  • 默认值为 0,将产生无动态状态的单位增益。

  • 将阶设置为正整数 n 将在模型中添加 n 个状态,但会产生更准确的传输延迟线性模型。

编程用法

模块参数:PadeOrder
类型:字符向量、字符串
值:标量
默认值:'0'

指定用于计算模块状态的绝对容差。

依存关系

要启用此参数,请将选择延迟类型设置为可变传输延迟

编程用法

模块参数:AbsoluteTolerance
类型:字符向量、字符串
值:'auto' | '-1' | 任何正实数标量或向量
默认值:'auto'

为每个状态分配唯一名称。如果此字段为空,则不会分配任何名称。

提示

  • 要为单个状态分配名称,请输入名称并用引号引起来,例如 'velocity'

  • 要为多个状态分配名称,请输入以逗号分隔的列表并用花括号括起来,例如 {'a', 'b', 'c'}。每个名称都必须是唯一的。

  • 状态名称只会应用于所选模块。

  • 状态数量必须能够被状态名称的数量均分。

  • 指定的名称数量可以少于状态数量,但不能多于状态数量。

    例如,可以在具有四个状态的系统中指定两个名称。第一个名称应用于前两个状态,第二个名称应用于后两个状态。

  • 要在 MATLAB® 工作区中分配带变量的状态名称,请输入不带引号的变量。变量可以是字符向量、字符串、元胞数组或结构体。

依存关系

要启用此参数,请将选择延迟类型设置为可变传输延迟

编程用法

模块参数:ContinuousStateAttributes
类型:字符向量、字符串
值:' ' | 用户定义字符向量、用户定义的字符串
默认值:' '

模块特性

数据类型

double

直接馈通

a, b

多维信号

可变大小信号

过零检测

a 此模块的端口具有不同的直接馈通特性。

b 此模块的直接馈通特性取决于模块参数值。

扩展功能

版本历史记录

在 R2007a 中推出