WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Ladezustand eines Batteriespeichers

 

DaNi1988

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2014, 15:43     Titel: Ladezustand eines Batteriespeichers
  Antworten mit Zitat      
Hallo zusammen,

folgendes im Prinzip banales Problem überfordert mich gerade mit meinen bescheidenen Matlab-Kenntnissen:
Ich möchte den Ladezustand eines Batteriespeichers berechnen. Im ersten Schritt soll er die Energie einspeichern, die von einer zugehörigen Photovoltaik-Anlage bereit gestellt wird und später durch den Eigenverbrauch des Hauses wieder entladen werden. Das war einfach zu lösen, indem ich den Leistungsfluss mit cumtrapz integriere.
Dabei passiert es aber, dass der Speicherinhalt ins Negative gehen kann beziehungsweise beliebig hoch ansteigen kann. Mit dem Code

Speicherladung(find(Speicherladung<0))=0

konnte ich zwar Grenzen einführen, allerdings wird dann der Speicherinhalt beim Laden nicht ab Null geladen, sondern ab dem ursprünglichen negativen Wert. Analog natürlich mit der oberen Grenze.
Wie kann ich das hinkriegen, dass die Integration immer abhängig vom Füllstand bei den gesetzten Grenzen anfängt?
Ich hoffe das war verständlich genug formuliert..

Danke für jede Hilfe
DaNi1988


DaNi1988

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2014, 15:57     Titel: Nachtrag zum Batteriespeicher
  Antworten mit Zitat      
Zur Veranschaulichung hier noch ein Bild wie es momentan aussieht:
In Rot die Begrenzungen bei Null und der Speicherkapazität. Zur Mitte des ersten Tages sollte die Füllung erstmal bei Null bleiben und dann auf ca. 3 kWh ansteigen anstatt von -1,5 bis 1,2. Analog dann für die folgenden Tage und für die obere Grenze.

Speicherladung.PNG
 Beschreibung:

Download
 Dateiname:  Speicherladung.PNG
 Dateigröße:  21.42 KB
 Heruntergeladen:  434 mal
 
DaNi1988

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.12.2014, 16:36     Titel: Code zum Ladezustand eines Batteriespeichers
  Antworten mit Zitat      
Hallo nochmal,

mittlerweile bin ich selbst auf eine Lösung gekommen die ich euch nicht vorenthalten will.
Vorher habe ich den Vektor des Leistungsflusses einfach aufintegriert. Jetzt habe ich geeignete Abfragen eingesetzt, es wird nur noch integriert, wenn genügend Platz im Energiespeicher zur Verfügung steht bzw. wenn er nicht ganz leer ist. Am Ende werden die einzelnen Bilder gespeichert und wieder geschlossen.
Ich hoffe ich habe das genügend allgemeingültig programmiert, so dass der nächste ohne groß umzuformen das übernehmen kann.

Gruß,
DaNi1988

Code:
function [EnSpeicher] = Fkt_Speicherladung(Fuellstand_Speicher, Zeit, ZeitschrittStunden, Speicherkap, LastChar, PVChar, GesChar, PVmax, Rueckspeisebegrenzung, fig, Titel)


ymin = -PVmax;  % Grenzen für das erste Bild
ymax = PVmax;
yminSpeicher = -3;  % Grenzen für das zweite Bild
ymaxSpeicher = Speicherkap*1.2;


Schranke=GesChar; % Maximale Rückspeisung, oberhalb derer die Leistung vom Speicher abgehalten wird
Schranke((Schranke)<Rueckspeisebegrenzung) = Rueckspeisebegrenzung;

Einspeichern = GesChar - Schranke;
Ausspeichern = (GesChar>0).*GesChar;

SpeicherkapGrenze = linspace(Speicherkap,Speicherkap, length(Zeit)); %Nur für den Plot relevant
NullGrenze = linspace(0,0,length(Zeit));

gruen=[0.2 0.6 0];
schraffiert = [0.8, 0.8, 1];,


idxSpeicherEntladen = Ausspeichern>0; % Index, wo der Speicher entladen wird
idxSpeicherLaden = Einspeichern<0;  % Index, wo Rückspeisung den Grenzwert überschreitet, negativ weil Rückspeisung negativ gezählt wird
 

t = 1; %Laufvariable
 EnSpeicher = linspace(Fuellstand_Speicher,Fuellstand_Speicher,length(Zeit))'; % Speichervektor definieren
 while(t<length(Zeit))
     if idxSpeicherLaden(t) == 1  %wird der Speicher geladen?
         if EnSpeicher(t-1)<=Speicherkap  %Stellt sicher, dass der Speicher nur geladen wird wenn er noch nicht voll ist
             EnSpeicher(t) = -Einspeichern(t) .* ZeitschrittStunden + EnSpeicher(t-1); % Dann integriere den aktuellen Wert und rechne ihn auf den vorherigen dazu
         elseif EnSpeicher(t-1)>Speicherkap % Ansonsten setze den Speicherstand auf den Maximalwert
             EnSpeicher(t)=Speicherkap; % Dieser Fall sollte jetzt gar nicht mehr auftreten
         end
         
     
     elseif idxSpeicherEntladen(t) == 1  %wird der Speicher entladen?
         if EnSpeicher(t-1)>=0  
      EnSpeicher(t) = -Ausspeichern(t) .* ZeitschrittStunden + EnSpeicher(t-1); % Dann integriere den aktuellen Wert und rechne ihn auf den vorherigen dazu
      elseif EnSpeicher(t-1)<0 % Ansonsten setze den Speicherstand auf Null
             EnSpeicher(t)=0; % Dieser Fall sollte jetzt gar nicht mehr auftreten
         end
         
     elseif idxSpeicherLaden(t)==0 && idxSpeicherEntladen(t) == 0
         if t == 1
             EnSpeicher(t) = EnSpeicher(t); % Es gibt kein Nulltes Element im Vektor
         else
         EnSpeicher(t) = EnSpeicher(t-1);
         end
     end
     
 t = t+1;
 end

 EnSpeicher(EnSpeicher<0) = 0;  %Ohne dieser Maßnahme zappelt der Wert in der Nähe des Grenzwertes
 EnSpeicher(EnSpeicher>Speicherkap) = Speicherkap;
 
text = sprintf(Titel);
set(0,'defaultTextInterpreter','latex');
 
figure(fig), clf
subplot(2,1,1),plot(Zeit, LastChar,'r', Zeit,Schranke,'k'); hold on
subplot(2,1,1),plot(Zeit,PVChar, 'Color', gruen);
 
fill(Zeit, GesChar,schraffiert); hold on  % negativ, also Rückspeisung
fill(Zeit, Schranke,'w');    %Rückspeiseleistung noch nicht hoch genug, damit der Speicher abpuffern muss
fill(Zeit, Ausspeichern,schraffiert); % positiv, also Netzbezug
 grid on;
 grid(gca, 'minor');
 ylim ([ymin, ymax]);
 title(text);
legend('SLP','SLP und PV','Nur PV','eingespeicherte Energie', 'Location', 'South','Orientation','horizon');
xlabel('Wochentag');
ylabel('kW');
subplot(2,1,2),plot(Zeit, NullGrenze, 'r', Zeit, SpeicherkapGrenze, 'r', Zeit,  EnSpeicher); grid on, hold on
grid(gca, 'minor');
ylim ([-0.5, Speicherkap*1.2]);
title('Speicherladung');
xlabel('Wochentag');
ylabel('kWh');
 
print( figure(fig), '-dpng', text);  %Speichert die einzelnen Bilder ab
close ('figure', fig);               % und schließt das Bild anschließend

end


Sommer gut.png
 Beschreibung:

Download
 Dateiname:  Sommer gut.png
 Dateigröße:  78.51 KB
 Heruntergeladen:  354 mal
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.