Re: [foxboro] Splitted range PID anti windup

I do something similar to this for split range heating/cooling water valves
for heat exchangers.  

I leave a little dead band (e.g., at 49-51% controller output, both valves
are shut) and use the AOUT BIAS and MSCALE parameters, too.  Use of the AOUT
parameters has two advantages over some of the other solutions expressed in
answer to this question:
1.  No need for extra PIDXE or CHARC blocks, so less processing load.
2.  The BCALCO from the AOUT block is already converted back to the
controller output units (taking the inverse of MSCALE and BIAS), so no need
to perform more arithmetic calculations.

Then, in a CALCA block, I combine the INITO and BCALCO outputs from the AOUT
block in such a way that if either INITO is true, then BO01 is true.  BO01
connects to the controller block INITI.  RO01 is the combined BCALCO and
uses the value from the valve whose INITO is true.  This means that for my
cooling/heating valves, if one is placed in manual and positioned, the
controller will track to the appropriate value for that valve position.  If
both are in MANUAL, I use logic in the CALCA block to pick the one that is
"controlling", which in my case means the one that is not closed.  RO01 is
connected to the FBK and BCALCI parameters on the PIDXE block. 

You can alter this logic to suit your application.  Sounds like the one
valve is expected to be in manual in your case, and might safely be ignored
for INITI and BCALCI connections.

Jim Mowrey
Maxis Automation

-----Original Message-----
From: foxboro-bounce@xxxxxxxxxxxxx [mailto:foxboro-bounce@xxxxxxxxxxxxx] On
Behalf Of Fletcher, Justin
Sent: Friday, December 24, 2004 5:23 AM
To: 'foxboro@xxxxxxxxxxxxx'
Subject: Re: [foxboro] Splitted range PID anti windup

The .FBK parameter, used for integral action, when not connected it defaults
to one of PIDXE.OUT/.BCALCI (as you know causing the windup) I suspect that
you have no connection to the BCALCI.  A more elegant method is to pass the
controller's (PIDXE) .FBK parameter the AOUT.BCALCO which it is currently
controlling and so removing all windup.  However, this requires some
detailed!!! CALCA block steps in the backward path of the AOUTs to the
PIDXE.


I've attached params of a working block - you can see the "...detailed CALCA
block steps" Hope your brain doesn't melt!  This was a PIDA block example
where the AOUT blocks A & B where used for the 0-50% 50-100% split using the
AOUT.MSCALE and .BIAS.  

The Final operation of the loop is simple, and has been designed to be such,
each valve AOUT block can be placed in manual at any time and the controller
(PIDA) will attempt to control via the AOUT block in 'AUTO'.  The controller
will track AOUT block A or B when both are available (e.g. not manual) and
within their controllable range. The valve which is selected for the PIDA
tracking is that which has been controllable for the longest period.
Therefore on bringing the second AOUT B block into AUTO will not cause a
bump to AOUT A while it continues to control, the rate at which AOUT B
reaches the PIDA.OUT value and enters the control scheme is based on the
.BTIME filter time constant of AOUT B.

PARAM   VALUE
DESCRP  PIDA BCALCI,FBK   AND INITI CALC
LOOPID  0783_SPLIT_RANGE_1
M03     1.0
MA      1
PERIOD  2
PHASE   1
STEP01  AND BI01 BI02 ; BOTH OUTS INITIALISING
STEP02  OUT BO01 ; GENERATE 'CALCA.INITO' OUTPUT
STEP03  AND BI04 BI06 ; OUT_A/B AT LOW LIMIT
STEP04  AND BI01 BI06 ; OUT_A MAN & OUT_B LOW LIM
STEP05  AND BI02 BI04 ; OUT_B MAN & OUT_A LOW LIM
STEP06  OR 3
STEP07  OUT BO02      ; 'CALCA.LOLIND' OUTPUT
STEP08  AND BI03 BI05 ; OUT_A/B AT HIGH LIMIT
STEP09  AND BI01 BI05 ; OUT_A MAN & OUT_B HI LIM
STEP10  AND BI02 BI03 ; OUT_B MAN & OUT_A HI LIM
STEP11  OR 3
STEP12  OUT BO03 ; 'CALCA.HOLIND' OUTPUT
STEP13  IN RI01  ; GET OUT_A.BCALCO
STEP14  STM M01  ; SAVE TO MEMORY_1
STEP15  IN RI02  ; GET OUT_B.BCALCO
STEP16  STM M02  ; SAVE TO MEMORY_2
STEP17  CST ; CALC OUT_A/B TO TRACK
STEP18  AND ~BI05 ~BI06 ; OUT_B NOT AT LIMIT
STEP19  AND ~BI02       ; OUT_B CONTROLLING
STEP20  OR BI01  ; = 'OUT_A AVAILABLE' (FF-SET)
STEP21  AND ~BI03 ~BI04 ; OUT_A NOT AT LIMIT
STEP22  AND ~BI01       ; OUT_A CONTROLLING
STEP23  OR BI02  ; = 'OUT_B AVAILABLE' (FF-RESET)
STEP24  FF       ; LATCH LAST HEALTHY OUT
STEP25  ADD M03  ; ADD MEMORY BIAS (+1)
STEP26  STM M04  ; STORE MEMORY POINTER (1,2)
STEP27  CST ; BOTH OUTS LIMITING (HI OR LO)
STEP28  OR BI03 BI04 ; OUT_A LIMITING HI OR LO
STEP29  OR BI05 BI06 ; OUT_B LIMITING HI OR LO
STEP30  AND 2     ; WHEN BOTH OUTS LIMITING
STEP31  AND ~BO01 ; AND BOTH CONTROLLING
STEP32  BIF 35    ; IF OUTS NOT LIMITING BRANCH
STEP33  IN RI03   ; CNTRL TRACKS ITSELF
STEP34  GTO 36    ; THIS ALLOWS INTERGRAL ACTION
STEP35  LACI M04  ; GET OUT_A/B .BCALCO
STEP36  OUT RO01  ; PIDA.BCALCI & .FBK PARAMETERS
STEP37  IN M04    ; POINTER TO RI01/RI02
STEP38  PRI RO01  ; PROPAGATE UPSTREAM INIT BITS
STEP39  CST ; HONOR CONDITIONAL INITIALISATION
STEP40  INS RI01 ; READ OUT_A BCALCO STATUS
STEP41  TSTB 6   ; READ CONDITIONAL INITIALSE B
STEP42  BIF 45   ; IF NO RI01.INITC REQUESTED
STEP43  IN 1     ; OUT_A.BCALCO (INITC REQUESTED)
STEP44  PRI RO01 ; PROPAGATE UPSTREAM INITC BIT
STEP45  INS RI02 ; READ OUT_B BCALCO STATUS
STEP46  TSTB 6   ; READ CONDITIONAL INITIALSE BIT
STEP47  BIF 50   ; IF NO RI02.INITC REQUESTED
STEP48  IN 2     ; OUT_B.BCALCO (INITC REQUESTED)
STEP49  PRI RO01 ; PROPAGATE UPSTREAM INITC BIT
STEP50  END

Connections required,

CALCA.RO01       > PIDA.BCALCI
CALCA.RO01       > PIDA.FBK
CALCA.BO01       > PIDA.INITI


PIDA.OUT         > AOUT.MEAS
PIDA.OUT         > AOUT.MEAS
PIDA.OUT         > CALCA.RI03


AOUT(A).BCALCO   > CALCA.RI01
AOUT(B).BCALCO   > CALCA.RI02
AOUT(A).INITO    > CALCA.BI01
AOUT(B).INITO    > CALCA.BI02
AOUT(A).LOLIND   > CALCA.BI04
AOUT(B).HOLIND   > CALCA.BI05
AOUT(A).HOLIND   > CALCA.BI03
AOUT(B).LOLIND   > CALCA.BI06




Justin


-----Original Message-----
From: foxboro-bounce@xxxxxxxxxxxxx [mailto:foxboro-bounce@xxxxxxxxxxxxx] On
Behalf Of Jaime Claramunt R. (Inforsa)
Sent: Thursday, December 23, 2004 5:49 PM
To: foxboro@xxxxxxxxxxxxx
Subject: [foxboro] Splitted range PID anti windup

Hi all,

I have a PID loop controlling a splitted range actuators, I mean, a PIDXE
block which .out goes to 2 char funtions: one with in1=[0, 50,
100%]:out1=[0, 100, 100%]  and other with in2=[0, 50, 100%]:out2=[0, 0,
100%].

Sometimes the actuator connected to the second char (2) is closed manually
so we cannot count on it, so I connected a logic to pidxe HOLIM to limit the
.out at 50% to avoid windup during this (50to100) range. So it can "return"
in good way from top.
I have the feeling it's not right.

Is the pidxe still calculating errors and compensations despite HOLIM ?? I
have too heavy response fot this second actuator when is returned to auto
(on).
Do you have some more "elegant" way to do it ?

thanks
Jaime Claramunt
INFORSA
 
 
_______________________________________________________________________
This mailing list is neither sponsored nor endorsed by Invensys Process
Systems (formerly The Foxboro Company). Use the info you obtain here at your
own risks. Read http://www.thecassandraproject.org/disclaimer.html
 
foxboro mailing list:             http://www.freelists.org/list/foxboro
to subscribe:         mailto:foxboro-request@xxxxxxxxxxxxx?subject=join
to unsubscribe:      mailto:foxboro-request@xxxxxxxxxxxxx?subject=leave
 
 
 
_______________________________________________________________________
This mailing list is neither sponsored nor endorsed by Invensys Process
Systems (formerly The Foxboro Company). Use the info you obtain here at
your own risks. Read http://www.thecassandraproject.org/disclaimer.html
 
foxboro mailing list:             http://www.freelists.org/list/foxboro
to subscribe:         mailto:foxboro-request@xxxxxxxxxxxxx?subject=join
to unsubscribe:      mailto:foxboro-request@xxxxxxxxxxxxx?subject=leave
 


 
 
_______________________________________________________________________
This mailing list is neither sponsored nor endorsed by Invensys Process
Systems (formerly The Foxboro Company). Use the info you obtain here at
your own risks. Read http://www.thecassandraproject.org/disclaimer.html
 
foxboro mailing list:             http://www.freelists.org/list/foxboro
to subscribe:         mailto:foxboro-request@xxxxxxxxxxxxx?subject=join
to unsubscribe:      mailto:foxboro-request@xxxxxxxxxxxxx?subject=leave
 

Other related posts: