%   Script VORSTBEH.M
%
%   Vergleich von Regelung und Steuerung in der offenen Wirkungskette
%
%   Beispiel: Füllstandsregelung eines Behälters
%        Stellgröße: Zulaufvolumenstrom in l/min
%        Regelgröße: Füllstand in m
%
%
%
% J. Lunze
% für 5. Auflage: 2.5.2005
% für 6. Auflage: 2.12.2006
% für 7. Auflage: 28.4.2008
% für 8. Auflage: 27.1.2010
% für 9. Auflage: 16.2.2012
% für 10. Auflage: 27.1.2014
% für 12. Auflage: 23.03.2020
%
%   
clear
close all;

A1=0.1;         % Querschnitt in m^2
Vmax=100;   % max. Volumenstrom in l/min
A=0;
b=1e-3/A1;
e=-b;
d=0;
c=1;
Behaelter=ss(A, b, c, d);
x0=1;       %  Anfangsfüllstand 1m

%%   Füllstand bei Vorsteuerung
%   
figure(1)
dt=0.01;
Tend=2.5;
TV=1;
T=[0:dt:Tend];
%   Eingangsgröße UV: Vmax für 0 < t < Tend/2, sonst gleich 0
UV=zeros(size(T))';
for k=1:TV/dt
    UV(k,1)=Vmax;
end
subplot(6,2,[1,3])
plot(T, UV, 'b', [-0.3 0 0], [0 0 UV(1,1)], 'b');
axis([-0.3 Tend -Vmax/10 1.1*Vmax])
latexylabel('$$u$$');
rotateY;
xleer;
yticks([0 50 100]);
latextitle('Beh\"alter mit Vorsteuerung');
subplot(6,2,[5 7])
Y=lsim(Behaelter, UV, T);
plot(T, Y, 'b', [-0.3 0 0], [0 0 Y(1,1)], 'b');
latexylabel('$$y$$');
rotateY;
latexxlabel('$$t$$ in min');
axis([-0.3 Tend -0.1 1.1]);
xticks([0 1 2]);
yticks([0 1]);
 

%%  Füllstand bei P-Regler
%   
%figure(2)
for kP=[50, 70, 100]
    subplot(6,2,[2,4]);
    Regelkreisu=ss(A-b*kP*c, b*kP, -kP*c, kP);
    U=step(Regelkreisu, T);
    plot(T, U, 'b', [-0.3 0 0], [0 0 U(1,1)], 'b');
    hold on
    subplot(6,2,[6,8]);
    Regelkreis=ss(A-b*kP*c, b*kP, c, d);
    Y=step(Regelkreis, T);
    plot(T, Y, 'b', [-0.3 0 0], [0 0 Y(1,1)], 'b');
    hold on
end
subplot(6,2,[2,4])
axis([-0.3 Tend -Vmax/10 1.1*Vmax])
%ylabel('{\itu}_R  in l/min');
yleer;
rotateY;
xleer;
latextext(0.3, 90, '$$k_{\rm P}=100$$');
%latextext(0.23, 70, '75');
latextext(0.23, 20, '50');
latextitle('Beh\"alter mit Regelung');
hold off
subplot(6,2,[6,8]);
%latexylabel('$$y$$ in m');
%rotateY;
yleer;
latexxlabel('$$t$$ in min');
latextext(0.3, 0.9, '$$k_{\rm P}=100$$');
latextext(0.73, 0.1, '50');
axis([-0.3 Tend -0.1 1.1]);
xticks([0 1 2]);
%yticks([0 1]);
hold off
 

%%  Störverhalten bei Regelung und Vorsteuerung
%   
figure(3)
kP=50;
%   Regelkreis wird mit zwei Eingängen beschrieben:
%   1. Eingang ist Sollwert (gleich 1);
%   2. Eingang ist Vorsteuerung UV
subplot(6,1,[1,2])
UVn=(Vmax-kP)/Vmax*UV;
RegelkreisVorstu=ss(A-b*kP*c, [b*kP b], -kP*c, [kP 1]);
W=ones(size(T))';
U=lsim(RegelkreisVorstu, [W UVn], T);
plot(T, U, 'b', [-0.3 0 0], [0 0 U(1,1)],'b', T, UVn, 'b--')
axis([-0.3 Tend -Vmax/10 1.1*Vmax])
yticks([0 100]);
latexylabel('$$u$$ in $$\frac{\rm l}{\rm min}$$');
rotateY;
xleer;
latextext(0.5,90,'$$u$$');
latextext(0.5,30,'$$u_{\rm V}$$');
latextitle('Beh\"alter mit Vorsteuerung und Regelung');
%
subplot(6,1,[3,4])
RegelkreisVorst=ss(A-b*kP*c, [b*kP b], c, d);
Y=lsim(RegelkreisVorst, [W UVn], T);
plot(T, Y, 'b', [-0.3 0 0], [0 0 Y(1,1)],'b');
latexylabel('$$y$$ in m');
rotateY;
latexxlabel('$$t$$ in min');
axis([-0.3 Tend -0.1 1.1]);
xticks([0 1 2]);
yticks([0 1]);

%%   Störverhalten mit Vorsteuerung und Regelung
%   
figure(4)
D=zeros(size(UV));
ta=1.0;   % Zeitpunkt für Beginn der Störung
for k=ta/dt:Tend/dt+1
    D(k,1)=40;
end
%   Regelkreis wird mit drei Eingängen beschrieben:
%   1. Eingang ist Sollwert (gleich 1);
%   2. Eingang ist Vorsteuerung UVn
%   3. Eingang ist Störung
subplot(6,1,[1,2])
RegelkreisVorstud=ss(A-b*kP*c, [b*kP b e], -kP*c, [kP 1 0]);
W=ones(size(T))';
U=lsim(RegelkreisVorstud, [W UVn D], T);
plot(T, U, 'b', [-0.3 0 0], [0 0 U(1,1)],'b', T, D, 'b--');
axis([-0.3 Tend -Vmax/10 1.1*Vmax])
latexylabel('$$u, d$$  in $$\frac{\rm l}{\rm min}$$');
rotateY;
xleer;
yticks([0 100]);
latextext(0.5, 90, '$$u$$');
latextext(0.5, 15, '$$d$$');
latextitle('Beh\"alter mit Vorsteuerung und Regelung');
%
subplot(6,1,[3,4])
RegelkreisVorstd=ss(A-b*kP*c, [b*kP b e], c, [0 0 0]);
Y=lsim(RegelkreisVorstd, [W UVn D], T);
plot(T, Y, 'b', [-0.3 0 0], [0 0 Y(1,1)],'b');
hold on
%   Zum Vergleich ohne Regelung, aber mit Vorsteuerung wie zuvor
x0=Y(ta/dt, 1);    % Zustand bei Beginn der Störung
T1=[ta:dt:Tend]-ta;
D1=D(ta/dt:Tend/dt, 1);
RegelkreisVorstdo=ss(A, e, c, d);
Yohne=lsim(RegelkreisVorstdo, D1, T1, x0);
plot(T1+ta, Yohne,'b--');
latexylabel('$$y$$ in m');
rotateY;
latexxlabel('$$t$$ in min');
hold off
axis([-0.3 Tend -0.1 1.1]);
xticks([0 1 2]);
yticks([0 1]);



%%
%
Epsbildc15('vorstbeh');
