Multi-Section Compressor Controls with Controller Decoupling

Introduction

In a previously released functional specification entitled “Compressor Controls: Anti-Surge and Performance Controls”, Strategic Automation Services (SAS) described process controls for single-section centrifugal compressors.  The terms section and stage are often confused when discussing centrifugal compressors.  A stage is usually defined as one wheel in the compressor casing.  A section is defined as one or more stages having its own anti-surge controller with recycle valve and intercooler (or quench in the case of refrigeration compressors).

Figure 1 shows the difference between stages and sections.  The first section contains 4 stages, and the second section contains 3 stages.  The discharge from the first stage is cooled and split between a spillback line and the suction of the second stage.  Before entering the second stage, the suction is combined with the spillback from the second stage discharge.

The purpose of this document is to describe the controls required for a multi-section centrifugal compressor like the one in Figure 1.  The concept of controller decoupling is highlighted in this discussion.

Figure 1 Multi-Section Centrifugal Compressor
Figure 1 Multi-Section Centrifugal Compressor

Anti-Surge Controllers

Figure 1 shows two anti-surge controllers, one for each section.  The anti-surge controller for the first section (FC101) manipulates the first section spillback valve (FV101).  The anti-surge controller for the second section (FC102) manipulates the second section spillback valve (FV102).  When opened, the spillback valve increases flow through the compressor by recycling some of the high-pressure discharge back to the suction.

The anti-surge controller setpoints come from anti-surge control packages, as described in the functional specification “Compressor Controls: Anti-Surge and Performance Controls” on the SAS website.

Controller Interaction

Two controllers are said to interact when each controller’s output affects the input to the other controller.  In Figure 1, FV101 affects the flow input to FC102.  Also, FV102 affects the flow input to FC101.

For example, when FC101 opens FV101, the flow to the second section will decline, thus forcing FC102 to open FV102.  However, opening FV102 temporarily causes the flow to FC101 to decline which, in turn, forces FC101 to open FV101 even further.  The resulting negative flow deviations (i.e., measurement less than setpoint) can cause compressor surging.  Positive flow deviations are not nearly as threatening and can be tolerated to some degree.

Controller Decoupling

Decoupling logic has been developed to handle this control problem.  Anti-surge control action in an adjacent section must be immediately offset by adjustments to the spillback valve.

For example, when FV101 opens, FV102 must immediately open to prevent a deviation on FC102.  This action must occur even before the flow input to FC102 is affected.  Likewise, when FV102 opens, FV101 must immediately open to prevent a deviation on FC101.

Controller Decoupling Equations

Decoupling is implemented by adjusting the anti-surge controller BIAS parameter.  The equations are as follows:

Delas      =  Ksign * Kgain * (Deladj  –  Deldec)                                                        (1)

Bnew       =   Bprev  +  Delas                                                                                (2)

where:

Delas     =   Required change in anti-surge controller output.

Ksign       =   Decoupling control action sign (+1 for direct action / -1 for reverse action).

Kgain       =   Decoupling gain factor.

Deladj     =   Observed change in spillback valve position of adjacent section.

Deldec    =   Change in adjacent spillback valve position due to previous decoupling action from this anti-surge controller.

Bnew       =   New anti-surge controller BIAS value.

Bprev      =             Previous anti-surge controller BIAS value.

Decoupling Equation Details

Note that the required change in anti-surge controller output (Delas) is calculated by subtracting the previous decoupling action (Deldec) from the entire change in the adjacent section’s spillback valve position (Deladj).  The decoupling action must be applied only once.  After it is applied, it must not be applied again.  Otherwise, the valve will be walked up or down to its output limit, which of course is worse than applying no decoupling action.

FOXBORO I/A IMPLEMENTATION

Controller Decoupling Blocks

Figure 2 shows the block schematic for a typical multi-section compressor control application.  The application contains the following blocks (should be executed in this order):

  1. CALCA block for section 1 decoupling logic (DECOUP_AS1).
  2. PIDA block for section 1 anti-surge controller (FC101).
  3. CALCA block for section 2 decoupling logic (DECOUP_AS2).
  4. PIDA block for section 2 anti-surge controller (FC102).
Figure 2 Block Schematic for Controller Decoupling
Figure 2 Block Schematic for Controller Decoupling

Section 1 Decoupling Block DECOUP_AS1

DECOUP_AS1 is a CALCA block that performs decoupling control action by adjusting the section 1 spillback valve to offset section 2 anti-surge control action.  Decoupling action is inhibited (i.e., set to zero) under the following circumstances:

  1. section 2 anti-surge controller is in MAN or HOLD
  2. section 1 anti-surge controller is in MAN.

The following connections are required:

RI01   = :FC102.OUT
RI02   = :FC102.BIAS
RI03   = Incremental change from another block that is calculating decoupling or feedforward action to be applied to this spillback valve.  Lock to zero if not used.
BI01   = :FC102.HOLD
BI02   = :FC102.MA
BI03   = :FC101.MA
BI05   = Hold signal from another block.  Lock to zero if not used.
MA     = :DECOUP_AS1.MA.1  (lock to auto)

The block parameters must be set as follows:

PERIOD = Must run at same frequency as the anti-surge controller FC101.
RI05   = Maximum positive change to spillback valve position (% / execution).
RI06   = Maximum negative change to spillback valve position (% / execution).  Note: This value should be small compared to RI05 so that the spillback valve is not closed too rapidly.
RI07   = Decoupling gain factor (Kgain in equation 1).
BI04   = Decoupling off (0) / on (1).
TIMINI = 0 (trigger OSP when block is loaded).
M01    = 0.01 (Minimum BIAS change allowed).
M03    = -1.0
M18    = Decoupling control action sign (Ksign in equation 1).
M19    = 999999 (Maximum BIAS value).
M20    = OSP time (sec) for holding FC101 while its BIAS is being reset.

The block generates the following outputs:

RO01 = Connect to FC101 BIAS.
RO02 = Calculated change to FC101 BIAS.
RO03 = Previous value of FC101 OUT.
RO04 = Previous value of FC101 BIAS.
BO01 = Connect to FC101 HOLD.
BO02 = Re-initialize flag.
BO03 = Hold flag.

Section 1 Decoupling Block Steps

STEP01 = CLR BO03 ;HOLD
STEP02 = CLR RO02 ;DECOUP INCR
STEP03 = RBD RI01 ;DECOUP BAD
STEP04 = BIF 7
STEP05 = SET BO02 ;RE-INIT FLAG
STEP06 = GTO 41
STEP07 = BII 14
STEP08 = IN BO02 ;RE-INIT FLAG
STEP09 = BIT 36
STEP10 = IN RO01 ;CTL BIAS
STEP11 = ABS
STEP12 = SUB M19 ;MAX BIAS ALLOWED
STEP13 = BIN 17
STEP14 = CLR RO01 ;RESET BIAS
STEP15 = SET BO03 ;CTL HOLD
STEP16 = GTO 36
STEP17 = CST
STEP18 = AND ~BI01 BI02 ;NOT HOLD & AUTO
STEP19 = AND BI03 BI04 ;FBK AUTO & SWITCH ON
STEP20 = AND 2
STEP21 = BIF 36
STEP22 = SUB RI01 RO03 ;DECOUP OUT – PREV
STEP23 = SUB RI02 RO04 ;DECOUP BIAS – PREV
STEP24 = SUB
STEP25 = MUL M18 ;CONTROL ACTION
STEP26 = MUL RI07 ;GAIN
STEP27 = IN RI05 ;MAX POS CHANGE
STEP28 = MIN 2
STEP29 = MUL RI06 M03 ;MAX NEG CHANGE
STEP30 = MAX 2
STEP31 = OUT RO02 ;PENDING DECOUP ACT
STEP32 = ABS
STEP33 = SUB M01 ;TOLERANCE
STEP34 = BIP 36
STEP35 = CLR RO02
STEP36 = CLR BO02
STEP37 = IN RI01 ;DECOUP
STEP38 = OUT RO03 ;PREV
STEP39 = IN RI02 ;DECOUP BIAS
STEP40 = OUT RO04 ;PREV
STEP41 = ADD RO01 RO02 ;UPDATE BIAS
STEP42 = ADD RI03 ;DECOUP FM OTHER
STEP43 = OUT RO01 ;BIAS
STEP44 = IN BO03 ;HOLD
STEP45 = OSP M20
STEP46 = OR BI05 ;HOLD FM OTHER
STEP47 = OUT BO01 ;HOLD
STEP48 = SSI BO02 ;RE-INIT
STEP49 = NOP
STEP50 = END

Section 1 Decoupling Block Logic Details

Steps 1-2:  Initialize BO03 and RO02.

Steps 3-6:  Determine whether the decoupling input RI01 is bad.  If so, then set the re-initialize flag (BO02) and bypass the decoupling calculations by going to step 41.

Steps 7:  If this is the block initialization pass (BII), then go to step 14 where the BIAS is zeroed and the HOLD parameter is set.

Steps 8-9:  If the re-initialize flag (BO02) is on, then go to step 36.

Steps 10-16:  Check for the absolute value of the BIAS exceeding maximum (typically 999999).  If so, then set the PIDA controller’s HOLD on, set its BIAS to zero, and go to step 36.  The HOLD parameter prevents the controller from reacting to the sudden zeroing of its BIAS.

Steps 17-21:  Check to see if the decoupling calculations must be bypassed.  Bypassing is necessary when the decoupling controller is in hold (BI01=1), the decoupling controller is in manual (BI02=0), the PIDA controller is in manual (BI03=0), or the decoupling switch is off (BI04=0).  Go to step 36 to bypass the decoupling calculations.

Steps 22-35:  Perform the calculation shown in equation 1.  The result is then limited to the maximum positive change allowed (RI05) and the maximum negative change allowed (RI06), and then stored in RO02.  Set RO02 to zero if it does not exceed the minimum allowed change (M01).

Steps 36-40:  Store the current decoupling input to the previous value (RO03) for the next execution.  Also, store the decoupling controller’s BIAS to the previous value (RO04) for the next execution.

Steps 41-43:  Add the bias change to the current BIAS and add the contribution from other decoupling blocks (RI03).  Send the result to the PIDA controller’s BIAS parameter via RO01.

Steps 44-47:  If the hold flag (BO03) is on, then perform a one-shot pulse for M20 seconds.  Add the hold status from other decoupling blocks (BI05) and send the result to the PIDA controller’s HOLD parameter via BO01.

Steps 48-49:  If this is the block initialization pass (SII), then set the re-initialization flag (BO02) so that the next execution will perform initialization.

Section 1 Anti-Surge Block FC101

FC101 is a PIDA block that requires the following connections to support decoupling control:

BIAS = :DECOUP_AS1.RO01
HOLD = :DECOUP_AS1.BO01

The following parameters must be set accordingly:

HSCI2 = 999999
LSCI2 = -999999

Section 2 Decoupling Block DECOUP_AS2

DECOUP_AS2 is a CALCA block that performs decoupling control action by adjusting the section 2 spillback valve to offset section 1 anti-surge control action. This block is identical to DECOUP_AS1 except for the following connections:

RI01 = :FC101.OUT
RI02 = :FC101.BIAS
BI01 = :FC101.HOLD
BI02 = :FC101.MA
BI03 = :FC102.MA
MA = :DECOUP_AS2.MA.1 (lock to auto)

The block outputs are the same as DECOUP_AS1 except for the following:

RO01   = Connect to FC102 BIAS.
RO02   = Calculated change to FC102 BIAS.
RO03   = Previous value of FC102 OUT.
RO04   = Previous value of FC102 BIAS.
BO01   = Connect to FC102 HOLD.

Section 2 Decoupling Block Steps

The steps for block DECOUP_AS2 are identical to those for DECOUP_AS1.

Section 2 Anti-Surge Block FC102

FC102 is a PIDA block that requires the following connections to support decoupling control:

BIAS = :DECOUP_AS2.RO01
HOLD = :DECOUP_AS2.BO01

The following parameters must be set accordingly:

HSCI2 = 999999
LSCI2 = -999999