The three agreements
It helps to stop treating “CAN” and “RS485” as descriptions of a link and start treating them as one of three things that have to line up. Nearly every failure people bring to us sits in the third one, and nearly every purchasing decision is made on the first.
| Agreement | What has to match | What happens when it does not |
|---|---|---|
| Electrical | Transceiver type, differential pair, signal levels, termination, ground reference. | No traffic at all, or corruption that gets worse with cable length. Visible on a scope, invisible in software. |
| Framing | CAN bitrate and frame format, or RS485 baud rate, parity, stop bits and device address. | Frames arrive and are discarded. CAN error counters climb; a serial port returns timeouts or garbage. |
| Message dictionary | Which identifier or register holds voltage, current, state of charge, and the charge and discharge limits. | A clean, busy link where the inverter still reports no battery. This is where most real failures live. |
What CAN gives you that RS485 does not
CAN carries the framing agreement in hardware. Every frame has an identifier, collisions are resolved by arbitration rather than by a master polling each device in turn, and the controller keeps error counters that take a node off the bus when it misbehaves. That is why it is the usual choice for a link that has to report charge and discharge limits continuously while an inverter acts on them.
RS485 is only a differential pair and a pair of transceivers. It has no identifiers, no arbitration and no error handling of its own, so a protocol on top has to supply framing, addressing and error checking. That makes it flexible and cheap, and it is why RS485 links carry a request-and-response protocol with a register map rather than a stream of unsolicited updates.
Neither one is better; the far-end device decides
There is no version of this question that can be answered without naming the other device. If the inverter implements a battery protocol over CAN, the link is CAN. If a monitoring gateway reads registers over RS485, that link is RS485. A pack frequently has both at once, running to different equipment, and neither choice reflects a judgement about the buses.
What that means practically: fix the far-end device first, read its manual for the bus and protocol it wants, and only then choose the BMS and the cable. Doing it the other way round produces a shortlist that has to be redone.
For inverter-connected packs, start from the JK-PB series and confirm the protocol before ordering.
Why a converter does not rescue a mismatched pair
A CAN-to-RS485 converter operates on the electrical and framing agreements. It takes bits off one bus and puts them on the other, correctly formed and perfectly useless, because the receiving device has no definition for what arrived. The message dictionary is untouched by anything that converts signals.
Translating between two battery protocols is a gateway function: something has to parse the source dictionary, map each value to the destination dictionary, and republish it at the rate the destination expects. That is a device with firmware and a supported-device list, not a passive adapter, and it introduces its own version-matching problem.
“Supported” is a statement about two firmware versions
A protocol name in a compatibility list is shorthand. The named protocols evolve, message identifiers get added and occasionally reassigned, and a BMS firmware written against one revision can go quiet against an inverter built to another. Both ends can be honestly advertising support and still not interoperate.
Record the BMS hardware and firmware version and the inverter firmware version before ordering, and record the combination that worked afterwards. That record is worth more than any compatibility table for the next installation.
Isolate a silent link from the bottom up
Each step below rules out one of the three agreements. Working downward from the protocol instead wastes a commissioning day rediscovering that the pack itself was never healthy.
- Pack reads sane cell voltages on local monitoring before anything is connected
- The correct port is in use, and the display is not occupying the one the inverter needs
- Pinout verified against both manuals, and continuity checked before energising
- Bitrate or baud rate, parity and address matched at both ends
- Termination present at exactly the two physical ends of the bus and nowhere else
- Protocol profile selected on the BMS and the matching battery type selected on the inverter
- Both firmware versions recorded, and both checked against the compatibility statement
Pinout, termination and grounding are covered in detail in the RS485 and CAN wiring guide. Cables are listed by protocol and supported family in the cable catalog; a plug that seats is not evidence of anything.
What a fully working link looks like
The inverter should display pack voltage, current and state of charge sourced from the BMS rather than estimated from its own terminals, and it should obey the charge and discharge current limits the BMS reports. An inverter that shows the battery but keeps charging at its own rate has half a link: the dictionary is being read for telemetry and ignored for control.
Checking a BMS and inverter pair before ordering
Send the inverter brand, model and firmware version, the intended bus, and the pack series count and current.