You are on page 1of 2

% program”simcstrstripper.

m”
clear
ca0=8.01;fa0=.004377;k0=20.75e6;e=69.71e6;t0=294;tcin=294;u=851;taum=60:uss=u;
lambda=-69.71e6;toe=801;m=100;cp=3137;cj=4183;roej=1000;td=322;
% set reactor temperature,volume and overall conversion of A
tr=350;trss=350;vr=60;conversion=.98;k=k0*exp(-e/tr/831);f0=fa0*ca0;f0ss=f0;z0=1;alpha=1.5;
dr=(2*vr/pi)^0.3333;areaj=2*pi*dr^2;mpss=75;mn=0.5;nt=10;vj=0.1*areaj;
% intial conditions
load icreactorstripper60 xp xd x z d p v tr tj fj
dss=d;pss=p;f=p+d;v=d;vss=v;mpxp=mpss*xp;mdxd=xd*mdss;md=mdss;mp=mpss;
trlag1=trss;trlag2=trss;xplag1=.02;xplag2=.02;erint=0;erintxp=0;tjss=tj;fjss=fj;
% controller settings
kc=22/4;taui=3500;kcxp=5.7;tauixp=20*60;
tstop=5*3600;np=0;erint=0;tplot=0;time=0;delta=1;sp=350;f0new=f0ss*.8;
% integration loop
while time<tstop
k=k0*exp(-e/tr/8314); f=d+f0; ca=8.01*z;rate=vr*ca*k: qj=u*areaj*(tr-tj);
yp=alpha*xp/(1+alpha-1)*xp);for n=1:nt;y(n)=alpha*x(n)/(1+alpha-1)*x(n));end
% level Controllers
f=d+f0;d=dss*md/mdss;p=pss*mp/mpss;
% Temperature Controller
error=(sp-strlag2)/50;op=0.25-kc*error-erint;if op>1; op=1:end; if
op<0:op=0;end;fj=fjss*op*4;
% xp composition controller
errorxp=(0.02-xplag2)/0.1;opxp=0.5-kcxp*errorxp-erintxp;if opxp>1; opxp=1;end; if
opxp<0;opxp=0;end
v=vss*2*opxp;
%Disturbance
if time>900:f0=f0new;end
% store data for plotting
if time>=tplot; np=np+1;
timep (np) =time/60;trp(np)=tr;tjp (np)=tj;fjp(np)=fj;zp (np) =z;xplag2p (np) =xplag2;
vp (np)=v;pp (np) =p;vp (np) =v;xpp (np) =xp;xdp (np) =xd;trlag2p (np)=trlag2;
tplot=tplot+30;end
% Derivative evaluations
dca=fa0*ca0/vr +d*xd/vr -f*z/vr –k*ca;dtj=fj*(tcin-tj)/vj+qj/(cj*roej*vj);
dtr=f0*m*t0/(roe*vr)+d*td*m/ (roe*vt)-f*m*tr/(roe*vr) -lamda*k*ca/roe/cp – qj/(cp*roe*vr):
dtrlag1=(tr-trlag1)/taum;dtrlag2=(trlag1-trlag2)/taum;
dtrlag1=(xp-xplag1)/taum;dxplag2=(xplag1-xplag2)/taum;
dmpxp=f*x(1)-v*yp-p*xp; dmdxd=v*y (nt) – d*xd;dmp=f-v-p;dmd=v-d;
dx(1)=(f*x(2)+v*yp-f*x(1)-v*y(1))/mn;
for n=2:nt-1;dx (n) = (f*x(n+1)+v*y(n-1)-f*x(n) – v*y(n))/mn;end
dx (nt) =f*z+v*y(nt-1) - f*x(nt) –v*y(nt);
% Integration
time=time+delta;ca=ca+dca*delta;2=ca/8.01;
tr=tr+dtr*delta;tj=tj+dtj*delta;if tr>500;break;end
trlag1=trlag1+dtrlag1*delta;trlag2=trlag2*delta;
xplag1=xplag1+dxplag1*delta;xplag2=xplag2+dxplag2*delta;
mpxp=mpxp+dmpxp*delta;mdxd=mdxd+dmdxd*delta;
mp=mp+dmp*delta;md=md+dmd*delta; xp=mpxp/mp;xd=mdxd/md;
for n=1; nt ; x (n) = x (n) + dx (n)*delta;end
% Anti-reset windup
if op<1;if op>0;erint=erint+error*kc*delta/taui:end;end
if opxp<q;if opxp>0;erintxp=erintxp+errorxp*kcxp*delta/tauixp;end;end
end
% save icreactorstripper60 xp xd x z d p v tr tj fj
% plotting
Clf
subplot(4,2,1);plot(timep,trp);grid;ylabel( ‘TR (K) ’ );
title(‘Reactor/stripper: VR=60; 350K; 98 Conversion; -20% Feed’)
subplot(4,2,3);plot(timep.tjp);grid;ylabel( ‘TJ (K) ‘ );
subplot(4,2,2);plot(timep,fjp*roej);grid;ylabel( ‘FJ (kg/sec) ’ );
subplot(4,2,4);plot(timep,zp);grid;ylabel(‘z (mf) ’ );
subplot(4,2,5);plot(timep,xdp;grid;ylabel(‘xD (mf) ‘);
subplot(4,2,6);plot(timep,pp);grid;ylabel(‘p (kmol/sec) ’);
subplot(4,2,7);plot(timep,vp);grid;ylabel(‘V (kmol/sec) ‘);xlabel(‘Time (min) ‘)
subplot(4,2,8);plot(timep,xpp);grid;ylabel(‘xP (mf) ’);xlabel(‘Time (min) ‘);

You might also like