clear all
clc
close all
int_T = 0.5;
run_count = 201;
STHE.V = 2.1;
STHE.Cp = 1.0;
STHE.rho = 10^06;
STHE.Cpc = 1.0;
STHE.rhoc = 10^06;
STHE.a = 1.41*(10^5);
STHE.b = 0.5;
STHE.Ths = 150;
STHE.Fs = 0.085;
STHE.Tcins = 25;
STHE.Fcs = 0.5;
alfa = STHE.Fs/STHE.V ;
num = STHE.a*STHE.Fcs^(STHE.b+1)/(STHE.rho*STHE.Cp*STHE.V);
Den = STHE.a*STHE.Fcs^STHE.b/(2*STHE.rhoc*STHE.Cpc);
beta = num /(STHE.Fcs + Den);
STHE.Ts = (alfa*STHE.Ths + beta*STHE.Tcins)/(alfa+beta);
STHE.Tcin = STHE.Tcins;
STHE.F = STHE.Fs*ones(run_count,1);
STHE.Th = STHE.Ths*ones(run_count,1);
STHE.Fc = STHE.Fcs*ones(run_count,1);
Time(1) = 0;
STHE.T(1) = STHE.Ts;
noise_std=0.07;
STHE.Tm(1) = STHE.T(1) + noise_std*randn;
PID.Kc = -1/20 ;
PID.Ti = 10 ;
PID.error = zeros(run_count,1);
PID.ip_max = 2 * STHE.Fcs;
PID.ip_min = 0.0001 ;
fprintf('\n\n\t Closed loop Dynamic Simulation \n\n\t')
change_type = input('Specify your choice :: \n PRESS 1 for Servo case \n PRESS 2 for Regulatory case \n\n' ) ;
setpoint = STHE.Ts * ones(run_count,1) ;
if ( change_type ==1 )
delta_setpt = 5 ;
step_time = 21 ;
setpoint(step_time:end) = setpoint(step_time:end) - delta_setpt;
elseif (change_type ==2)
delta_Th = 10;
step_time = 21 ;
STHE.Th(step_time:end) = STHE.Th(step_time:end) + delta_Th ;
else
fprintf('This is not a correct choice, please choose between 1 and 2 \n');
break
end
for k =1 :run_count-1
error(k) = setpoint(k) - STHE.Tm(k) ;
if ( k>1 )
P_contribution = PID.Kc * (error(k) - error(k-1) ) ;
I_contribution = 0;
delta_Fc = P_contribution + I_contribution ;
STHE.Fc(k) = STHE.Fc(k-1) + delta_Fc ;
if (STHE.Fc(k) > PID.ip_max)
STHE.Fc(k) = PID.ip_max ;
elseif (STHE.Fc(k) < PID.ip_min)
STHE.Fc(k) = PID.ip_min ;
end
end
Time(k+1)=k*int_T;
alfa=STHE.F(k)/STHE.V;
num = STHE.a*STHE.Fc(k)^(STHE.b+1)/(STHE.rho*STHE.Cp*STHE.V);
Den = STHE.a*STHE.Fc(k)^STHE.b/(2*STHE.rhoc*STHE.Cpc);
beta = num/(STHE.Fc(k)+Den);
STHE.Q=beta*(STHE.T(k) - STHE.Tcin);
dT_by_dt= alfa*(STHE.Th(k) - STHE.T(k))-STHE.Q;
STHE.T(k+1) = STHE.T(k) + int_T*dT_by_dt;
STHE.Tm(k+1) = STHE.T(k+1)+noise_std*randn;
end
set(0,'DefaultLineLineWidth',2)
set(0,'DefaultaxesLineWidth',2)
set(0,'DefaultaxesFontSize',16)
set(0,'DefaultTextFontSize',16)
set(0,'DefaultaxesFontName','arial')
figure(1)
plot(Time,setpoint,'--',Time,STHE.T,'-',Time,STHE.Tm,'-.'),grid
xlabel('Time(min)')
ylabel('STHE temperature (deg C)')
title('Controlled output (T)')
legend('Setpoint','True output','Measured output')
figure(2)
stairs(Time,STHE.Fc),grid
xlabel('Time(min)')
ylabel('Coolant flow (m3/s)')
title('Manipulated input (F_c)')
figure(3)
stairs(Time,STHE.Th),grid
xlabel('Time(min)')
ylabel('Hot fluid inlet temperature (deg C)')
title('Disturbance (T_h)')
figure(4)
plot(Time,setpoint - STHE.Ts,'--',Time,STHE.T - STHE.Ts,'-',Time,STHE.Tm - STHE.Ts,'-.'),grid
xlabel('Time(min)')
ylabel('Deviation in STHE temperature (deg C)')
title('Deviation in Controlled output (T)')
legend('Setpoint','True output','Measured output')
figure(5)
stairs(Time,STHE.Fc - STHE.Fcs),grid
xlabel('Time(min)')
ylabel('Deviation in Coolant flow (m3/s)')
title('Deviation in Manipulated input')
figure(6)
stairs(Time,STHE.Th - STHE.Ths),grid
xlabel('Time(min)')
ylabel('Deviation in Hot fluid inlet temperature (deg C)')
title('Deviation in Disturbance')