How can a system control multiple process variables (PVs ) with only one output (OP)?
A system can limit both values simultaneously. For example, the speed of a variable speed pump can be automatically adjusted to keep both the flow and pressure in its discharge line at, or below, limits for each. The operator enters setpoints for both – they both act as limits. If he or she enters 50 GPM and 150 PSIG, and valves downstream open to only demand 40 GPM, the pressure loop will control the pressure to 150 PSIG and the flow will drop to 40 GPM. But, if the downstream valves open to demand 60 GPM, the flow loop will take over to limit the flow to 50 GPM and the pressure will slump below 150 PSIG.
Dynamic OP Limits
If you just send the minimum of the two OPs to the speed reference and leave both PID OPs limited 0-100%, the OP of the loop not in control will rise to 100% – and when it’s time to swap which loop is actively limiting the pump speed, it will take a long time for the higher OP to come from 100% down to meet the other OP, resulting in a major overshoot.
To solve this, the higher OP should not be allowed to rise much above the lower OP. But, the higher OP must be allowed to rise a little bit above the lower because the proportional action of the loop not in control will act on signal noise to drive the speed down when it doesn’t need to go down.
These problems can both be avoided by setting the PID’s OP upper limits to a few % (2% is a good starting point, but it might need to be 1% or 5%) above the lower OP being sent to the process.
How can this scheme support a pump start or a transition from a lower idle to a higher operational output limit? There are at least four general schemes for a startup:
- The simplest approach is to let the system continue to run normally. When the pump stops, the loops will drive the output to its maximum. When the pump starts, it will be commanded to go full speed, then will back down as it approaches a limit. This is fine for systems where you want to quickly jump to the setpoint, can tolerate the inevitable overshoot, and are not concerned with water hammer.
- Leave the loops active, but program the system to reduce the normal output maximum (100% in these diagrams) to a lower value while the pump is off or idling, and then return it to 100% or an operator-selectable higher limit when the pump starts. If using this method, it is probably wise not to set that lower maximum to the exact same value as the minimum output – if you set both to zero, some PID blocks may alarm or even fault. Instead, leave 0.001% of “wiggle room” between the minimum and maximum.
- Similar to 2, except pick the starting output to produce a low but >zero flow, and hold it for a long enough time after the pump starts for the flow and pressure to stabilize. Then when you release the maximum output to its normal running value, the loops will raise the flow and pressure to the first limit reached under control.
- If the system will continue to run, but you want a lower flow and/or pressure limit for an idle phase, leave the output limits alone, program the system to adjust the setpoint of applicable loops, and let the loops reduce the output automatically.
You may also want to apply output rate increase limits. This is ideally done in the PID blocks to avoid overshoot, but the rate limit should be applied to the VFD if applicable regardless of whether it exists in the controller or not.
Comparison with Other Methods
There are other methods to achieve this control – one approach is to have one PID loop track the other until it should take over. That makes sense when you want the operator to decide which loop should be in control and when to switch to the other. But the scheme above is superior when you want to automatically limit all PVs all the time because:
- The logic is more simple and inherently bumpless. There is no switching, and no need to decide when to have an OP or SP track. In fact, there is no boolean logic at all. All the PID loops are active all the time.
- A system where one loop tracks the other will tend to overshoot on switch-over. In the above example, if the pressure loop were tracking the flow loop, you would switch when the pressure goes above its limit. You would then lose the ability to limit overshooting with proportional action. By contrast, with the system proposed here, if the pressure were to start to rapidly rise, the pressure loop’s OP would drop and take control before the pressure reached its limit and thereby minimize overshoot.
The simplest way to deal with OP tieback to the PID block is to not use that feature. If you have a system that requires its use, I recommend:
- Subtract the OP feedback (example – VFD actual speed or a valve position feedback) from the OP command (speed reference or position command to a valve) to calculate an OP-FB-Differential.
- For each PID loop, add the common OP-FB-Differential to that loop’s OP and send the result to that loop’s Tie back. This will result in the PID loop that is actually in control receiving the exact OP feedback as its tieback. The other loop(s) will have a tieback slightly above the true feedback – this will prevent it from “being upset” at the discrepancy caused by the Dynamic OP limit offset.
This general scheme can be used for many applications and has other variations. For example, you can use it to set lower instead of upper limits by taking the greater of two OPs and subtracting a few % for the lower limits.
You can limit three or more PVs simultaneously – the only requirement is that the OPs must all be limited in the same direction. To the above example, you could add another PID for suction pressure and take the minimum OP of all three PID loops. The flow and discharge pressure PID loops would be reverse acting, and the suction pressure PID loop would be direct acting – so you would have upper limits on flow and discharge pressure and a lower limit on suction pressure – all three would be able to slow down the pump to avoid exceeding the limit.
Finally, you can allow the operator to set the fixed maximum and/or minimum of the output – so instead of a hard 100% maximum pump speed, the operator could adjust it to 90%, and this would act as yet another limit to the system.
Multiple PVs can be controlled by automatically adjusting a single OP by taking the minimum or maximum OP from a PID loop for each PV. The OP of all loops must be dynamically limited near – but not exactly to – the value sent to the OP to limit both overshoot and ratcheting all PVs below their limits.
Contact the Author
If you have any comments or questions about the material, please do not hesitate to contact me through the comment section. I would love to hear your answers to the questions as well.