Skip to content
LIBRARY
DiscreteIntegrator.md

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 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

Usage ​

DiscreteComponents.DiscreteIntegrator(k=1)

Parameters: ​

NameDescriptionUnitsDefault value
methodDiscretization method–Discretizat....Backward()
Ts–SampleTime()
initialization–DiscreteCom...t(; y0=0.0)
kGain–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 ​

NameDescriptionUnits
xState 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"}}
}
end
Flattened 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"}}
}
end


Test Cases ​

No test cases defined.