%% demo_reac_pid
% Simulering av sprangresponser for linearisert reaktor modell
% samt 1. ordens modellapproksimasjoner som skal benyttes til
% syntese av PI-regulatorer.

clear all

%%% Linearisert prosessmodell.
num=[0,-1,250];
den=[1,250,15625];
[a,b,d,e]=tf2ss(num,den);   % Tilstandsrommodell.

%%% Sprangrespons til den lineariserte modellen med to tidskonstanter.
h=0.001; t1=0.1;
t=0:h:t1;
y=step(num,den,t);

%%% Tunet 1.ordens modell (proev og feil ga denne)
num1=(2/125)*[-1/120,1]; den1=[1/75,1];
num1=(2/125)*[-1/120,1]; den1=[1/75,1];
y1=step(num1,den1,t);

%%% Halveringsregel
T1=1/125+0.5*(1/125); 
tau=1/250+0.5*(1/125); 
num2=(2/125)*[-tau,1]; den2=[T1,1];
y2=step(num2,den2,t);

%%% Plotter i samme figur.
figure(1), clf
plot(t,y,'r-',t,y1,'b-.',t,y2,'k--'), grid, ylabel('y')
legend('2. ordens modell: oppg. 1b)',...
   '1.ordens proev og feil: oppg. 2',...
   '1.ordens halverings metode: oppg 2')
title('Respons i y etter enhetssprang i u')
xlabel(strcat('Tid: 0 \leq t \leq ',num2str(t1),' [timer]'))

%%% Testing
num3=(2/125)*[-(1/250+1/125),1]; den3=[1/125,1];
y3=step(num3,den3,t);

%%% Plotter i samme figur.
figure(2), clf
plot(t,y,'r-',t,y1,'b-.',t,y2,'k--',t,y3,'r--'), grid, ylabel('y')
legend('2. ordens modell: oppg. 1b)',...
   '1.ordens proev og feil: oppg. 2',...
   '1.ordens halverings metode: oppg 2',...
   '1.ordens test')
title('Respons i y etter enhetssprang i u')
xlabel(strcat('Tid: 0 \leq t \leq ',num2str(t1),' [timer]'))

%%% Closed loop responses

T1=1/125; tau=1/250; k=2/125;

%% Standard tuning
Ti=T1; 
Kp=40;
Kp=dread('Kp=',Kp);

kt=k*Kp/Ti;
num_c1=kt*[0,-tau,1];
den_c1=[T1,(1-kt*tau),kt];
yc4=step(num_c1,den_c1,t);
%%
Ti=1/83; Kp=46.9;
kt=k*Kp/Ti;
num_c1=kt*[0,-tau,1];
den_c1=[T1,(1-kt*tau),kt];
yc2=step(num_c1,den_c1,t);

%%% Plotter i samme figur.
figure(3), clf
plot(t,yc2,'r--',t,yc4,'k-'), grid, ylabel('y')
legend('1.ordens halverings metode: oppg 2','2. ordens')
title('Respons i y etter enhetssprang i r')
xlabel(strcat('Tid: 0 \leq t \leq ',num2str(t1),' [timer]'))


