LIBRARY
DiscreteIntegrator ​
Outputs y = k * integral(u) dt, discretized according to one of three methods:
method = DiscretizationMethod.Forward: Corresponding to the transfer function method = DiscretizationMethod.Backward(default): Corresponding to the transfer function method = DiscretizationMethod.Trapezoidal: Corresponding to the transfer function Â
where
Structural parameters: ​
method: Discretization methodTs: Sample time (defaults toSampleTime())
Parameters: ​
k: Gain of integrator
Connectors: ​
u: Input signaly: Output signal
Usage ​
DiscreteComponents.DiscreteIntegrator(k=1)
Parameters: ​
| Name | Description | Units | Default value |
|---|---|---|---|
method | Discretization method | – | Discretizat....Backward() |
Ts | – | SampleTime() | |
initialization | – | DiscreteCom...t(; y0=0.0) | |
k | Gain | – | 1 |
Connectors ​
u- This connector represents a real signal as an input to a component (RealInput)y- This connector represents a real signal as an output from a component (RealOutput)
Variables ​
| Name | Description | Units |
|---|---|---|
x | State of integrator | – |
Behavior ​
Source ​
dyad
"""
Outputs `y = k * integral(u) dt`, discretized according to one of three methods:
- `method = DiscretizationMethod.Forward`: Corresponding to the transfer function ``T_s / (z - 1)``
- `method = DiscretizationMethod.Backward` (default): Corresponding to the transfer function ``T_s z / (z - 1)``
- `method = DiscretizationMethod.Trapezoidal`: Corresponding to the transfer function ``(T_s / 2) (z + 1) / (z - 1)``
where ``T_s`` is the sample time of the integrator.
# Structural parameters:
- `method`: Discretization method
- `Ts`: Sample time (defaults to `SampleTime()`)
# Parameters:
- `k`: Gain of integrator
# Connectors:
- `u`: Input signal
- `y`: Output signal
"""
component DiscreteIntegrator@[input clk extends Discrete]
"Input signal"
u = RealInput@[clk]() {
"Dyad": {
"placement": {
"diagram": {"iconName": "default", "x1": -50, "y1": 450, "x2": 50, "y2": 550, "rot": 0}
},
"tags": []
}
}
"Output signal"
y = RealOutput@[clk]() {
"Dyad": {
"placement": {
"diagram": {"iconName": "default", "x1": 960, "y1": 450, "x2": 1060, "y2": 550, "rot": 0}
},
"tags": []
}
}
"Discretization method"
structural parameter method::DiscretizationMethod = DiscretizationMethod.Backward()
structural parameter Ts::Real = SampleTime()
"Gain"
parameter k::Real = 1
structural parameter initialization::InitialCondition = DiscreteComponents.InitialCondition.InitialOutput(y0 = 0.0)
"State of integrator"
variable x::Real
relations
y = x
switch method
case Forward
initial u@(clk-1) = 0
x@clk = x@(clk-1) + k * Ts * u@(clk-1)
switch initialization
case InitialOutput
initial x@(clk-1) = initialization.y0
case SteadyState
initial x@(clk-1) = error("SteadyState initial condition is not supported for DiscreteIntegrator; use InitialOutput or InitialState")
case InitialState
initial x@(clk-1) = initialization.x0
end
case Backward
x@clk = x@(clk-1) + k * Ts * u@clk
switch initialization
case InitialOutput
initial x@(clk-1) = initialization.y0 - k * Ts * u@clk
case SteadyState
initial x@(clk-1) = error("SteadyState initial condition is not supported for DiscreteIntegrator; use InitialOutput or InitialState")
case InitialState
initial x@(clk-1) = initialization.x0
end
case Trapezoidal
initial u@(clk-1) = 0
x@clk = x@(clk-1) + k * Ts * (u@clk + u@(clk-1)) / 2
switch initialization
case InitialOutput
initial x@(clk-1) = initialization.y0 - k * Ts * u@clk / 2
case SteadyState
initial x@(clk-1) = error("SteadyState initial condition is not supported for DiscreteIntegrator; use InitialOutput or InitialState")
case InitialState
initial x@(clk-1) = initialization.x0
end
end
metadata {
"Dyad": {"icons": {"default": "dyad://DiscreteComponents/DiscreteIntegrator.svg"}}
}
endFlattened Source
dyad
"""
Outputs `y = k * integral(u) dt`, discretized according to one of three methods:
- `method = DiscretizationMethod.Forward`: Corresponding to the transfer function ``T_s / (z - 1)``
- `method = DiscretizationMethod.Backward` (default): Corresponding to the transfer function ``T_s z / (z - 1)``
- `method = DiscretizationMethod.Trapezoidal`: Corresponding to the transfer function ``(T_s / 2) (z + 1) / (z - 1)``
where ``T_s`` is the sample time of the integrator.
# Structural parameters:
- `method`: Discretization method
- `Ts`: Sample time (defaults to `SampleTime()`)
# Parameters:
- `k`: Gain of integrator
# Connectors:
- `u`: Input signal
- `y`: Output signal
"""
component DiscreteIntegrator
"Input signal"
u = RealInput@[clk]() {
"Dyad": {
"placement": {
"diagram": {"iconName": "default", "x1": -50, "y1": 450, "x2": 50, "y2": 550, "rot": 0}
},
"tags": []
}
}
"Output signal"
y = RealOutput@[clk]() {
"Dyad": {
"placement": {
"diagram": {"iconName": "default", "x1": 960, "y1": 450, "x2": 1060, "y2": 550, "rot": 0}
},
"tags": []
}
}
"Discretization method"
structural parameter method::DiscretizationMethod = DiscretizationMethod.Backward()
structural parameter Ts::Real = SampleTime()
"Gain"
parameter k::Real = 1
structural parameter initialization::InitialCondition = DiscreteComponents.InitialCondition.InitialOutput(y0 = 0.0)
"State of integrator"
variable x::Real
relations
y = x
switch method
case Forward
initial u@(clk-1) = 0
x@clk = x@(clk-1) + k * Ts * u@(clk-1)
switch initialization
case InitialOutput
initial x@(clk-1) = initialization.y0
case SteadyState
initial x@(clk-1) = error("SteadyState initial condition is not supported for DiscreteIntegrator; use InitialOutput or InitialState")
case InitialState
initial x@(clk-1) = initialization.x0
end
case Backward
x@clk = x@(clk-1) + k * Ts * u@clk
switch initialization
case InitialOutput
initial x@(clk-1) = initialization.y0 - k * Ts * u@clk
case SteadyState
initial x@(clk-1) = error("SteadyState initial condition is not supported for DiscreteIntegrator; use InitialOutput or InitialState")
case InitialState
initial x@(clk-1) = initialization.x0
end
case Trapezoidal
initial u@(clk-1) = 0
x@clk = x@(clk-1) + k * Ts * (u@clk + u@(clk-1)) / 2
switch initialization
case InitialOutput
initial x@(clk-1) = initialization.y0 - k * Ts * u@clk / 2
case SteadyState
initial x@(clk-1) = error("SteadyState initial condition is not supported for DiscreteIntegrator; use InitialOutput or InitialState")
case InitialState
initial x@(clk-1) = initialization.x0
end
end
metadata {
"Dyad": {"icons": {"default": "dyad://DiscreteComponents/DiscreteIntegrator.svg"}}
}
endTest Cases ​
No test cases defined.
Related ​
Examples
Experiments
Analyses
Tests