marionw
Solar Addict
I wanted to build a software "Master BMS" which will operate between my six EG4 LifePower4 batteries and my SunGoldPower 10kw inverter. I have discovered that the "Master BMS" in closed loop does not completely control the charge profile used by the inverter. I have spent the last two weeks conversing back and forth with SunGoldPower and they have finally provided a response that somewhat agrees with what I am seeing. To SunGoldPowers benefit, they did respond to each email I sent them.
I hope this info will at least somewhat help others understand the "closed loop" charging process which still is sort of a mystery.
Many on this forum have build software/devices using Raspberry PI, Aurduino or even esp32 to accomplish this but they operate with the BMS function in the inverter turned off and use modbus commands to directly set values in the inverter.
The software I am building has an RS485 to USB connection to the Inverter's BMS port, and RS485 to USB converter connection to the EG4 LifePower4 RS485 bus and another RS485 to USB converter connection to the inverters WIFI/Monitoring port so I can monitor what changes using modbus commands. My test software allows me to change/set SOC, Max Charge Voltage and Max Charge Current to see what changes in the inverter.
SunGoldPower 10kw continuously sends three commands to the "Master BMS":
61h Get System analog data
62h Get system alarm info
63h Get system charge discharge management info
I assumed (incorrectly) that the data sent back to the inverter in response to the "63h Get system charge discharge management info" would directly set the "Max Charging Voltage" and "Max Charging Current" in the inverter. The "Max Charging Current" (in the inverter) is set by some formula/algorithm in the inverter which is using SOC as reported in response to 61h and Max Charging Current as reported in response to 63h.
The inverters "Max Charging Voltage" and "Max Charging Current" can be set by using modbus commands but BMS communications must be disabled (in open loop)
The "Master BMS" software continuously polls the batteries and uses the data/responses to build/create the response/reply sent back to the inverter for the command sent by the inverter.
I also have an interface to a Victron SmartShunt and I could also use this data as well to manage the charging profile.
Master BMS System Analog Data in Response to Inverters 61h Command
Battery Pack Average Voltage: 51.5 V
Battery Pack Total Current: 0.0 A
Battery Pack SOC: 57.0 % This does update the SOC as displayed on the IPower.exe software or Solar Assistant as well as on the Inverters display
Average Cycles: 0.0
Max Cycles: 0.0
Average SOH: 100.0 %
Minimum SOH: 100.0 %
Single Core Max Voltage: 51.5 V
Module With Single Core Max Voltage: 0105
Single Core Min Voltage: 51.5 V
Module With Single Core Min Voltage: 0103
Single Core Average Temp: 22.5 °C
Single Core Max Temp: 24.0 °C
Module With Single Core Max Temp: 0202
Single Core Min Temp: 21.0 °C
Module With Single Core Min Temp: 0606
MOSFET Average Temp: 23.0 °C
MOSFET Max Temp: 24.0 °C
Module With MOSFET Max Temp: 0102
MOSFET Min Temp: 22.0 °C
Module With MOSFET Min Temp: 0106
BMS Average Temp: 22.5 °C
BMS Max Temp: 23.0 °C
Module With BMS Max Temp: 0101
BMS Min Temp: 21.0 °C
Module With BMS Min Temp: 0106
Bytes To Inverter: 7E-32-30-31-32-34-36-30-30-38-30-36-32-43-39-32-38-30-30-30-30-33-39-30-30-30-30-30-30-30-30-36-34-36-34-43-39-35-33-30-31-30-35-43-39-35-33-30-31-30-33-30-42-38-43-30-42-39-42-30-32-30-32-30-42-37-44-30-36-30-36-30-42-39-31-30-42-39-42-30-31-30-32-30-42-38-37-30-31-30-36-30-42-38-43-30-42-39-31-30-31-30-31-30-42-37-44-30-31-30-36-45-39-31-46-0D
Text To Inverter: ~201246008062C928000039000000006464C9530105C95301030B8C0B9B02020B7D06060B910B9B01020B8701060B8C0B9101010B7D0106E91F\r
Master BMS System Alarm Status Info Response to Inverters 62h Command (normally all zero's if no BMS/Battery alarms)
AlarmStatus1 0
AlarmStatus1: 0
ProtectionStatus1: 0
ProtectionStatus2: 0
Bytes To Inverter: 7E-32-30-31-32-34-36-30-30-38-30-30-38-30-30-30-30-30-30-30-30-46-43-32-31-0D
Text To Inverter: ~20124600800800000000FC21\r
Master BMS System Charge-Discharge Management Info Response to Inverters 63h Command
Max Charging Voltage: 56.4 sets Menu Items 9 (Battery Bulk Charging Voltage), 11 (Battery Float Charging Voltage) and 17 (Battery Equalization Charging Voltage)
Min Discharging Voltage: 43.2 sets Menu Item 12 (Battery Overdischarge Voltage)
Max Charging Current: 10.0 along with SOC as reported above sets Menu Item 7 (Max Charging Current)
Max Discharge Current: 20.0
Charge-Discharge Status: 192
Charge Enabled: True
Discharge Enabled: True
Charge Immediately: False
Full Charge Requested: False
Bytes To Inverter: 7E-32-30-31-32-34-36-30-30-44-30-31-32-44-43-35-30-41-38-43-30-30-33-45-38-30-37-44-30-43-30-46-39-39-34-0D
Text To Inverter: ~20124600D012DC50A8C003E807D0C0F994\r
SunGoldPower Gold response to my last email:
1. When the inverter and the battery successfully communicate with the BMS, the charging current value of item 07 of the inverter is completely controlled by the BMS.
2. The charging current value of item 07 of the inverter is not modified by sending a command but needs to change the program of the BMS protection board. It cannot be modified by sending a command.
3. The charging current value of item 07 of the inverter will be adjusted according to the SOC value of the battery. The higher the SOC value of the battery, the smaller the charging current will be.
4. Your feedback also shows that the battery correctly displays the battery SOC value and battery voltage, indicating that the battery has uploaded this information to the inverter, and the inverter has the correct display, indicating that the inverter is normal, and the battery is also normal.
I hope this info will at least somewhat help others understand the "closed loop" charging process which still is sort of a mystery.
Many on this forum have build software/devices using Raspberry PI, Aurduino or even esp32 to accomplish this but they operate with the BMS function in the inverter turned off and use modbus commands to directly set values in the inverter.
The software I am building has an RS485 to USB connection to the Inverter's BMS port, and RS485 to USB converter connection to the EG4 LifePower4 RS485 bus and another RS485 to USB converter connection to the inverters WIFI/Monitoring port so I can monitor what changes using modbus commands. My test software allows me to change/set SOC, Max Charge Voltage and Max Charge Current to see what changes in the inverter.
SunGoldPower 10kw continuously sends three commands to the "Master BMS":
61h Get System analog data
62h Get system alarm info
63h Get system charge discharge management info
I assumed (incorrectly) that the data sent back to the inverter in response to the "63h Get system charge discharge management info" would directly set the "Max Charging Voltage" and "Max Charging Current" in the inverter. The "Max Charging Current" (in the inverter) is set by some formula/algorithm in the inverter which is using SOC as reported in response to 61h and Max Charging Current as reported in response to 63h.
The inverters "Max Charging Voltage" and "Max Charging Current" can be set by using modbus commands but BMS communications must be disabled (in open loop)
The "Master BMS" software continuously polls the batteries and uses the data/responses to build/create the response/reply sent back to the inverter for the command sent by the inverter.
I also have an interface to a Victron SmartShunt and I could also use this data as well to manage the charging profile.
Master BMS System Analog Data in Response to Inverters 61h Command
Battery Pack Average Voltage: 51.5 V
Battery Pack Total Current: 0.0 A
Battery Pack SOC: 57.0 % This does update the SOC as displayed on the IPower.exe software or Solar Assistant as well as on the Inverters display
Average Cycles: 0.0
Max Cycles: 0.0
Average SOH: 100.0 %
Minimum SOH: 100.0 %
Single Core Max Voltage: 51.5 V
Module With Single Core Max Voltage: 0105
Single Core Min Voltage: 51.5 V
Module With Single Core Min Voltage: 0103
Single Core Average Temp: 22.5 °C
Single Core Max Temp: 24.0 °C
Module With Single Core Max Temp: 0202
Single Core Min Temp: 21.0 °C
Module With Single Core Min Temp: 0606
MOSFET Average Temp: 23.0 °C
MOSFET Max Temp: 24.0 °C
Module With MOSFET Max Temp: 0102
MOSFET Min Temp: 22.0 °C
Module With MOSFET Min Temp: 0106
BMS Average Temp: 22.5 °C
BMS Max Temp: 23.0 °C
Module With BMS Max Temp: 0101
BMS Min Temp: 21.0 °C
Module With BMS Min Temp: 0106
Bytes To Inverter: 7E-32-30-31-32-34-36-30-30-38-30-36-32-43-39-32-38-30-30-30-30-33-39-30-30-30-30-30-30-30-30-36-34-36-34-43-39-35-33-30-31-30-35-43-39-35-33-30-31-30-33-30-42-38-43-30-42-39-42-30-32-30-32-30-42-37-44-30-36-30-36-30-42-39-31-30-42-39-42-30-31-30-32-30-42-38-37-30-31-30-36-30-42-38-43-30-42-39-31-30-31-30-31-30-42-37-44-30-31-30-36-45-39-31-46-0D
Text To Inverter: ~201246008062C928000039000000006464C9530105C95301030B8C0B9B02020B7D06060B910B9B01020B8701060B8C0B9101010B7D0106E91F\r
Master BMS System Alarm Status Info Response to Inverters 62h Command (normally all zero's if no BMS/Battery alarms)
AlarmStatus1 0
AlarmStatus1: 0
ProtectionStatus1: 0
ProtectionStatus2: 0
Bytes To Inverter: 7E-32-30-31-32-34-36-30-30-38-30-30-38-30-30-30-30-30-30-30-30-46-43-32-31-0D
Text To Inverter: ~20124600800800000000FC21\r
Master BMS System Charge-Discharge Management Info Response to Inverters 63h Command
Max Charging Voltage: 56.4 sets Menu Items 9 (Battery Bulk Charging Voltage), 11 (Battery Float Charging Voltage) and 17 (Battery Equalization Charging Voltage)
Min Discharging Voltage: 43.2 sets Menu Item 12 (Battery Overdischarge Voltage)
Max Charging Current: 10.0 along with SOC as reported above sets Menu Item 7 (Max Charging Current)
Max Discharge Current: 20.0
Charge-Discharge Status: 192
Charge Enabled: True
Discharge Enabled: True
Charge Immediately: False
Full Charge Requested: False
Bytes To Inverter: 7E-32-30-31-32-34-36-30-30-44-30-31-32-44-43-35-30-41-38-43-30-30-33-45-38-30-37-44-30-43-30-46-39-39-34-0D
Text To Inverter: ~20124600D012DC50A8C003E807D0C0F994\r
SunGoldPower Gold response to my last email:
1. When the inverter and the battery successfully communicate with the BMS, the charging current value of item 07 of the inverter is completely controlled by the BMS.
2. The charging current value of item 07 of the inverter is not modified by sending a command but needs to change the program of the BMS protection board. It cannot be modified by sending a command.
3. The charging current value of item 07 of the inverter will be adjusted according to the SOC value of the battery. The higher the SOC value of the battery, the smaller the charging current will be.
4. Your feedback also shows that the battery correctly displays the battery SOC value and battery voltage, indicating that the battery has uploaded this information to the inverter, and the inverter has the correct display, indicating that the inverter is normal, and the battery is also normal.