Anti-reset-windup for a cascade control loop with 1 Master and multiple slaves

Hi,

I would like to ask how do you set up an anti-reset-windup mechanism for a cascade control loop with 1 master controller and multiple slave controllers.

The controller in question is a master level controller, with up to 10 slave flow controllers. The slave flow controllers to be in service are selected by the DCS panel operator depending on process needs (e.g. 5 out of 10 flow controllers are cascaded to the level controller). I could only find examples for anti-reset-windup for a simple 1-master, 1-slave cascade control (BKCAL_OUT from the slave PID controller needs to be connected to the BKCAL_IN of the master PID controller) and would like to know how this can be further extended to multiple slaves.

Thanks!

Yours sincerely,

Kerina

  • We have a Master Loop Controller and seven slave loops.  Please see below.  

  • In reply to Soap Chan:

    Thanks very much for sharing this example as a starting point. Will have a shot at it!
  • In reply to Soap Chan:

    I would also like to understand further on the usage of FRSIPID_OPTS Dynamic Reset Limit option on the master controller. Should this option always be enabled?
  • This feature is helpful in some situations as described in Books OnLine and various Emerson Exchange presentations, but also can have unintended consequences.  You should test this on a simulation to determine whether it behaves the way you desire.
  • In reply to Mark Coughran:

    Dynamic Reset Limiting is what many others refer to as external reset or external reset feedback. We assume all outer loops will use this in our implementations and only turn off if we really need to. You need to appropriately set the inner loop option to pass its PV vs its SP in the BKCAL. Books Online covers this. typical would be to pass back the inner loop PV, but not necessarily always.
  • Hola Kerina, I have the following questions to have a better understanding of what you are looking for:
    - What are you observing in the control strategy that is motivating the need for an external reset?
    - Are you observing variability in one or more flow controllers?
    - Did you tune each of the flow controllers individually? is there a big difference among the dead time reported for each of them?
    - Is there the possibility that some of these flow control loops are interacting with the rest?
  • In reply to Kerina Leong:

    The best article on dynamic reset limiting (more generally referred to as external reset) I've come across is this one by Greg Shinskey.

    This whitepaper briefly discusses DeltaV PID function block features, including the FRSIPID_OPTS "Dynamic Reset Limit" option. Last time I looked (a few versions ago) the associated BOL entries on weren't particularly informative.

    Dynamic Reset Limiting does away with the need for windup flags to “halt” integral action, instead utilising the error between output and BCKCAL to counteract integral action. I enable it by default (solve an analog problem with analog technique, not discrete logic) unless there is a good reason not to in a particular application.

  • In reply to Martin Rooke:

    Thanks for your reply! Your last statement is the clarification I need.
  • In reply to HECTOR H. TORRES:

    Based on the discussions, I surmise that the FRSIPID_OPTS "Dynamic Reset Limit" option is particularly useful in situations whereby the slave (or external) control loop has high variability (substantial error between PV and SP for reasons like poor tuning, unknown disturbances etc). Is my understanding correct? In my case, I have multiple slave flow controllers with VSD pumps as the manipulated variable and these pumps are very undersized. So we are always running 100% output on the pump VSD while the flow PV is still much lower than the remote SP given by the master level controller. If this is the case, is there a need to have this option enabled? Thanks!
  • In reply to Mark Coughran:

    Thanks! Because the DCS I am working with is for a new start-up plant, and it seemed that from the project basis, a conscious decision was made to to not enable this option by default. I suppose we will have to do some tests before making a decision.
  • In reply to Kerina Leong:

    Hola Kerina, in essence, the DRL option suspends the primary's integral action if it does not see a response from the secondary (at its BKCAL_IN). In some cascade arrangements, the secondary loop react slowly to the remote setpoint. The primary loop continues to integrate the error and continues driving its output more and more. This leads to process variability as the secondary cannot keep up with primary's expected response. The solution in DeltaV is to enable the DRL option at the primary and check the "USE PV for BKCAL_OUT" box at the secondary. In this way, the secondary reports the primary the response from previous control action. When the primary sees the secondary response has a delay, it suspends the integral action to avoid windup and over control.

    If you are seeing variability at the master, try to track it down to each individual flow controller. Identify that one or those ones contributing the most with variation and work on tuning. If you perform an individual tuning of each flow controller, record the dead time in each and determine which one exhibits the largest. I would use that one dead time to work with my DRL. Please refer to the following article that might help you. www.controlglobal.com/control-talk-column/article/33008913/emerson-automation-solutions-how-to-deal-with-dead-time-compensation-revelations
  • In reply to HECTOR H. TORRES:

    Thanks for the great help!
  • Great responses from everyone!  I'll add a couple of comments. The Dynamic Reset Limiting on the primary (upper) loop combined with "Use PV for BKCAL_OUT" on the secondary (lower) loop can also slow down (in addition to stopping) the integral action if the secondary loop if the secondary loops PV is lagging behind its SP.  This maintains the separation of response time between the primary and secondary loop. 

    I did some testing with the use of DRL with a splitter and two secondary PID's.  The DRL and Use PV for BKCAL_OUT does NOT work for this case! In the picture below, you can see the primary PID1/OUT kept moving. Note that with DRL, it also uses the Limited status of secondary loop to stop the integral action.  In the case splitters and multiple secondary loops, the limited status occurs only when all of the secondary loops are limited!  If the secondary loop is a fast responding loop, like a flow loop, the limited status will occur soon after its PV slows down or stops moving. Thus, the primary loop will not windup.

    Finally, be sure to properly set the ARW_HI_LIM and ARW_LO_LIM values. These values are in the engineering units and range of the OUT_SCALE and should be set to either the OUT HI and LO limits, to the OUT_SCALE limits, or possibly "outside" of the OUT HI and LO limits to turn off this feature.  NOTE that this parameter is misnamed and does not really function as Anti-Reset-Windup limits. See BOL for its action as it can be used for a different function.  

  • In reply to James Beall:

    Here is a bit more information on my statement above about the ARW settings.  Refer to the two screen prints below from Books On Line (BOL).  As noted in BOL, the ARW limits can be used to speed up the movement of the PID/OUT from the high out limited value "down" to the ARW_HI_OUT or  from the low out limited value "up" to the ARW_LO_OUT.  If the ARW limits are set "inside" one or both of the OUT limits, it functions as described in BOL.   In reality, the ARW function is comparing the value of the "internal OUT" which is not subject to the OUT limits in order to speed up the return from a OUT limited condition to a value within the OUT limits.  If the ARW limits equal the OUT limits, the described ARW function still works to accelerate the "internal OUT", which is not limited by the OUT limits, back to the OUT_LO_LIM or OUT_HI_LIM.  In order to totally disable this function, the ARW limits need to be set below the OUT_LO_LIM and above the OUT_HI_LIM (you might have to set this in Control Studio or DeltaV Explorer).  NOTE THAT THE ARW LIMITS USE THE SCALE (EU AND RANGE) OF THE PID/OUT_SCALE!

    As I said, in my opinion, ARW is a very misnamed parameter and function.  ARW doesn't prevent windup, it affects when the OUT comes off its high or low limit.  Anti-reset windup is prevented in DeltaV by the downstream device status (e.g high limited, constant, etc.) and/or the use of Dynamic Reset Limit.  One use of the ARW feature was when no positioner, or pneumatic positioner was used on the control valve.  We would often set the OUT_LO_LIM to a negative value such as -5%, the OUT_HI_LIM to a value over 100% such as 105%.  Then we would set the ARW limits to 0% and 100%.  We did this to try to make sure the PID/OUT could drive the valve fully closed or fully open but the OUT would return from -5% to 0% or 105% to 100% quickly to get back in the normal control range of 0-100%.  With modern smart positioners, this is not needed since most of them have a feature which when activated, drive the output of the positioner to zero or full pressure (as appropriate) when the input signal is close to 0% or 100%.

    There is a lot to this topic!  Reach out if you have more questions!

  • Hi, James,
     
    I want to know how to tuning the Cascade Master loop by Lambda method, for the Tuning Cascade PID, I need to tuning the slave loop first, It is easy to get it open loop characters(Kp, Kd, and Tau), but for the Master loop, how to test it’s open loop characters? In addition, You mentioned “the lambda can be chosen to ensure the slave loop of the cascade pair has a lambda 1/5 or less of the master control loop.” I want to know if I can based on I tested slave loop Lambda value,  then select 5 lambda value, but how to select an integral time for master loop?
     
    I will very appreciate if you can give me a hint.
     
    Best Regards