% skr_simuliere
% Simuliert Simulink-Modell mit Anfangswerten, die von außen geändert
% werden sollen über Anfangszustand
clear all
clc
close all

fhV=figure('Position',[ 840         380         520         310]);
fh0=figure('Position',[ 840         41         520         280]);

%% Deklaration von Variablen

d=1.295;              %Durchmesser [cm]
A=pi*(d/2)^2;         %Rohrquerschnitt in cm2
g=980;                %Erdbeschleunigung in cm/s2
h0=53;                %Höhe des Wassers bei t=0 in cm;
rho=1;                %Dichte des Wassers in g/cm3
Qzu=0;                %cm3/s
Fuellgewicht=700;     %Fuellgewicht der Flasche in g
dAbschlussbehaelter=37;         % Durchmesser des zylindrisch angenommenen Abflussbehälters [cm]
V0_Flasche=0;                   %V0 der Flasche in cm3
L=10;                           %Abstand zwischen dem Ventil und der Flasche in cm

Geschwindigkeitsziffer=0.97;    %Fluessigkeitsreibung
Kontraktionszahl=0.61;          %Verengung des austrahlenden Strahls
Ausflusszahl=Geschwindigkeitsziffer*Kontraktionszahl;

i=0;                 %Anzahl der durgeführten Dosiervorgänge
j=j+1;
bEnde=0;             %Ist der Behälter leer ??? Nein

%Stützpunkte für die Spline-Interpolation
Xmin=0;              
Ymin=0;

Xeins=10790.384;
Yeins=15.740;

Xzwei=33926.958;
Yzwei=21.718;

Xdrei=45226.656;
Ydrei=30.327;

Xmax=5.662081345060835e+04;
Ymax=53;

stuetzwerteArr=[Ymin Yeins Yzwei Ydrei Ymax];
stuetzstellenArr=[Xmin Xeins Xzwei Xdrei Xmax];

%% Auswhal des Modells für die Gesamt-Simulation ohne Unterbrechnung

Fuellgewicht=Inf;

mdlName='bspModell_Brice';

tSimIntervall=[0 360]; %Simulationszeit

sim(mdlName,tSimIntervall);
hDurchgehend=h;
mDurchgehend=m;
tSimDurchgehend=tSim;

%% Simulation mit Unterbrechung

Fuellgewicht=500; % Maximaler Wert bei einer Simulation für w
simOut=sim(mdlName,'StartTime',sprintf('%f',tSimIntervall(1)),'StopTime',sprintf('%f',tSimIntervall(2)));

h=get(simOut,'h');
m=get(simOut,'m');
tSim=get(simOut,'tSim');

hGesamt=h;
mGesamt=m;
tSimGesamt=tSim;

% FinalZustand holen
xFinal=get(simOut,'xFinal');

j=j+1;

while tSimGesamt(end)<tSimIntervall(end) & hGesamt(end)>0 & ~bEnde
	set(0,'CurrentFigure',fhV);
	clf
	subplot(211);
	plot(tSim,m,'m');
	hold on
	plot(tSim,m,'k.');

	title('Werte von Teilsimulation');
    xlim(tSimIntervall);

	subplot(212)
	plot(tSimGesamt,hGesamt,'r');
	legendTxt={'Zusammengesetzt'};
	hold on
	plot(tSimGesamt,hGesamt,'k.');
	legendTxt(end+1)={'Zusammengesetzt'};

	legend(legendTxt);
	title('Gesamtwerte');
    xlim(tSimIntervall);
	
	i=i+1;
	if i>60
		bEnde=1;
	end
	
	% Simulation mit neuen Anfangszustand
	xInitialOwn=xFinal;
	xInitialOwn(1)=0;
	clc
    simOut=sim(mdlName,...
		             'StartTime',sprintf('%f',tSimGesamt(end)),...
					 'StopTime',sprintf('%f',tSimIntervall(2)),...
					 'LoadInitialState','on','InitialState','xInitialOwn');

	h=get(simOut,'h');
	m=get(simOut,'m');
	tSim=get(simOut,'tSim');


	hGesamt=[hGesamt; h];
	mGesamt=[mGesamt; mGesamt(end)+m];
	tSimGesamt=[tSimGesamt; tSim];


	% FinalZustand holen
	xFinal=get(simOut,'xFinal');
	
end

set(0,'CurrentFigure',fh0);
subplot(211)
plot(tSimDurchgehend,hDurchgehend);
legendTxt={'Durchgehend simuliert'};
hold on
plot(tSimDurchgehend,hDurchgehend,'c.');
legendTxt(end+1)={'Durchgehend simuliert'};

plot(tSimGesamt,hGesamt,'r');
legendTxt(end+1)={'Zusammengesetzt'};
plot(tSimGesamt,hGesamt,'k.');
legendTxt(end+1)={'Zusammengesetzt'};

legend(legendTxt);
ylabel('h');
xlim(tSimIntervall);

subplot(212)
plot(tSimDurchgehend,mDurchgehend);
legendTxt={'Durchgehend simuliert'};
hold on
plot(tSimDurchgehend,mDurchgehend,'c.');
legendTxt(end+1)={'Durchgehend simuliert'};

plot(tSimGesamt,mGesamt,'r');
legendTxt(end+1)={'Zusammengesetzt'};
plot(tSimGesamt,mGesamt,'k.');
legendTxt(end+1)={'Zusammengesetzt'};

legend(legendTxt);
ylabel('m');
xlim(tSimIntervall);



