📄 tesfunc.m
字号:
for I = 1:12
XMV(I,1) = YY(I + 38,1);
VCV(I,1) = XMV(I,1);
VST(I,1) = 2.0;
IVST(I,1) = 0;
end
VRNG(1,1) = 400.00;
VRNG(2,1) = 400.00;
VRNG(3,1) = 100.00;
VRNG(4,1) = 1500.00;
VRNG(7,1) = 1500.00;
VRNG(8,1) = 1000.00;
VRNG(9,1) = 0.03;
VRNG(10,1) = 1000;
VRNG(11,1) = 1200.0;
VTR = 1300.0;
VTS = 3500.0;
VTC = 156.5;
VTV = 5000.0;
HTR(1,1) = 0.06899381054;
HTR(2,1) = 0.05;
HWR = 7060;
HWS = 11138;
SFR(1,1) = 0.99500;
SFR(2,1) = 0.99100;
SFR(3,1) = 0.99000;
SFR(4,1) = 0.91600;
SFR(5,1) = 0.93600;
SFR(6,1) = 0.93800;
SFR(7,1) = 5.80000E-02;
SFR(8,1) = 3.01000E-02;
XST(1,1) = 0.0;
XST(2,1) = 0.0001;
XST(3,1) = 0.0;
XST(4,1) = 0.9999;
XST(5,1) = 0.0;
XST(6,1) = 0.0;
XST(7,1) = 0.0;
XST(8,1) = 0.0;
TST(1,1) = 45;
XST(1,2) = 0.0;
XST(2,2) = 0.0;
XST(3,2) = 0.0;
XST(4,2) = 0.0;
XST(5,2) = 0.9999;
XST(6,2) = 0.0001;
XST(7,2) = 0.0;
XST(8,2) = 0.0;
TST(2,1) = 45;
XST(1,3) = 0.9999;
XST(2,3) = 0.0001;
XST(3,3) = 0.0;
XST(4,3) = 0.0;
XST(5,3) = 0.0;
XST(6,3) = 0.0;
XST(7,3) = 0.0;
XST(8,3) = 0.0;
TST(3,1) = 45;
XST(1,4) = 0.4850;
XST(2,4) = 0.0050;
XST(3,4) = 0.5100;
XST(4,4) = 0.0;
XST(5,4) = 0.0;
XST(6,4) = 0.0;
XST(7,4) = 0.0;
XST(8,4) = 0.0;
TST(4,1) = 45;
CPFLMX = 280275;
CPPRMX = 1.3;
VTAU(1,1) = 8;
VTAU(2,1) = 8;
VTAU(3,1) = 6;
VTAU(4,1) = 9;
VTAU(5,1) = 7;
VTAU(6,1) = 5;
VTAU(7,1) = 5;
VTAU(8,1) = 5;
VTAU(9,1) = 120;
VTAU(10,1) = 5;
VTAU(11,1) = 5;
VTAU(12,1) = 5;
for I=1:12
VTAU(I,1) = VTAU(I,1) / 3600;
end
G = 1431655765;
XNS(1,1) = 0.0012;
XNS(2,1) = 18.000;
XNS(3,1) = 22.000;
XNS(4,1) = 0.0500;
XNS(5,1) = 0.2000;
XNS(6,1) = 0.2100;
XNS(7,1) = 0.3000;
XNS(8,1) = 0.5000;
XNS(9,1) = 0.0100;
XNS(10,1) = 0.0017;
XNS(11,1) = 0.0100;
XNS(12,1) = 1.0000;
XNS(13,1) = 0.3000;
XNS(14,1) = 0.1250;
XNS(15,1) = 1.0000;
XNS(16,1) = 0.3000;
XNS(17,1) = 0.1150;
XNS(18,1) = 0.0100;
XNS(19,1) = 1.1500;
XNS(20,1) = 0.2000;
XNS(21,1) = 0.0100;
XNS(22,1) = 0.0100;
XNS(23,1) = 0.250;
XNS(24,1) = 0.100;
XNS(25,1) = 0.250;
XNS(26,1) = 0.100;
XNS(27,1) = 0.250;
XNS(28,1) = 0.025;
XNS(29,1) = 0.250;
XNS(30,1) = 0.100;
XNS(31,1) = 0.250;
XNS(32,1) = 0.100;
XNS(33,1) = 0.250;
XNS(34,1) = 0.025;
XNS(35,1) = 0.050;
XNS(36,1) = 0.050;
XNS(37,1) = 0.010;
XNS(38,1) = 0.010;
XNS(39,1) = 0.010;
XNS(40,1) = 0.500;
XNS(41,1) = 0.500;
for I=1:20
IDV(I,1)=0;
end
HSPAN(1,1) = 0.2;
HZERO(1,1) = 0.5;
SSPAN(1,1) = 0.03;
SZERO(1,1) = 0.485;
SPSPAN(1,1) = 0;
HSPAN(2,1) = 0.7;
HZERO(2,1) = 1.0;
SSPAN(2,1) = 0.003;
SZERO(2,1) = 0.005;
SPSPAN(2,1) = 0;
HSPAN(3,1) = 0.25;
HZERO(3,1) = 0.5;
SSPAN(3,1) = 10;
SZERO(3,1) = 45;
SPSPAN(3,1) = 0;
HSPAN(4,1) = 0.7;
HZERO(4,1) = 1.0;
SSPAN(4,1) = 10;
SZERO(4,1) = 45;
SPSPAN(4,1) = 0;
HSPAN(5,1) = 0.15;
HZERO(5,1) = 0.25;
SSPAN(5,1) = 10;
SZERO(5,1) = 35;
SPSPAN(5,1) = 0;
HSPAN(6,1) = 0.15;
HZERO(6,1) = 0.25;
SSPAN(6,1) = 10;
SZERO(6,1) = 40;
SPSPAN(6,1) = 0;
HSPAN(7,1) = 1;
HZERO(7,1) = 2;
SSPAN(7,1) = 0.25;
SZERO(7,1) = 1.0;
SPSPAN(7,1) = 0;
HSPAN(8,1) = 1;
HZERO(8,1) = 2;
SSPAN(8,1) = 0.25;
SZERO(8,1) = 1.0;
SPSPAN(8,1) = 0;
HSPAN(9,1) = 0.4;
HZERO(9,1) = 0.5;
SSPAN(9,1) = 0.25;
SZERO(9,1) = 0.0;
SPSPAN(9,1) = 0;
HSPAN(10,1) = 1.5;
HZERO(10,1) = 2.0;
SSPAN(10,1) = 0.0;
SZERO(10,1) = 0.0;
SPSPAN(10,1) = 0;
HSPAN(11,1) = 2.0;
HZERO(11,1) = 3.0;
SSPAN(11,1) = 0.0;
SZERO(11,1) = 0.0;
SPSPAN(11,1) = 0;
HSPAN(12,1) = 1.5;
HZERO(12,1) = 2.0;
SSPAN(12,1) = 0.0;
SZERO(12,1) = 0.0;
SPSPAN(12,1) = 0;
for I=1:12
TLAST(I,1)=0;
TNEXT(I,1)=0.1;
ADIST(I,1)=SZERO(I,1);
BDIST(I,1)=0;
CDIST(I,1)=0;
DDIST(I,1)=0;
end
TIME=0.0;
% TEFUNC(NN,TIME,YY,YP);
% TEFUNCVAL = TEFUNC(NN,TIME,YY,YP)
%
% Substitution of TEFUNC for call statement. MWB
%
% Tennessee Eastman Process Control Test Problem
%
% James J. Downs and Ernest F. Vogel
%
% Process and Control Systems Engineering
% Tennessee Eastman Company
% P.O. Box 511
% Kingsport,TN 37662
%
% ************************************************************************
%
% Re-Written in Matlab 5.0
% by
% Martin Braun
%
% Department of Chemical, Bio and Materials Engineering
% Arizona State University
%
% ************************************************************************
% Reference:
% "A Plant-Wide Industrial Process Control Problem"
% Presented at the AIChE 1990 Annual Meeting
% Industrial Challenge Problems in Process Control,Paper #24a
% Chicago,Illinois,November 14,1990
%
% Revised 4-4-91 to correct error in documentation of manipulated variables
%
% Subroutines:
%
% TEFUNC - Function evaluator to be called by integrator
% TEINIT - Initialization
% TESUBi - Utility subroutines, i=1,2,..,8
%
%
% The process simulation has 50 states (NN=50).
% Differences between the code and its description in the paper:
%
% 1. Subroutine TEINIT has TIME in the argument list. TEINIT sets TIME
% to zero.
%
% 2. There are 8 utility subroutines (TESUBi) rather than 5.
%
% 3. Process disturbances 14 through 20 do NOT need to be used in
% conjunction with another disturbance as stated in the paper. All
% disturbances can be used alone or in any combination.
%
% Manipulated Variables
%
% XMV(1,1) D Feed Flow (stream 2) (Corrected Order)
% XMV(1,2) E Feed Flow (stream 3) (Corrected Order)
% XMV(1,3) A Feed Flow (stream 1) (Corrected Order)
% XMV(1,4) A and C Feed Flow (stream 4)
% XMV(1,5) Compressor Recycle Valve
% XMV(1,6) Purge Valve (stream 9)
% XMV(1,7) Separator Pot Liquid Flow (stream 10)
% XMV(1,8) Stripper Liquid Product Flow (stream 11)
% XMV(1,9) Stripper Steam Valve
% XMV(1,10) Reactor Cooling Water Flow
% XMV(1,11) Condenser Cooling Water Flow
% XMV(1,12) Agitator Speed
%
% Continuous Process Measurements
%
% XMEAS(1,1) A Feed (stream 1) kscmh
% XMEAS(1,2) D Feed (stream 2) kg/hr
% XMEAS(1,3) E Feed (stream 3) kg/hr
% XMEAS(1,4) A and C Feed (stream 4) kscmh
% XMEAS(1,5) Recycle Flow (stream 8) kscmh
% XMEAS(1,6) Reactor Feed Rate (stream 6) kscmh
% XMEAS(1,7) Reactor Pressure kPa gauge
% XMEAS(1,8) Reactor Level %
% XMEAS(1,9) Reactor Temperature Deg C
% XMEAS(1,10) Purge Rate (stream 9) kscmh
% XMEAS(1,11) Product Sep Temp Deg C
% XMEAS(1,12) Product Sep Level %
% XMEAS(1,13) Prod Sep Pressure kPa gauge
% XMEAS(1,14) Prod Sep Underflow (stream 10) m3/hr
% XMEAS(1,15) Stripper Level %
% XMEAS(1,16) Stripper Pressure kPa gauge
% XMEAS(1,17) Stripper Underflow (stream 11) m3/hr
% XMEAS(1,18) Stripper Temperature Deg C
% XMEAS(1,19) Stripper Steam Flow kg/hr
% XMEAS(1,20) Compressor Work kW
% XMEAS(1,21) Reactor Cooling Water Outlet Temp Deg C
% XMEAS(1,22) Separator Cooling Water Outlet Temp Deg C
%
% Sampled Process Measurements
%
% Reactor Feed Analysis (Stream 6)
% Sampling Frequency = 0.1 hr
% Dead Time = 0.1 hr
% Mole %
% XMEAS(1,23) Component A
% XMEAS(1,24) Component B
% XMEAS(1,25) Component C
% XMEAS(1,26) Component D
% XMEAS(1,27) Component E
% XMEAS(1,28) Component F
%
% Purge Gas Analysis (Stream 9)
% Sampling Frequency = 0.1 hr
% Dead Time = 0.1 hr
% Mole %
% XMEAS(1,29) Component A
% XMEAS(1,30) Component B
% XMEAS(1,31) Component C
% XMEAS(1,32) Component D
% XMEAS(1,33) Component E
% XMEAS(1,34) Component F
% XMEAS(1,35) Component G
% XMEAS(1,36) Component H
%
% Product Analysis (Stream 11)
% Sampling Frequency = 0.25 hr
% Dead Time = 0.25 hr
% Mole %
% XMEAS(1,37) Component D
% XMEAS(1,38) Component E
% XMEAS(1,39) Component F
% XMEAS(1,40) Component G
% XMEAS(1,41) Component H
%
% Process Disturbances
%
% IDV(1,1) A/C Feed Ratio, B Composition Constant (Stream 4) Step
% IDV(1,2) B Composition, A/C Ratio Constant (Stream 4) Step
% IDV(1,3) D Feed Temperature (Stream 2) Step
% IDV(1,4) Reactor Cooling Water Inlet Temperature Step
% IDV(1,5) Condenser Cooling Water Inlet Temperature Step
% IDV(1,6) A Feed Loss (Stream 1) Step
% IDV(1,7) C Header Pressure Loss - Reduced Availability (Stream 4) Step
% IDV(1,8) A, B, C Feed Composition (Stream 4) Random Variation
% IDV(1,9) D Feed Temperature (Stream 2) Random Variation
% IDV(1,10) C Feed Temperature (Stream 4) Random Variation
% IDV(1,11) Reactor Cooling Water Inlet Temperature Random Variation
% IDV(1,12) Condenser Cooling Water Inlet Temperature Random Variation
% IDV(1,13) Reaction Kinetics Slow Drift
% IDV(1,14) Reactor Cooling Water Valve Sticking
% IDV(1,15) Condenser Cooling Water Valve Sticking
% IDV(1,16) Unknown
% IDV(1,17) Unknown
% IDV(1,18) Unknown
% IDV(1,19) Unknown
% IDV(1,20) Unknown
%
%
% =============================================================================
% Function Evaluator
%
% Inputs:
%
% NN = Number of differential equations
% Time = Current time(hrs)
% YY = Current state values
%
% Outputs:
%
% YP = Current derivative values
%
% MEASUREMENT AND VALVE COMMON BLOCK
global XMEAS XMV
% DISTURBANCE VECTOR COMMON BLOCK
global NN
XMNS = 0; % Initialization by MWB
% NOTE: I have included isd in the /PV/ common. This is set
% non-zero when the process is shutting down.
global UCLR UCVR UTLR UTVR...
XLR XVR ETR ESR...
TCR TKR DLR ...
VLR VVR VTR ...
PTR PPR...
CRXR RR RH ...
FWR TWR QUR HWR UAR...
UCLS UCVS UTLS UTVS...
XLS XVS ETS ESS...
TCS TKS DLS...
VLS VVS VTS...
PTS PPS...
FWS TWS QUS HWS...
UCLC UTLC XLC...
ETC ESC TCC DLC...
VLC VTC QUC...
UCVV UTVV XVV...
ETV ESV TCV TKV...
VTV PTV...
VCV VRNG VTAU...
FTM...
FCM XST XMWS...
HST TST SFR...
CPFLMX CPPRMX CPDH...
TCWR TCWS...
HTR AGSP...
XDEL XNS...
TGAS TPROD VST IVST;
global...
ADIST...
BDIST...
CDIST...
DDIST...
TLAST...
TNEXT...
HSPAN...
HZERO...
SSPAN...
SZERO...
SPSPAN...
IDVWLK;
global...
AVP BVP CVP...
AH BH CH...
AG BG CG...
AV...
AD BD CD...
XMW;
for I = 1:20
if IDV(I,1) > 0
IDV(I,1) = 1;
else
IDV(I,1) = 0;
end
end
IDVWLK(1,1)=IDV(8,1);
IDVWLK(2,1)=IDV(8,1);
IDVWLK(3,1)=IDV(9,1);
IDVWLK(4,1)=IDV(10,1);
IDVWLK(5,1)=IDV(11,1);
IDVWLK(6,1)=IDV(12,1);
IDVWLK(7,1)=IDV(13,1);
IDVWLK(8,1)=IDV(13,1);
IDVWLK(9,1)=IDV(16,1);
IDVWLK(10,1)=IDV(17,1);
IDVWLK(11,1)=IDV(18,1);
IDVWLK(12,1)=IDV(20,1);
for I = 1:9
if TIME >= TNEXT(I,1);
HWLK=TNEXT(I,1)-TLAST(I,1);
SWLK=ADIST(I,1)+HWLK*(BDIST(I,1)+HWLK*(CDIST(I,1)+HWLK*DDIST(I,1)));
SPWLK=BDIST(I,1)+HWLK*(2*CDIST(I,1)+3*HWLK*DDIST(I,1));
TLAST(I,1)=TNEXT(I,1);
% TESUB5(SWLK,SPWLK,ADIST(I,1),BDIST(I,1),CDIST(I,1),DDIST(I,1),...
% TLAST(I,1),TNEXT(I,1),HSPAN(I,1),HZERO(I,1),SSPAN(I,1),SZERO(I,1),...
% SPSPAN(I,1),IDVWLK(I,1));
% TESUB5(S,SP,ADIST,BDIST,CDIST,DDIST,
% TLAST,TNEXT,HSPAN,HZERO,SSPAN,SZERO,...
% SPSPAN,IDVFLAG) "VAL" added to subroutine variables. "I" changed to "It".
% Substitution of TESUB5 for call statement. MWB
S5 = SWLK;
SP5 = SPWLK;
ADISTVAL = ADIST(I,1);
BDISTVAL = BDIST(I,1);
CDISTVAL = CDIST(I,1);
DDISTVAL = DDIST(I,1);
TLASTVAL = TLAST(I,1);
TNEXTVAL = TNEXT(I,1);
HSPANVAL = HSPAN(I,1);
HZEROVAL = HZERO(I,1);
SSPANVAL = SSPAN(I,1);
SZEROVAL = SZERO(I,1);
SPSPANVAL = SPSPAN(I,1);
IDVFLAGVAL = IDVWLK(I,1);
It = -1;
H5 = HSPANVAL * TESUB7(It) + HZEROVAL;
S1 = SSPANVAL * TESUB7(It) * IDVFLAGVAL + SZEROVAL;
S1P = SPSPANVAL * TESUB7(It) * IDVFLAGVAL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -