Benachrichtigungen
Alles löschen

BMS Kommunikation Infini-/MPP-Solar MPI / FSP Hybrid 10k und DIY Batterie

72 Beiträge
11 Benutzer
8 Reactions
7,449 Ansichten
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 342
Themenstarter  

Hallo Leute!
Zum Thema BMS Kommunikation mit den Infinisolar-/MPP-Solar MPI/FSP Hybrid WR habe ich mich nun ein Weilchen beschäftigt und möchte hier meine bisherigen Erkenntnisse kundtun.
Vielleicht kann ja jemand zumindest Teile davon Nutzen Grin .

Grundsätzlich sieht der vom Hersteller (Voltronic/Taiwan) vorgesehen Aufbau mit Pylonetch Batterien so aus:

In der BMS Box ist nichts anderes als die „ganz normale“ Voltronic BMS Card drinnen, welche sich RS232 Port an den WR anschließen lässt. Somit bleibt der Options-Slot für die ModbusII-Karte (Null-Ausregelgung) frei.

Da ich aber an dem seriellen Port meiner beiden Wechselrichter einen RS232-TCP Wandler angesteckt habe um Logging Daten zu sammeln, musste ich verstehen, welche Kommandos die BMS Karte mit dem WR austauscht.
Weiters habe ich keine teuren Pylontech‘s sondern günstige DIY 16S 280Ah Akkus mit JK-BMS (B2A20S20P) und zusätzlichem Balancer.

Deshalb hab ich mir mal so ne BMS-Box geordert, per IP an meinen Rechner angebunden und drauf losgeforscht.
Hier der Test-Aufbau:

Ich habe dann Scripte zum emulieren des Wechselrichters und der Pylontech Batterie gebastelt und gesehen, dass auf der RS485 Seite offenbar 2 verschiedene Protokolle „gesprochen“ werden.
1. Protokoll ist das Modbus-Basierte LIB Protokoll, welches offenbar manche ältere BMS’en sprechen.
2. Protokoll ist das bekannte Pylontech Protokoll, aber mit CID’s 6x, welche ich in keiner Doku gefunden habe.

Durch Zufall bin ich auf ein kurzes Logfile in einem russischem Forum gestoßen, welche ich als Antwort auf die periodischen Requests der BMS-Box zurückschickte. Und siehe da, da kam auch schon etwas auf der RS232 Seite Richtung WR heraus(^D054BMS…).
Nach ein wenig Forschungsarbeit und try’n-error hab ich dann auch mit Hilfe eines FW-Disassamblers rausgefunden, was die ganzen Parameter bedeuten.

Auch die CRC Prüfsumme zu bestimmen war ein Mordsaufwand, da hier nicht die sonst übliche Voltronic CRC zum Einsatz kommt, sondern CRC16-XMODEM.

Dieses Kommando (^D054BMS...) muss man nun dem WR zyklisch schicken - ich mache das mit jedem Abfrage-Zyklus, also ca.5 Sekunden, dann geht er in den BMS-Modus.

Mithilfe des ESP32 Projektes von @Scotty89 (Vielen Dank nochmal an dieser Stelle) wird nun mein JK-BMS ausgelesen, die Werte schreibe ich per Script in ein Shared Memory Object und dieses kann von den div. Logging Programmen nun genutzt werden, dem WR die BMS Infos mitzuteilen.
Hab das mal in mein infinipoll10k eingebaut und scheint schon mal recht gut zu funktionieren.

Der WR zeigt mir jetzt die Batteriewerte vom BMS und "Li-Bat" im Display an.

Sobald die Batterie leer oder voll ist und das BMS den Lade-/Entladestrom unterbricht, wird das dem 10k nun mitgeteilt.

Es gibt wohl noch eine Menge unerforschter Parameter - diese habe ich aber mangels Pylontech- oder Lib-Protokollbeschreibung leider noch nicht rausfinden können. Vor allem die Warnmeldungen vom BMS würde ich gerne noch implementieren.

24kWP an 2x FSP 10kW,Solax X3-G2 und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
Zitat
(@dl5op)
Newbie
Beigetreten: Vor 2 Jahren
Beiträge: 1
 

Moin, hast du vielleicht auch eine Idee wie die Befehle für den MPPSOLAR MPI 5.5k Bruder lauten?
Der hat das 16 er Protokoll.
RS232 Port: 2400baud 8n1
Habe dein readmqttbms.php script an meine jk-bms angepasst und es generiet den string glaube ich richtig.
QBMS0489,031,0,0000,00,0,0552,0552,1500,0,0,0504,1500 response: (NAKs

Die Befehle für die Leistungsanpassung bei Nulleinspeisung sind leider auch etwas anders.
QGPMP response: (03600⸮R
QPI response: (PI16⸮⸮
I response: (DSP:20-10-19,01:41 MCU:19-12-04,00:43⸮Q
QDVPR response: (0000 0000 0000S⸮ /Batterie Leer und keine Sonne dafür Auto auf 50%
LDPR response: (NAK
FDGL response: (NAKs

QMD response: (###INFINE5.5KHV ###5500 99 1/1 360 230 04 12.0⸮K

Wollte vermeiden mir die beiden Karten zu kaufen nur um sie nach einer Woche nicht mehr zu benötigen.

grüße Kevin


   
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 342
Themenstarter  

Ich kenne den 5.5er nicht, weil in AT sträflich illegal (>3kW Einphasig). 😮

Aber ich kann das mit meiner BMS Box rausfinden.
Kannst du mir die Antwort deines WR auf QPI posten (mit CRC usw., also am besten mit AccessPort senden).
Eine aktuelle FW, neuer als 2018 ist auch Pflicht.

24kWP an 2x FSP 10kW,Solax X3-G2 und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
lichtimc
(@lichtimc)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 76
 

Hi riogrande,

vielen Dank für deine Arbeit.
Wie ich sehe, hast du dir nun auch ein JK-BMS zugelegt. 😉

Super, dass du die Kommunikation zwischen JK-BMS und Infinisolar-WR zustande gebracht hast!
Nun aber folgende Frage: Bei dir entscheidet nun das JK-BMS wie schnell und wie lange der WR die Batterien lädt?

Sobald die Batterie leer oder voll ist und das BMS den Lade-/Entladestrom unterbricht, wird das dem 10k nun mitgeteilt.

Wie kann ich mir das vorstellen? Schalten wirklich die Mosfets des JK-BMS bei Erreichen einer Ladeschlussspannung (sobald eine Zelle einen gewissen Maximalwert erreicht hat) ab und gleichzeitig kriegt auch der WR den Befehl mit dem Laden aufzuhören? Wenn ja, was soll das bringen, wenn die Batterie eh schon getrennt ist?

Ich dachte am BMS stellt man die absoluten (Failsafe-)Grenzwerte ein und am Wechselrichter dann die gewünschte Ladeschlussspannung (und Absorbtion und Float usw.) und es soll darauf hinauslaufen, dass das BMS nur im Notfall die Batterie abtrennt, wenn eine der Zellen gar nicht mehr passt.


   
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 342
Themenstarter  

@DL5OP Hab mir mal die aktuelle FW vom 3k+ disassambled (auch PI16) da im FW-Upgrade-Archiv vom 5.5er kein INV.out file war.
Da hab ich folgendes gefunden:

Das Format des (Set-)BMS-Kommandos schaut für mich jetzt schon mal ein bisschen anders aus, als beim 10k.
Was kommt auf das BMS Abfrage-Kommando (evtl. nur "BMS"?) zurück? "QBMS" habe ich nicht gefunden.

Evtl. musst du die BMS Funktion bzw. LiFe-Akku erst mal aktivieren (sollte mit einem aktuellen SolarPower gehn). Die detaillierten Kommandos dafür weiß ich leider nicht, da ich schon lange nichts mehr mit dem PI16 gemacht hab.

Bei Gelegenheit kann ich mal versuchen, meiner BMS-Box einen "PI16"-Wechselrichter vorzugaukeln, dann würde ich evtl. das korrekte Format der Meldungen sehn.

@lichtimc:
Das sind alles Fragen, auf die ich noch keine 100%ige Antworten geben kann.
Die Kommunikation steht grundsätzlich mal, details müssen erst "erarbeitet" werden.
Bin aber aktuell noch mit dem Reverse-Engineeren des Pylontech RS485 Protokolls beschäftigt. Hab da "gottseidank" einen Freak aus USA, der mir dabei hilft.

Soweit ich gesehen hab, schreibt mein 10k "b0" ins Display, sobald das BMS sagt, der WR soll das Laden aufhören (StopChargeFlag). Kann aber auch leicht sein, dass ich das noch ein wenig falsch interpretiere.

Wie anfangs erwähnt, bin über jede neue Erkenntnis bzgl. der Parameter oder der Kommunikation hocherfreut.

24kWP an 2x FSP 10kW,Solax X3-G2 und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
lichtimc
(@lichtimc)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 76
 

Ich weiß schon, dass noch nicht alles klar ist, aber wie verhält sich denn der Akku nun beim Laden? Schaltet bei dir das BMS den Akku vom WR weg, wenn er voll ist oder hört der WR auf zu laden?

Mithilfe des ESP32 Projektes von @Scotty89 (Vielen Dank nochmal an dieser Stelle) wird nun mein JK-BMS ausgelesen, ...

Nachdem man in Scotty89s Software eine "Pylontech simulation" aktivieren kann, wenn man ein CAN-Modul an den ESP32 anschließt, und der Wechselrichter Pylontech unterstützt, bräuchte es den Umweg über dein Script ja gar nicht oder?


   
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 342
Themenstarter  

So, hab mir mal die Logs genauer angesehen:
Wenn das BMS das "StopChargingFlag" setzt, weil entweder der Akku voll ist oder es dem Balancing nicht "nachkommt", dann stopt auch der WR das Laden (Display "b1"). Ob der WR einfach nichts mehr lädt oder der Ladestrom einbricht, weil die MOSFET's des BMS dicht machen, kann ich natürlich nicht sagen. Ist m.M.n. aber auch egal.
Beim Entladen wird es wohl ähnlich sein (StopDischargingFlag=1, =>Ladeende und "b0" im Display), nur dass hier mein sehr konservativ eingestellter WR schon vorher das Entladen beendet, weil die Spannung zu gering ist. Muss ich mal austesten, ob das auch vom BMS so getriggert wird.

Würde ein Batterie-Fehler vorliegen (z.b. eine Zelle tanzt aus der Reihe) dann würde das BMS auch diese Flags setzen, aber weil die Fehlercodes noch nicht ganz erschlossen und implementiert sind, wohl nicht korrekt am WR anzeigen können.
Um an dieser Stelle voranzukommen, bräuchten wir Logs von jemanden mit einer "echten" Pylontech-Batterie.

Wegen der "Pylontech simulation": Wie meinst du das genau? Ich hab weder an meiner DIY Batterie noch am BMS noch am Infini einen CAN-Bus.
Ich denke das hat nur Sinn in Verbindung mit Victron Geräten, die haben ja nen CAN-Bus.

Zu diesem Thema noch: Das Pylontech BMS Protokoll ist mittlerweile gut erforscht, sogar einige Beschreibungen vom Hersteller verfügbar.
Das hilft uns aber in Bezug auf unseren Infini gar nichts, weil die Kommandos mit CID2 0x60/0x61/0x62 und x63 nirgends dokumentiert sind. Und der Infini nutzt genau diese.

24kWP an 2x FSP 10kW,Solax X3-G2 und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 342
Themenstarter  

@DL5OP Hab mir gerade die Scripts umprogrammiert mit den von dir gelieferten Daten deines 5.5k.
In der Tat schaut die Kommunikation mit der BMS-Karte bei einem einphaseigen Infini total anders aus.

Hier ein Teil der RS232 Seite versehen mit meinen Hinweisen:
17:47:08 ==>ASCII:QPI
17:47:09 <== (PI16
17:47:09 ==>ASCII:QPI
17:47:09 <== (PI16
17:47:09 ==>ASCII:QMD
17:47:09 <== (###INFINE5.5KHV ###5500 99 1/1 360 230 04 12.0
17:47:35 ==>ASCII:LBF1 // Set Battery Type LiFe
17:47:35 ==>ASCII:LBF1
17:47:36 ==>ASCII:LBF1
17:47:36 ==>ASCII:BMSC1 // ?? Set BMS Connected to 1?
17:47:37 ==>ASCII:BMSC1
17:47:37 ==>ASCII:BMSC1
17:47:38 ==>ASCII:BCHGV57.6 // Set bulk charging voltage to 57,6V
17:47:38 ==>ASCII:BCHGV57.6
17:47:39 ==>ASCII:BCHGV57.6
17:47:39 ==>ASCII:MCHGV57.6 // Setting floating charging voltage to 57,6V
17:47:40 ==>ASCII:MCHGV57.6
17:47:40 ==>ASCII:MCHGV57.6
17:47:41 ==>ASCII:BSDV44.8 44.8 // Set discharge cut-off voltage to 44.8V
17:47:41 ==>ASCII:BSDV44.8 44.8
17:47:42 ==>ASCII:BSDV44.8 44.8
17:47:42 ==>ASCII:MCHGC09.5 // Set max charging current to 9,5A
17:47:43 ==>ASCII:MCHGC09.5
17:47:43 ==>ASCII:MCHGC09.5
17:47:44 ==>ASCII:SMDCC056 // Set battery Max. discharged current in hybrid mode to 56A
17:47:44 ==>ASCII:SMDCC056
17:47:45 ==>ASCII:SMDCC056
17:47:45 ==>ASCII:LBF1...

Also eig. alles bekannte Kommandos's außer "BMSC1". Schick das mal per Script an deinen 5.5k und poste die Antwort hier.
Für Details siehe meine Traces im Attachment.

24kWP an 2x FSP 10kW,Solax X3-G2 und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
lichtimc
(@lichtimc)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 76
 

Ob der WR einfach nichts mehr lädt oder der Ladestrom einbricht, weil die MOSFET's des BMS dicht machen, kann ich natürlich nicht sagen. Ist m.M.n. aber auch egal.

Das kann ich dir dann sagen, wenn ich endlich soweit bin alles anzuschließen. Ich hab ja nur das eine fette Relais für Laden und Entladen. Somit ist es bei mir wichtig, dass das BMS nicht abschaltet, sondern der Wechselrichter. Ich hoffe, das ist beim JK-BMS so implementiert, dass es zuerst den Abschalten Befehl sendet und eine Zeit lang wartet, ob der WR dem Befehl nachkommt und erst, wenn er das nicht tut, das Relais trennt.

Wegen der "Pylontech simulation": Wie meinst du das genau? Ich hab weder an meiner DIY Batterie noch am BMS noch am Infini einen CAN-Bus.
Ich denke das hat nur Sinn in Verbindung mit Victron Geräten, die haben ja nen CAN-Bus.

Aja, das hab ich gar nicht bedacht jetzt mit dem Modbus vs. Canbus. Komisch, haben die Pylontec Batterien auch einen Modbus? Sonst kann das ja gar nie funktionieren über die Modbus-Karte, oder?
Schau mal, hier wirbt MPP Solar dafür: https://www.mppsolar.com/v3/pylontech/
Edit: Jetzt hab ich gerade gesehen, dass die auch einen RS485 Port haben. Da wird dann wsl. Modbus gespochen mit dem WR:

(Genau diese Schnittstellte wirst du vermutlich versuchen zu emulieren, oder? 🤦‍♂️)
Heißt das wenn man an der Pylontec bei den 4 Dip-Schaltern den ersten Runter macht (so wie bei MPP Solar beschrieben) dann kommuniziert die Pylontech Batterie mit diesen CID2 0x60 - 0x63 und die sind noch nirgends dokumentiert? (Ich hab auch nix gefunden.)


   
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 342
Themenstarter  

Ich kenne die Pylontech's zwar nicht genauer, aber ja, die haben Modbus/RS485 und CAN soweit ich weiß.
An den RS485 Port kommt die BMS-Card bzw. Box ran und genau das muss ich für das Reverse-Engineeren auch emulieren.

Wenn ich/wir alle Parameter herausgefunden haben, die die BMS-Box und der WR untereinander austauschen, dann kann uns das RS485 Protokoll der Pylontech wieder egal sein.

24kWP an 2x FSP 10kW,Solax X3-G2 und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
(@egonpeterb)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 6
 

was bringt die BMS RS485 Kommunikation zwischen LiFEPo4 Akku und Hybrid Wechselrichter?


   
AntwortZitat
(@stefanwien)
Newbie
Beigetreten: Vor 2 Jahren
Beiträge: 2
 

Hallo. Darf in diesem Thread eine allgemeine Frage zum Thema Kommunikation bzw. Verbindungsaufbau zu einem Infinisolar 10kw stellen?


   
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 342
Themenstarter  

@egonpeterb Das macht schon Sinn, wenn die Batterie dem WR die Spannung und Lade-/Entladeströme und etwaige Störungen mitteilen kann. Wir haben nur das Glück, dass Voltronic eine Batterie-Kommunikation nicht verpflichtend macht, so wie viele andere WR Hersteller (Fronius,Kostal,...).
Das Thema wurde übrigens auch hier erörtert:
What are the benefits of Lithium batteries communication with Inverter
Vor allem bei LV Batterien und der rel. ungeanauen Messeinrichtung des Infini's, ist es m.M.m. sinnvoll, dass der WR die deutlich genaueren Werte des BMS mitgeteilt bekommt.
Gerade bei 48V Technik machen 0,2V Spannungsdifferenz zw. WR und Batterie gleich mal einen riesen Unterschied, bei HV Batterien sind 5-10V wohl noch rel. egal.

@StefanWien: BITTE NICHT!!! Hier gehts NUR um die BMS Kommunikation der Infinisolar und baugleicher WR.

24kWP an 2x FSP 10kW,Solax X3-G2 und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
(@stefanwien)
Newbie
Beigetreten: Vor 2 Jahren
Beiträge: 2
 

@riogrande75
Ok. Was ist denn eine BMS Kommunikation?
In welchem Thread kann ich denn meine Frage stellen?
Und hast du Erfahrung mit Infinisolar 10kw?


   
AntwortZitat
riogrande75
(@riogrande75)
Batterielecker
Beigetreten: Vor 3 Jahren
Beiträge: 342
Themenstarter  

Wenn du nach dem Benutzen der SuFu und ordentlichem einlesen nichts gefunden hast, kannst du ja mal einen neuen Thread aufmachen.
Aber müll bitte diesen Thread nicht zu mit Fragen, die hier nicht reingehören.

24kWP an 2x FSP 10kW,Solax X3-G2 und AxpertMAXII 8000 mit 70kWh LiFePo4
123solar, meterN und EVSE-WiFi
Kein Support per PN


   
AntwortZitat
Seite 1 / 5
Teilen: