-
Notifications
You must be signed in to change notification settings - Fork 66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Request] Limit Battery Current of Victron MPPT via VE.DIRECT #470
Comments
Interessant, genau an dieser Regelung des maximalen Ladestroms über das HEX-Protocol arbeite ich gerade, allerdings mit dem Ziel die Leistung eines AC-Laders auf Basis des zur Verfügung stehenden Überschusses zu beschränken. Die Notwendigkeit für einen MPPT-Lader erschliesst sich mir aber nicht wirklich. Aufgabe des MPPT-Ladereglers ist es doch gerade ein optimales Ladeprofil für die jeweilige Batteries unter Berücksichtigung des jeweiligen Ladezustands abzufahren. Wenn die Batterie voll ist, bzw. das Ladegerät in die Absoptionsphase übergeht wird der Strom nach und nach bis zur Ladeschlussspannung verringert. Wenn die Batterie voll ist, fliesst auch kein Strom mehr. Hier wird auch nichts unnötig "belastet" durch das Beschränken den maximalen Spannung. Ich sehe also wirklich keinen Grund warum man den maximalen Strom eines MPPT-Laders beschränken sollte, die zur Verfügung stehende Energie (PV-Module) sollte ja möglichst ausgenutzt werden. Anders bei AC-Ladern, bei denen vermieden werden sollte, dass Energie aus dem Netz bezogen wird. |
Mir ist aufgefallen, dass der Victron MPPT Laderegler den Strom nicht herunter regelt. Die für Pylontech vorgeschriebenen Einstellungen sind auf dem MPPT Laderegler eingetragen. Ich verstehe deine Argumentation aber woher weiß der Victron Laderegler welche Kapazität die Batterien haben? Davon Abhängig ist ja auch der Ladestrom. Das kann man nicht einstellen und woher weiß der Victron welcher Strom zur Last und welcher zur Batterie geht, wenn Last und Batterie an dem gleichen Ausgang angeschlossen sind? Die Pylontech gibt auch einen maximalen Ladestrom vor. Es gibt von Victron auch eine Lösung um die Pylontech über CAN einzubinden, dann werden die Daten vermutlich auch verwendet. Ich glaube nicht das die Batterie von dem Laderegler zerstört wird. Wenn man seine Batterie aber zwischen 20 und 80% betreiben möchte, dann kommt man um die Limitierung des Ladestroms nicht herum. Wie bereits bei der Eröffnung geschrieben, geht es um Fälle bei denen die Leistung der PV-Module wesentlich größer ist als die Leistung des Wechselrichters. Bei Sonnentagen kann man die erzeugte Leistung gar nicht verbrauchen. Der (Full) Solar-Passthrough kann dann ein weiters Laden nicht unterbinden. Außerdem hat der (Full) Solar-Passthrough vermutlich negative Auswirkungen auf die Lebenszeit vom Wechselrichter. Ich programmiere auch gerade an dem HEX-Protocol. Kenn mich aber in C++ nicht aus. |
Der Laderegler wechselt von "Alles reinpumpen was geht" (Bulk) zu "Regle auf eine feste Spannung" (Absorption). Im Bulk Zustand gibt die Batterie die Spannung vor, die den Strom "schluckt". Im Absorption Zustand stellt sich der Strom von selbst ein, weil die Spannung fest ist. Wenn der Strom dann klein geworden ist, gehts in den Zustand Floating. Dazu muss der Laderegler nichts über die Batterie wissen außer der Zielspannung. Deinen Vorschlag finde ich gut. Man kann zwar den Laderegler so einstellen, dass er den Akku nur auf 80% bringt (Spannung begrenzen), aber wenn man dann den Wechselrichter aufdreht weil man Energie braucht, dann kommt die erstmal aus der Batterie, bis der Laderegler begreift dass er wieder in Bulk wechseln sollte. Das kann man vermeiden wenn man den Laderegler drosselt und bei Bedarf aktiv aufdreht. Klingt aber andererseits nach viel Arbeit für einen Sonderfall... |
Das HEX Protokoll ist eigentlich ziemlich einfach. Habe es mal quick und dirty bei mir reinprogrammiert und begrenze jetzt den Strom im (Full) Solar-Passthrough auf 10A. Die ~500W werden dann vom Wechselrichter ans Netz übergeben. Sobald der (Full) Solar-Passthrough aus ist wird das maxBatteryCurrentLimit wieder auf 45A geändert. Man könnte den Power Limiter um eine Einstellung erweitern, bei der man dann den Batteriestrom bei aktivem (Full) Solar-Passthrough angeben kann und einmal bei nicht aktivem (Full) Solar-Passtrough. Ich habe schon gelesen, dass ihr nicht noch mehr Einstellungen für den Power Limiter haben wollt, weil es für die meisten so schon kompliziert ist. Da könnte man auch "erweiterte Einstellungen" hinzufügen. @philippsandhaus wie weit bist du denn mit dem HEX Protokoll? Ich habe jetzt mal nur das maxBatteryCurrentLimit als "SET-Command" programmiert, bei dem die Checksumme von einer Funktion berechnet wird. Das funktioniert auch soweit. Ich wollte eventuell noch den "GET-Command" hinzufügen um zu prüfen, ob die Einstellungen übernommen wurden. |
Ich bin immer noch nicht ganz überzeugt, ob eine solche Drosselung wirklich nötig ist. Wie @schlimmchen schon schreibt, kann man den Ladestand der Batterie gut auf z.B. 80% begrenzen indem man die Absorptionsspannung im MPPT-Laderegler einfach runtersetzt. Den kurzen "Schluck" aus der Batterie wenn der Wechselrichter anspringt und der Laderegler noch nicht hinterherkommt sehe ich nicht als problematisch. Aber ich will das jetzt nicht unnötig schlecht machen, vielleicht sehe ich das ja auch falsch ;-) Technisch auf jeden Fall interessant.
Da bin ich dann noch nicht viel weiter als Du denke ich. Ich habe die Möglichkeit reingehackt, mir wurde aber dann klar, dass auch für das weitere Testen erst einmal ein paar Umbauten/Abstraktionen notwendig sind, an denen ich gerade arbeite. Das wären für mich:
Magst Du den Code teilen bzw. vielleicht auch selber den Teil entsprechend erweitern in VEDirectFrameHandler? Ziel wäre ich denke ich dieses soweit zu abstrahieren, dass das ganze leicht um zusätzliche SET-Commands erweitert werden kann. Eine weitere Anwendung wäre z.B. das Abrufen von historischen Daten, um sie, ähnlich wie in der Victron App, perspektivisch im Webinterface anzeigen zu können. Generell: Laut Doku und auch laut meinen Tests sollte das Gerät auf ein SET-Command irgendwann mit der gleichen Nachricht antworten. Das wäre für mich dann die Bestätigung, dass das Kommando angekommen ist. Das ist dann auch eine schöne generelle Lösung für alle Arten von Commands. Falls eine Antwort innerhalb eines bestimmten Zeitraums nicht kommt, kann man das Kommando ja noch einige Male erneut schicken, bevor man mit einem Fehler aufgibt. Ich glaube nicht, dass man den Wert noch gesondert über ein GET-Kommando abrufen muss, aber müsste man natürlich testen. |
Die Batterie durch einstellen der Spannung genau auf 80% zu laden wird nicht so gut funktionieren, da die Temperaturschwankungen dann nicht kompensiert werden. Gestern hat mein System die 80% gehalten. Ich habe aber auch schon gelesen, dass die Pylontech ab und zu auf 95-100% geladen werden soll. Da könnte man auch noch eine Option einbauen, dass ein Laden auf 100% nach x Tagen durchgeführt wird. Ich kenne mich mit Klassen und vererben noch nicht so gut aus. Habe schon C programmiert aber noch nicht C++. Konstanten:
berechnen des Check Wertes:
umwanden uint nach hex String:
Befehl um uint16 Wert zu setzen:
Batterieladestrom Limit setzen:
|
Genau dafür gibt es in den Einstellungen der Victron App eine Option (Temperaturkompensation).
Kann man natürlich alles machen, das macht das Management aber noch komplexer. Vom Gefühl her würde ich möglichst viel des Batteriemanagements den Victron-Komponenten überlassen. Es scheint ja auch generell eine sehr gute Unterstützung von Victron für Pylontech zu geben. Aber das ist sicher auch eine Philosophiefrage. Vielen Dank für die Code-Teile, das bildet schon sehr viel ab! Wenn für dich ok würde ich mich daran bedienen und in meinen Code einbauen. |
Ich sehe es eher umgekehrt. Die DTU hat viel mehr Informationen und kann deshalb viel besser entscheiden. Klar ist der Victron Mppt kann auch alleine die Batterie managen, aber selbst Victron bietet ja BMS, Shunts, Controller usw. an um ein Vollständiges System aufzubauen. Ich sehe die DTU als Controller. Den Code kannst du gerne verwenden. Ich teste momentan noch ein bisschen und stelle dann ein pull request. |
Gestern habe ich mich mit zwei anderen studierten Informatikern über diesen Post unterhalten und einen Online-Compiler bemüht und wir sind zum Schluss gekommen, dass es keinen Unterschied gibt zwischen diesen beiden return-Statements. Und auch ohne Klammer dürfte es kein anderes Verhalten ergeben. Was funktioniert da denn nicht wie erwartet, wenn du nur eine Klammer nimmst? Das würde mich in der Tat interessiern. Meckert der Compiler? |
Zumindest bei mir bemerke ich keinen Unterschied ob ich eine oder zwei Klammern nehme. Kompiliert beides ohne Probleme, hab jetzt aber nicht gestenstet, ob sich das Ergebnis ändert. @JaMo523: Vorschlag von meiner Seite: Ich könnte die Erweiterungen in den Klassen vom VDirectFrameHandler einbinden und das erst einmal als PR aufbereiten. Du könntest dann deine Erweiterungen im DPL zum Reduzieren des Ladestroms als darauf aufbauenden PR umsetzen. Das sollte dann ja auf deiner mit minimalen bis gar keinen Änderungen möglich sein und wir kommen uns nicht in die Quere. |
@JaMo523 Noch eine Frage: Ich sehe gerade, dass Du 0xEDF0 (Battery Maximum Current) als Register nutzt. Es gibt aber auch 0xEDDF (Charger Maximum Current). Ich meine, das hatte ich bei meinen ersten Tests genutzt. Weisst Du, was der Unterschied ist? |
Ich glaube es war gestern schon spät. Es kommt das selbe raus mit oder ohne Klammer. Habe von Hand die Checksumme errechnet und dabei vermutlich einen Fehler gemacht. Ich habe den Post gelöscht um Fehlinformationen zu vermeiden. @philippsandhaus Bei 0xEDF0 (Battery Maximum Current) ist angegeben, dass es im non-volatile Speicher gespeichert wird. Man sieht dann auch in der App unter den Batterieeinstellungen, dass das Limit gesetzt ist. Deshalb habe ich es benutzt. |
Wenn von einem (Pylontech) Batterie BMS ein (dynamischer) charge voltage (Soll)werte übertragen wird, sollte dieser auch als Sollwert an den MPPT durchgereicht werden. |
Darf ich mal fragen wie es mit dem Request weiter geht? |
Ich mache das gleiche wie hoschiking. Habe mehrere HLGs im Einsatz. Der Rest nur als Referenz und Zusammenfassung für Interessierte, die so wie ich bei Null anfangen und es auch mit der Hand durchspielen wollen.
10A-Limit in festen Speicher schreiben = Register 0xEDF0 1A-Limit in festen Speicher schreiben = Register 0xEDF0 2A-Limit in flüchtigen Speicher schreiben = Register 0x2015
Add1: Zur Entlastung sollten alle Kombinationen fix abgespeichert werden, statt diese immer wieder zu berechnen. Würde z.B. für einen MPPT100/20 bedeuten, dass sich eine Tabelle mit 200 Einträgen ergibt. |
Is your feature request related to a problem? Please describe.
Eingangsleistung der Photovoltaikmodule ist größer als der Inverter im (Full) Solar-Passthrough ans Netz übergeben kann. Die Batterie wird an Sonnentagen immer auf 100% geladen.
Describe the solution you'd like
Zusätzlich zu (Full) Solar-Passthrough könnte man den Batteriestrom vom Victron MPPT Laderegler über VE.DIRECT regeln. Das hat folgende Vorteile:
Describe alternatives you've considered
Keine alternative bekannt.
Additional context
https://www.victronenergy.com/upload/documents/BlueSolar-HEX-protocol.pdf
The text was updated successfully, but these errors were encountered: