%   Script KUEHLER.M
%
%  Stabilitätsanalyse der Rückkopplung von Drehrohrofen
%  und Klinkerkühler
%
% J. Lunze
% für 2. Auflage: 14.12.1998
% für 3. Auflage: 3.4.2001
% für 4. Auflage: 18.9.2003
% für 5. Auflage: 19.4.2005
% für 6. Auflage: 14.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: 27.1.2014
% für 12. Auflage: 5.08.2019
%
%   
clear
close all
%
%  Für alle Modelle:  Zeit in Minuten
%                     Temperatur in Grad
%
% Modell des Kühlers: Klinkerenergiestrom --> Sekundärlufttemperatur
%
Tk=2;           % Zeitkonstante der PT1-Approximation
k1=40/15;       % Verstärkungsfaktor (40 K Temperaturerhöhung
                % bei 15% Energiestromerhöhung
zk=k1;
nk=[Tk 1];
Kuehlermodell=tf(zk, nk);
%
% Modell des Ofens: Sekundärlufttemperatur --> Klinkerenergiestrom
%
Td=3;           % DT1-Approximation der Brenntemperatur-
Tb=3;           %   regelung mit Zeitkonstanten Td, Tb
k2=1;           % Verstärkungsfaktor für Brenntemperatur-
            %   änderung --> Klinkertemperaturänderung
zb=k2*[Td 0];
nb=[Tb 1];
Ofen=tf(zb, nb);
            % Modell für Klinkermassenstrom

km=0.5;         % Verstärkungsfaktor Klinkertemperatur-
            % erhöhung -> Klinkerenergiestromerhöhung
zm=km*[-5 0 0];
nm=poly([-0.2 -0.2 -0.1]);
Klinker=tf(zm, nm);
Kette=series(Klinker, Ofen);


%%    Ortskurve der offenen Kette (Drehrohrofen und Klinkerkühler)
% 
figure(1);
subplot(4,4,[1 2 5 6]);
offeneKette=series(Kuehlermodell, Kette);
W=logspace(-2, 1, 500);
[Real, Imag]= nyquist(-offeneKette, W);
                    % Minuszeichen durch fehlende
                    % Vorzeichenumkehr im Kreis
plot(Real(:), Imag(:), 'b', Real(:), -Imag(:), 'b--', dcgain(offeneKette), 0, 'bo');
grid('on');
latextitle('Drehrohrofen - Klinkerk\"uhler');
axis([-5 9 -7 7]);
xticks([-5 0 5]);
yticks([-5 0 5]);
axis('square');
latexxlabel('Re');
latexylabel('Im');
rotateY;


%%  Simulation des Ofen-Kühler-Verhaltens bei impulsförmiger
%   Erhöhung des Klinkerenergiestromes
%
figure(2)
subplot(2,1,1);
Gesamtsystem=feedback(Kuehlermodell, Kette, 1);
Time=[0:0.01:200];
U=zeros(size(Time));
for k=1:10
   U(k)=10;
end
Y=lsim(Gesamtsystem, U, Time);
plot(Time, Y, 'b', [0 200],[0, 0],'k:');
xleer;
latexylabel('$$\theta$$ in K');
rotateY;
latextitle('Drehrohrofen - Klinkerk\"uhler');
axis([0 120 -0.3 0.3]);
yticks([-0.3 0 0.3]);


%%                  
%
%  Offene Kette bei geregeltem Klinkerkühler
%
%   
figure(1)
subplot(4,4,[3 4 7 8]);
%
%   Approximation des Kühlers durch DT2-Glied
%
Trk=4;
Tdr=4;
zkr=[Tdr 0];
nkr=conv([Trk 1], [Tk 1]);
KuehlerDT2=tf(zkr, nkr);
Reihenschaltung=series(KuehlerDT2, Kette);
W=logspace(-2, 1, 500);
[Real, Imag]=nyquist(-Reihenschaltung, W);
plot(Real(:), Imag(:), 'b', Real(:), -Imag(:), 'b--', dcgain(-Reihenschaltung), 0, 'bo');
grid('on');
hold on
plot([-5 5],[0 0],'k:', [-0.8 -1.2],[0 0],'k', [-1 -1], [0.2 -0.2],'k');
axis([-2.5 2.5 -2.5 2.5]);
xticks([-2 0 2]);
yticks([-2 0 2]);
axis('square');
%latextitle('Drehrohrofen - geregelter Klinkerk\"uhler');
latexxlabel('Re');
ylabel('');
hold off


%%                  
%
%   Simulation des Ofen-Kühler-Verhaltens mit geregeltem Kühler
%   bei impulsförmiger Erhöhung des Klinkerenergiestromes
%
%   
figure(2)
subplot(2,1,2);
Gesamtsystem2=feedback(KuehlerDT2, Kette, 1);
Time=[0:0.01:200];
U=zeros(size(Time));
for k=1:10
   U(k)=10;
end
Y=lsim(Gesamtsystem2, U, Time);
plot(Time, Y, 'b', [0 200],[0, 0],'k:');
latexxlabel('$$t$$ in min');
latexylabel('$$\theta$$ in K');
rotateY;
%latextitle('Drehrohrofen - Klinkerk\"uhler');
axis([0 120 -0.3 0.3]);
yticks([-0.3 0 0.3]);
xticks([0 50 100 150]);


%% Herstellung der Bilddateien *.eps
%
Epsbildc15('kuehler');
