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.