Three phase HV Hybrid Inverter - Solax X3-Hybrid-8.0 + Solax Triple Power T58 HV Battery

Do you have an NTC sensor plugged into the RJ45 port to enable Lead acid mode? It also needs voltage across the terminals. I had trouble setting the voltages too, exact same problem, it would just forget what I had entered. fancy sharing your code?
 
Hello,
Very informative read on the Solax CAN messages.
Brief history
I have a Solax X1 AC unit here which I am trying to get to work with a lead acid battery with a range of 70-86.4V. The battery is from my current solar project and I wish to try to get the Solax to work with it.
As the inverter has a range of 70-400vDC I thought this will work easy in lead acid mode. The problem I have is if I set the charge absorption to my desired value it resets itself to 400v.
I also experienced similar behaviour for the discharge cut-off voltage, when I set this to 70V it resets to 100v which is above my maximum voltage. No help from Solax regarding this. hence my search for CAN info and finding this forum/thread.

I have programmed an Arduino to emulate the CAN messages and have got the unit to see the BMS is connected, and I can see temps and SOC, however I have a message No Dis/chg limits.

I send the 1872-78 messages with the relevant voltages changed for my setup.
When switching on I send the messages in response to 1871 01 for 4 times.
Then I send the 100A001 at which time I manually close the contactor at the same time.
I continue to send my 1872-78 in response to 1871 01.
I receive the 1871 0x02 message and respond with 1801 02
and continue to send my 1871-78 in response to the 1871 01.

I made my system replicate the CAN log behaviour provided by Araknid post one.

Any ideas as to why I unit reports no Dis/Chg limits?

As I believe in sharing information I have discovered the below

0x1877 x 8 00 00 00 00 52 00 22 40

I have discovered what the 52 represents, I noticed while I changed this value in the about menu the battery information changed
00 = Blank [no 1871 03 06 message]
50 = Blank [no 1871 03 06 message]
51 brand = bak, cap = 45ah. [1871 03 06 message from inverter received]
52 brand = rept, cap = 50ah [1871 03 06 message from inverter received]
53 brand = sinowatt, cap = 45ah [1871 03 06 message from inverter received]
54 brand = GOT, cap = 30ah s1 and s2 available, [1871 03 06 message from inverter received]
55 brand = blank [no 1871 0x03 0x06 message]

The 22 is the firmware version, confirmed in the about menu again
22 = 2.02
12 = 1.02

The 40 is the position for the above firmware, confirmed in the about menu again
02 = Master BMS
10 = S1
20 = S2
30 = S3
40 = S4


Thanks for the help
From my understanding and experience, the contactor can be switched on way before the CAN communication takes place. The inverter would just feed the analog motherboard with the provided power but won't charge or discharge much until BMS CAN connection is established.

Anyway thanks for your hard work pinpointing the various values in the UX depending on the CAN exchanged values, this is seriously useful.

From my understanding of your problem, It's definitely something I ran into when I was only connecting 3 48V H48050 batteries, the solax was not supporting that configuration (even if the voltage was in the range of operation). I also got the IE07 message on the inverter status screen.
After switching to 2 or 4 H48050 units, I wasn't receiving the 1871 02 (disconnect/powerdown as far as I understand it).
Had you correctly encoded the battery pack voltage limits within the 1872-78 messages? And correctly reported the current SoC voltage?

Could you push on a log of the exchanges, I would gladely dive in and try to help.
Cheers,
 
Do you have an NTC sensor plugged into the RJ45 port to enable Lead acid mode? It also needs voltage across the terminals. I had trouble setting the voltages too, exact same problem, it would just forget what I had entered. fancy sharing your code?
That is interesting, I had Battery voltage but I did not have a NTC connected, I did notice it mentioned on the pin out in the manual but there was no mention when it was used. Do you know the value NTC used? I tried a 10K resistor across pins 1 and 3 on the rj45 this evening but no luck.

@topaz
Will look into logs etc tomorrow so I can better answer your questions as its getting late.
 
I can measure for you but i will have to power down my system which is a bit of a pain, you could just use potentiometer that's how i did it, i think its higher than 10k if my memory serves me, it was a weird type that an engineer sent me for free in the end.
what inverter do you have? i have an X1 G3
 
I just tested the resistor i used before i got a proper one and it was 85K between pins 1 + 2, its not the right value but it did work.
 
I just tested the resistor i used before i got a proper one and it was 85K between pins 1 + 2, its not the right value but it did work.
Thanks for the info this leads me to believe the NTC is a 100K version as 85K would register a value of approx. 28°C. 100K is a common value NTC.
I did try the 85K, amongst a few other values but with no luck, my unit would not accept the values entered in lead acid mode and returned to the default values every time, which were not suitable for my 72v battery.

The unit I have is a X1-AC-3.6, this is a grid tied inverter only, no PV. It is for retro fitting to an existing PV system to store excess solar into a battery.

For the moment I have given up with lead acid mode and turning my attention back to my Arduino BMS simulator. Which now receives the 1871 0x01 message from the inverter, takes a measurement of battery pack voltage via a voltage divider and analogue input. Populates the appropriate 1873 CAN message for battery voltage on every 1871 0x01 request. Been a good learning exercise as I am new to Arduino.

I have also discovered what the 4 signifies in the following example message.
0x1875 x 8 1E 01 04 00 00 00 00 00
This is the number of slave batteries. As I change this value the battery information in the about menus will change if I have 4, I see S1through to S4. If I populate this with 1 I see firmware information for S1 only.

Now I have my BMS simulator updating voltage automatically I will trial this next. Will update as I find more.
 
The minimum voltage for lead acid mode is 80v the float voltage needs to be set just above the bulk voltage, also there is a certain order you need to follow that ends in you getting to grid tie min limit if you don't it wont accept I worked this out because Solax were useless, its probably as simple as that.
 
Last edited:
Could you share your code for the simulator? I have a spare one of these inverters that i can do experiments with.
 
It works!

View attachment 24839


After some trouble in the startup sequence (Have you tried turning it off and on again?) i got the inverter to accept my relayd and conditiond CAN messages.
While implementing the CAN driver i found some minor issues which i have corrected in the attached version 2. Changelog is in the zip.

I think the SOH variable is not actually the SOH. I couldent't find anywhere on the Inverter or the Modbus to get this value, but it rises and falls with the SOC in your log and is always a bit higher. I think it might be usable and actual SOC....


A few tips for anyone trying to connect batteries:

- BMS_Announce (Empty Message on 0x100A001) is needed by the Inverter. Otherwise it wil still send out INV_Requests with the packet type 2 on 0x1871 even if you answer correctly on 0x1801 and it won't accept any other values.

- INV_Requests packet type 3 seems to be the error package, but it dosen't follow the same protocol as defined in the Modbus TCP/RTU document. Needs further investigation and more real life errors......

- You don't actually have to "Answer" the INV_Request with your data packeges. The Inverter seems to be totally happy if I just send them over randomly but in a 1000ms interval

-the values in BMS_UnitTemp do not need to be set. It works fine with all of them at 0°C


For anyone interested i have also attached the Modbus TCP/RTU specification, which was the only thing i got out of the customer support at Solax that actualy has any real value. I am logging from my Inverter via nodeRed and it has been behaving quite nicely.
@jhorisberger May i ask some detailed technical questions about your solution?

1) what is you cell configuration? how many cells do you have in serial (total nom. pack voltage)?
Did you have oriented on Solax battery configuration or just used your existing pack configuration?

2) How did you prevent from issues precharging the inverter battery circuit? Do you use any precharge resistor / circuit?
I have seen, that my inverter always pushed ~500V (for 55seconds) to the battery output 3-5 minutes after starting normal operation.

Regards from upper Austria
 
I ran some tests. NTC for Solax X3 hybrid G3 is 47k. I hope it is the same for the G4.
When I checked with Solax for the value, I was told that I had to use their original NTC.
The local supplier said they don't know if they supply this. Really great cooperation :mad:

Greetings from the Czech Republic.
 
Small update I have had some success with my Solax ac coupled inverter.
My stumbling block was the power meter, even though I had disabled the meter in the menus, it was required to allow the inverter to discharge. After connecting a power meter I got around this issue and I managed to get the unit to work with my Arduino BMS simulator with my 72 volt lead acid battery.
Looking through the menus I still have no charge or discharge limits being shown in the menus but the inverter will run to the limits set within the inverter menus. Since this little success I then blew my CAN chip on my Arduino and I think I know why so I am reconfiguring the setup a little and adding more safety to my code.
Currently the Arduino responds to the broadcast message 1871 from the inverter, measures the battery voltage and codes this into the CAN messages along with SOC varying with voltage. I am planning on doing the same with a current sensor on the battery and coding this into the CAN messages which I hope will give the BMS control over the current limits.
 
@kmn13
Sorry for the late reply: My e-mail notifications seem to be non functional....

My pack has an 104s (310V - 425V) configuration, that was a given by its former use as a Traction battery.
Since it was a standalone Pack, it has a precharge circuit with a PTC installed. I have not seen any funny behavior when restarting, other than the inverter has a 180s delay before it will close the contactors, and when it does, it will switch about 5–6 times before it actually connects. Not sure what that is all about.....

But i don't measure any System voltage before the connection, so mabey that's just a Pull-Up resistor as a means of saving on the precharge components. Do you have actual current flowing/battery connected when you measure those 500V?
 
Hello,

did anyone manage to get the CAN protocol from Solax?
I have 5 of their inverters and I am building my own HV storage on it, I can't find this protocol anywhere on the net and Solax is doing a deadbeat 🐞:mad:
 
My second post on this thread contains all the CAN data that Araknid provided and i refined somewhat.


Its in a .dbc file format but there are a couple of open source readers for that.

Not from Solax themselves, but probably as good as you are going to get
 
Hi Everyone.

Thanks for this fantastic thread and info which has been invaluable.

Short Version: Does anyone have earlier firmware for Solax X1/G4? 🙏 Also see attached new BMS CAN recording with interesting new frames from the Triple batteries. 🎁

Long Version:
I am trying to integrate a new Solax X1 G4 with a HV traction battery (320-390v) using my own DIY gateway for BMS CAN communication.

I already have software that emulates the Solax Can protocol and this works perfectly on other older inverters of the same model and also on FOX ESS models too. My HV battery also works great already so no issues there.

However the G4 inverter I am setting up now is only a few weeks old and has much newer firmware (Firmware: ARM 2.03 | DSP 2.07) which seems to have changed the can protocol in some subtle way as I am now getting the dreaded IE07 BattVoltFault error about 12seconds into the "checking" phase persistently.

In lead acid mode with my HV battery it works fine so no issues with wiring etc. When in this mode (having passed the checking phase) the fault is more or less instant when switching on the BMS CAN.

I have plugged the same inverter into another known working Solax Triple battery setup (1 master 1 slave) and it works fine. I have recorded the can communication (attache) and adjusted the voltage/SoC for my HV batt and played back but still same fault.

Probably a red herring but the only weird thing is that the inverter reports a voltage as being 6v lower than the actual of the HV pack (measured by pack BMS and multimeter). Not sure why that would be. I have tried sending real voltage and voltage inverters is reading (minus 6v) on BMS CAN frames but same issue - battvoltfault.

Based on some comments on this thread about the 1877 frame I have also tried multiple version of this to make the inverter think that its connected t multiple different battery brands but same issue. I was thinking perhaps Solax are hardcoding some voltage limits for each battery type and thats why I had the fault but doesnt seem to make any difference.

So basically I think that Solax have made some subtle change to the protocol on firmware ARM 2.03 and DSP 2.07 (possibly trying to block use of 3rd party batteries)

ATTACHED: Please find attached recorded Can frames from 2023 Solax X1 G4 with 2 triple batteries. Solax certainly added several new frames 187A/B/C/D.

BatBrand TP007
BatteryM and S version 2.00
BMS Code
BAT-M 1.02
BAT-S1 2.06 50
BAT-S2 2.06 50
BAT-S3 2.04 50
BAT-S4 2.04 50

REQUEST: I was wondering if someone has an earlier version of the inverter firmware that I could flash to see if I can get this to work. I would ask Solax but I doubt they will let me downgrade like this and not even sure which previous versions to ask for?

Any help much appreciated as several days/evenings sunk into this one now.
 

Attachments

  • Solax X1 G4 with Triple Batt from startup to shutdown.zip
    10 KB · Views: 46
Last edited:
The minimum voltage for lead acid mode is 80v the float voltage needs to be set just above the bulk voltage, also there is a certain order you need to follow that ends in you getting to grid tie min limit if you don't it wont accept I worked this out because Solax were useless, its probably as simple as that.
Hi (if you're still on the forum).
Do you know what the order is? I'm trying to set mine. The float voltage and charge / discharge current will set but not the absorption voltage or cut-off voltage.
 
Back
Top