Re: [foxboro] Splitted range PID anti windup
- From: "Jim Mowrey" <jmowrey@xxxxxxxxxxxxx>
- To: <foxboro@xxxxxxxxxxxxx>
- Date: Fri, 24 Dec 2004 11:23:24 -0500
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
- References:
- Re: [foxboro] Splitted range PID anti windup
- From: Fletcher, Justin
Other related posts:
- » Re: [foxboro] Splitted range PID anti windup
- » Re: [foxboro] Splitted range PID anti windup
- » Re: [foxboro] Splitted range PID anti windup
- » Re: [foxboro] Splitted range PID anti windup
- » Re: [foxboro] Splitted range PID anti windup
- » Re: [foxboro] Splitted range PID anti windup
- Re: [foxboro] Splitted range PID anti windup
- From: Fletcher, Justin