PID Block behaves differently when Error(SP-PV) is positive & negative

I received this question in an email and wanted to post it for your guidance on what to look for to solve it... thanks.

Presently we are using DeltaV DCS for our xxxxxxx Plant. I came across a strange behavior for all PID blocks especially for level control PID blocks.

The controller behaves differently when the error(SP-PV) is positive & behave completely differently when the error is negative.

In short, for level loops, when the PV values goes below SP, the controller action is very aggressive, however, when the PV is above the SP, the controller behaves as required.

Do you have any idea why the controller behaves very aggressively when the error(SP-PV) is positive & behaves normal when the error is negative?

Is there any feature in the PID block we can activate to avoid this kind of behavior?

Thanks for your insights.

  • I ran into this when I added a level control loop outputting to a flow loop. The ARW_HI_LIM (anti-reset high limit) defaults to 100, but if the level control output is 0-1000 gpm, anything above 100 will kick in the ARW_HI_LIM and you will see a different response when the error is positive vs negative. So if your level loops output to another loop this is probably the problem.
     
  • In reply to bill brittain:

    The basic math of the DeltaV PID treats positive errors the same as negative errors, so the problem likely is in something else.
    Bill Brittain has a good suggestion since the original question cites level loops which often have a slave flow loop and therefore are configured with engineering units on the OUT_SCALE. I recommend setting ARW_HI_LIM = OUT_HI_LIM and ARW_LO_LIM = OUT_LO_LIM.
    Also, one possibility outside of the PID block is that setpoint rate limits in the AO block might have been set different for positive SP changes than for negative SP changes. The defaults are SP_RATE_UP = 0 and SP_RATE_DN = 0 which disables these ramp limits.
  • I agree with the comments by Mark Coughran and Bill Brittain. The most common cause is the incorrect setting of the ARW limits. Note that the ARW and OUT limits are in the EU's of the OUT_SCALE. Please let us know if and which suggestion fixes the problem.
  • In reply to James Beall:

    Bill, Mark, James, thank you for your responses and help! I did receive a note back that is was the anti-reset settings causing the problems.
  • In reply to Jim Cahill:

    Hi Jim,
    Thanks for confirming the actual cause. I have been monitoring the Emerson365 discussions and have found them to be informing and it is great to see the community coming together to solve common problems.

    Leo

  • Jim,
    To prevent confusion in the future, let’s refrain from calling ARW_HI_LIM “anti-reset-windup”.  The DeltaV PID already has anti-reset-windup protection, even when the ARW feature is disabled by setting ARW_HI_LIM = OUT_HI_LIM and ARW_LO_LIM = OUT_LO_LIM.  The ARW feature has a different purpose and a somewhat unfortunate name.
     
    Mark Coughran | Senior Process Control Consultant
    Emerson Automation Solutions |  1100 West Louis Henna Blvd. | Round Rock | Texas | 78681-7430 | USA 
    T +1 512-832-3884    M +1 512-423-8275  
     
     
  • In reply to Mark Coughran:

    I would like to know how to disable the feature.

    Also, i recall BOL referring to the parameter and its function as "anti-reset windup". So, I'd like to hear a further explanation as to what the different purpose would be... and how it's current functionality DOESN'T warrant the description it's been given.

    Thanks
  • In reply to TreyB:

    Good questions! Let me explain one way in which this feature might be useful. Consider non-smart, pneumatic positioners which can have imprecise calibration. Though you know the valve should be fully closed at 0% controller output and fully open at 100% controller output, it was common to under/over drive the output signal to make sure the valve was closed. For example the out limits might be set at -5% and 105%. However, considering the valve was PROBABLY closed at 0% and open at 100%, you could set the ARW_LO_LIMIT at 0% and the ARW_HI_LIM at 100%. Thus, when the controller output was below 0% but the controller wanted to increase the output above 0%, it would increase the output with an 16 X sped up integral action (reset time/16) until the output was above 0% ( the ARW_LO_LIMIT). You can apply the same concept to the ARW_HI_LIMIT and OUT_HI_LIMIT. However, modern smart positioners have a feature such that if the controller output (input to positioner) fall below a preset limit, say 0.5%, the positioner will remove all pressure to the actuator. A similar concept for the near 100% controller output applies. So, the ARW feature is really not needed for modern smart positioners.

    Another use is when the PROCESS can become saturated in a known way. An example might be the low flow anti-surge override controller. However, the new PIDPlus feature called "RECOVERY_FLTR" is a better solution.

    So, I agree, the ARW feature is rarely, if ever, needed any more. Even if you set the ARW limits to the corresponding limits to the OUT limits there is some action that takes place. In order to completely disable this feature, you must set the ARW limits OUTSIDE of the OUT limits. If you want to make sure it doesn't become active, you should set them to -10% and 110% of the OUT_SCALE range. On earlier version of DeltaV (before 12.3??), to do this on a running system you will have to set the OUT limits to -10% and 110% of the OUT_SCALE, then set the ARW limits to -10% and 110% of the OUT_SCALE, and then set the OUT limits back where you want them. In off-line configuration you can set ARW limits to -10% and 110% of the OUT_SCALE regardless of where the OUT limits are set. My colleague Matt Stoner pointed out that if you don't want to use the ARW feature, you probably want to set the ARW limits as wide as possible so that you don't have to change them if you later change the OUT limits.

    !!!!!!!!!!!!! Note that ARW limits and OUT limits are in EU's of the OUT_SCALE!!!!!!!!!!!!

    As my colleague Mark Coughran pointed out, Reset Windup (aka integral windup) is prevented in DeltaV through the use of the "BKCAL" feature. If the secondary (slave) loop in a cascade arrangement becomes limited (SP or OUT), the BKCAL_OUT from the downstream PID block will let the primary (master) PID know that it is limited and its integral action will stop. Similarly, in an override application, the Control Selector block will let the all of the master controllers know whether they are selected or not. If the PID is NOT selected, its integral action will be turned off.

    There is another feature that can additionally help avoid integral windup for the case where the secondary PID is not limited (yet) but its PV is not responding as fast as it normally does, is the FRSIPID_OPTS "Dynamic Reset Limiting" on the master loops combined with CONTROL_OPTS "Use PV for BKCAL_OUT" on the slave loop.

    Hope this helps! Let me know if there are other questions on this topic!