Changes for page 5.2 Modbus protocol

Last modified by Admin on 2026/04/24 10:30

From version 5.3
edited by Admin
on 2024/12/04 10:50
Change comment: Update document after refactoring.
To version 16.2
edited by Admin
on 2026/04/02 13:53
Change comment: Update document after refactoring.

Summary

Details

Page properties
Parent
... ... @@ -1,1 +1,1 @@
1 -drafts.BMS Main 2\.1.5\. Communication protocols.WebHome
1 +Battery management systems.EOL devices.BMS Main 2\.1.5\. Communication protocols.WebHome
Content
... ... @@ -1,5 +1,11 @@
1 -== 4.2.1 General information ==
1 +(% data-numbered-headings-start="5" style="--numbered-headings-start: 4;font-size: 0px;color: rgba(0, 0, 0, 0.0);margin-bottom: 0px; margin-top: 0px;" %)
2 += Communication protocols =
2 2  
4 +(% data-numbered-headings-start="2" style="--numbered-headings-start: 1;font-size: 0px;color: rgba(0, 0, 0, 0.0);margin-bottom: 0px; margin-top: 0px;" %)
5 +== Modbus protocol ==
6 +
7 +=== General information ===
8 +
3 3  The BMS Main 2.x device provides the information about the battery system using Modbus protocol. The BMS is a Modbus-server and it responds to the Modbus-client’s commands.
4 4  
5 5  Interaction with the device is performed over the RS-485 bus (Modbus RTU) or the Ethernet network (Modbus TCP).
... ... @@ -28,7 +28,7 @@
28 28  
29 29  Words are in the **little endian**.
30 30  
31 -== 4.2.2 Input registers ==
37 +=== Input registers ===
32 32  
33 33  (% style="width:651px" %)
34 34  |(% style="width:92px" %)**Register address**|(% style="width:94px" %)**Number of registers**|(% style="width:368px" %)**Content**|(% style="width:96px" %)**Type**
... ... @@ -234,7 +234,11 @@
234 234  
235 235  bit 25 – “Power up”;
236 236  
237 -bits 26-31 – reserved.
243 +bit 26 — signal “External 1”;
244 +
245 +bit 27 — signal “Heater (AUX)”;
246 +
247 +bits 28-31 — not used.
238 238  )))|(% style="width:96px" %)U32
239 239  |(% style="width:92px" %)**0x200B**|(% style="width:94px" %)1|(% style="width:368px" %)(((
240 240  Discrete output signals (bitfield):
... ... @@ -262,7 +262,7 @@
262 262  
263 263  bits 4-15 — not used.
264 264  )))|(% style="width:96px" %)U16
265 -|(% style="width:92px" %)**0x200E**|(% style="width:94px" %)2|(% style="width:368px" %)(((
275 +|(% style="width:92px" %)**0x200E-0x200F**|(% style="width:94px" %)2|(% style="width:368px" %)(((
266 266  Errors 2 (bitfield):
267 267  
268 268  bit 0 – "Low CH temperature", temperature is too low for charging;
... ... @@ -293,7 +293,15 @@
293 293  
294 294  bit 13 – “General error”;
295 295  
296 -bits 14-31 — reserved.
306 +bit 14 — reserved (set to 0);
307 +
308 +bit 15 — reserved (set to 0);
309 +
310 +bit 16 — reserved (set to 0);
311 +
312 +bit 17 — “Precharge error”;
313 +
314 +bits 18-31 — not used.
297 297  )))|(% style="width:96px" %)U32
298 298  |(% style="width:92px" %)**0x2010**|(% style="width:94px" %)1|(% style="width:368px" %)Address or the BMS Logic device whose parameters are in registers 0x2011-0x20C9|(% style="width:96px" %)U16
299 299  |(% style="width:92px" %)**0x2011**|(% style="width:94px" %)1|(% style="width:368px" %)(((
... ... @@ -305,7 +305,7 @@
305 305  
306 306  bit 2 — device is ready;
307 307  
308 -bit 3 — data from the device is actual;
326 +bit 3 — reserved;
309 309  
310 310  bit 4 — temperature sensor #1 is present;
311 311  
... ... @@ -347,13 +347,19 @@
347 347  |(% style="width:92px" %)**0x20F4**|(% style="width:94px" %)1|(% style="width:368px" %)(((
348 348  Discrete input signals 2 (bitfield):
349 349  
350 -bit 0 “Fuse 2”;
368 +bit 0 “Fuse 2”;
351 351  
352 -bit 1 “Fuse 3”;
370 +bit 1 “Fuse 3”;
353 353  
354 -bit 2 “Circuit breaker status”;
372 +bit 2 “Circuit breaker status”;
355 355  
356 -bits 3-15 – reserved.
374 +bit 3 — signal "Balancing request";
375 +
376 +bit 4 — signal "Close Main contactor";
377 +
378 +bit 5 — signal "Close External 1";
379 +
380 +bits 6-15 — not used.
357 357  )))|(% style="width:96px" %)U16
358 358  |(% style="width:92px" %)**0x2100-0x2101**|(% style="width:94px" %)2|(% style="width:368px" %)Battery state of charge (SOC), %|(% style="width:96px" %)REAL32
359 359  |(% style="width:92px" %)**0x2102**|(% style="width:94px" %)1|(% style="width:368px" %)Number of BMS Logic devices|(% style="width:96px" %)U16
... ... @@ -416,15 +416,15 @@
416 416  |(% style="width:92px" %)**0x2181-0x2182**|(% style="width:94px" %)2|(% style="width:368px" %)Ethernet netmask|(% style="width:96px" %)U8[4]
417 417  |(% style="width:92px" %)**0x2183-0x2184**|(% style="width:94px" %)2|(% style="width:368px" %)Ethernet gateway|(% style="width:96px" %)U8[4]
418 418  |(% style="width:92px" %)**0x2185-0x2186**|(% style="width:94px" %)2|(% style="width:368px" %)Calibrated voltage in the reference line of the current sensor, V|(% style="width:96px" %)REAL32
419 -|(% style="width:92px" %)**0x218E**|(% style="width:94px" %)2|(% style="width:368px" %)Voltage from the current sensor, V|(% style="width:96px" %)REAL32
420 -|(% style="width:92px" %)**0x2190**|(% style="width:94px" %)2|(% style="width:368px" %)Voltage in the reference line of the current sensor, V|(% style="width:96px" %)REAL32
421 -|(% style="width:92px" %)**0x2192**|(% style="width:94px" %)2|(% style="width:368px" %)Voltage from the auxiliary current sensor, V|(% style="width:96px" %)REAL32
422 -|(% style="width:92px" %)**0x2194**|(% style="width:94px" %)2|(% style="width:368px" %)Voltage in the reference line of the auxiliary current sensor, V|(% style="width:96px" %)REAL32
423 -|(% style="width:92px" %)**0x219F**|(% style="width:94px" %)2|(% style="width:368px" %)Charge current limit, A|(% style="width:96px" %)REAL32
424 -|(% style="width:92px" %)**0x21A1**|(% style="width:94px" %)2|(% style="width:368px" %)Discharge current limit, A|(% style="width:96px" %)REAL32
443 +|(% style="width:92px" %)**0x218E-0x218F**|(% style="width:94px" %)2|(% style="width:368px" %)Voltage from the current sensor, V|(% style="width:96px" %)REAL32
444 +|(% style="width:92px" %)**0x2190-0x2191**|(% style="width:94px" %)2|(% style="width:368px" %)Voltage in the reference line of the current sensor, V|(% style="width:96px" %)REAL32
445 +|(% style="width:92px" %)**0x2192-0x2193**|(% style="width:94px" %)2|(% style="width:368px" %)Voltage from the auxiliary current sensor, V|(% style="width:96px" %)REAL32
446 +|(% style="width:92px" %)**0x2194-0x2195**|(% style="width:94px" %)2|(% style="width:368px" %)Voltage in the reference line of the auxiliary current sensor, V|(% style="width:96px" %)REAL32
447 +|(% style="width:92px" %)**0x219F-0x21A0**|(% style="width:94px" %)2|(% style="width:368px" %)Charge current limit, A|(% style="width:96px" %)REAL32
448 +|(% style="width:92px" %)**0x21A1-0x21A2**|(% style="width:94px" %)2|(% style="width:368px" %)Discharge current limit, A|(% style="width:96px" %)REAL32
425 425  |(% style="width:92px" %)**0x21B8**|(% style="width:94px" %)1|(% style="width:368px" %)Flag indicating that the cells are balancing|(% style="width:96px" %)U16
426 -|(% style="width:92px" %)**0x21C6**|(% style="width:94px" %)2|(% style="width:368px" %)Calibrated voltage in the reference line of the auxiliary current sensor, V|(% style="width:96px" %)REAL32
427 -|(% style="width:92px" %)**0x21CA**|(% style="width:94px" %)2|(% style="width:368px" %)Average cell voltage, V|(% style="width:96px" %)REAL32
450 +|(% style="width:92px" %)**0x21C6-0x21C7**|(% style="width:94px" %)2|(% style="width:368px" %)Calibrated voltage in the reference line of the auxiliary current sensor, V|(% style="width:96px" %)REAL32
451 +|(% style="width:92px" %)**0x21CA-0x21CB**|(% style="width:94px" %)2|(% style="width:368px" %)Average cell voltage, V|(% style="width:96px" %)REAL32
428 428  |(% style="width:92px" %)**0x2200-0x2203**|(% style="width:94px" %)4|(% style="width:368px" %)(((
429 429  Record #1 from the errors journal. First 32-bit word contains a timestamp, second 32-bit word contains errors 1 flags (see 0x2007-0x2008).
430 430  
... ... @@ -446,12 +446,12 @@
446 446  |(% style="width:92px" %)**0x2208-0x227B**|(% style="width:94px" %) |(% style="width:368px" %)Records #3-31 from the errors journal|(% style="width:96px" %)
447 447  |(% style="width:92px" %)**0x227C-0x227F**|(% style="width:94px" %)4|(% style="width:368px" %)Record #32 from the errors journal|(% style="width:96px" %)U32[2]
448 448  |(% style="width:92px" %)**0x2300**|(% style="width:94px" %)1|(% style="width:368px" %)Number of the last record from the errors journal (1..32)|(% style="width:96px" %)U16
449 -|(% style="width:92px" %)**0x2380**|(% style="width:94px" %)4|(% style="width:368px" %)Record data #1 from the errors journal. First 32-bit word contains errors 2 flags (see 0x200E-0x200F).|(% style="width:96px" %)U32[2]
473 +|(% style="width:92px" %)**0x2380-0x2383**|(% style="width:94px" %)4|(% style="width:368px" %)Record data #1 from the errors journal. First 32-bit word contains errors 2 flags (see 0x200E-0x200F).|(% style="width:96px" %)U32[2]
450 450  |(% style="width:92px" %)**0x2384-0x2387**|(% style="width:94px" %)4|(% style="width:368px" %)Record data #2 from the errors journal|(% style="width:96px" %)U32[2]
451 451  |(% style="width:92px" %)**0x2388-0x23FB**|(% style="width:94px" %) |(% style="width:368px" %)Records data #3-31 from the errors journal|(% style="width:96px" %)
452 452  |(% style="width:92px" %)**0x23FC-0x23FF**|(% style="width:94px" %)4|(% style="width:368px" %)Record data #32 from the errors journal|(% style="width:96px" %)U32[2]
453 -|(% style="width:92px" %)**0x2400**|(% style="width:94px" %)2|(% style="width:368px" %)Current measured by the auxiliary current sensor, A|(% style="width:96px" %)REAL32
454 -|(% style="width:92px" %)**0x2402**|(% style="width:94px" %)2|(% style="width:368px" %)(((
477 +|(% style="width:92px" %)**0x2400-0x2401**|(% style="width:94px" %)2|(% style="width:368px" %)Current measured by the auxiliary current sensor, A|(% style="width:96px" %)REAL32
478 +|(% style="width:92px" %)**0x2402-0x2403**|(% style="width:94px" %)2|(% style="width:368px" %)(((
455 455  Final battery current, A
456 456  
457 457  Note — Typically it is the sum of the values measured by the main and auxiliary current sensors
... ... @@ -473,19 +473,19 @@
473 473  
474 474  6 – Relaxed (after discharging).
475 475  )))|(% style="width:96px" %)U16
476 -|(% style="width:92px" %)**0x2411**|(% style="width:94px" %)2|(% style="width:368px" %)Duration of the battery state (0x2410), seconds|(% style="width:96px" %)U32
477 -|(% style="width:92px" %)**0x2420**|(% style="width:94px" %)2|(% style="width:368px" %)Nominal battery capacity, A×h|(% style="width:96px" %)REAL32
478 -|(% style="width:92px" %)**0x2422**|(% style="width:94px" %)2|(% style="width:368px" %)Maximum charge voltage, V|(% style="width:96px" %)REAL32
479 -|(% style="width:92px" %)**0x2424**|(% style="width:94px" %)2|(% style="width:368px" %)Minimum discharge voltage, V|(% style="width:96px" %)REAL32
480 -|(% style="width:92px" %)**0x2426**|(% style="width:94px" %)2|(% style="width:368px" %)Maximum charge current, A|(% style="width:96px" %)REAL32
481 -|(% style="width:92px" %)**0x2428**|(% style="width:94px" %)2|(% style="width:368px" %)Maximum discharge current, A|(% style="width:96px" %)REAL32
500 +|(% style="width:92px" %)**0x2411-0x2412**|(% style="width:94px" %)2|(% style="width:368px" %)Duration of the battery state (0x2410), seconds|(% style="width:96px" %)U32
501 +|(% style="width:92px" %)**0x2420-0x2421**|(% style="width:94px" %)2|(% style="width:368px" %)Nominal battery capacity, A×h|(% style="width:96px" %)REAL32
502 +|(% style="width:92px" %)**0x2422-0x2423**|(% style="width:94px" %)2|(% style="width:368px" %)Maximum charge voltage, V|(% style="width:96px" %)REAL32
503 +|(% style="width:92px" %)**0x2424-0x2425**|(% style="width:94px" %)2|(% style="width:368px" %)Minimum discharge voltage, V|(% style="width:96px" %)REAL32
504 +|(% style="width:92px" %)**0x2426-0x2427**|(% style="width:94px" %)2|(% style="width:368px" %)Maximum charge current, A|(% style="width:96px" %)REAL32
505 +|(% style="width:92px" %)**0x2428-0x2429**|(% style="width:94px" %)2|(% style="width:368px" %)Maximum discharge current, A|(% style="width:96px" %)REAL32
482 482  
483 -== 4.2.3 Holding registers ==
507 +=== Holding registers ===
484 484  
485 485  (% style="width:653px" %)
486 486  |(% style="width:92px" %)**Register address**|(% style="width:94px" %)**Number of registers**|(% style="width:368px" %)**Content**|(% style="width:96px" %)**Type**
487 487  |(% style="width:92px" %)**0x4000**|(% style="width:94px" %)1|(% style="width:368px" %)Address of the BMS Logic device whose parameters should be in the input registers 0x2011-0x20C9|(% style="width:96px" %)U16
488 -|(% style="width:92px" %)**0x4100**|(% style="width:94px" %)2|(% style="width:368px" %)(((
512 +|(% style="width:92px" %)**0x4100-0x4101**|(% style="width:94px" %)2|(% style="width:368px" %)(((
489 489  Command to acknowledge errors in the errors journal (bitfield). Each //i//^^th^^ bit corresponds to (//i//+1) record.
490 490  
491 491  Notes:
... ... @@ -656,3 +656,39 @@
656 656  
657 657  2-65535 – use the physical input "Fuse 3".
658 658  )))|(% style="width:96px" %)U16
683 +|(% style="width:92px" %)**0x5112**|(% style="width:94px" %)1|(% style="width:368px" %)(((
684 +Software control of the "Circuit breaker status" signal. Allowable values:
685 +
686 +0 – clear the signal;
687 +
688 +1 – set the signal;
689 +
690 +2-65535 – use the physical input "Circuit breaker status".
691 +)))|(% style="width:96px" %)U16
692 +|(% style="width:92px" %)**0x5113**|(% style="width:94px" %)1|(% style="width:368px" %)(((
693 +Software control of the "Balancing request" signal. Allowable values:
694 +
695 +0 – clear the signal;
696 +
697 +1 – set the signal;
698 +
699 +2-65535 – use the physical input "Balancing request".
700 +)))|(% style="width:96px" %)U16
701 +|(% style="width:92px" %)**0x5114**|(% style="width:94px" %)1|(% style="width:368px" %)(((
702 +Software control of the "Close Main contactor" signal. Allowable values:
703 +
704 +0 – clear the signal;
705 +
706 +1 – set the signal;
707 +
708 +2-65535 – use the physical input "Close Main contactor".
709 +)))|(% style="width:96px" %)U16
710 +|(% style="width:92px" %)**0x5115**|(% style="width:94px" %)1|(% style="width:368px" %)(((
711 +Software control of the "Close External 1" signal. Allowable values:
712 +
713 +0 – clear the signal;
714 +
715 +1 – set the signal;
716 +
717 +2-65535 – use the physical input "Close External 1".
718 +)))|(% style="width:96px" %)U16