Skip to content
LimPIDTest.md

LimPIDTest

Test bench for a limited PID controller connected to a plant model with step input.

This test component connects a limited PID controller to a plant model and applies a step input as setpoint and a constant feedforward signal. The PID controller includes derivative, integral, and proportional actions with anti-windup and output limitations. The system response can be observed through the plant output and controller signals.

Usage

LimPIDTest()

Behavior

[connect(signal+y(t),pid+us(t))connect(plant+y(t),pid+um(t))connect(pid+y(t),plant+u(t))connect(signalff+y(t),pid+uff(t))pid.u_s(t)=pid.add_p.u1(t)pid.u_s(t)=pid.add_i.u1(t)pid.u_s(t)=pid.add_d.u1(t)pid.u_m(t)=pid.add_p.u2(t)pid.u_m(t)=pid.add_i.u2(t)pid.u_m(t)=pid.add_d.u2(t)pid.u_ff(t)=pid.add_ff.u2(t)pid.y(t)=pid.limiter.y(t)connect(addp+y(t),proportional+u(t))connect(addd+y(t),derivative+u(t))connect(addi+y(t),integrator+u(t))connect(proportional+y(t),addpid+u1(t))connect(derivative+y(t),addpid+u2(t))connect(integrator+y(t),addpid+u3(t))connect(addpid+y(t),gainpid+u(t))connect(gainpid+y(t),addff+u1(t))connect(addff+y(t),addsat+u2(t))connect(addff+y(t),limiter+u(t))connect(limiter+y(t),addsat+u1(t))connect(addsat+y(t),gaintrack+u(t))connect(gaintrack+y(t),addi+u3(t))pid.add_p.y(t)=pid.add_p.k1pid.add_p.u1(t)+pid.add_p.k2pid.add_p.u2(t)pid.add_d.y(t)=pid.add_d.k1pid.add_d.u1(t)+pid.add_d.k2pid.add_d.u2(t)pid.add_i.y(t)=pid.add_i.k1pid.add_i.u1(t)+pid.add_i.k2pid.add_i.u2(t)+pid.add_i.k3pid.add_i.u3(t)pid.proportional.y(t)=pid.proportional.kpid.proportional.u(t)dpid.derivative.x(t)dt=pid.derivative.u(t)pid.derivative.x(t)pid.derivative.Tpid.derivative.y(t)=pid.derivative.k(pid.derivative.u(t)pid.derivative.x(t))pid.derivative.Tdpid.integrator.x(t)dt=pid.integrator.kpid.integrator.u(t)pid.integrator.y(t)=pid.integrator.x(t)pid.add_pid.y(t)=pid.add_pid.k1pid.add_pid.u1(t)+pid.add_pid.k2pid.add_pid.u2(t)+pid.add_pid.k3pid.add_pid.u3(t)pid.gain_pid.y(t)=pid.gain_pid.kpid.gain_pid.u(t)pid.add_ff.y(t)=pid.add_ff.k1pid.add_ff.u1(t)+pid.add_ff.k2pid.add_ff.u2(t)pid.limiter.y(t)=clamp(pid.limiter.u(t),pid.limiter.y_min,pid.limiter.y_max)pid.add_sat.y(t)=pid.add_sat.k1pid.add_sat.u1(t)+pid.add_sat.k2pid.add_sat.u2(t)pid.gain_track.y(t)=pid.gain_track.kpid.gain_track.u(t)dplant.x1(t)dt=plant.x2(t)dplant.x2(t)dt=plant.u(t)plant.x1(t)0.5plant.x2(t)plant.y(t)=0.5plant.x1(t)+plant.x2(t)signal.y(t)=ifelse(tsignal.start_time,signal.height+signal.offset,signal.offset)signal_ff.y(t)=signal_ff.k]

Source

# Test bench for a limited PID controller connected to a plant model with step input.
#
# This test component connects a limited PID controller to a plant model and applies a step input as
# setpoint and a constant feedforward signal. The PID controller includes derivative, integral, and
# proportional actions with anti-windup and output limitations. The system response can be observed
# through the plant output and controller signals.
test component LimPIDTest
  # Limited PID controller with configurable parameters
  pid = LimPID(Td = 0.1, Ti = 0.5, y_max = 1, y_min = -1, wp = 1, wd = 0, Nd = 10, Ni = 0.9, k_ff = 1)
  # Plant model to be controlled
  plant = Plant()
  # Step input signal used as setpoint for the controller
  signal = Step(height = 1)
  # Constant signal for feedforward control
  signal_ff = Constant(k = 1)
relations
  # Initial condition for the first state of the plant
  initial plant.x1 = 0
  # Initial condition for the plant output
  initial plant.y = 0
  # Connect step signal to controller setpoint input
  connect(signal.y, pid.u_s)
  # Connect plant output to controller measurement input
  connect(plant.y, pid.u_m)
  # Connect controller output to plant input
  connect(pid.y, plant.u)
  # Connect feedforward signal to controller feedforward input
  connect(pid.u_ff, signal_ff.y)
metadata {
  "Dyad": {"tests": {"case1": {"stop": 10, "expect": {"signals": ["plant.y", "pid.y"]}}}}
}
end
Flattened Source
# Test bench for a limited PID controller connected to a plant model with step input.
#
# This test component connects a limited PID controller to a plant model and applies a step input as
# setpoint and a constant feedforward signal. The PID controller includes derivative, integral, and
# proportional actions with anti-windup and output limitations. The system response can be observed
# through the plant output and controller signals.
test component LimPIDTest
  # Limited PID controller with configurable parameters
  pid = LimPID(Td = 0.1, Ti = 0.5, y_max = 1, y_min = -1, wp = 1, wd = 0, Nd = 10, Ni = 0.9, k_ff = 1)
  # Plant model to be controlled
  plant = Plant()
  # Step input signal used as setpoint for the controller
  signal = Step(height = 1)
  # Constant signal for feedforward control
  signal_ff = Constant(k = 1)
relations
  # Initial condition for the first state of the plant
  initial plant.x1 = 0
  # Initial condition for the plant output
  initial plant.y = 0
  # Connect step signal to controller setpoint input
  connect(signal.y, pid.u_s)
  # Connect plant output to controller measurement input
  connect(plant.y, pid.u_m)
  # Connect controller output to plant input
  connect(pid.y, plant.u)
  # Connect feedforward signal to controller feedforward input
  connect(pid.u_ff, signal_ff.y)
metadata {
  "Dyad": {"tests": {"case1": {"stop": 10, "expect": {"signals": ["plant.y", "pid.y"]}}}}
}
end


Test Cases

Test Case case1

julia
plt

julia
plt