%   Script REGELKR.M
%
%   Prinzipielles Verhalten von Regelkreisen
%
% J. Lunze
% 18.1.1996
% für 3. Auflage: 3.4.2001
% für 4. Auflage: 19.9.2003
% für 5. Auflage: 6.6.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: 10.2.2012
% für 10. Auflage: 27.1.2014
% für 12. Auflage: 5.08.2019
%
%   
clear
close all
%%                  
%
%   Regelgröße und Stellgröße eines Regelkreises
%   bei steigender Reglerverstärkung
%
%   
%  PT1-Glied als Regelstrecke mit T=1
%  P-Regler
figure(1);
zs=1;
ns=[1 1];
Strecke=tf(zs, ns);
T=[0:0.02:3];
subplot(2,1,1);
[Y, T]=step(Strecke, T);
plot(T, Y, 'b--');
xleer;
hold on;
nr=1;
for kP=[1 5 10]
   zr=kP;
   Regler=tf(zr, nr);
   offeneKette=series(Regler, Strecke);
   Regelkreis=feedback(offeneKette, 1);
    subplot(2,1,1);
    Y=step(Regelkreis, T);
    plot(T, Y, 'b');
    hold on;
    subplot(2, 1, 2);
    Stellverhalten=feedback(Regler, Strecke);
    U=step(Stellverhalten, T);
    plot(T, U, 'b', [-1 0 0], [0 0 U(1,1)], 'b');
    hold on;
end;
subplot(2, 1, 2);
plot([-1 0],[0 0], 'b');
latexxlabel('$$t$$');
latexylabel('$$u$$');
rotateY;
axis([-0.2 1.6 -1 12]);
yticks([0 5 10]);
xticks([0 0.5 1 1.5]);
latextext(0.05, 2, '1');
latextext(0.05, 8, '$$k_{\rm P}=10$$');
hold off;
subplot(2, 1, 1);
plot([-1 0 0 10],[0 0 1 1],'b--', [-1 0],[0 0]);
axis([-0.2 1.6 -0.2 1.2]);
yticks([0 1]);
latexylabel('$$y$$');
rotateY;
xlabel('');
latextitle('\"Ubergangsfunktion eines P-geregelten Systems');
latextext(0.4, 0.15, '1');
latextext(-0.1, 0.9, '$$k_{\rm P}=10$$');
hold off;
 

%%  Ortskurve der Regelstrecke aus Aufgabe 7.1
%   
figure(2);
ns=[1 3 2];
for k=[1, 2, 5]
   Strecke=tf(k, ns);
   [Real, Imag]=nyquist(Strecke);
   plot(Real(:), Imag(:), 'b', dcgain(Strecke), 0, 'bo');
   hold on
   plot(Real(:), -Imag(:), 'b--');
   [Real, Imag]=nyquist(Strecke, 0.8); % 1 Punkt für \omega=0.8
   plot(Real(:), Imag(:), 'b*');
    hold on;
end;
latextitle('Regelstrecke $$G(s) = k/(s+1)(s+2)$$ f\"ur $$k=1, 2, 5$$');
latexylabel('Im');
rotateY;
latexxlabel('Re');
plot([0, Real(:)],[0, Imag(:)], 'b:');   %  Real, Imag sind die Koordinaten des letzten Punktes!
hold on
plot([-1.5 4],[0 0],'k:',[0 0],[-2 2],'k:');
latextext(1, -1.8, '$$\leftarrow\;\; \omega$$');
axis([-1.2 2.8 -2 2]);
xticks([-1 0 1 2]);
yticks([-2 -1 0 1 2]);
axis('square');
hold off;


%%   Ortskurve der offenen Kette mit PI-Regler
%   
figure(3);
%subplot(3,3,[1,2,4,5]);
zo=2;
no=[1 2 0];
offeneKette=tf(zo, no);
[Real, Imag]=nyquist(offeneKette);
plot(Real(:), Imag(:), 'b');
hold on
plot(Real(:), -Imag(:), 'b--');
hold on;
latextitle('Ortskurve der offenen Kette');
latexylabel('Im');
rotateY;
latexxlabel('Re');
latextext(-1, -0.8, '$$\omega \; \uparrow$$');
plot([-5 5],[0 0],'k:',[0 0],[-6 6],'k:');
axis([-1.2 2.8 -2 2]);
xticks([-1 0 1 2]);
yticks([-2 -1 0 1 2]);
axis('square');
hold off


%%  Ortskurven des geschlossenen Kreises
%   
figure(4);
Regelkreis=tf([2], [1 2 2]);
subplot(4,4,[1 2 5 6]);
[Real, Imag]=nyquist(Regelkreis);
plot(Real(:), Imag(:), 'b', dcgain(Regelkreis), 0, 'bo');
hold on
plot(Real(:), -Imag(:), 'b--');
hold on;
plot([-2 2],[0 0],'k:', [0 0], [-10 10], 'k:');
latextitle('F\"uhrungsfrequenzgang');
latexxlabel('Re');
latexylabel('Im');
rotateY;
latextext(0.3, -0.9, '$$\leftarrow$$');
axis([-0.5 1.5 -1 1]);
axis('square');
xticks([0 1]);
yticks([-1 0 1]);
hold off;
%
subplot(4,4,[3 4 7 8]);
Stoerverhalten=tf([1 2 0],[1 2 2]);
[Real, Imag]=nyquist(Stoerverhalten);
plot(Real(:), Imag(:), 'b', dcgain(Stoerverhalten), 0, 'bo');
hold on
plot(Real(:), -Imag(:), 'b--');
hold on;
plot([-2 2],[0 0],'k:', [0 0], [-10 10], 'k:');
latextitle('St\"orfrequenzgang');
latexxlabel('Re');
ylabel('');
latextext(0.7, 0.9, '$$\rightarrow$$');
hold off;
axis([-0.5 1.5 -1 1]);
axis('square');
xticks([0 1]);
yticks([-1 0 1]);


%%  Regelgröße und Stellgröße eines Regelkreises
%   bei steigender Reglerverstärkung
%   
%  PT1-Glied als Regelstrecke mit T=1
%  I-Regler
%
figure(5);
zs=1;
ns=[1 1];
Strecke=tf(zs, ns);
subplot(2,1,1);
[Y, T]=step(Strecke);
plot(T, Y, 'b--');
hold on;
T=1;
kP=1;
zr=1;
for TN=[0.1 0.5 1.5]
   nr=[TN 0];
   Regler=tf(zr, nr);
    offeneKette=series(Regler, Strecke);
    Regelkreis=feedback(offeneKette, 1);
    subplot(2,1,1);
    [Y, T]=step(Regelkreis);
    plot(T, Y, 'b');
    hold on;
    subplot(2, 1, 2);
    Stellverhalten=feedback(Regler, Strecke);
    [U, T]=step(Stellverhalten);
    plot(T, U, 'b');
    hold on;
end;
subplot(2, 1, 2);
plot([-1 0],[0 0]);
plot([-1 10],[0 0],'k:');
latexxlabel('$$t$$');
latexylabel('$$u$$');
rotateY;
axis([-0.3 6 -1 4]);
xticks([0 2 4 6]);
yticks([0 2 4]);
hold off;
subplot(2, 1, 1);
plot([-1 0],[0 0], [-1 0 0 6],[0 0 1 1],'b--');
latexylabel('$$y$$');
rotateY;
xlabel('');
latextitle('\"Ubergangsfunktion eines I-geregelten Systems');
axis([-0.3 6 -0.1 1.8]);
xleer;
yticks([0 1 2]);
hold off;
 

%%  Störverhalten des Regelkreises (Strecke = PT1-Glied, P-Regler)
%   
figure(6);
zs=1;
ns=[1 1];
Strecke=tf(zs, ns);
T=[0:0.01:3];
subplot(2,1,1);
nr=1;
for kP=[1 5 10]
    zr=kP;
    Regler=tf(zr, nr);
    offeneKette=series(Regler, Strecke);
    %  Störverhalten bei Ausgangsstörung
    Regelkreis=feedback(1, offeneKette);
    subplot(2,1,1);
    Y=step(Regelkreis, T);
    plot(T, Y, 'b', [-1 0 0],[0 0 Y(1,1)], 'b');
    hold on;
    subplot(2, 1, 2);
    Stellverhalten=feedback(-Regler, -Strecke);
    U=step(Stellverhalten, T);
    plot(T, U, 'b', [-1 0 0],[0 0 U(1,1)], 'b');
    hold on;
end;
subplot(2, 1, 2);
plot([-3 10],[0 0],'k:');
latexxlabel('$$t$$');
latexylabel('$$u$$');
rotateY;
axis([-0.05 0.8 -11 0.9]);
xticks([0 0.2 0.4 0.6 0.8]);
yticks([-10 -5 0]);
latextext(0.1, -6, '$$k_{\rm P}=10$$');
latextext(0.1, -2.2, '5');
latextext(0.1, -0.5, '1');
hold off;
subplot(2, 1, 1);
plot([-3 10],[0 0],'k:');
axis([-0.05 0.8 -0.2 1.1]);
xleer;
yticks([0 1]);
latexylabel('$$y$$');
rotateY;
xlabel('');
latextitle('St\"or\"ubergangsfunktion eines P-geregelten Systems');
latextext(0.42, 0.35, '5');
latextext(0.4, 0.9, '$$k_{\rm P}=1$$');
latextext(0.42, -0.05, '10');
hold off;



%%  Regelgröße und Stellgröße eines Regelkreises
%   bei steigender Reglerverstärkung bei sprungförmiger Störung
%   
%  PT1-Glied als Regelstrecke mit T=1
%  I-Regler
%
figure(7);
zs=1;
ns=[1 1];
Strecke=tf(zs, ns);
subplot(2,1,1);
T=1;
kP=1;
zr=1;
for TN=[0.1 0.5 1.5]
    nr=[TN 0];
    Regler=tf(zr, nr);
    offeneKette=series(Regler, Strecke);
    Regelkreis=feedback(1, offeneKette);
    subplot(2,1,1);
    [Y, T]=step(Regelkreis);
    plot(T, Y, 'b', [-1 0 0], [0 0 Y(1,1)], 'b');
    hold on;
    subplot(2, 1, 2);
    Stellverhalten=feedback(-Regler, -Strecke);
    [U, T]=step(Stellverhalten);
    plot(T, U, 'b', [-1 0 0], [0 0 U(1,1)], 'b');
    hold on;
end;
subplot(2, 1, 2);
plot([-1 10],[0 0],'k:');
latexxlabel('$$t$$');
latexylabel('$$u$$');
rotateY;
axis([-0.5 7 -3.5 0.7]);
xticks([0 2 4 6 8]);
yticks([-3 -2 -1 0]);
hold off;
subplot(2, 1, 1);
plot([-1 10],[0 0],'k:');
latexylabel('$$y$$');
rotateY;
xleer;
latextext(1, 0.9, '$$T_{\rm I} = 0,\!1$$');
latextext(2.2, -0.5, '0,5');
latextext(0.2,-0.4, '1,5');
latextitle('St\"or\"ubergangsfunktion eines I-geregelten Systems');
axis([-0.5 7 -0.8 1.1]);
yticks([-0.5 0 0.5 1]);
hold off;

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