%   Script RAUMTP.M
%
%   Verhalten einer Raumtemperaturregelung
%
% J. Lunze
% für 2. Auflage: 24.2.1999
% für 3. Auflage: 3.4.2001
% für 4. Auflage: 18.9.2003
% für 5. Auflage: 18.4.2005
% für 6. Auflage: 4.12.2006
% für 7. Auflage: 28.4.2008
% für 8. Auflage: 5.1.2010
% für 9. Auflage: 13.2.2012
% für 10. Auflage: 25.4.2014
% für 12. Auflage: 15.07.2019
%
%   
clear
close all
A = [-0.2];
b = [0.2];
c = 5;
d = 0;
Raum=ss(A, b, c, d);

%%   Übergangsfunktion des Raumes
%   (bei sprungförmiger Öffnung des Heizkörperventils)
%   
figure(1);
subplot(6,1,[1,2])
[Y, T]=step(Raum);
plot(T, Y, 'b');
xleer
latexylabel('$$h$$ in K');
rotateY;
latextitle('\"Ubergangsfunktion und Gewichtsfunktion eines Raumes');
axis([0 30 0 6]);
yticks([0 5]);


%%  Gewichtsfunktion des Raumes
%   (bei sprungförmiger Öffnung des Heizkörperventils)
% 
figure(1);
subplot(6,1,[3,4])
[Y, T]=impulse(Raum);
plot(T, Y, 'b');
latexxlabel('$$t$$ in min');
latexylabel('$$g$$ in K');
rotateY;
%latextitle('Gewichtsfunktion eines Raumes');
axis([0 30 0 1.2]);
yticks([0 1]);
xticks([0 10 20 30]);


%%  Berechnung der statischen Verstärkung
%
ks=dcgain(Raum)


%%  Führungsverhalten des Temperaturregelkreises mit P-Regler
%
figure(2)
Time=0:0.02:20;
subplot(6,1,[1,2]);
kP=0.3;
offeneKette=ss(A, b*kP, c, d);
Regelkreis=feedback(offeneKette, 1);
Regelkreismin=minreal(Regelkreis);
Y=step(Regelkreismin, Time);
plot(Time, Y, 'b');
xleer;
latexylabel('$$y$$ in K');
rotateY;
latextitle('F\"uhrungsverhalten und Eigenbewegung des Temperaturregelkreises');
hold on
plot([0 20], [0.6 0.6], 'k:', [0 20], [1,1],'b--');
axis([0 15 0 1.1]);
yticks([0 1]);
%latextext(7, 0.8, 'bleibende Regelabweichung');
latextext(14.6, 0.8, '$$\updownarrow e(\infty)$$');
%latextext(12.2, 0.9, '\uparrow');
%latextext(12.2, 0.68, '\downarrow');
hold off
%
subplot(6,1,[3,4]);
Y=initial(Regelkreismin, 2/5, Time);
plot(Time, Y, 'b');
latexxlabel('$$t$$ in min');
latexylabel('$$y$$ in K');
rotateY;
axis([0 15 0 2.1]);
xticks([0 5 10 15 20]);
yticks([0 2]);

%%  Bodediagramm der Temperaturregelstrecke
%
figure(3)
[Betrag, Phase, W]=bode(Raum);
subplot(2,1,1);
semilogx(W, 20*log10(Betrag(:)), 'b');
latextitle('Temperaturregelstrecke');
xleer
latexylabel('$$|G|$$ in dB');
rotateY;
yticks([-20 0 20]);
grid('on');
%
subplot(2,1,2);
semilogx(W, Phase(:), 'b');
latexxlabel('$$\omega$$ in rad/min');
latexylabel('$$\phi$$ in Grad');
rotateY;
yticks([-270 -180 -90 -45 0]);
xticks([0.01 0.1 1 10]);
grid('on');


%%   Ortskurve der Temperaturregelstrecke
%
figure(4);
[Real, Imag]=nyquist(Raum);
plot(Real(:), Imag(:), 'b');
hold on
plot([-3 10],[0 0],'k:',[0, 0], [-5 6],'k:', ks, 0, 'bo');
axis([-1 5.2 -3.1 3.1]);
xticks([0 2 4]);
yticks([-2 0 2 ]);
axis('square');
latexxlabel('Re');
latexylabel('Im');
rotateY;
latextitle('Temperaturregelstrecke');
hold off

%%     Bilder auf .EPS- und .PS-Dateien
%
Epsbildc15('raumtp');
