% Skript fuellstnd_31.m, in dem die Regelung des
% Füllstandes in eines System mit drei Tanks
% untersucht wird. Arbeitet mit Modell fuellstnd31.mdl 
clear;
% ------- Parameter des Systems
A1 =  0.02;    A2 = A1;      A3 = A1;   % Querschnitte der Tanks
A12 = 0.005;   A23 = A12;    A30 = A12; % Querschnitte der Verbindungen
h10 = 0.0;     h20 = h10;    h30 = h10; % Anfanfswerte der Füllstände
g = 9.89;
Tp = 0.01;      % Zeitkonstante der Pumpe
Qz = 0.05,     % Durchfluss der Pumpe
hmax = 0.65;    % Maximaler Füllstand im Tank 1
% ------- Parameter des Zweipunkt-Reglers mit verzögerter 
% und nachgebender Rückführung
Tt = 2;         % Zeitkonstante für die Verzögerte-Wirkung
Th = 1;        % Zeitkonstante für die Nachgebende-Wirkung
Kr = 10,         % Verstärkung der Rückführung
Usoll = 0.2,     % Sollwert für Füllstand im Tank 3
hy = 0.01           % Relais Hysterese
% Diskretisierung der Rückführungsglieder
sys_kTP = tf(1, [Tt,1]),          % Kontinuierliche Verzögerung
sys_kHP = tf([Th, 0],[Th,1]),     % Kontinuierliche Nachgebung

Ts = 0.001      % Abtastperiode
sys_dTP = c2d(sys_kTP, Ts),       % Diskrete Verzögerung
sys_dHP = c2d(sys_kHP, Ts),       % Diskrete Nachgebung
sys_rueck = Kr*sys_dTP*sys_dHP,   % Rückwirkung
%sys_rueck = Kr*sys_dTP,

[zaehl_rueck, nenner_rueck] = tfdata(sys_rueck); % Koeffizienten
zaehl_rueck = zaehl_rueck{:};     % des Zählers und Nenners
nenner_rueck = nenner_rueck{:};   % der Rückführung

% ------- Aufruf der Simulation
Tfinal = 50;
dt = 0.001;
sim('fuellstnd31', [0:dt:Tfinal]);
h1 = y.signals.values(:,1);
h2 = y.signals.values(:,2);
h3 = y.signals.values(:,3);
t = y.time;

figure(1);   clf;
plot(t, [h1, h2, h3]);
legend('h1', 'h2', 'h3');   grid on;
title(['Füllstände für Usoll = ',num2str(Usoll)])
