Main Content

Return past value of operand

`delay(u,tau)`

delay(u,tau, History = u0, MaximumDelay = taumax)

Use the `delay`

operator in the `equations`

section
to refer to past values of expressions:

`delay(u,tau)`

= `u(t-tau)`

The full syntax is:

`delay(u,tau, History = u0, MaximumDelay = taumax)`

The required operands are:

`u`

— The first operand is the Simscape™ expression being delayed. It can be any numerical expression that does not itself include`delay`

or`der`

operators.`tau`

— The second operand is the delay time. It must be a numerical expression with the unit of time. The value of`tau`

can change, but it must remain strictly positive throughout the simulation.

The optional operands may appear in any order. They are:

`History`

— The return value for the initial time interval (<=`t`

+`StartTime`

). The units of`tau`

`u`

and`u0`

must be commensurate. The default`u0`

is 0.`MaximumDelay`

— The maximum delay time.`taumax`

must be a constant or parametric expression with the unit of time. If you specify`MaximumDelay = taumax`

, a runtime error will be issued whenever`tau`

becomes greater than`taumax`

.**Note**You have to specify

`MaximumDelay`

if the delay time,`tau`

, is not a constant or parametric expression. If`tau`

is a constant or parametric expression, its value is used as the default for`MaximumDelay`

, that is,`taumax`

=`tau`

.

At any time * t*,

`delay(u,tau)`

returns
a value approximating `u`

`t`

`tau`

`tau`

`delay(u,tau, History = u0)`

is equivalent
to if t <= (StartTime + tau) return u0(t) else return u(t-tau) end

In other words, during the initial time interval, from the start
of simulation and until the specified delay time, `tau`

,
has elapsed, the `delay`

operator returns `u0`

(or
0, if `History`

is not specified). For simulation
times greater than `tau`

, the `delay`

operator
returns the past value of expression, * u*(

`t`

`tau`

**Note**

When simulating a model that contains blocks with delays, memory allocation for storing the data history is controlled by the

**Delay memory budget [kB]**parameter in the Solver Configuration block. If this budget is exceeded, simulation errors out. You can adjust this parameter value based on your available memory resources.For recommendation on how to linearize a model that contains blocks with delays, see Linearizing with Simulink Linearization Blocks.

This example shows implementation for a simple dynamic system:

$$\begin{array}{l}\dot{x}=-x\left(t-1\right)\\ x\left(t<0\right)=1\end{array}$$

The Simscape file looks as follows:

component MyDelaySystem parameters tau = {1.0,'s'}; end variables x = 1.0; end equations x.der == -delay( x,tau,History = 1.0 )*{ 1, '1/s' }; % x' = - x(t - 1) end end

`MaximumDelay`

is not required because `tau`

is
constant.

The `{ 1, '1/s' }`

multiplication factor is
used to reconcile the units of expression and its time derivative.
See `der`

reference page for more
information.

For other examples of using the `delay`

operator, see source for the PS
Constant Delay and PS Variable Delay blocks in the Simscape Foundation library (open the block dialog box and click the **Source
code** link).

The Variable Transport Delay example
shows how you can model a variable transport delay using the `delay`

operator. To see the implementation details, open the example model, look under mask of the
Transport Delay subsystem, then right-click the Variable Transport Delay block and select
**Simscape** > **View source code**.