4.1 Communication Ports

A BMS talks to the rest of the system through its communication ports: LiMon™ on the service port, a Modbus master on RS485, and controllers, chargers and other packs on CAN. This page shows which ports each board has, what each port carries, how to choose the port settings on the Interface tab and how to check that the bus answers. What is inside each CAN frame, Modbus register or JSON field is in the BMS Communication section, which this page links to.

Applies to

Boards: BMS1820, BMS3610, BCU2002, BMS1601, BMS1810. LiMon™: the latest LiMon™ release.

4.1.1 How It Works

Every master board has three ports, each with its own job:

  • Service port (RS232). LiMon™ connects here, through a USB-RS232 adapter such as the INT201.
  • RS485 port. The BMS is a Modbus RTU slave: a Modbus master, for example a PLC, an HMI or a gateway, reads its registers. The BMS answers only when it is asked, so nothing appears on the line without a master. The line settings are fixed: see 2.2 Communicating with Modbus.
  • CAN port (CAN CH#1). The BMS sends its whole set of LiBat™ CAN frames at the period you set and also answers a request for a single frame. The same CAN line carries the frames of a CAN charger and the traffic between packs in a Multi-Master system.

Fig.4.1.1: Communication Ports of a Master BMS

Master BMS Service port (RS232) RS485 port CAN port (CAN CH#1) RS232 INT201 USB to RS232 USB PC with LiMon™ Connection screen 120 Ω 120 Ω RS485 line (A, B) Modbus master PLC, HMI or gateway 120 Ω 120 Ω CAN line (H, L) Controller inverter or display CAN charger settings: LiMon™ 7.7 Other packs Multi-Master: LiMon™ 7.6 Interface tab Serial Port No#0 Protocol RS485 No#0 Protocol MODBus No#0 ID CANBus CH#1 Speed CANBus CH#1 Data Period CANBus CH#1 Protocol CANBus CH#1 Base Frame ID CAN and RS485 are lines with a 120 Ω termination at each end. Every device on one line uses the same speed and its own ID or address. Blue labels are the LiMon™ settings of each port, on the Interface tab.

Wiring. CAN and RS485 are lines, not stars: the devices hang on one cable with short stubs, and the line has a 120 Ω termination at each of its two ends and nowhere else. If the BMS sits at an end of the line, the termination switch of the board, where it has one, can terminate the line there, but the line loses its termination when that BMS is disconnected; a separate 120 Ω resistor at the end of the line avoids this. The CAN wiring rules are in 1.1 Canbus Introduction, a typical RS485 line in 2.2 Communicating with Modbus.

4.1.2 Ports per Board

Table.4.1.1: Communication Ports per Board

Board Service port (RS232) RS485 CAN
BMS1820 Connector P9
TX: pin 1
RX: pin 4
ISO GND: pin 3
Connector P9
A: pin 5
B: pin 2
Connector P8
CAN H: pin 4
CAN L: pin 2
ISO GND: pin 1
BMS3610 Connector P9
TX: pin 1
RX: pin 4
ISO GND: pin 3
Connector P9
A: pin 5
B: pin 2
Connector P8
CAN H: pin 4
CAN L: pin 2
ISO GND: pin 1
BCU2002 Connector 5
TX: pin 1
RX: pin 4
ISO GND: pin 3
Connector 5
A: pin 5
B: pin 2
Connector 4
CAN H-1: pin 3
CAN L-1: pin 4
BMS1601 Connector 2
TX: pin 1
RX: pin 4
ISO GND: pin 3
Connector 2
A: pin 5
B: pin 2
Connector 1
CAN H: pin 4
CAN L: pin 1
ISO GND: pin 2
BMS1810 Connector 11
TX: pin 1
RX: pin 4
GND: pin 3
Connector 11
A: pin 5
B: pin 2
Connector 12
CAN H: pin 6
CAN L: pin 3
GND: pin 2
  • Names. The board pages call the service port RS232 No.0 and the RS485 port RS485 No.2. In LiMon™ the same ports are Serial Port No#0 Protocol and RS485 No#0 Protocol.
  • BMS1820 and BMS3610 have no pinout page yet. Their rows come from the schematics, v2.3 for BMS1820 and v1.1 for BMS3610, where the connectors are named P8 and P9, and have not been checked on a board.
  • BCU2002 has two CAN channels on connector 4. Connect CAN CH1; CAN CH2 on pins 1 and 2 is not used by the current firmware.
  • BMS1810 has a second RS232 port, RS232 No.1, on pins 1 and 4 of connector 12. It has no setting in LiMon™; leave it unconnected.
  • Supply pins. Pin 6 of the service connector is a supply output, not a signal: 5 V on most boards, +12 V on BMS1810, where pin 5 of connector 12 carries +12 V as well.

4.1.3 Settings

Table.4.1.2: Port Settings on the Interface Tab

Setting What it does How to choose Default
Serial Port No#0 Protocol Protocol of the service port. Leave LiMon PC: the service port is the LiMon™ connection. The LiMon™ reference describes the other option. LiMon PC
RS485 No#0 Protocol Protocol of the RS485 port. Leave MODBUS RTU. The port answers Modbus in either case. MODBUS RTU
MODBus No#0 ID Address of the BMS on the RS485 line, 1 to 247, entered in decimal. An address that no other device on the same line uses.
Enter the same address in the Modbus master.
1
CANBus CH#1 Speed Bit rate of the CAN port: 125, 250, 500 or 1000 kbit/s. The bit rate of the other devices on the line; every device must use the same one.
The recommended bus length per bit rate is in Table.1.2.1.1 of LiBat v2.x Data Format.
500 kbit/s
CANBus CH#1 Data Period How often the BMS sends its whole set of frames: every 250, 500, 1000, 1500 or 2000 ms, or Disabled. The update rate the receiver needs.
Each module adds frames, so at 125 kbit/s with many modules a 250 ms period fills a large part of the line; choose a longer one there.
With Disabled the BMS sends only what is requested.
A CAN charger also needs a period: with Disabled it gets no frames.
500ms
CANBus CH#1 Protocol The frame set the CAN port uses. LiBat CANbus v2.0: for every new system.
LiBat CANbus v1.0: only for an existing installation that already uses it; it is no longer documented.
OEM Custom v1.0: only when LiBat™ has told you to.
Disabled: the BMS sends no LiBat™ frames and answers no requests.
LiBat CANbus v2.0
CANBus CH#1 Base Frame ID The first part of every frame identifier, in hexadecimal. A frame's identifier is the base followed by its frame number: with 0x0AAA, Battery Pack Status (0x02) is 0x0AAA0002. A base that no other BMS or device on the line uses.
From 0x0000 to 0x0FFF: LiMon™ shows 0x0 and takes three digits after it, for example 0x0BBB.
The receiver must know it, and a request must carry it, or the BMS ignores the request.
0x0AAA

Restart. MODBus No#0 ID and the four CANBus CH#1 settings take effect only at the next start of the BMS; see Table.2.2.1 in 2.2 Managing Settings.

A Modbus master can also change the address of the BMS over the line, which takes effect at once; see 2.3 Register Map.

The same tab holds the Multi-Master settings, which connect parallel packs over this CAN port, described in 4.3 Parallel Packs; the Integration tab holds the CAN charger settings, described in 4.2 Charger Integration.

4.1.4 Example

Example: two packs read by one controller (chosen values)

Two independent packs, not in Multi-Master, share one CAN line and one RS485 line with a system controller. The controller reads both packs at 500 kbit/s and expects new values twice a second.

Setting Pack 1 Pack 2
CANBus CH#1 Speed 500 kbit/s 500 kbit/s
CANBus CH#1 Data Period 500ms 500ms
CANBus CH#1 Protocol LiBat CANbus v2.0 LiBat CANbus v2.0
CANBus CH#1 Base Frame ID 0x0AAA 0x0BBB
MODBus No#0 ID 1 2

The Battery Pack Status of pack 1 arrives as 0x0AAA0002, that of pack 2 as 0x0BBB0002, and the Modbus master asks address 1 or address 2. Pack 1 sits at one end of both lines and pack 2 in the middle, so only pack 1 and the controller at the far end are terminated. Each pack is restarted after the save.

4.1.5 Checking the Result

  • Service port: LiMon™ connects, and the Connection screen shows the model, the serial number and the versions (5. Connection).
  • Modbus: after the restart, the master reads the BMS at its address. Compare a value you can see in Live View, such as the pack voltage or the SoC, with the Register Map; the current has the same sign, + for charge.
  • CAN, with a period: a CAN analyser or the controller shows frames whose identifiers start with your base, once every period. Compare the values with Live View, with the frame descriptions in LiBat v2.x Data Frames.
  • CAN, with Disabled: send a frame with no data to your base followed by a frame number, for example 0x0AAA0002; the BMS answers with that frame once. The frames that can be requested are listed under Transmission in LiBat v2.x Data Format.
  • Events: no new event after the restart.

4.1.6 Common Mistakes

  • No restart after a change. The port keeps working with the old value; see Table.2.2.1 in 2.2 Managing Settings.
  • A different bit rate on one device. The CAN line carries no readable frames, or only error frames. Set the same CANBus CH#1 Speed on every device.
  • Two devices with the same ID. Two packs with the same CANBus CH#1 Base Frame ID send frames that cannot be told apart, and two devices with the same MODBus No#0 ID answer at the same time. This happens easily when one settings file is copied to several packs; see Table.2.2.3 in 2.2 Managing Settings.
  • Data Period set to Disabled. A receiver that waits for frames sees nothing, System Errors L1 (0x07) never arrives, and a CAN charger gets no frames. Choose a period; a CAN charger always needs one.
  • Termination wrong. No termination, a termination in the middle of the line, or a third one gives errors that come and go with the cable length and the bit rate. Terminate the two ends only.
  • RS485 A and B swapped. The master gets no answer. Makers name A and B differently, so swap the two wires and try again.
  • Register numbers off by one. The master reads a neighbouring value. The register map gives the register numbers as the protocol counts them, from 0; some masters count from 1.
  • INT201 in the wrong mode. LiMon™ does not connect. The service port is RS232, so set the INT201 switch to RS232 mode (INT201 pinout).
  • BCU2002 wired to CAN CH2. The bus stays silent. Use CAN CH1 on connector 4.