Gap Control
Some control loops have two seemingly conflicting objectives of keeping the process variable under control, but also minimizing controller output movement. Although such a loop will have a set point, it is more important to keep its process variable within predefined bounds than to keep it exactly at set point. A typical application of gap control is averaging level control. (Averaging control is somewhat like surge tank control, but the process variable is controlled around its set point. True surge tank level control rarely controls around its set point.)
Controller manufacturers have designed a modification of the standard PID control algorithm for use on processes with these conflicting objectives. This modification is called gap control and it works on the principle of two user-definable control regions, one for each of the two control objective.
The first region is far from set point (outside the gap) and requires a strong control action to turn the process around and bring it back to set point. The normal controller settings are used outside the gap. The second region is close to set point (inside the gap) within which the controller detunes itself based on a configurable gain multiplier M (between 0.0 and 1.0). The detuning helps to minimize controller output movements.
Tuning a Gap Controller
To use gap control effectively, you should set the size of the gap around the set point according to the typical variation of the process variable so that the process variable does not frequently and unnecessarily venture outside the gap. Tune the controller for fast response outside the gap to provide quick recovery from disturbances. Use a gain multiplier (M) of 0.5 or less to minimize the controller output movement inside the gap.
For integrating processes divide the calculated integral time (Ti) by M (i.e. make the integral time longer in proportion to decreasing the controller gain). This is a requirement only for integrating processes and is done to ensure a stable integral term when the controller gain is reduced inside the gap. Do not use a gain multiplier of zero when controlling integrating processes because this dead band will cause the process variable to continuously cycle through the gap.
Gap control should not be used in control loops of which the objective is to keep the process variable as close to set point as possible. Use regular PI or PID control for those loops.
Stay tuned!
Jacques Smuts – Author of the book Process Control for Practitioners
Jacques, you recommend using gain multiplier of 0.5 or less. Is there any chance it will destablize the loop as PV crosses the gap limit? If so, is it higher risk of destabilizing the control loop with small Kgap? I want to use gap controller on a reactor and the normal OP range is between 20 and 25%. Currently, the feedforward control is doing a decent job handling disturbances but I want to minimize the CO movement during normal operation. I set gain multiplier to 0.7 and I do see improvement. I want to further reduce the CO movement but am concerned sudden change of K will destablize the loop or cause windup. Thank you in advance for your feedback.
JC: It depends a lot on the control system’s implementation of gap control. See this blog on bumpless tuning. If the control system causes a bump in controller output when the PV crosses over the edge of the gap it can cause major stability problems.
Your reference to OP makes me believe you have a Honeywell DCS. Take a look for the setting called “Legacy Gap”. When turned on, this setting changes the behavior to bumpless. The setting is not always visible on the controller faceplate (Loop Tune tab) so you may have to use Control Builder to access it.
Hi Jacques,
I have seen gap controller in Honeywell DCS. I have similar situation and I need to use 2 sets of PID tuning parameters for one of the level loop.
Can you please let me know, which PID block in Foxboro DCS can be used for this purpose?
Thanks in advance.
Mahesh: You should be able to change the tuning of a Foxboro PID control block directly with external scripts or function generators. I don’t believe you require a different PID block.