blockLimPID

P, PI, PD, and PID controller with limited output, anti-windup compensation and setpoint weighting

Extends from Modelica.Blocks.Interfaces.SVcontrol (Single-Variable continuous controller).

Information

This model is similar to Modelica.Blocks.Continuous.LimPID, except for the following changes:

  1. It can be configured to have a reverse action.

    If the parameter reverseAction=false (the default), then u_m < u_s increases the controller output, otherwise the controller output is decreased. Thus,

    • for a heating coil with a two-way valve, set reverseAction = false,
    • for a cooling coils with a two-way valve, set reverseAction = true.
  2. It can be configured to enable an input port that allows resetting the controller output. The controller output can be reset as follows:

    • If reset = IBPSA.Types.Reset.Disabled, which is the default, then the controller output is never reset.
    • If reset = IBPSA.Types.Reset.Parameter, then a boolean input signal trigger is enabled. Whenever the value of this input changes from false to true, the controller output is reset by setting y to the value of the parameter y_reset.
    • If reset = IBPSA.Types.Reset.Input, then a boolean input signal trigger is enabled. Whenever the value of this input changes from false to true, the controller output is reset by setting y to the value of the input signal y_reset_in.

    Note that this controller implements an integrator anti-windup. Therefore, for most applications, keeping the default setting of reset = IBPSA.Types.Reset.Disabled is sufficient. Examples where it may be beneficial to reset the controller output are situations where the equipment control input should continuously increase as the equipment is switched on, such as as a light dimmer that may slowly increase the luminance, or a variable speed drive of a motor that should continuously increase the speed.

  3. The parameter limitsAtInit has been removed.
  4. Some parameters assignments in the instances have been made final.

Parameters

TypeNameDefaultDescription
Modelica.Blocks.Types.SimpleControllercontrollerTypeModelica.Blocks.Types.SimpleController.PIDType of controller
Realk1Gain of controller
Modelica.SIunits.TimeTi0.5Time constant of Integrator block
Modelica.SIunits.TimeTd0.1Time constant of Derivative block
RealyMax1Upper limit of output
RealyMin0Lower limit of output
Realwp1Set-point weight for Proportional block (0..1)
Realwd0Set-point weight for Derivative block (0..1)
RealNi0.9Ni*Ti is time constant of anti-windup compensation
RealNd10The higher Nd, the more ideal the derivative block
BooleanreverseActionfalseSet to true for throttling the water flow rate through a cooling coil controller
Initialization
Modelica.Blocks.Types.InitPIDinitTypeModelica.Blocks.Types.InitPID.DoNotUse_InitialIntegratorStateType of initialization (1: no init, 2: steady state, 3: initial state, 4: initial output)
Realxi_start0Initial or guess value value for integrator output (= integrator state)
Realxd_start0Initial or guess value for state of derivative block
Realy_start0Initial value of output
Advanced
Booleanstricttrue= true, if strict limits with noEvent(..)
Integrator reset
IBPSA.Types.ResetresetIBPSA.Types.Reset.DisabledType of controller output reset
Realy_resetxi_startValue to which the controller output is reset if the boolean trigger has a rising edge, used if reset == IBPSA.Types.Reset.Parameter

Connectors

TypeNameDefaultDescription
RealInputu_s (from SVcontrol)Connector of setpoint input signal
RealInputu_m (from SVcontrol)Connector of measurement input signal
RealOutputy (from SVcontrol)Connector of actuator output signal
Modelica.Blocks.Interfaces.BooleanInputtriggerResets the controller output when trigger becomes true
Modelica.Blocks.Interfaces.RealInputy_reset_inInput signal for state to which integrator is reset, enabled if reset = IBPSA.Types.Reset.Input

Components

TypeNameDefaultDescription
RealcontrolErroru_s - u_mControl error (set point - measurement)
Modelica.Blocks.Math.AddaddPAdder for P gain
Modelica.Blocks.Math.AddaddDAdder for D gain
Modelica.Blocks.Math.GainPProportional term
Utilities.Math.IntegratorWithResetIIntegral term
Modelica.Blocks.Continuous.DerivativeDDerivative term
Modelica.Blocks.Math.Add3addPIDAdder for the gains

Revisions

  • September 29, 2016, by Michael Wetter:
    Refactored model.
  • August 25, 2016, by Michael Wetter:
    Removed parameter limitsAtInit because it was only propagated to the instance limiter, but this block no longer makes use of this parameter. This is a non-backward compatible change.
    Revised implemenentation, added comments, made some parameter in the instances final.
  • July 18, 2016, by Philipp Mehrfeld:
    Added integrator reset. This is for issue 494.
  • March 15, 2016, by Michael Wetter:
    Changed the default value to strict=true in order to avoid events when the controller saturates. This is for issue 433.
  • February 24, 2010, by Michael Wetter:
    First implementation.