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

Araknid

Member
Joined
Jun 1, 2020
Messages
54
Heya,

A quick rundown before I add more later.. Canbus between the Solax battery and inverter is listed below... Solax wouldn't give me this information directly, so well.. a peak canbus usb dump with busmaster and we have the full start-up init and 1 second poll plus keepalive messages.

Inverter polling for battery;
14:10:31:4824 Rx 1 0x1871 x 8 02 00 01 00 01 00 00 00
14:10:32:4822 Rx 1 0x1871 x 8 01 00 01 00 00 00 00 00
14:10:33:4823 Rx 1 0x1871 x 8 02 00 01 00 01 00 00 00
14:10:34:4823 Rx 1 0x1871 x 8 01 00 01 00 00 00 00 00
14:10:35:4822 Rx 1 0x1871 x 8 02 00 01 00 01 00 00 00
14:10:36:4822 Rx 1 0x1871 x 8 01 00 01 00 00 00 00 00
14:10:37:4823 Rx 1 0x1871 x 8 02 00 01 00 01 00 00 00
14:10:38:4823 Rx 1 0x1871 x 8 01 00 01 00 00 00 00 00
14:10:39:4822 Rx 1 0x1871 x 8 02 00 01 00 01 00 00 00
14:10:40:4821 Rx 1 0x1871 x 8 01 00 01 00 00 00 00 00

Start-up battery acknowledgement;
14:11:19:2726 Rx 1 0x100A001 x 0 <--- this message pops out just before the adoption.. could be a "wake up " from the battery
14:11:19:4897 Rx 1 0x1871 x 8 02 00 01 00 01 00 00 00 < -- from Inverter
14:11:19:4897 Rx 1 0x1801 x 8 02 00 01 00 01 00 00 00 < -- from battery
Once issued, 0x1871 02 00 01... does not come out again, it must be adopted thereafter

Messages start from the inverter every 1 second with a message on ID 0x1871
14:11:20:4897 Rx 1 0x1871 x 8 01 00 01 00 00 00 00 00 < -- from Inverter "Read"
14:11:20:4940 Rx 1 0x1872 x 8 44 0A 08 07 5E 01 5E 01 <..... from battery, details below
14:11:20:4957 Rx 1 0x1873 x 8 41 09 00 00 31 00 3E 02
14:11:20:4974 Rx 1 0x1874 x 8 24 01 16 01 21 00 21 00
14:11:20:4988 Rx 1 0x1875 x 8 1E 01 04 00 01 00 00 00
14:11:20:5002 Rx 1 0x1876 x 8 00 00 E2 0C 00 00 D7 0C
14:11:20:5018 Rx 1 0x1877 x 8 00 00 00 00 52 00 22 40
14:11:20:5033 Rx 1 0x1878 x 8 07 0A 00 00 10 27 00 00

Can-bus message specification is attached. This can be imported into ETAS BusMaster and replayed along with the attached log files.

I've attached the raw logs.. from pre-start to running from about 40% -> 60% -> 15% shutdown... about 12 hours or so of run-time.

1617929686469.png

Solax Triple Power T58 Master + Slave ~11.6 kWh 180-262 Vdc +-25A (Up to +-35A MAX)
1617929830324.png

Solax X3-Hybrid-8.0 - Three phase Hybrid Inverter with HV battery 8kW Solar & Battery Charge/Discharge
1617929934411.png


HV Battery input takes between 160 and 800 Vdc at 25A continuous MAX charge and/or discharge.... that leaves a lot of room to keep the inverter in the 8kW charge and discharge zone when above 300V.

Updated (20-Oct-21) with all cabling complete to standard, breakers and isolators. Also a tap-in for communications and LAN etc.

IMG_20211006_115800.jpg
 

Attachments

  • Solax X3 Hybrid Triple Power T58 Canbus Log.zip
    1.3 MB · Views: 310
  • Solax X3 Hybrid Triple Power T58 Canbus Definition (DBF).zip
    933 bytes · Views: 267
Last edited:
You Sir are my absolute hero!

I was getting ready to order batteries and an Inverter for a couple of thousand € just to get the logs of the CAN Bus. I have been bashing my head at the brick wall that is Solax customer service for over half a year. They kept promissing that they wil release a CAN specification and naive as i was, i continued to order and install my system, beliving that i wil get access to the data i need. I have a whole EPS ready system with a second life 60kWh traction battery out of one of our vehicles sitting there doing nothing.

I was getting quite desperate and thought one last goole search before ordering cannot hurt when i stumbled across this post. Not only do you have a trace of the Bus, you have also done the gruntwork of figuring out the signal definition. Christmas came early this year!

I wil try this out right away and wil hapily share my leanings if anything pops up

Thanks a bunch
 
Last edited:
It works!

1619553529252.png


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.
 

Attachments

  • Solax X3 BMS v2.zip
    2.4 KB · Views: 338
  • Hybrid X1&X3-G3 ModbusTCP&RTU V3.21- English.pdf
    623.5 KB · Views: 1,350
Great to see this, I have had my eye on these inverters for while to pair with an outlander battery and a simp BMS, What pack do you have and what BMS are you using?
 
I'm using custom pack from one of our vehicles. It has a BMS integrated, including current measurement, switching and fusing. The 60kWh is a bit overkill for our 3 party house, but it was originally installed in of one of our electric excavators. You take what you can get .....
 
Last edited:
Cool setup, quite compact for 60kwh, programming like that is well beyond me, i would rather get someone to do it for me who knows what they are doing. If I manage to get my hands on one of these things as the past two times I have won them on eBay the seller has cancelled or gone quiet afterwards, very frustrating, I guess they didn't get what they were after for them, i will then speak to the creator of the simpBMS he always seems keen and helpful adding new device compatibility.
 
Oh
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

oh Ye SoH is actually kWh

sorry I have an update here for it but didn’t post it. I’ll be free next week to post :)

glad this helped :) seems a lot of googling and no one had ever done it for whatever reason... I still have to finish my install proper
839F9BF7-A7D8-4BC5-86AB-50AF2DBB14BE.jpeg
 
I'm using a KBP60 Pack from Kreisel Electric. It has a BMS from STW fully integrated, including current measurement, switching and fusing. The 60kWh is a bit overkill for our 3 party house but it was originaly installed in of one of our electric excavators. You take what you can get .....

The CAN bus is "translated" by a custom controller. Since i already know the BMS side well from work, mapping it to what the Solax expects was not that much of a problen once i knew the CAN definition.
Nothing you can't do on the Teensy of the simpBMS with a couple hundred lines of code and a few cups of coffee either. Or on a any old Arduino with a CAN shield for that matter....

View attachment 24844

Wow cool setup :)

I havnt done the exact bits of the error codes yet. I’m assuming their copy pasted form their comm spec, so the manual may line up.
 
Hello guys
I bought a Solax Hybrid X1 3.7 (single phase) and im trying to connect it to my high voltage battery eventually using a teensy running simpBMS, i have been trying to get it to spoof it into working using a USB-CAN

It announces itself on 0x1871 - 01 00 01 00 00 00 00 00 every second,
Im sending a repeating every second copy of the can messages listed here modified for my battery voltage
I have tried sending Empty Message on 0x100A001 followed by 0x1801 02 00 01 00 01 00 00 00
but i am unable to get BMS lost message to disappear.

I have not seen the 0x1871 x 8 02 00 01 00 01 00 00 00 from the inverter, im wondering if it has a different battery protocol, but from what i know the triple power batteries used here are compatible with this inverter, has anyone got any ideas?

I was wondering about the start-up sequence timing is important.
Thanks
 
Hi
Your procedure sounds about right. What I am most concerned about is if you do not get any 0x1871 x 8 02 00 01 00 01 00 00 00 messages. These came as every other Message, even without the "Wake-up" message from the Battery....

Maby check with Solax if they have a FW update available? Mine is pretty new as I was required to install an Update to fulfill the current regulations in the EU ( I currently have Inverter DSP1: 2.07, InverterDSP2: 2.01, Manager ARM 2.03)

Could you make a Trace of your BUS ? That makes debugging quite a lot easier.....
 
Hello
I was concerned I did not get 02 00 01 00 01 00 00 00 as well.
the only other thing i have seen occasionally is 05 00 01 00 00 00 00 00, which is sometimes when I send the INV request
My firmware matches yours exactly.
I have attached a small sample log.
EDIT I have also attached the modified settings for my battery that i created just in case it was looking for a voltage.
Thank you.
 

Attachments

  • x1 hybrid 3.7de.txt
    459.2 KB · Views: 178
  • test3.txt
    15.6 KB · Views: 161
Last edited:
D
Hello
I was concerned I did not get 02 00 01 00 01 00 00 00 as well.
the only other thing i have seen occasionally is 05 00 01 00 00 00 00 00, which is sometimes when I send the INV request
My firmware matches yours exactly.
I have attached a small sample log.
EDIT I have also attached the modified settings for my battery that i created just in case it was looking for a voltage.
Thank you.
Can you confirm you do have a real battery connected as well? Not just sending can messages with no battery connected, and engaging your contactors after the 0x100A001 message???

the inverter isn’t “dumb” and will cross check to ensure cable resistance isn’t greater than some internal threshold.

adoption startup sequence will fail if you don’t have an actual battery connected.
 
Yes its a real battery with real useable power, set on lead acid it will power EPS loads. 80 cell outlander pack.
The timing is something i am concerned about from the start, i think I will need help reprogramming the teensy to do what i need, its just above what i can do with cut and paste of the existing code, there are parts of the program i need modifying that I don't understand.

I don't think its resistance related, I would have noticed a current spike on the pack sensor, it doesn't get to that check, I don't hear the internal relay being closed like I do with lead acid mode. Its more likely what I'm sending isn't correct or at the wrong time for the contactors (or possibly using a different version of the protocol)
 
Yes its a real battery with real useable power, set on lead acid it will power EPS loads. 80 cell outlander pack.
The timing is something i am concerned about from the start, i think I will need help reprogramming the teensy to do what i need, its just above what i can do with cut and paste of the existing code, there are parts of the program i need modifying that I don't understand.

I don't think its resistance related, I would have noticed a current spike on the pack sensor, it doesn't get to that check, I don't hear the internal relay being closed like I do with lead acid mode. Its more likely what I'm sending isn't correct or at the wrong time for the contactors (or possibly using a different version of the protocol)

X3 vs X1... but as you say they're compatible with the T58 system... so I don't see why the protocol would suddenly change.
 
I found someone that kindly provided a bus capture of a X1 hybrid on start-up and well what I got back was not what I expected at all.
It doesn't follow the protocol at all and there are some very odd remote frames that i don't understand. can you work out whats going on here? i have compared vales to battery voltage and temperature but nothing seems to make sense as far as i can see.
 

Attachments

  • Solax x1 start capture.txt
    90.1 KB · Views: 181
  • Solax running.txt
    33.6 KB · Views: 166
I found someone that kindly provided a bus capture of a X1 hybrid on start-up and well what I got back was not what I expected at all.
It doesn't follow the protocol at all and there are some very odd remote frames that i don't understand. can you work out whats going on here? i have compared vales to battery voltage and temperature but nothing seems to make sense as far as i can see.
you're right that is kinda unexpected? the X3 just made sense... have you got some contextual data on initial V? full stack voltage? which battery? was this a T58? or a previous model??
 
"First log the pack came back on at 229.2v
Second log 230.6
It’s now sat at 231.3
Lowest was 202.3v at 09:24am this morning. The SOC was 51% at 09:24am

In theory the min voltage for my setup should be 170v and max 236v

Temps 33 first and 34oC second log as that data will be in there.

I have two T45 (li-ion) https://www.solaxpower.com/wp-content/uploads/2020/02/Battery-Triple-power-white.pdf"

So that's the previous model. he has two batteries connected. I'm wondering if the initial message that is sent too and from the inverter selects the type of protocol used.

Im wondering if the remote data received is inaccurate, on two start-ups it was different each time.

I have my setup working in lead acid mode right now, its less than perfect but its doing the job.
 
I'll have a have a better look over it then.. purhaps its exchanging serial numbers on startup. looks like a multi packet extended message or something? all my CAN frames are 8 bytes in length.

20 Receive 15:03:29:719 Data frame Extended frame 00001871 8 03 06 15 07 12 0f 03 2a

Looksi here...

that looks like a date to me :) 03 06 may be the header.. but 15 07 12 is 2021/07/18 at 0f 03 2a which is 15:03:42

It ticks up every second if you notice.. so the inverter is sending DTS to the BMS for a time-base?

so at a guess that 03 06 header on message 1871 is some type of "time sync blah" followed by YY MM DD HH mm ss in hex.
 
03 06 may be your timezone? and purhaps country code... something like that
 
That's a really good find on the date! completely missed that looking for the battery data which I think may be contained in the remote frame
Heres another log file for start-up.
We are going to disconnect one battery to see what changes, it may help us find the data we are looking for.
 

Attachments

  • 2nd startup .txt
    404.5 KB · Views: 176
Back
Top