| C | |
| C Tennessee Eastman Process Control Test Problem | |
| C | |
| C Original codes written by | |
| C | |
| C James J. Downs and Ernest F. Vogel | |
| C | |
| C Process and Control Systems Engineering | |
| C Tennessee Eastman Company | |
| C P.O. Box 511 | |
| C Kingsport, Tennessee 37662 | |
| C | |
| C-------------------------------------------------------------------- | |
| C | |
| C New version is a closed-loop plant-wide control scheme for | |
| C the Tennessee Eastman Process Control Test Problem | |
| C | |
| C The modifications are by: | |
| C | |
| C Evan L. Russell, Leo H. Chiang and Richard D. Braatz | |
| C | |
| C Large Scale Systems Research Laboratory | |
| C Department of Chemical Engineering | |
| C University of Illinois at Urbana-Champaign | |
| C 600 South Mathews Avenue, Box C-3 | |
| C Urbana, Illinois 61801 | |
| C http://brahms.scs.uiuc.edu | |
| C | |
| C The modified text is Copyright 1998-2002 by The Board of Trustees | |
| C of the University of Illinois. All rights reserved. | |
| C | |
| C Permission hereby granted, free of charge, to any person obtaining a copy | |
| C of this software and associated documentation files (the "Software"), to | |
| C deal with the Software without restriction, including without limitation | |
| C the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
| C and/or sell copies of the Software, and to permit persons to whom the | |
| C Software is furnished to do so, subject to the following conditions: | |
| C 1. Redistributions of source code must retain the above copyright | |
| C notice, this list of conditions and the following disclaimers. | |
| C 2. Redistributions in binary form must reproduce the above | |
| C copyright notice, this list of conditions and the following | |
| C disclaimers in the documentation and/or other materials | |
| C provided with the distribution. | |
| C 3. Neither the names of Large Scale Research Systems Laboratory, | |
| C University of Illinois, nor the names of its contributors may | |
| C be used to endorse or promote products derived from this | |
| C Software without specific prior written permission. | |
| C | |
| C THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
| C OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| C FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |
| C THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | |
| C OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
| C ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | |
| C DEALINGS IN THE SOFTWARE. | |
| C---------------------------------------------------------------------- | |
| C | |
| C Users should cite the original code using the following references: | |
| C | |
| C J.J. Downs and E.F. Vogel, "A plant-wide industrial process control | |
| C problem." Presented at the AIChE 1990 Annual Meeting, Session on | |
| C Industrial Challenge Problems in Process Control, Paper #24a | |
| C Chicago, Illinois, November 14, 1990. | |
| C | |
| C J.J. Downs and E.F. Vogel, "A plant-wide industrial process control | |
| C problem," Computers and Chemical Engineering, 17:245-255 (1993). | |
| C | |
| C Users should cite the modified code using the following references: | |
| C | |
| C E.L. Russell, L.H. Chiang, and R.D. Braatz. Data-driven Techniques | |
| C for Fault Detection and Diagnosis in Chemical Processes, Springer-Verlag, | |
| C London, 2000. | |
| C | |
| C L.H. Chiang, E.L. Russell, and R.D. Braatz. Fault Detection and | |
| C Diagnosis in Industrial Systems, Springer-Verlag, London, 2001. | |
| C | |
| C L.H. Chiang, E.L. Russell, and R.D. Braatz. "Fault diagnosis in | |
| C chemical processes using Fisher discriminant analysis, discriminant | |
| C partial least squares, and principal component analysis," Chemometrics | |
| C and Intelligent Laboratory Systems, 50:243-252, 2000. | |
| C | |
| C E.L. Russell, L.H. Chiang, and R.D. Braatz. "Fault detection in | |
| C industrial processes using canonical variate analysis and dynamic | |
| C principal component analysis," Chemometrics and Intelligent Laboratory | |
| C Systems, 51:81-93, 2000. | |
| C | |
| C | |
| C Main program for demonstrating application of the modified Tennessee Eastman | |
| C Process Control Test Problem | |
| C | |
| C | |
| C Instructions for running the program | |
| C ==================================== | |
| C | |
| C 1) Go to line 220, change NPTS to the number of data points to simulate. For each | |
| C minute of operation, 60 points are generated. | |
| C | |
| C 2) Go to line 226, change SSPTS to the number of data points to simulate in steady | |
| C state operation before implementing the disturbance. | |
| C | |
| C 3) Go to line 367, implement any of the 21 programmed disturbances. For example, to | |
| C implement disturbance 2, type IDV(2)=1 . | |
| C | |
| C 4) The program will generate 15 output files and all data are recorded every | |
| C 180 seconds, see Table 1 for details. The default path is the home directory. | |
| C To change the file name and path, modify lines 346-360 accordingly. | |
| C To overwrite the files that already existed, change STATUS='new' to | |
| C STATUS='old' from lines 346-360. | |
| C | |
| C | |
| C Table 1: Content of the output files | |
| C | |
| C File Name Content | |
| C --------- ------- | |
| C TE_data_inc.dat Time (in seconds) | |
| C TE_data_mv1.dat Measurements for manipulated variables 1 to 4 | |
| C TE_data_mv2.dat Measurements for manipulated variables 5 to 8 | |
| C TE_data_mv3.dat Measurements for manipulated variables 9 to 12 | |
| C TE_data_me01.dat Measurements for measurement variables 1 to 4 | |
| C TE_data_me02.dat Measurements for measurement variables 5 to 8 | |
| C TE_data_me03.dat Measurements for measurement variables 9 to 12 | |
| C TE_data_me04.dat Measurements for measurement variables 13 to 16 | |
| C TE_data_me05.dat Measurements for measurement variables 17 to 20 | |
| C TE_data_me06.dat Measurements for measurement variables 21 to 24 | |
| C TE_data_me07.dat Measurements for measurement variables 25 to 28 | |
| C TE_data_me08.dat Measurements for measurement variables 29 to 32 | |
| C TE_data_me09.dat Measurements for measurement variables 33 to 36 | |
| C TE_data_me10.dat Measurements for measurement variables 37 to 40 | |
| C TE_data_me11.dat Measurements for measurement variable 41 | |
| C | |
| C 5) To ensure the randomness of the measurement noises, the random number | |
| C G in the sub program (teprob.f, line 1187) has to be changed each time before | |
| C running 'temain_mod.f'. | |
| C | |
| C 6) Save the changes in 'temain_mod.f' and 'teprob.f' and compile the program in | |
| C unix by typing | |
| C f77 temain_mod.f teprob.f | |
| C | |
| C 7) Run the program by typing | |
| C a.out | |
| C | |
| C | |
| C============================================================================= | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C DISTURBANCE VECTOR COMMON BLOCK | |
| C | |
| INTEGER IDV | |
| COMMON/DVEC/ IDV(20) | |
| C | |
| C RANDOM SEED COMMON BLOCK (for f2py exposure) | |
| C | |
| DOUBLE PRECISION G | |
| COMMON/RANDSD/ G | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| C DOUBLE PRECISION SETPT, GAIN, TAUI, ERROLD, DELTAT | |
| C COMMON/CTRL/ SETPT, GAIN, TAUI, ERROLD, DELTAT | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| INTEGER FLAG | |
| COMMON/FLAG6/ FLAG | |
| C | |
| DOUBLE PRECISION GAIN1, ERROLD1 | |
| COMMON/CTRL1/ GAIN1, ERROLD1 | |
| DOUBLE PRECISION GAIN2, ERROLD2 | |
| COMMON/CTRL2/ GAIN2, ERROLD2 | |
| DOUBLE PRECISION GAIN3, ERROLD3 | |
| COMMON/CTRL3/ GAIN3, ERROLD3 | |
| DOUBLE PRECISION GAIN4, ERROLD4 | |
| COMMON/CTRL4/ GAIN4, ERROLD4 | |
| DOUBLE PRECISION GAIN5, TAUI5, ERROLD5 | |
| COMMON/CTRL5/ GAIN5, TAUI5, ERROLD5 | |
| DOUBLE PRECISION GAIN6, ERROLD6 | |
| COMMON/CTRL6/ GAIN6, ERROLD6 | |
| DOUBLE PRECISION GAIN7, ERROLD7 | |
| COMMON/CTRL7/ GAIN7, ERROLD7 | |
| DOUBLE PRECISION GAIN8, ERROLD8 | |
| COMMON/CTRL8/ GAIN8, ERROLD8 | |
| DOUBLE PRECISION GAIN9, ERROLD9 | |
| COMMON/CTRL9/ GAIN9, ERROLD9 | |
| DOUBLE PRECISION GAIN10, TAUI10, ERROLD10 | |
| COMMON/CTRL10/ GAIN10, TAUI10, ERROLD10 | |
| DOUBLE PRECISION GAIN11, TAUI11, ERROLD11 | |
| COMMON/CTRL11/ GAIN11, TAUI11, ERROLD11 | |
| DOUBLE PRECISION GAIN13, TAUI13, ERROLD13 | |
| COMMON/CTRL13/ GAIN13, TAUI13, ERROLD13 | |
| DOUBLE PRECISION GAIN14, TAUI14, ERROLD14 | |
| COMMON/CTRL14/ GAIN14, TAUI14, ERROLD14 | |
| DOUBLE PRECISION GAIN15, TAUI15, ERROLD15 | |
| COMMON/CTRL15/ GAIN15, TAUI15, ERROLD15 | |
| DOUBLE PRECISION GAIN16, TAUI16, ERROLD16 | |
| COMMON/CTRL16/ GAIN16, TAUI16, ERROLD16 | |
| DOUBLE PRECISION GAIN17, TAUI17, ERROLD17 | |
| COMMON/CTRL17/ GAIN17, TAUI17, ERROLD17 | |
| DOUBLE PRECISION GAIN18, TAUI18, ERROLD18 | |
| COMMON/CTRL18/ GAIN18, TAUI18, ERROLD18 | |
| DOUBLE PRECISION GAIN19, TAUI19, ERROLD19 | |
| COMMON/CTRL19/ GAIN19, TAUI19, ERROLD19 | |
| DOUBLE PRECISION GAIN20, TAUI20, ERROLD20 | |
| COMMON/CTRL20/ GAIN20, TAUI20, ERROLD20 | |
| DOUBLE PRECISION GAIN22, TAUI22, ERROLD22 | |
| COMMON/CTRL22/ GAIN22, TAUI22, ERROLD22 | |
| C | |
| C Local Variables | |
| C | |
| INTEGER I, NN, NPTS, TEST, TEST1, TEST3, TEST4 | |
| C | |
| DOUBLE PRECISION TIME, YY(50), YP(50) | |
| C | |
| C Set the number of differential equations (states). The process has 50 | |
| C states. If the user wishes to integrate additional states, NN must be | |
| C increased by the number of additional differential equations. | |
| C | |
| NN = 50 | |
| C | |
| C Set the number of points to simulate | |
| C | |
| NPTS = 172800 | |
| C | |
| C Set the number of pints to simulate in steady state operation | |
| C | |
| SSPTS = 3600 * 8 | |
| C | |
| C Integrator Step Size: 1 Second Converted to Hours | |
| C | |
| DELTAT = 1. / 3600. | |
| C | |
| C Initialize Process | |
| C (Sets TIME to zero) | |
| C | |
| CALL TEINIT(NN,TIME,YY,YP) | |
| C | |
| C Set Controller Parameters | |
| C Make a Stripper Level Set Point Change of +15% | |
| C | |
| CC SETPT = XMEAS(15) + 15.0 | |
| CC GAIN = 2.0 | |
| CC TAUI = 5.0 | |
| CC ERROLD = 0.0 | |
| SETPT(1)=3664.0 | |
| GAIN1=1.0 | |
| ERROLD1=0.0 | |
| SETPT(2)=4509.3 | |
| GAIN2=1.0 | |
| ERROLD2=0.0 | |
| SETPT(3)=.25052 | |
| GAIN3=1. | |
| ERROLD3=0.0 | |
| SETPT(4)=9.3477 | |
| GAIN4=1. | |
| ERROLD4=0.0 | |
| SETPT(5)=26.902 | |
| GAIN5=-0.083 | |
| TAUI5=1./3600. | |
| ERROLD5=0.0 | |
| SETPT(6)=0.33712 | |
| GAIN6=1.22 | |
| ERROLD6=0.0 | |
| SETPT(7)=50.0 | |
| GAIN7=-2.06 | |
| ERROLD7=0.0 | |
| SETPT(8)=50.0 | |
| GAIN8=-1.62 | |
| ERROLD8=0.0 | |
| SETPT(9)=230.31 | |
| GAIN9=0.41 | |
| ERROLD9=0.0 | |
| SETPT(10)=94.599 | |
| GAIN10= -0.156 * 10. | |
| TAUI10=1452./3600. | |
| ERROLD10=0.0 | |
| SETPT(11)=22.949 | |
| GAIN11=1.09 | |
| TAUI11=2600./3600. | |
| ERROLD11=0.0 | |
| SETPT(13)=32.188 | |
| GAIN13=18. | |
| TAUI13=3168./3600. | |
| ERROLD13=0.0 | |
| SETPT(14)=6.8820 | |
| GAIN14=8.3 | |
| TAUI14=3168.0/3600. | |
| ERROLD14=0.0 | |
| SETPT(15)=18.776 | |
| GAIN15=2.37 | |
| TAUI15=5069./3600. | |
| ERROLD15=0.0 | |
| SETPT(16)=65.731 | |
| GAIN16=1.69 / 10. | |
| TAUI16=236./3600. | |
| ERROLD16=0.0 | |
| SETPT(17)=75.000 | |
| GAIN17=11.1 / 10. | |
| TAUI17=3168./3600. | |
| ERROLD17=0.0 | |
| SETPT(18)=120.40 | |
| GAIN18=2.83 * 10. | |
| TAUI18=982./3600. | |
| ERROLD18=0.0 | |
| SETPT(19)=13.823 | |
| GAIN19=-83.2 / 5. /3. | |
| TAUI19=6336./3600. | |
| ERROLD19=0.0 | |
| SETPT(20)=0.83570 | |
| GAIN20=-16.3 / 5. | |
| TAUI20=12408./3600. | |
| ERROLD20=0.0 | |
| SETPT(12)=2633.7 | |
| GAIN22=-1.0 * 5. | |
| TAUI22=1000./3600. | |
| ERROLD22=0.0 | |
| C | |
| C Example Disturbance: | |
| C Change Reactor Cooling | |
| C | |
| XMV(1) = 63.053 + 0. | |
| XMV(2) = 53.980 + 0. | |
| XMV(3) = 24.644 + 0. | |
| XMV(4) = 61.302 + 0. | |
| XMV(5) = 22.210 + 0. | |
| XMV(6) = 40.064 + 0. | |
| XMV(7) = 38.100 + 0. | |
| XMV(8) = 46.534 + 0. | |
| XMV(9) = 47.446 + 0. | |
| XMV(10)= 41.106 + 0. | |
| XMV(11)= 18.114 + 0. | |
| C | |
| C SETPT(6)=SETPT(6) + 0.2 | |
| C | |
| C Set all Disturbance Flags to OFF | |
| C | |
| DO 100 I = 1, 20 | |
| IDV(I) = 0 | |
| 100 CONTINUE | |
| C IDV(20)=1 | |
| C | |
| C | |
| C | |
| C | |
| OPEN(UNIT=111,FILE='~/TE_data_inc.dat',STATUS='new') | |
| OPEN(UNIT=1111,FILE='~/TE_data_mv1.dat',STATUS='new') | |
| OPEN(UNIT=1112,FILE='~/TE_data_mv2.dat',STATUS='new') | |
| OPEN(UNIT=1113,FILE='~/TE_data_mv3.dat',STATUS='new') | |
| OPEN(UNIT=2111,FILE='~/TE_data_me01.dat',STATUS='new') | |
| OPEN(UNIT=2112,FILE='~/TE_data_me02.dat',STATUS='new') | |
| OPEN(UNIT=2113,FILE='~/TE_data_me03.dat',STATUS='new') | |
| OPEN(UNIT=2114,FILE='~/TE_data_me04.dat',STATUS='new') | |
| OPEN(UNIT=2115,FILE='~/TE_data_me05.dat',STATUS='new') | |
| OPEN(UNIT=2116,FILE='~/TE_data_me06.dat',STATUS='new') | |
| OPEN(UNIT=2117,FILE='~/TE_data_me07.dat',STATUS='new') | |
| OPEN(UNIT=2118,FILE='~/TE_data_me08.dat',STATUS='new') | |
| OPEN(UNIT=2119,FILE='~/TE_data_me09.dat',STATUS='new') | |
| OPEN(UNIT=2120,FILE='~/TE_data_me10.dat',STATUS='new') | |
| OPEN(UNIT=2121,FILE='~/TE_data_me11.dat',STATUS='new') | |
| C | |
| C | |
| C Simulation Loop | |
| C | |
| DO 1000 I = 1, NPTS | |
| IF (I.GE.SSPTS) THEN | |
| IDV(12)=1 | |
| ENDIF | |
| TEST=MOD(I,3) | |
| IF (TEST.EQ.0) THEN | |
| CALL CONTRL1 | |
| CALL CONTRL2 | |
| CALL CONTRL3 | |
| CALL CONTRL4 | |
| CALL CONTRL5 | |
| CALL CONTRL6 | |
| CALL CONTRL7 | |
| CALL CONTRL8 | |
| CALL CONTRL9 | |
| CALL CONTRL10 | |
| CALL CONTRL11 | |
| CALL CONTRL16 | |
| CALL CONTRL17 | |
| CALL CONTRL18 | |
| ENDIF | |
| TEST1=MOD(I,360) | |
| IF (TEST1.EQ.0) THEN | |
| CALL CONTRL13 | |
| CALL CONTRL14 | |
| CALL CONTRL15 | |
| CALL CONTRL19 | |
| ENDIF | |
| TEST1=MOD(I,900) | |
| IF (TEST1.EQ.0) CALL CONTRL20 | |
| TEST3=MOD(I,5000) | |
| IF (TEST3.EQ.0) THEN | |
| PRINT *, 'Simulation time (in seconds) = ', I | |
| ENDIF | |
| C | |
| TEST4=MOD(I,180) | |
| IF (TEST4.EQ.0) THEN | |
| CALL OUTPUT | |
| WRITE(111,111) I | |
| 111 FORMAT(1X,I6) | |
| ENDIF | |
| C | |
| CALL INTGTR(NN,TIME,DELTAT,YY,YP) | |
| C | |
| CALL CONSHAND | |
| C | |
| 1000 CONTINUE | |
| PRINT *, 'Simulation is done. ' | |
| C | |
| CLOSE(UNIT=111) | |
| CLOSE(UNIT=1111) | |
| CLOSE(UNIT=1112) | |
| CLOSE(UNIT=1113) | |
| CLOSE(UNIT=2111) | |
| CLOSE(UNIT=2112) | |
| CLOSE(UNIT=2113) | |
| CLOSE(UNIT=2114) | |
| CLOSE(UNIT=2115) | |
| CLOSE(UNIT=2116) | |
| CLOSE(UNIT=2117) | |
| CLOSE(UNIT=2118) | |
| CLOSE(UNIT=2119) | |
| CLOSE(UNIT=2120) | |
| CLOSE(UNIT=2121) | |
| STOP | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| CC SUBROUTINE CONTRL | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| CC DOUBLE PRECISION XMEAS, XMV | |
| CC COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| CC DOUBLE PRECISION SETPT, GAIN, TAUI, ERROLD, DELTAT | |
| CC COMMON/CTRL/ SETPT, GAIN, TAUI, ERROLD, DELTAT | |
| C | |
| CC DOUBLE PRECISION ERR, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| CC ERR = SETPT - XMEAS(15) | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| CC DXMV = GAIN * ( ( ERR - ERROLD ) + ERR * DELTAT * 60. / TAUI ) | |
| C | |
| CC XMV(8) = XMV(8) - DXMV | |
| C | |
| CC ERROLD = ERR | |
| C | |
| CC RETURN | |
| CC END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL1 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN1, ERROLD1 | |
| COMMON/CTRL1/ GAIN1, ERROLD1 | |
| C | |
| DOUBLE PRECISION ERR1, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR1 = (SETPT(1) - XMEAS(2)) * 100. / 5811. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN1 * ( ( ERR1 - ERROLD1 ) ) | |
| C | |
| XMV(1) = XMV(1) + DXMV | |
| C | |
| ERROLD1 = ERR1 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL2 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN2, ERROLD2 | |
| COMMON/CTRL2/ GAIN2, ERROLD2 | |
| C | |
| DOUBLE PRECISION ERR2, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR2 = (SETPT(2) - XMEAS(3)) * 100. / 8354. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN2 * ( ( ERR2 - ERROLD2 ) ) | |
| C | |
| XMV(2) = XMV(2) + DXMV | |
| C | |
| ERROLD2 = ERR2 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL3 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN3, ERROLD3 | |
| COMMON/CTRL3/ GAIN3, ERROLD3 | |
| C | |
| DOUBLE PRECISION ERR3, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR3 = (SETPT(3) - XMEAS(1)) * 100. / 1.017 | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN3 * ( ( ERR3 - ERROLD3 ) ) | |
| C | |
| XMV(3) = XMV(3) + DXMV | |
| C | |
| ERROLD3 = ERR3 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL4 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN4, ERROLD4 | |
| COMMON/CTRL4/ GAIN4, ERROLD4 | |
| C | |
| DOUBLE PRECISION ERR4, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR4 = (SETPT(4) - XMEAS(4)) * 100. / 15.25 | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN4 * ( ( ERR4 - ERROLD4 ) ) | |
| C | |
| XMV(4) = XMV(4) + DXMV | |
| C | |
| ERROLD4 = ERR4 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL5 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN5, TAUI5, ERROLD5 | |
| COMMON/CTRL5/ GAIN5, TAUI5, ERROLD5 | |
| C | |
| DOUBLE PRECISION ERR5, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR5 = (SETPT(5) - XMEAS(5)) * 100. / 53. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| C PRINT *, 'GAIN5= ', GAIN5 | |
| C PRINT *, 'TAUI5= ', TAUI5 | |
| C PRINT *, 'ERR5= ', ERR5 | |
| C PRINT *, 'ERROLD5= ', ERROLD5 | |
| C | |
| DXMV = GAIN5 * ((ERR5 - ERROLD5)+ERR5*DELTAT*3./TAUI5) | |
| C | |
| XMV(5) = XMV(5) + DXMV | |
| C | |
| ERROLD5 = ERR5 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL6 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| INTEGER FLAG | |
| COMMON/FLAG6/ FLAG | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN6, ERROLD6 | |
| COMMON/CTRL6/ GAIN6, ERROLD6 | |
| C | |
| DOUBLE PRECISION ERR6, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| IF (XMEAS(13).GE.2950.0) THEN | |
| XMV(6)=100.0 | |
| FLAG=1 | |
| ELSEIF (FLAG.EQ.1.AND.XMEAS(13).GE.2633.7) THEN | |
| XMV(6)=100.0 | |
| ELSEIF (FLAG.EQ.1.AND.XMEAS(13).LE.2633.7) THEN | |
| XMV(6)=40.060 | |
| SETPT(6)=0.33712 | |
| ERROLD6=0.0 | |
| FLAG=0 | |
| ELSEIF (XMEAS(13).LE.2300.) THEN | |
| XMV(6)=0.0 | |
| FLAG=2 | |
| ELSEIF (FLAG.EQ.2.AND.XMEAS(13).LE.2633.7) THEN | |
| XMV(6)=0.0 | |
| ELSEIF (FLAG.EQ.2.AND.XMEAS(13).GE.2633.7) THEN | |
| XMV(6)=40.060 | |
| SETPT(6)=0.33712 | |
| ERROLD6=0.0 | |
| FLAG=0 | |
| ELSE | |
| FLAG=0 | |
| C | |
| C Calculate Error | |
| C | |
| ERR6 = (SETPT(6) - XMEAS(10)) * 100. /1. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| C PRINT *, 'XMV(6)= ', XMV(6) | |
| DXMV = GAIN6 * ( ( ERR6 - ERROLD6 ) ) | |
| C | |
| C PRINT *, 'GAIN6= ', GAIN6 | |
| C PRINT *, 'SETPT(6)= ', SETPT(6) | |
| C PRINT *, 'XMEAS(10)= ', XMEAS(10) | |
| XMV(6) = XMV(6) + DXMV | |
| C | |
| C PRINT *, 'ERROLD6= ', ERROLD6 | |
| C PRINT *, 'ERR6= ', ERR6 | |
| C PRINT *, 'XMV(6)== ', XMV(6) | |
| ERROLD6 = ERR6 | |
| ENDIF | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL7 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN7, ERROLD7 | |
| COMMON/CTRL7/ GAIN7, ERROLD7 | |
| C | |
| DOUBLE PRECISION ERR7, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR7 = (SETPT(7) - XMEAS(12)) * 100. / 70. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN7 * ( ( ERR7 - ERROLD7 ) ) | |
| C | |
| XMV(7) = XMV(7) + DXMV | |
| C | |
| ERROLD7 = ERR7 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL8 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN8, ERROLD8 | |
| COMMON/CTRL8/ GAIN8, ERROLD8 | |
| C | |
| DOUBLE PRECISION ERR8, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR8 = (SETPT(8) - XMEAS(15)) * 100. / 70. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN8 * ( ( ERR8 - ERROLD8 ) ) | |
| C | |
| XMV(8) = XMV(8) + DXMV | |
| C | |
| ERROLD8 = ERR8 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL9 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN9, ERROLD9 | |
| COMMON/CTRL9/ GAIN9, ERROLD9 | |
| C | |
| DOUBLE PRECISION ERR9, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR9 = (SETPT(9) - XMEAS(19)) * 100. / 460. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN9 * ( ( ERR9 - ERROLD9 ) ) | |
| C | |
| XMV(9) = XMV(9) + DXMV | |
| C | |
| ERROLD9 = ERR9 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL10 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN10, TAUI10, ERROLD10 | |
| COMMON/CTRL10/ GAIN10, TAUI10, ERROLD10 | |
| C | |
| DOUBLE PRECISION ERR10, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR10 = (SETPT(10) - XMEAS(21)) * 100. / 150. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN10*((ERR10 - ERROLD10)+ERR10*DELTAT*3./TAUI10) | |
| C | |
| XMV(10) = XMV(10) + DXMV | |
| C | |
| ERROLD10 = ERR10 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL11 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN11, TAUI11, ERROLD11 | |
| COMMON/CTRL11/ GAIN11, TAUI11, ERROLD11 | |
| C | |
| DOUBLE PRECISION ERR11, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR11 = (SETPT(11) - XMEAS(17)) * 100. / 46. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN11*((ERR11 - ERROLD11)+ERR11*DELTAT*3./TAUI11) | |
| C | |
| XMV(11) = XMV(11) + DXMV | |
| C | |
| ERROLD11 = ERR11 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL13 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN13, TAUI13, ERROLD13 | |
| COMMON/CTRL13/ GAIN13, TAUI13, ERROLD13 | |
| C | |
| DOUBLE PRECISION ERR13, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR13 = (SETPT(13) - XMEAS(23)) * 100. / 100. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN13 * ((ERR13 - ERROLD13)+ERR13*DELTAT*360./TAUI13) | |
| C | |
| SETPT(3) = SETPT(3) + DXMV * 1.017 / 100. | |
| C | |
| ERROLD13 = ERR13 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL14 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN14, TAUI14, ERROLD14 | |
| COMMON/CTRL14/ GAIN14, TAUI14, ERROLD14 | |
| C | |
| DOUBLE PRECISION ERR14, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR14 = (SETPT(14) - XMEAS(26)) * 100. /100. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN14*((ERR14 - ERROLD14)+ERR14*DELTAT*360./TAUI14) | |
| C | |
| SETPT(1) = SETPT(1) + DXMV * 5811. / 100. | |
| C | |
| ERROLD14 = ERR14 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL15 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN15, TAUI15, ERROLD15 | |
| COMMON/CTRL15/ GAIN15, TAUI15, ERROLD15 | |
| C | |
| DOUBLE PRECISION ERR15, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR15 = (SETPT(15) - XMEAS(27)) * 100. / 100. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN15 * ((ERR15 - ERROLD15)+ERR15*DELTAT*360./TAUI15) | |
| C | |
| SETPT(2) = SETPT(2) + DXMV * 8354. / 100. | |
| C | |
| ERROLD15 = ERR15 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL16 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN16, TAUI16, ERROLD16 | |
| COMMON/CTRL16/ GAIN16, TAUI16, ERROLD16 | |
| C | |
| DOUBLE PRECISION ERR16, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR16 = (SETPT(16) - XMEAS(18)) * 100. / 130. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN16 * ((ERR16 - ERROLD16)+ERR16*DELTAT*3./TAUI16) | |
| C | |
| SETPT(9) = SETPT(9) + DXMV * 460. / 100. | |
| C | |
| ERROLD16 = ERR16 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL17 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN17, TAUI17, ERROLD17 | |
| COMMON/CTRL17/ GAIN17, TAUI17, ERROLD17 | |
| C | |
| DOUBLE PRECISION ERR17, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR17 = (SETPT(17) - XMEAS(8)) * 100. / 50. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV =GAIN17*((ERR17 - ERROLD17)+ERR17*DELTAT*3./TAUI17) | |
| C | |
| SETPT(4) = SETPT(4) + DXMV * 15.25 / 100. | |
| C | |
| ERROLD17 = ERR17 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL18 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN18, TAUI18, ERROLD18 | |
| COMMON/CTRL18/ GAIN18, TAUI18, ERROLD18 | |
| C | |
| DOUBLE PRECISION ERR18, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR18 = (SETPT(18) - XMEAS(9)) * 100. / 150. | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN18 * ((ERR18 - ERROLD18)+ERR18*DELTAT*3./TAUI18) | |
| C | |
| SETPT(10) = SETPT(10) + DXMV * 150. / 100. | |
| C | |
| ERROLD18 = ERR18 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL19 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN19, TAUI19, ERROLD19 | |
| COMMON/CTRL19/ GAIN19, TAUI19, ERROLD19 | |
| C | |
| DOUBLE PRECISION ERR19, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR19 = (SETPT(19) - XMEAS(30)) * 100. / 26. | |
| C PRINT *, 'ERROLD19= ', ERROLD19 | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN19*((ERR19 - ERROLD19)+ERR19*DELTAT*360./TAUI19) | |
| C | |
| SETPT(6) = SETPT(6) + DXMV * 1. / 100. | |
| C PRINT *, 'SETPT(6)= ', SETPT(6) | |
| C | |
| ERROLD19 = ERR19 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL20 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN20, TAUI20, ERROLD20 | |
| COMMON/CTRL20/ GAIN20, TAUI20, ERROLD20 | |
| C | |
| DOUBLE PRECISION ERR20, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR20 = (SETPT(20) - XMEAS(38)) * 100. / 1.6 | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN20*((ERR20 - ERROLD20)+ERR20*DELTAT*900./TAUI20) | |
| C | |
| SETPT(16) = SETPT(16) + DXMV * 130. / 100. | |
| C | |
| ERROLD20 = ERR20 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONTRL22 | |
| C | |
| C Discrete control algorithms | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| C CONTROLLER COMMON BLOCK | |
| C | |
| DOUBLE PRECISION SETPT, DELTAT | |
| COMMON/CTRLALL/ SETPT(20), DELTAT | |
| DOUBLE PRECISION GAIN22, TAUI22, ERROLD22 | |
| COMMON/CTRL22/ GAIN22, TAUI22, ERROLD22 | |
| C | |
| DOUBLE PRECISION ERR22, DXMV | |
| C | |
| C Example PI Controller: | |
| C Stripper Level Controller | |
| C | |
| C Calculate Error | |
| C | |
| ERR22 = SETPT(12) - XMEAS(13) | |
| C | |
| C Proportional-Integral Controller (Velocity Form) | |
| C GAIN = Controller Gain | |
| C TAUI = Reset Time (min) | |
| C | |
| DXMV = GAIN22*((ERR22 - ERROLD22)+ERR22*DELTAT*3./TAUI22) | |
| C | |
| XMV(6) = XMV(6) + DXMV | |
| C | |
| ERROLD22 = ERR22 | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE OUTPUT | |
| C | |
| C | |
| C MEASUREMENT AND VALVE COMMON BLOCK | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| WRITE(1111,100) XMV(1), XMV(2), XMV(3), XMV(4) | |
| WRITE(1112,100) XMV(5), XMV(6), XMV(7), XMV(8) | |
| WRITE(1113,100) XMV(9), XMV(10), XMV(11), XMV(12) | |
| WRITE(2111,100) XMEAS(1), XMEAS(2), XMEAS(3), XMEAS(4) | |
| WRITE(2112,100) XMEAS(5), XMEAS(6), XMEAS(7), XMEAS(8) | |
| WRITE(2113,100) XMEAS(9), XMEAS(10), XMEAS(11), XMEAS(12) | |
| WRITE(2114,100) XMEAS(13), XMEAS(14), XMEAS(15), XMEAS(16) | |
| WRITE(2115,100) XMEAS(17), XMEAS(18), XMEAS(19), XMEAS(20) | |
| WRITE(2116,100) XMEAS(21), XMEAS(22), XMEAS(23), XMEAS(24) | |
| WRITE(2117,100) XMEAS(25), XMEAS(26), XMEAS(27), XMEAS(28) | |
| WRITE(2118,100) XMEAS(29), XMEAS(30), XMEAS(31), XMEAS(32) | |
| WRITE(2119,100) XMEAS(33), XMEAS(34), XMEAS(35), XMEAS(36) | |
| WRITE(2120,100) XMEAS(37), XMEAS(38), XMEAS(39), XMEAS(40) | |
| WRITE(2121,300) XMEAS(41) | |
| 100 FORMAT(1X,E13.5,2X,E13.5,2X,E13.5,2X,E13.5) | |
| 200 FORMAT(1X,E13.5,2X,E13.5,2X,E13.5) | |
| 300 FORMAT(1X,E13.5) | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE INTGTR(NN,TIME,DELTAT,YY,YP) | |
| C | |
| C Euler Integration Algorithm | |
| C | |
| C | |
| INTEGER I, NN | |
| C | |
| DOUBLE PRECISION TIME, DELTAT, YY(NN), YP(NN) | |
| C | |
| CALL TEFUNC(NN,TIME,YY,YP) | |
| C | |
| TIME = TIME + DELTAT | |
| C | |
| DO 100 I = 1, NN | |
| C | |
| YY(I) = YY(I) + YP(I) * DELTAT | |
| C | |
| 100 CONTINUE | |
| C | |
| RETURN | |
| END | |
| C | |
| C============================================================================= | |
| C | |
| SUBROUTINE CONSHAND | |
| C | |
| C Euler Integration Algorithm | |
| C | |
| C | |
| DOUBLE PRECISION XMEAS, XMV | |
| COMMON/PV/ XMEAS(41), XMV(12) | |
| C | |
| INTEGER I | |
| C | |
| DO 100 I=1, 11 | |
| IF (XMV(I).LE.0.0) XMV(I)=0. | |
| IF (XMV(I).GE.100.0) XMV(I)=100. | |
| 100 CONTINUE | |
| C | |
| RETURN | |
| END | |