AW: VBA: Simulation funktioniert nicht richtig
04.01.2013 19:33:02
ransi
Hallo
Ich habs mal überflogen.
Teste mal:
Sub Berechnungtest()
'Variablen mit Rechenergebnissen über die komplette Zeitreihe
Dim i As Long
Dim Last As Variant
Dim Ueberschuss(1 To 50000) As Variant
Dim Battery(0 To 50000) As Variant
Dim Einspeise(1 To 50000) As Variant
Dim Bezug(1 To 50000) As Variant
Dim EV(1 To 50000) As Variant
Dim VerlusteBat(1 To 50000) As Variant
Dim VerlusteNetz(1 To 50000) As Variant
Dim PV As Variant
'Alles auf Null stellen (beziehungsweise zum testen der Werte...)
For i = 1 To 50000
'PV(i) = 100
'Battery(i) = 0
'Last(i) = 75
'EV(i) = 0
'Ueberschuss(i) = 0
'Einspeise(i) = 0
'Bezug(i) = 0
'VerlusteBat(i) = 0
'VerlusteNetz(i) = 0
Next i
'PV und Lastdaten in die Variablen übergeben
PV = Worksheets("roh").Range("B2:B50001").Value
Last = Worksheets("roh").Range("C2:C50001").Value
'Anzeige der vorhandenen Eingangsdaten
Sheets("ziel").Range("B2:B50001") = PV
Sheets("ziel").Range("C2:C50001") = Last
'Variablen mit Rechenergebnissen in einem Zeitschritt
Dim temp_PV As Double
Dim temp_Last As Double
Dim temp_EV As Double
Dim temp_Ueberschuss As Double
Dim temp_Einspeise As Double
Dim temp_Bezug As Double
Dim temp_BatteryNeu As Double
Dim temp_VerlusteBat As Double
Dim temp_VerlusteNetz As Double
'Variablen der Parameterdaten
Dim temp_BatteryAlt As Double
Dim max_Kapazitaet As Double
Dim Platz As Double
Dim PV_Anlagengroesse As Double
Dim Wirkungsgrad_Bat As Double
Dim Netzknotenmaximum As Double
'fixe Parameter Festlegen:
max_Kapazitaet = 10 'Batteriegröße festlegen (später aus Userform uebernehmen)
Wirkungsgrad_Bat = 0.88 '(später aus Userform uebernehmen)
PV_Anlagengroesse = 50 '(kWp)(später aus Userform uebernehmen)
Netzknotenmaximum = 0.7 '(%) (später aus Userform uebernehmen)
Battery(0) = 0 'Batterie-Inhalt bei Rechnungsbeginn festlegen (ungeladen = 0 , geladen = _
max_Kapazitaet)
'für alle einzelnen Zeitschritte durchrechnen
For i = 1 To 50000
temp_PV = CDbl(PV(i, 1))
temp_Last = CDbl(Last(i, 1))
temp_EV = CDbl(EV(i))
temp_Ueberschuss = CDbl(Ueberschuss(i))
temp_Einspeise = CDbl(Einspeise(i))
temp_Bezug = CDbl(Bezug(i))
temp_VerlusteBat = CDbl(VerlusteBat(i))
temp_VerlusteNetz = CDbl(VerlusteNetz(i))
'Rechnung Start:
temp_Ueberschuss = temp_PV - temp_Last 'PV - Last = Überschuss
temp_BatteryAlt = CDbl(Battery(i - 1)) 'Inhalt der Batterie prüfen
' -> Wenn mehr Last als Erzeugung vorhanden ist
If temp_Ueberschuss = temp_BatteryAlt Then
temp_Bezug = temp_Ueberschuss - temp_BatteryAlt
temp_BatteryNeu = 0#
Else
temp_BatteryNeu = temp_BatteryAlt - temp_Ueberschuss
temp_Bezug = 0#
End If
temp_Ueberschuss = temp_Ueberschuss * (-1)
' -> Wenn mehr Erzeugung als Last vorhanden ist
Else
temp_Bezug = 0#
Platz = max_Kapazitaet - temp_BatteryAlt
If temp_Ueberschuss = PV_Anlagengroesse Then
temp_Einspeise = (temp_Ueberschuss - Platz) * Netzknotenmaximum
temp_VerlusteNetz = (temp_Ueberschuss - Platz) * (1 - Netzknotenmaximum)
Else
temp_VerlusteNetz = 0#
End If
End If
End If
'_____
'Verluste durch Batteriewirkungsgrad einberechnen
'temp_BatteryNeu = temp_BatteryNeu * Wirkungsgrad_Bat
'temp_VerlusteBat = (1 - Wirkungsgrad_Bat) * temp_BatteryNeu
'_____
'temporär errechnete Werte in die Variable zurückschreiben
PV(i, 1) = temp_PV
Last(i, 1) = temp_Last
EV(i) = temp_EV
Ueberschuss(i) = temp_Ueberschuss
Einspeise(i) = temp_Einspeise
Bezug(i) = temp_Bezug
Battery(i) = temp_BatteryNeu
VerlusteBat(i) = temp_VerlusteBat
VerlusteNetz(i) = temp_VerlusteNetz
Next i
'Werte anzeigen im Tabellenblatt
Sheets("ziel").Range("B2:B50001") = PV
Sheets("ziel").Range("C2:C50001") = Last
Sheets("ziel").Range("D2:D50001") = WorksheetFunction.Transpose(Ueberschuss)
Sheets("ziel").Range("E2:E50001") = WorksheetFunction.Transpose(Battery)
Sheets("ziel").Range("F2:F50001") = WorksheetFunction.Transpose(Einspeise)
Sheets("ziel").Range("G2:G50001") = WorksheetFunction.Transpose(Bezug)
Sheets("ziel").Range("H2:H50001") = WorksheetFunction.Transpose(EV)
Sheets("ziel").Range("I2:I50001") = WorksheetFunction.Transpose(VerlusteBat)
Sheets("ziel").Range("J2:J50001") = WorksheetFunction.Transpose(VerlusteNetz)
End Sub
ransi