Hallo Zusammen,
ich versuche Anhand von einer vorgegebenen Energieerzeugung (PV) und einem vorgegebenen Lastgang (Last) das Laden einer Batterie mit der begrenzter Kapaziztät (Max) zu simulieren.
Hierbei werde die werte für den Strombezug von der Energiequelle (EV), die Einspeisung in das Netz (Einspeise), der Bezug aus dem Netz (Bezug) und dem Speicherstand (Speicher) errechnet. Der Speicherstand wird zu beginn auf 0 gesetz und durch eine Eingabe über eine TextBox begrenzt.
Ohne die Verwendung eines Speichers Funktioniert das Programm, aber sofern ich einen Wert für Speicher eintrage, sind erhebliche Fehler in der Berechnung vorhanden...
Dim dblPV As Double
Dim dblLast As Double
Dim dblEV As Double
Dim dblUeberschuss As Double
Dim dblEinspeise As Double
Dim dblBezug As Double
Dim dblSpeicher As Double
For i = 1 To 35041
dblPV = CDbl(PV(i, 1))
dblLast = CDbl(Last(i, 1))
dblEV = CDbl(EV(i, 1))
dblUeberschuss = CDbl(Ueberschuss(i, 1))
dblEinspeise = CDbl(Einspeise(i, 1))
dblBezug = CDbl(Bezug(i, 1))
dblSpeicher = CDbl(Speicher(i, 1))
dblUeberschuss = dblPV - dblLast
If i = 1 Then
'Wenn mehr Last als Erzeugung
If dblUeberschuss < 0# Then
dblUeberschuss = dblUeberschuss * (-1)
dblEV = dblPV
If dblUeberschuss >= 0# Then
dblUeberschuss = dblUeberschuss - dblSpeicher
dblBezug = dblUeberschuss - dblSpeicher
dblSpeicher = 0#
Else
dblSpeicher = 0# - dblUeberschuss
ÜdblUeberschuss = 0#
End If
dblEinspeise = 0#
'Wenn mehr Erzeugung als Last
Else
dblBezug = 0#
If dblUeberschuss <= Max Then
dblSpeicher = dblSpeicher + dblUeberschuss
dblEV = dblast + dblUeberschuss
dblEinspeise = 0#
Else
Platz = Max - 0#
dblSpeicher = Max
dblEV = dblLast
dblEinspeise = dblUeberschuss - Platz
End If
End If
Else
Dim dblSpeicherVor As Double
dblSpeicherVor = CDbl(Speicher(i - 1, 1))
'Wenn mehr Last als Erzeugung
If dblUeberschuss < 0# Then
dblUeberschuss = dblUeberschuss * (-1)
dblEV = dblPV
If dblUeberschuss >= dblSpeicherVor Then
dblUeberschuss = dblUeberschuss - dblSpeicherVor
dblBezug = dblUeberschuss - dblSpeicherVor
' Versuch dblSpeicher = dblSpeicherVor - dblSpeicherVor
dblSpeicher = 0#
Else
dblSpeicher = dblSpeicherVor - dblUeberschuss
dblUeberschuss = 0#
End If
dblEinspeise = 0#
'Wenn mehr Erzeugung als Last
Else
dblBezug = 0#
Platz = Max - dblSpeicherVor
If dblUeberschuss <= Platz Then
dblSpeicher = dblSpeicherVor + dblUeberschuss
dblEV = dblLast + dblUeberschuss
dblEinspeise = 0#
Else
dblSpeicher = Max
dblEV = dblLast
dblEinspeise = dblUeberschuss - Platz
End If
End If
End If
PV(i, 1) = dblPV
Last(i, 1) = dblLast
EV(i, 1) = dblEV
Ueberschuss(i, 1) = dblUeberschuss
Einspeise(i, 1) = dblEinspeise
Bezug(i, 1) = dblBezug
Speicher(i, 1) = dblSpeicher
Next i
'Berechnen der Summen
For i = 1 To 35040
EV(i + 1, 1) = CDbl(EV(i, 1) + EV(i + 1, 1))
PV(i + 1, 1) = CDbl(PV(i, 1) + PV(i + 1, 1))
Bezug(i + 1, 1) = CDbl(Bezug(i, 1) + Bezug(i + 1, 1))
Einspeise(i + 1, 1) = CDbl(Einspeise(i, 1) + Einspeise(i + 1, 1))
Next i
Worksheets("Tabelle1").Cells(5, 2) = EV(35041, 1)
Worksheets("Ausgabe").Cells(6, 2) = PV(35041, 1)
Worksheets("Ausgabe").Cells(7, 2) = EV(35041, 1)
tbEVSumme.Value = Round((EV(35041, 1)) / 1000000, 2)
tbEV.Value = Round(100 * EV(35041, 1) / PV(35041, 1), 2)
tbEinspeise.Value = Round((Einspeise(35041, 1)) / 1000000, 2)
tbBezug.Value = Round((Bezug(35041, 1)) / 1000000, 2)
|