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

signal.y(t)=pid.u_s(t)plant.y(t)=pid.u_m(t)pid.y(t)=plant.u(t)pid.u_ff(t)=signal_ff.y(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)pid.add_p.y(t)=pid.proportional.u(t)pid.add_d.y(t)=pid.derivative.u(t)pid.add_i.y(t)=pid.integrator.u(t)pid.proportional.y(t)=pid.add_pid.u1(t)pid.derivative.y(t)=pid.add_pid.u2(t)pid.integrator.y(t)=pid.add_pid.u3(t)pid.add_pid.y(t)=pid.gain_pid.u(t)pid.gain_pid.y(t)=pid.add_ff.u1(t)pid.add_ff.y(t)=pid.add_sat.u2(t)pid.add_ff.y(t)=pid.limiter.u(t)pid.limiter.y(t)=pid.add_sat.u1(t)pid.add_sat.y(t)=pid.gain_track.u(t)pid.gain_track.y(t)=pid.add_i.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

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