% ov6_1d.m
% Formaal: Simulering av system h_p(s)=exp(-2s)/(s^2+3s+2) med PI-regulator
% h_c(s)=Kp(1+Tis)/(Tis) der Ti=1.25 og Kp=5/9=0.56. PI-regulatorparametrene
% er funnet vha "Skogestads metode".
% Benyttede spesielle funksjoner og toolbox'er: ingen
% Skrevet av: David Di Ruscio, 18. oktober 2002.

num=[0,0,1];                        % Definerer teller og nevner i h_p(s)
den=[1,3,2];                        % uten transportforsinkelsesleddet.
[A,B,D,E]=tf2ss(num,den);           % Tilstandsrommodell uten transportforsinkelse.

t0=0; t1=20; N=200;                 % Lager en passende tidshorisont.
t=linspace(t0,t1,N);
dt=t(2)-t(1);                       % Samplingsintervall.

nt=floor(2/dt); yt=zeros(nt,1);     % Array for implementering av transport
                                    % forsinkelse.
r=1;                                % Referansesignal, sprang fra r=0 til r=1 ved t=t0.
Kp=0.56; Ti=1.25;                   % PI-regulatorparametre.
                                    
x0=[0;0];                           % Initialverdi for tilstandsvektoren, x.
z0=0;                               % Initialverdi for regulatortilstanden, z.

%%% Simuleringsloekke for det lukkede systemet.
x=x0; z=z0;
for i=1:N
   y=D*x;                           % Måling før transportforsinkelseselementet.
   
   ym=yt(nt);                       % Implementering av transportforsinkelse.
   for k=nt:-1:2
      yt(k)=yt(k-1);
   end
   yt(1)=y;
   
   e=r-ym;                          % Beregner reguleringsavviket.
   
   u=Kp*e+z;                        % Implementering av PI-regulator.
   z=z+dt*Kp*e/Ti;                  % (integrerer med eksplisitt Euler.)
   
   Y(i,1:2)=[ym y];                 % Lagrer systemvariable.
   R(i,1)=r;
   U(i,1)=u;  
   
   fx=A*x+B*u;                      % Paatrykker paadraget paa prosessen.
   x=x+dt*fx;                       % (integrerer med eksplisitt Euler.)
end

%%% Plotter resultatene
subplot(211), plot(t,U), grid
title('Simulering av lukket system'), ylabel('u')
subplot(212), plot(t,[R Y(:,1)]), grid
xlabel('Tid [s]'), ylabel('y og r')

print -deps ov6_fig1
