APPENDIX A APPENDIX B 3 APPENDIX C 4 APPENDIX D
Appix A: Plots of selected controlled process models P-controller, Parameter to 5 output y.4.3. -. 3 4 time [s] sim sim sim3 sim4 sim5 sim6 sim7 sim8 sim9 sim sim sim sim3 sim4 sim5 Figure I Results of Process 4 simulation with P-controller. PI-controller, Parameter to 5 output y.4.3. -. 3 4 time [s] sim sim sim3 sim4 sim5 sim6 sim7 sim8 sim9 sim sim sim sim3 sim4 sim5 Figure II Results of Process 4 simulation with PI-controller.
Appix B: Mathlab code for calculation of IAE and TV The processes were simulated in Simulink, and IAE and TV were calculated in Mathlab by using the script IAEandTV.m % beregninger av IAE og TV for settpunktsringer s = [ ]; % for settpunktring og for load change step=ys(,)-ys(,); % Benyttet konstant steglengde, krav for Simpsons % y output er lagret i ys- for settpunktsring for i=:length(ys(,:)) % antall y rekkevektorer (- for tid-vektor) e=abs(ys(:,i)-s()); % avviket fra settpunktet m=[::n-]; % indexer for IAE beregninger % Simpson`s /3 regelen anves. Den kan anves ved odde antall målinger %evt partall antall subintervaller IAE = sum(step/3*(e(m)+4*e(m+)+e(m+)));%beregner IAE_set((i-),:)=IAE; % Beregner Total Variasjonen(TV) i output(u) fra % controlleren for settpunktsring for i=:length(us(,:)) N=length(yd); % antall funksjonsevalueringer u_s=us(:,i); k=[::n]; % indexer for TV beregninger TV = sum(abs(u_s(k)-u_s(k-))); %TV=sum(abs[x TV_set(i-,:)=TV; % beregninger av IAE og TV for loadchange step=y_load(,)-y_load(,); % Benyttet konstant steglengde, krav for Simpsons % y output er lagret i yload- for settpunktsring for i=:length(y_load(,:)) % antall y rekkevektorer (- for tid-vektor) e=abs(y_load(:,i)-s()); % avviket fra settpunktet m=[::n-]; % indexer for IAE beregninger % Simpson`s /3 regelen anves. Den kan anves ved odde antall målinger %evt partall antall subintervaller IAE = sum(step/3*(e(m)+4*e(m+)+e(m+)));%beregner IAE_load(i-,:)=IAE; % Beregner Total Variasjonen(TV) i output(u) fra % controlleren for load change for i=:length(u_load(,:)) N=length(u_load); % antall funksjonsevalueringer uload=u_load(:,i); k=[::n]; % indexer for TV beregninger TV = sum(abs(uload(k)-uload(k-))); TV_load(i-,:)=TV; IAE_set %Resultater TV_set IAE_load TV_load 3
Appix C: Plots of simulated models for analysis of IAE and TV process set point change Astrom(Ms=.4) Astrom(Ms=) 3 4 5 6 7 8 Astrom(Ms=.4) Astrom(Ms=) 3 4 5 6 7 8 Figure III Pure dead time process, set point change. - -.4 -.6 process load change Astrom(Ms=.4) Astrom(Ms=) -.8 3 4 5 6 7 8.6.4-3 4 5 6 7 8 Figure IV Pure dead time process, load change. Astrom(Ms=.4) Astrom(Ms=) 4
process set point change IMC Astrom(Ms=.4) Astrom(Ms=) Tyreus-Luyben D - 5 5 IMC Astrom(Ms=.4) Astrom(Ms=) Tyreus-Luyben D 5 5 Figure V Integrating process, set point change. process load change - -.4 -.6 -.8 IMC Astrom(Ms=.4) Astrom(Ms=) Tyreus-Luyben D - 5 5 IMC Astrom(Ms=.4) Astrom(Ms=) Tyreus-Luyben D - 5 5 Figure VI Integrating process, load change. 5
.5 process 3 set point change D D 3 4 5 6 D D - 3 4 5 6 Figure VII Process example G 3, set point change. - -.4 -.6 process 3 load change D D -.8 3 4 5 6.3. -. 3 4 5 6 Figure VIII Process example G3, load change. D D 6
.5 process 4 set point change D D 3 4 5 6 7 8 D D 3 4 5 6 7 8 Figure IX Process example G 4, set point change. - -.4 -.6 process 4 load change D D -.8 3 4 5 6 7 8.4.3. -. 3 4 5 6 7 8 Figure X Process example G 4, load change. D D 7
process 5 set point change - D D - 5 5 5 3 35 4 D D 5 5 5 3 35 4 Figure XI Process example G 5, set point change. process 5 load change - - -3 D D -4 5 5 5 3 35 4.6.4 D D - 5 5 5 3 35 4 Figure XII Process example G 5, load change. 8
3 process 6 set point change D D - - 3 4 5 6 D D 3 4 5 6 Figure XIII Process example G 5, set point change. - - -3 process 6 load change D D -4 3 4 5 6 8 6 4 D D - 3 4 5 6 Figure XIV Process example G 6, load change. 9
Appix D: Mathlab code for frequency analysis routine minbode.m routine function [A,vA,w8,wc,GM,PM,Ms,Mt]=minbode_L(num,den,gain,deadtime,w) %Frequency analysis of SISO system L= gain*deadtime*num/den %By Truls Larsson, Trondheim 5.9.98 and.9.98 % %Kall: minbode(num,den,gain,deadtime,w) %gir: Bode-plott av L samt frekvensplott av S og T (S=/+L; T=L/+L) % %eller: [A,vA,w8,wc,GM,PM,Ms,Mt]=minbode(num,den,gain,deadtime,w) %gir: amplitude (A) og fase (va) av L som funksjon av frekvens, % w8 (der va=-8 grader), wc (der A=), GM, PM, % samt Ms (peak for S ) og Mt (peak for T ) % %Input: %num : er teller polynomet %den : er nevner polynomet %gain : er forsterkning %deadtime : er dodtid %w : er frekvensene (NB! omraadet maa vaere stort nok) %Eksempel: %num=[ ]; den=[5 ]; gain=.; deadtime=3; w= logspace(-,,); % if nargin== disp('usage: minbode(num,den,gain,deadtime,w)') disp('or: [A,vA,w8,wc,GM,PM,Ms,Mt]=minbode(num,den,gain,deadtime,w)') return %Frekvensresponsen teller=polyval(num,w*i); nevner=polyval(den,w*i); Dod =exp(-deadtime*w*i); Frek=gain*teller./nevner.*Dod; % korrigert av SiS %Amplitude og fase A=abs(Frek); va=angle(frek); %Test for stor sprang va=va(:length(va)-); va=va(:length(va)); DvA=vA-vA; for i=:length(dva) if DvA(i) > 3 va(i+:length(va))=va(i+:length(va))-*pi;
va=va*8/pi; %Beregning av w8 og gain margin if min(va)>-8 disp(['ingen fase kryssover frekvens i det aktuelle frekvens'... ' intervallet']) w8=[]; GM=[]; else for i=:length(va) if va(i)>-8 posisjon=i; %Secant w8=w(posisjon)-(va(posisjon)+8)*... (w(posisjon+)-w(posisjon))/(va(posisjon+)-va(posisjon)); %Gain margin ved interpolasjon Lw8=A(posisjon)+(w8-w(posisjon))*(A(posisjon+)-A(posisjon))... /(w(posisjon+)-w(posisjon)); GM=/Lw8; %Beregning av wc if max(a)< %disp('maks amplitude mindre enn ein.'); skrudd av wc=[]; vawc=[]; PM=[]; else for i=:length(a) %Kryssing oven fra if A(i)> posisjon=i; %Secant wc=w(posisjon)-(a(posisjon)-)*... (w(posisjon+)-w(posisjon))/(a(posisjon+)-a(posisjon)); %Fasen ved vawc=va(posisjon)+(wc-w(posisjon))*(va(posisjon+)-va(posisjon))... /(w(posisjon+)-w(posisjon)); PM=vAwc+8; %Beregning av S og T S=./abs(+Frek); Ms=max(S); T=abs(Frek./(+Frek)); Mt=max(T); if nargout== figure title('bode plot')
subplot() loglog(w,a) hold loglog([w8,w8],[,lw8]) loglog(w,ones(length(w)),':') ylabel('amplitude') title('bode plot') hold subplot() semilogx(w,va) hold semilogx(w,-ones(length(w))*8,':') semilogx([wc,wc],[vawc,-8]) axis([min(w) max(w) max([min(va),-36]) ]) ylabel('fase forskyvning') xlabel('frekvens') hold figure loglog(w,s,w,t,'.-') leg('s','t') xlabel('frekvens') ylabel('amplitude')