Wiki source code of 6.2 Modbus protocol
Hide last authors
author | version | line-number | content |
---|---|---|---|
![]() |
1.1 | 1 | (% data-numbered-headings-start="6" style="--numbered-headings-start: 5;font-size: 0px;color: rgba(0, 0, 0, 0.0);margin-bottom: 0px; margin-top: 0px;" %) |
2 | = Communication protocols = | ||
3 | |||
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 | |||
9 | The BMS Main 3X device provides information about the battery system using Modbus protocol. The BMS is a Modbus-server and it responds to the Modbus-client’s commands. | ||
10 | |||
11 | Interaction with the device is performed over the RS-485 bus (Modbus RTU) or the Ethernet network (Modbus TCP). | ||
12 | |||
13 | The RS-485 bus connection parameters: | ||
14 | |||
15 | * baud rate, bps — 600, 1200, 2400, 4800, 9600 (by default), 19200, 38400, 57600, 115200; | ||
16 | * word length, bits — 8; | ||
17 | * parity — none; | ||
18 | * board address (by default) — 64. | ||
19 | |||
20 | There is a description of the Input и Holding registers below. Column "Type" contains method of parameters coding: | ||
21 | |||
22 | * CHAR – character (signed 8-bit integer number); | ||
23 | * U8 — unsigned 8-bit integer number; | ||
24 | * U16 — unsigned 16-bit integer number; | ||
25 | * S16 — signed 16-bit integer number; | ||
26 | * U32 — unsigned 32-bit integer number; | ||
27 | * REAL32 — single precision floating point number ([[IEEE 754>>url:https://ru.wikipedia.org/wiki/IEEE_754]] standard); | ||
28 | * U8[x] — array of unsigned 8-bit integer numbers having a length of x; | ||
29 | * U16[x] — array of unsigned 16-bit integer numbers having a length of x; | ||
30 | * REAL32[x] — array of single precision floating point numbers having a length of x. | ||
31 | |||
32 | The bytes order of the word is **little endian**. | ||
33 | |||
34 | === Input registers === | ||
35 | |||
36 | (% style="width:662px" %) | ||
37 | |(% style="width:44px" %)**Register address**|(% style="width:55px" %)**Number of registers**|(% style="width:482px" %)**Content**|(% style="width:44px" %)**Type** | ||
38 | |(% style="width:44px" %)**0x0000**|(% style="width:55px" %)1|(% style="width:482px" %)((( | ||
39 | Hardware version: | ||
40 | |||
41 | byte 0 — minor; | ||
42 | |||
43 | byte 1 — major. | ||
44 | )))|(% style="width:44px" %)U8[2] | ||
45 | |(% style="width:44px" %)**0x0001-0x0002**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
46 | Firmware version: | ||
47 | |||
48 | byte 0 — patch; | ||
49 | |||
50 | byte 1 — minor; | ||
51 | |||
52 | byte 2 — major; | ||
53 | |||
54 | byte 3 — not used (set to 0). | ||
55 | )))|(% style="width:44px" %)U8[4] | ||
56 | |(% style="width:44px" %)**0x0003-0x0004**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
57 | Bootloader (ubl) version: | ||
58 | |||
59 | byte 0 — patch; | ||
60 | |||
61 | byte 1 — minor; | ||
62 | |||
63 | byte 2 — major; | ||
64 | |||
65 | byte 3 — not used (set to 0). | ||
66 | )))|(% style="width:44px" %)U8[4] | ||
67 | |(% colspan="4" style="width:659px" %)**Battery state** | ||
68 | |(% style="width:44px" %)**0x1000**|(% style="width:55px" %)1|(% style="width:482px" %)Battery state of charge (SOC), %|(% style="width:44px" %)U16 | ||
69 | |(% style="width:44px" %)**0x1001**|(% style="width:55px" %)1|(% style="width:482px" %)Battery state of health (SOH), %|(% style="width:44px" %)U16 | ||
70 | |(% style="width:44px" %)**0x1002**|(% style="width:55px" %)1|(% style="width:482px" %)((( | ||
71 | Battery balancing efficiency, % | ||
72 | |||
73 | Note – The value is calculated as a minimal balancing efficiency among battery modules. | ||
74 | )))|(% style="width:44px" %)U16 | ||
75 | |(% style="width:44px" %)**0x1003**|(% style="width:55px" %)1|(% style="width:482px" %)((( | ||
76 | Battery state (enumeration): | ||
77 | |||
78 | 0 – Off (the battery is off); | ||
79 | |||
80 | 1 – Pre-balancing (the battery modules are precharging); | ||
81 | |||
82 | 2 – Balancing (the battery modules are joined and balancing); | ||
83 | |||
84 | 3 – Precharging (the modular battery is precharging); | ||
85 | |||
86 | 4 – Idle (the modular battery is idle (charging and discharging currents are not detected)); | ||
87 | |||
88 | 5 – Charging (the modular battery is charging); | ||
89 | |||
90 | 6 – Discharging (the modular battery is discharging). | ||
91 | )))|(% style="width:44px" %)U16 | ||
92 | |(% style="width:44px" %)**0x1004-0x1005**|(% style="width:55px" %)2|(% style="width:482px" %)Battery voltage, V|(% style="width:44px" %)REAL32 | ||
93 | |(% style="width:44px" %)**0x1006-0x1007**|(% style="width:55px" %)2|(% style="width:482px" %)Battery current, A|(% style="width:44px" %)REAL32 | ||
94 | |(% style="width:44px" %)**0x1008-0x1009**|(% style="width:55px" %)2|(% style="width:482px" %)Battery resistance, Ohm|(% style="width:44px" %)REAL32 | ||
95 | |(% style="width:44px" %)**0x100A-0x100B**|(% style="width:55px" %)2|(% style="width:482px" %)Temperature measured by external sensor 1, °C|(% style="width:44px" %)REAL32 | ||
96 | |(% style="width:44px" %)**0x100C-0x100D**|(% style="width:55px" %)2|(% style="width:482px" %)Temperature measured by external sensor 2, °C|(% style="width:44px" %)REAL32 | ||
97 | |(% style="width:44px" %)**0x100E-0x100F**|(% style="width:55px" %)2|(% style="width:482px" %)Minimum temperature among battery modules, °C|(% style="width:44px" %)REAL32 | ||
98 | |(% style="width:44px" %)**0x1010-0x1011**|(% style="width:55px" %)2|(% style="width:482px" %)Maximum temperature among battery modules, °C|(% style="width:44px" %)REAL32 | ||
99 | |(% style="width:44px" %)**0x1012-0x1013**|(% style="width:55px" %)2|(% style="width:482px" %)Battery capacity, A×h|(% style="width:44px" %)REAL32 | ||
100 | |(% style="width:44px" %)**0x1014-0x1015**|(% style="width:55px" %)2|(% style="width:482px" %)Energy received from the charger, W×h|(% style="width:44px" %)REAL32 | ||
101 | |(% style="width:44px" %)**0x1016-0x1017**|(% style="width:55px" %)2|(% style="width:482px" %)Energy consumed by the load, W×h|(% style="width:44px" %)REAL32 | ||
102 | |(% style="width:44px" %)**0x1018-0x1019**|(% style="width:55px" %)2|(% style="width:482px" %)Energy dissipated by the balancing resistors, W×h|(% style="width:44px" %)REAL32 | ||
103 | |(% style="width:44px" %)**0x101A-0x101B**|(% style="width:55px" %)2|(% style="width:482px" %)Battery charge current limit, A|(% style="width:44px" %)REAL32 | ||
104 | |(% style="width:44px" %)**0x101C-0x101D**|(% style="width:55px" %)2|(% style="width:482px" %)Battery discharge current limit, A|(% style="width:44px" %)REAL32 | ||
105 | |(% style="width:44px" %)**0x101E-0x101F**|(% style="width:55px" %)2|(% style="width:482px" %)Duration of the battery state (0x1003), seconds|(% style="width:44px" %)U32 | ||
106 | |(% style="width:44px" %)**0x1020-0x1021**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
107 | Internal signals (bitfield): | ||
108 | |||
109 | bit 0 – signal “Init” (current sensor calibration or battery modules scanning is performed); | ||
110 | |||
111 | bit 1 – signal “Charging” (0 – open, 1 – closed); | ||
112 | |||
113 | bit 2 – signal “Discharging” (0 – open, 1 – closed); | ||
114 | |||
115 | bit 3 – signal “Charging current present”; | ||
116 | |||
117 | bit 4 – signal “Discharging current present”; | ||
118 | |||
119 | bit 5 – signal “Charging/Discharging” (0 – open, 1 – closed); | ||
120 | |||
121 | bit 6 – signal “Precharging” (0 – open, 1 – closed); | ||
122 | |||
123 | bit 7 – signal “Interlock”; | ||
124 | |||
125 | bit 8 – signal “Fuse 1”; | ||
126 | |||
127 | bit 9 – signal “Fuse 2”; | ||
128 | |||
129 | bit 10 – signal “Fuse 3”; | ||
130 | |||
131 | bit 11 – signal “Heater” (0 – off, 1 – on); | ||
132 | |||
133 | bit 12 – signal “Cooler” (0 – off, 1 – on); | ||
134 | |||
135 | bit 13 – signal “Main contactor” (0 – open, 1 – closed); | ||
136 | |||
137 | bit 14 – signal “Service reset”; | ||
138 | |||
139 | bit 15 – signal “Coolant pump”; | ||
140 | |||
141 | bits 16-31 – not used. | ||
142 | )))|(% style="width:44px" %)U32 | ||
143 | |(% style="width:44px" %)**0x1022-0x1023**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
144 | Common errors 1 (bitfield): | ||
145 | |||
146 | bit 0 – error “Battery cover”; | ||
147 | |||
148 | bit 1 – error “Modules offline”; | ||
149 | |||
150 | bit 2 – “Critical error”; | ||
151 | |||
152 | bit 3 – error “Voltage unbalance (CH)”; | ||
153 | |||
154 | bit 4 – error “Voltage unbalance (DCH)”; | ||
155 | |||
156 | bit 5 – error “Current unbalance (CH)”; | ||
157 | |||
158 | bit 6 – error “Current unbalance (DCH)”; | ||
159 | |||
160 | bit 7 – error “Charging current unbalance”; | ||
161 | |||
162 | bit 8 – error “Discharging current unbalance”; | ||
163 | |||
164 | bit 9 – reserved (set to 0); | ||
165 | |||
166 | bit 10 – “CH contactor feedback error”; | ||
167 | |||
168 | bit 11 – “DCH contactor feedback error”; | ||
169 | |||
170 | bit 12 – “CH/DCH contactor feedback error”; | ||
171 | |||
172 | bit 13 – “Insulation fault”; | ||
173 | |||
174 | bit 14 – error “WDT reset”; | ||
175 | |||
176 | bit 15 – error “Overcurrent”; | ||
177 | |||
178 | bit 16 – error “Power switch error”; | ||
179 | |||
180 | bit 17 – error “High humidity”; | ||
181 | |||
182 | bit 18 – error “Water”; | ||
183 | |||
184 | bit 19 – error “Short circuit”; | ||
185 | |||
186 | bit 20 – error “Contactor high temperature”; | ||
187 | |||
188 | bit 21 – error “Stuck contactor”; | ||
189 | |||
190 | bit 22 – “HVIL error”; | ||
191 | |||
192 | bit 23 – “ADC error”; | ||
193 | |||
194 | bit 24 – “Current sensor error”; | ||
195 | |||
196 | bit 25 – “Mount error”; | ||
197 | |||
198 | bit 26 – “FS error”; | ||
199 | |||
200 | bit 27 – “High voltage fault”; | ||
201 | |||
202 | bit 28 – “PCH contactor feedback error”; | ||
203 | |||
204 | bit 29 – “Main contactor feedback error”; | ||
205 | |||
206 | bit 30 – “Precharge error”; | ||
207 | |||
208 | bit 31 – “Current limit error”. | ||
209 | )))|(% style="width:44px" %)U32 | ||
210 | |(% style="width:44px" %)**0x1024-0x1025**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
211 | Voltage unbalance CH errors (bitfield): | ||
212 | |||
213 | bit i – error of the (i+1)^^th^^ battery module. | ||
214 | )))|(% style="width:44px" %)U32 | ||
215 | |(% style="width:44px" %)**0x1026-0x1027**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
216 | Voltage unbalance DCH errors (bitfield). | ||
217 | |||
218 | Note – Registry mapping is the same as for registers 0x1024-0x1025 | ||
219 | )))|(% style="width:44px" %)U32 | ||
220 | |(% style="width:44px" %)**0x1028-0x1029**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
221 | Current unbalance CH errors (bitfield). | ||
222 | |||
223 | Note – Registry mapping is the same as for registers 0x1024-0x1025 | ||
224 | )))|(% style="width:44px" %)U32 | ||
225 | |(% style="width:44px" %)**0x102A-0x102B**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
226 | Current unbalance DCH errors (bitfield). | ||
227 | |||
228 | Note – Registry mapping is the same as for registers 0x1024-0x1025 | ||
229 | )))|(% style="width:44px" %)U32 | ||
230 | |(% style="width:44px" %)**0x102C-0x102D**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
231 | Charging current unbalance errors (bitfield). | ||
232 | |||
233 | Note – Registry mapping is the same as for registers 0x1024-0x1025 | ||
234 | )))|(% style="width:44px" %)U32 | ||
235 | |(% style="width:44px" %)**0x102E-0x102F**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
236 | Discharging current unbalance errors (bitfield). | ||
237 | |||
238 | Note – Registry mapping is the same as for registers 0x1024-0x1025 | ||
239 | )))|(% style="width:44px" %)U32 | ||
240 | |(% style="width:44px" %)**0x1030-0x1031**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
241 | Cumulative internal signals (logical OR of all “Internal signals” values of the battery modules; bitfield): | ||
242 | |||
243 | bit 0 — signal "Low SOC"; | ||
244 | |||
245 | bit 1 — signal "High charging current"; | ||
246 | |||
247 | bit 2 — signal “Charging” (0 – open, 1 – closed); | ||
248 | |||
249 | bit 3 — signal "Allow charging" (0 – open, 1 – closed); | ||
250 | |||
251 | bit 4 — signal "Charging current present"; | ||
252 | |||
253 | bit 5 — signal “Discharging” (0 – open, 1 – closed); | ||
254 | |||
255 | bit 6 — signal "Discharging current present"; | ||
256 | |||
257 | bit 7 — signal "Voltage too high for charging"; | ||
258 | |||
259 | bit 8 — signal "Heater" (0 – off, 1 – on); | ||
260 | |||
261 | bit 9 — signal "Cooler" (0 – off, 1 – on); | ||
262 | |||
263 | bit 10 — signal “Shutdown request (HYG/Spirit)”; | ||
264 | |||
265 | bit 11 — signal “Init” (current sensor calibration or BMS Logic scanning is performed); | ||
266 | |||
267 | bit 12 — signal “Precharging” (0 – open, 1 – closed); | ||
268 | |||
269 | bit 13 — signal “Shutdown request (Combilift)”; | ||
270 | |||
271 | bit 14 — signal "Cell analysis"; | ||
272 | |||
273 | bit 15 — signal “Balancing 1”; | ||
274 | |||
275 | bit 16 — signal “Balancing 2”; | ||
276 | |||
277 | bit 17 — signal “Discharging (AUX)” (0 – open, 1 – closed); | ||
278 | |||
279 | bit 18 — signal “Power down ACK”; | ||
280 | |||
281 | bit 19 — signal “Crown EWS”; | ||
282 | |||
283 | bit 20 — signal “Main contactor” (0 – open, 1 – closed); | ||
284 | |||
285 | bit 21 — signal “Service reset”; | ||
286 | |||
287 | bit 22 — signal “Charging/Discharging” (0 – open, 1 – closed); | ||
288 | |||
289 | bit 23 — signal “Ready to charge”; | ||
290 | |||
291 | bit 24 — signal “Ready to discharge”; | ||
292 | |||
293 | bit 25 — signal “Power up”; | ||
294 | |||
295 | bits 26-31 — not used. | ||
296 | )))|(% style="width:44px" %)U32 | ||
297 | |(% style="width:44px" %)**0x1032-0x1033**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
298 | Cumulative errors 1 (logical OR of all “Errors 1” values of the battery modules; bitfield): | ||
299 | |||
300 | bit 0 — error "Overcurrent"; | ||
301 | |||
302 | bit 1 — error "Undervoltage"; | ||
303 | |||
304 | bit 2 — error "Overvoltage"; | ||
305 | |||
306 | bit 3 — error "Low temperature (DCH)"; | ||
307 | |||
308 | bit 4 — error "High temperature (DCH)"; | ||
309 | |||
310 | bit 5 — error "Battery cover"; | ||
311 | |||
312 | bit 6 — error "High humidity"; | ||
313 | |||
314 | bit 7 — error "Water"; | ||
315 | |||
316 | bit 8 — error "Logic high temperature"; | ||
317 | |||
318 | bit 9 — error "Logic offline"; | ||
319 | |||
320 | bit 10 — "Critical error"; | ||
321 | |||
322 | bit 11 — "Crown error"; | ||
323 | |||
324 | bit 12 — "Cell count error"; | ||
325 | |||
326 | bit 13 — error "HYG offline"; | ||
327 | |||
328 | bit 14 — reserved (set to 0); | ||
329 | |||
330 | bit 15 — error "Combilift offline"; | ||
331 | |||
332 | bit 16 — error "Short circuit"; | ||
333 | |||
334 | bit 17 — error "High contactor temperature"; | ||
335 | |||
336 | bit 18 — "Logic count error"; | ||
337 | |||
338 | bit 19 — "ADC error"; | ||
339 | |||
340 | bit 20 — “Current sensor error”; | ||
341 | |||
342 | bit 21 — “CH contactor cycles error”; | ||
343 | |||
344 | bit 22 — “DCH contactor cycles error”; | ||
345 | |||
346 | bit 23 — error "Shunt offline"; | ||
347 | |||
348 | bit 24 — “Shunt error”; | ||
349 | |||
350 | bit 25 — reserved (set to 0); | ||
351 | |||
352 | bit 26 — error “WDT reset”; | ||
353 | |||
354 | bit 27 — error "No temperature sensors"; | ||
355 | |||
356 | bit 28 — error "Temperature sensor shorted"; | ||
357 | |||
358 | bit 29 — error “Spirit offline”; | ||
359 | |||
360 | bits 30-31 – not used. | ||
361 | )))|(% style="width:44px" %)U32 | ||
362 | |(% style="width:44px" %)**0x1034-0x1035**|(% style="width:55px" %) |(% style="width:482px" %)((( | ||
363 | Cumulative errors 2 (logical OR of all “Errors 2” values of the battery modules; bitfield): | ||
364 | |||
365 | bit 0 — error "Low temperature (CH)"; | ||
366 | |||
367 | bit 1 — error “High temperature (CH)”; | ||
368 | |||
369 | bit 2 — reserved (set to 0); | ||
370 | |||
371 | bit 3 — reserved (set to 0); | ||
372 | |||
373 | bit 4 — error “Unallowable charging”; | ||
374 | |||
375 | bit 5 — error “Stuck contactor”; | ||
376 | |||
377 | bit 6 — “CH contactor feedback error”; | ||
378 | |||
379 | bit 7 — “DCH contactor feedback error”; | ||
380 | |||
381 | bit 8 — “Insulation fault”; | ||
382 | |||
383 | bit 9 — “PCH contactor feedback error”; | ||
384 | |||
385 | bit 10 — “CH/DCH contactor feedback error”; | ||
386 | |||
387 | bit 11 — “Main contactor feedback error”; | ||
388 | |||
389 | bit 12 — reserved (set to 0); | ||
390 | |||
391 | bit 13 — “General error”; | ||
392 | |||
393 | bit 14 — “High voltage fault”; | ||
394 | |||
395 | bit 15 — “Power switch error”; | ||
396 | |||
397 | bit 16 — “HVIL error”; | ||
398 | |||
399 | bit 17 — “Precharge error”; | ||
400 | |||
401 | bit 18 — “Power fault”; | ||
402 | |||
403 | bits 19-31 — not used. | ||
404 | )))|(% style="width:44px" %)U32 | ||
405 | |(% style="width:44px" %)**0x1036-0x1037**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
406 | Remaining discharge time, seconds. | ||
407 | |||
408 | Note – The value 0xFFFFFFFF corresponds to the case when the device cannot calculate the remaining time. | ||
409 | )))|(% style="width:44px" %)U32 | ||
410 | |(% style="width:44px" %)**0x1038-0x1039**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
411 | Common errors 2 (bitfield): | ||
412 | |||
413 | bit 0 – “Power fault”; | ||
414 | |||
415 | bits 1-31 – not used. | ||
416 | )))|(% style="width:44px" %)U32 | ||
417 | |(% style="width:44px" %)**0x103A-0x103B**|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
418 | Discrete input signals (bitfield): | ||
419 | |||
420 | bit 0 – signal “Battery cover”; | ||
421 | |||
422 | bit 1 – signal “Charge request”; | ||
423 | |||
424 | bit 2 – signal “Precharge request”; | ||
425 | |||
426 | bit 3 – signal “Discharge request”; | ||
427 | |||
428 | bit 4 – signal “CH contactor feedback”; | ||
429 | |||
430 | bit 5 – signal “DCH contactor feedback”; | ||
431 | |||
432 | bit 6 – signal “CH/DCH contactor feedback”; | ||
433 | |||
434 | bit 7 – signal “Insulation status”; | ||
435 | |||
436 | bit 8 – signal “Join to charge”; | ||
437 | |||
438 | bit 9 – signal “Join to discharge; | ||
439 | |||
440 | bit 10 – signal “PCH contactor feedback”; | ||
441 | |||
442 | bit 11 – signal “Main contactor feedback”; | ||
443 | |||
444 | bit 12 – signal “Interlock”; | ||
445 | |||
446 | bit 13 – signal “Power down request”; | ||
447 | |||
448 | bits 14-31 – not used. | ||
449 | )))|(% style="width:44px" %)U32 | ||
450 | |(% colspan="4" style="width:659px" %)**Module #1 state: base address 0x2000** | ||
451 | |(% style="width:44px" %)((( | ||
452 | **0x2000** | ||
453 | |||
454 | **(offset 0x0000)** | ||
455 | )))|(% style="width:55px" %)1|(% style="width:482px" %)((( | ||
456 | Module state (enumeration): | ||
457 | |||
458 | 0 – Unknown; | ||
459 | |||
460 | 1 – Charging ON; | ||
461 | |||
462 | 2 - Charging OFF; | ||
463 | |||
464 | 3 – Relaxed (after charging); | ||
465 | |||
466 | 4 – Discharging ON; | ||
467 | |||
468 | 5 – Discharging OFF; | ||
469 | |||
470 | 6 – Relaxed (after discharging). | ||
471 | )))|(% style="width:44px" %)U16 | ||
472 | |(% style="width:44px" %)((( | ||
473 | **0x2001** | ||
474 | |||
475 | **(offset 0x0001)** | ||
476 | )))|(% style="width:55px" %)1|(% style="width:482px" %)Module state of charge (SOC), %|(% style="width:44px" %)U16 | ||
477 | |(% style="width:44px" %)((( | ||
478 | **0x2002** | ||
479 | |||
480 | **(offset 0x0002)** | ||
481 | )))|(% style="width:55px" %)1|(% style="width:482px" %)Module state of health (SOH), %|(% style="width:44px" %)U16 | ||
482 | |(% style="width:44px" %)((( | ||
483 | **0x2003** | ||
484 | |||
485 | **(offset 0x0003)** | ||
486 | )))|(% style="width:55px" %)1|(% style="width:482px" %)Module balancing efficiency, %|(% style="width:44px" %)U16 | ||
487 | |(% style="width:44px" %)**0x2004-0x2008 (offset 0x0004)**|(% style="width:55px" %)5|(% style="width:482px" %)((( | ||
488 | BMS firmware version. | ||
489 | |||
490 | Example: “1.59.1” | ||
491 | )))|(% style="width:44px" %)CHAR[10] | ||
492 | |(% style="width:44px" %)((( | ||
493 | **0x2009** | ||
494 | |||
495 | **(offset 0x0009)** | ||
496 | )))|(% style="width:55px" %)1|(% style="width:482px" %)Reserved|(% style="width:44px" %)U16 | ||
497 | |(% style="width:44px" %)((( | ||
498 | **0x200A-0x200B** | ||
499 | |||
500 | **(offset 0x000A)** | ||
501 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Module voltage, V|(% style="width:44px" %)REAL32 | ||
502 | |(% style="width:44px" %)((( | ||
503 | **0x200C-0x200D** | ||
504 | |||
505 | **(offset 0x000C)** | ||
506 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Module current, А|(% style="width:44px" %)REAL32 | ||
507 | |(% style="width:44px" %)((( | ||
508 | **0x200E-0x200F** | ||
509 | |||
510 | **(offset 0x000E)** | ||
511 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Module resistance, Ohm|(% style="width:44px" %)REAL32 | ||
512 | |(% style="width:44px" %)((( | ||
513 | **0x2010-0x2011** | ||
514 | |||
515 | **(offset 0x0010)** | ||
516 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Minimum cell temperature|(% style="width:44px" %)REAL32 | ||
517 | |(% style="width:44px" %)((( | ||
518 | **0x2012-0x2013** | ||
519 | |||
520 | **(offset 0x0012)** | ||
521 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Maximum cell temperature|(% style="width:44px" %)REAL32 | ||
522 | |(% style="width:44px" %)((( | ||
523 | **0x2014-0x2015** | ||
524 | |||
525 | **(offset 0x0014)** | ||
526 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Minimum cell voltage|(% style="width:44px" %)REAL32 | ||
527 | |(% style="width:44px" %)((( | ||
528 | **0x2016-0x2017** | ||
529 | |||
530 | **(offset 0x0016)** | ||
531 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Maximum cell voltage|(% style="width:44px" %)REAL32 | ||
532 | |(% style="width:44px" %)((( | ||
533 | **0x2018-0x2019** | ||
534 | |||
535 | **(offset 0x0018)** | ||
536 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Effective capacity, A×h|(% style="width:44px" %)REAL32 | ||
537 | |(% style="width:44px" %)((( | ||
538 | **0x201A-0x201B** | ||
539 | |||
540 | **(offset 0x001A)** | ||
541 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Charge current limit, A|(% style="width:44px" %)REAL32 | ||
542 | |(% style="width:44px" %)((( | ||
543 | **0x201C-0x201D** | ||
544 | |||
545 | **(offset 0x001C)** | ||
546 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Discharge current limit, A|(% style="width:44px" %)REAL32 | ||
547 | |(% style="width:44px" %)((( | ||
548 | **0x201E-0x201F** | ||
549 | |||
550 | **(offset 0x001E)** | ||
551 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Energy received from the charger, W×h|(% style="width:44px" %)REAL32 | ||
552 | |(% style="width:44px" %)((( | ||
553 | **0x2020-0x2021** | ||
554 | |||
555 | **(offset 0x0020)** | ||
556 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Energy consumed by the load, W×h|(% style="width:44px" %)REAL32 | ||
557 | |(% style="width:44px" %)((( | ||
558 | **0x2022-0x2023** | ||
559 | |||
560 | **(offset 0x0022)** | ||
561 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Energy dissipated by the balancing resistors, W×h|(% style="width:44px" %)REAL32 | ||
562 | |(% style="width:44px" %)((( | ||
563 | **0x2024-0x2025** | ||
564 | |||
565 | **(offset 0x0024)** | ||
566 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Number of 80% charge/discharge cycles|(% style="width:44px" %)REAL32 | ||
567 | |(% style="width:44px" %)((( | ||
568 | **0x2026-0x2027** | ||
569 | |||
570 | **(offset 0x0026)** | ||
571 | )))|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
572 | Internal signals (bitfield). | ||
573 | |||
574 | Note – Registry mapping is the same as for 0x1030-0x1031. | ||
575 | )))|(% style="width:44px" %)U32 | ||
576 | |(% style="width:44px" %)((( | ||
577 | **0x2028-0x2029** | ||
578 | |||
579 | **(offset 0x0028)** | ||
580 | )))|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
581 | Errors 1 (bitfield). | ||
582 | |||
583 | Note – Registry mapping is the same as for 0x1032-0x1033. | ||
584 | )))|(% style="width:44px" %)U32 | ||
585 | |(% style="width:44px" %)((( | ||
586 | **0x202A-0x202B** | ||
587 | |||
588 | **(offset 0x002A)** | ||
589 | )))|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
590 | Errors 2 (bitfield). | ||
591 | |||
592 | Note – Registry mapping is the same as for 0x1034-0x1035. | ||
593 | )))|(% style="width:44px" %)U32 | ||
594 | |(% style="width:44px" %)((( | ||
595 | **0x202C-0x202D** | ||
596 | |||
597 | **(offset 0x002C)** | ||
598 | )))|(% style="width:55px" %)2|(% style="width:482px" %)((( | ||
599 | Discrete input signals (bitfield): | ||
600 | |||
601 | bit 0 — signal "Battery cover"; | ||
602 | |||
603 | bit 1 — signal "Charger connected"; | ||
604 | |||
605 | bit 2 — signal "Power up/down request"; | ||
606 | |||
607 | bit 3 — signal "Inhibit charging"; | ||
608 | |||
609 | bit 4 — signal "Inhibit discharging"; | ||
610 | |||
611 | bit 5 — signal “CH contactor feedback”; | ||
612 | |||
613 | bit 6 — signal “DCH contactor feedback”; | ||
614 | |||
615 | bit 7 — signal “Insulation status”; | ||
616 | |||
617 | bit 8 – signal “Charge request”; | ||
618 | |||
619 | bit 9 – signal “Precharge request”; | ||
620 | |||
621 | bit 10 – signal “Discharge request”; | ||
622 | |||
623 | bit 11 – signal “PCH contactor feedback”; | ||
624 | |||
625 | bit 12 – signal “CH/DCH contactor feedback”; | ||
626 | |||
627 | bit 13 – signal “Main contactor feedback”; | ||
628 | |||
629 | bit 14 – signal “Interlock”; | ||
630 | |||
631 | bit 15 – signal “Fuse 1”; | ||
632 | |||
633 | bit 16 – signal “Fuse 2”; | ||
634 | |||
635 | bit 17 - signal “Fuse 3”; | ||
636 | |||
637 | bit 18 – signal “Circuit breaker status”; | ||
638 | |||
639 | bits 19-31 – reserved. | ||
640 | )))|(% style="width:44px" %)U32 | ||
641 | |(% style="width:44px" %)((( | ||
642 | **0x202E-0x202F** | ||
643 | |||
644 | **(offset 0x002E)** | ||
645 | )))|(% style="width:55px" %)2|(% style="width:482px" %)Module depth of discharge, A×h|(% style="width:44px" %)REAL32 | ||
646 | |(% colspan="4" style="width:659px" %)((( | ||
647 | **Module #2 state: base address 0x2200** | ||
648 | |||
649 | Registries have the same format as for Module #1 | ||
650 | ))) | ||
651 | |(% colspan="4" style="width:659px" %)((( | ||
652 | **Module #3 state: base address 0x2400** | ||
653 | |||
654 | Registries have the same format as for Module #1 | ||
655 | ))) | ||
656 | |(% colspan="4" style="width:659px" %)((( | ||
657 | **Module #4 state: base address 0x2600** | ||
658 | |||
659 | Registries have the same format as for Module #1 | ||
660 | ))) | ||
661 | |(% colspan="4" style="width:659px" %)((( | ||
662 | **Module #5 state: base address 0x2800** | ||
663 | |||
664 | Registries have the same format as for Module #1 | ||
665 | ))) | ||
666 | |(% colspan="4" style="width:659px" %)((( | ||
667 | **Module #6 state: base address 0x2A00** | ||
668 | |||
669 | Registries have the same format as for Module #1 | ||
670 | ))) | ||
671 | |(% colspan="4" style="width:659px" %)((( | ||
672 | **Module #7 state: base address 0x2C00** | ||
673 | |||
674 | Registries have the same format as for Module #1 | ||
675 | ))) | ||
676 | |(% colspan="4" style="width:659px" %)((( | ||
677 | **Module #8 state: base address 0x2E00** | ||
678 | |||
679 | Registries have the same format as for Module #1 | ||
680 | ))) | ||
681 | |(% colspan="4" style="width:659px" %)((( | ||
682 | **Module #9 state: base address 0x3000** | ||
683 | |||
684 | Registries have the same format as for Module #1 | ||
685 | ))) | ||
686 | |(% colspan="4" style="width:659px" %)((( | ||
687 | **Module #10 state: base address 0x3200** | ||
688 | |||
689 | Registries have the same format as for Module #1 | ||
690 | ))) | ||
691 | |(% colspan="4" style="width:659px" %)((( | ||
692 | **Module #11 state: base address 0x3400** | ||
693 | |||
694 | Registries have the same format as for Module #1 | ||
695 | ))) | ||
696 | |(% colspan="4" style="width:659px" %)((( | ||
697 | **Module #12 state: base address 0x3600** | ||
698 | |||
699 | Registries have the same format as for Module #1 | ||
700 | ))) | ||
701 | |(% colspan="4" style="width:659px" %)((( | ||
702 | **Module #13 state: base address 0x3800** | ||
703 | |||
704 | Registries have the same format as for Module #1 | ||
705 | ))) | ||
706 | |(% colspan="4" style="width:659px" %)((( | ||
707 | **Module #14 state: base address 0x3A00** | ||
708 | |||
709 | Registries have the same format as for Module #1 | ||
710 | ))) | ||
711 | |(% colspan="4" style="width:659px" %)((( | ||
712 | **Module #15 state: base address 0x3C00** | ||
713 | |||
714 | Registries have the same format as for Module #1 | ||
715 | ))) | ||
716 | |(% colspan="4" style="width:659px" %)((( | ||
717 | **Module #16 state: base address 0x3E00** | ||
718 | |||
719 | Registries have the same format as for Module #1 | ||
720 | ))) | ||
721 | |(% colspan="4" style="width:659px" %)((( | ||
722 | **Module #17 state: base address 0x4000** | ||
723 | |||
724 | Registries have the same format as for Module #1 | ||
725 | ))) | ||
726 | |(% colspan="4" style="width:659px" %)((( | ||
727 | **Module #18 state: base address 0x4200** | ||
728 | |||
729 | Registries have the same format as for Module #1 | ||
730 | ))) | ||
731 | |(% colspan="4" style="width:659px" %)((( | ||
732 | **Module #19 state: base address 0x4400** | ||
733 | |||
734 | Registries have the same format as for Module #1 | ||
735 | ))) | ||
736 | |(% colspan="4" style="width:659px" %)((( | ||
737 | **Module #20 state: base address 0x4600** | ||
738 | |||
739 | Registries have the same format as for Module #1 | ||
740 | ))) | ||
741 | |(% colspan="4" style="width:659px" %)((( | ||
742 | **Module #21 state: base address 0x4800** | ||
743 | |||
744 | Registries have the same format as for Module #1 | ||
745 | ))) | ||
746 | |(% colspan="4" style="width:659px" %)((( | ||
747 | **Module #22 state: base address 0x4A00** | ||
748 | |||
749 | Registries have the same format as for Module #1 | ||
750 | ))) | ||
751 | |(% colspan="4" style="width:659px" %)((( | ||
752 | **Module #23 state: base address 0x4C00** | ||
753 | |||
754 | Registries have the same format as for Module #1 | ||
755 | ))) | ||
756 | |(% colspan="4" style="width:659px" %)((( | ||
757 | **Module #24 state: base address 0x4E00** | ||
758 | |||
759 | Registries have the same format as for Module #1 | ||
760 | ))) | ||
761 | |(% colspan="4" style="width:659px" %)((( | ||
762 | **Module #25 state: base address 0x5000** | ||
763 | |||
764 | Registries have the same format as for Module #1 | ||
765 | ))) | ||
766 | |(% colspan="4" style="width:659px" %)((( | ||
767 | **Module #26 state: base address 0x5200** | ||
768 | |||
769 | Registries have the same format as for Module #1 | ||
770 | ))) | ||
771 | |(% colspan="4" style="width:659px" %)((( | ||
772 | **Module #27 state: base address 0x5400** | ||
773 | |||
774 | Registries have the same format as for Module #1 | ||
775 | ))) | ||
776 | |(% colspan="4" style="width:659px" %)((( | ||
777 | **Module #28 state: base address 0x5600** | ||
778 | |||
779 | Registries have the same format as for Module #1 | ||
780 | ))) | ||
781 | |(% colspan="4" style="width:659px" %)((( | ||
782 | **Module #29 state: base address 0x5800** | ||
783 | |||
784 | Registries have the same format as for Module #1 | ||
785 | ))) | ||
786 | |(% colspan="4" style="width:659px" %)((( | ||
787 | **Module #30 state: base address 0x5A00** | ||
788 | |||
789 | Registries have the same format as for Module #1 | ||
790 | ))) | ||
791 | |(% colspan="4" style="width:659px" %)((( | ||
792 | **Module #31 state: base address 0x5C00** | ||
793 | |||
794 | Registries have the same format as for Module #1 | ||
795 | ))) | ||
796 | |(% colspan="4" style="width:659px" %)((( | ||
797 | **Module #32 state: base address 0x5E00** | ||
798 | |||
799 | Registries have the same format as for Module #1 | ||
800 | ))) | ||
801 | |||
802 | === Holding registers === | ||
803 | |||
804 | (% style="width:662px" %) | ||
805 | |(% style="width:4px" %)**Register address**|(% style="width:47px" %)**Number of registers**|(% style="width:468px" %)**Content**|(% style="width:58px" %)**Type** | ||
806 | |(% style="width:4px" %)**0x5000**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
807 | Software control of the "Battery cover" signal. Allowable values: | ||
808 | |||
809 | 0 – clear the signal; | ||
810 | |||
811 | 1 – set the signal; | ||
812 | |||
813 | 2-65535 – use the physical input "Battery cover". | ||
814 | )))|(% style="width:58px" %)U16 | ||
815 | |(% style="width:4px" %)**0x5001**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
816 | Software control of the "Charge request" signal. Allowable values: | ||
817 | |||
818 | 0 – clear the signal; | ||
819 | |||
820 | 1 – set the signal; | ||
821 | |||
822 | 2-65535 – use the physical input "Charge request". | ||
823 | )))|(% style="width:58px" %)U16 | ||
824 | |(% style="width:4px" %)**0x5002**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
825 | Software control of the "Precharge request" signal. Allowable values: | ||
826 | |||
827 | 0 – clear the signal; | ||
828 | |||
829 | 1 – set the signal; | ||
830 | |||
831 | 2-65535 – use the physical input "Precharge request". | ||
832 | )))|(% style="width:58px" %)U16 | ||
833 | |(% style="width:4px" %)**0x5003**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
834 | Software control of the "Discharge request" signal. Allowable values: | ||
835 | |||
836 | 0 – clear the signal; | ||
837 | |||
838 | 1 – set the signal; | ||
839 | |||
840 | 2-65535 – use the physical input "Discharge request". | ||
841 | )))|(% style="width:58px" %)U16 | ||
842 | |(% style="width:4px" %)**0x5004**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
843 | Software control of the "CH contactor feedback" signal. Allowable values: | ||
844 | |||
845 | 0 – clear the signal; | ||
846 | |||
847 | 1 – set the signal; | ||
848 | |||
849 | 2-65535 – use the physical input "CH contactor feedback". | ||
850 | )))|(% style="width:58px" %)U16 | ||
851 | |(% style="width:4px" %)**0x5005**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
852 | Software control of the "DCH contactor feedback" signal. Allowable values: | ||
853 | |||
854 | 0 – clear the signal; | ||
855 | |||
856 | 1 – set the signal; | ||
857 | |||
858 | 2-65535 – use the physical input “DCH contactor feedback". | ||
859 | )))|(% style="width:58px" %)U16 | ||
860 | |(% style="width:4px" %)**0x5006**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
861 | Software control of the "CH/DCH contactor feedback" signal. Allowable values: | ||
862 | |||
863 | 0 – clear the signal; | ||
864 | |||
865 | 1 – set the signal; | ||
866 | |||
867 | 2-65535 – use the physical input "CH/DCH contactor feedback". | ||
868 | )))|(% style="width:58px" %)U16 | ||
869 | |(% style="width:4px" %)**0x5007**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
870 | Software control of the "Insulation status" signal. Allowable values: | ||
871 | |||
872 | 0 – clear the signal; | ||
873 | |||
874 | 1 – set the signal; | ||
875 | |||
876 | 2-65535 – use the physical input "Insulation status". | ||
877 | )))|(% style="width:58px" %)U16 | ||
878 | |(% style="width:4px" %)**0x5008**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
879 | Software control of the "Join to charge" signal. Allowable values: | ||
880 | |||
881 | 0 – clear the signal; | ||
882 | |||
883 | 1 – set the signal; | ||
884 | |||
885 | 2-65535 – use the physical input "Join to charge". | ||
886 | )))|(% style="width:58px" %)U16 | ||
887 | |(% style="width:4px" %)**0x5009**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
888 | Software control of the "Join to discharge" signal. Allowable values: | ||
889 | |||
890 | 0 – clear the signal; | ||
891 | |||
892 | 1 – set the signal; | ||
893 | |||
894 | 2-65535 – use the physical input "Join to discharge". | ||
895 | )))|(% style="width:58px" %)U16 | ||
896 | |(% style="width:4px" %)**0x500A**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
897 | Software control of the "PCH contactor feedback" signal. Allowable values: | ||
898 | |||
899 | 0 – clear the signal; | ||
900 | |||
901 | 1 – set the signal; | ||
902 | |||
903 | 2-65535 – use the physical input "PCH contactor feedback". | ||
904 | )))|(% style="width:58px" %)U16 | ||
905 | |(% style="width:4px" %)**0x500B**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
906 | Software control of the "Main contactor feedback" signal. Allowable values: | ||
907 | |||
908 | 0 – clear the signal; | ||
909 | |||
910 | 1 – set the signal; | ||
911 | |||
912 | 2-65535 – use the physical input "Main contactor feedback". | ||
913 | )))|(% style="width:58px" %)U16 | ||
914 | |(% style="width:4px" %)**0x500C**|(% style="width:47px" %)1|(% style="width:468px" %)((( | ||
915 | Software control of the "Interlock" signal. Allowable values: | ||
916 | |||
917 | 0 – clear the signal; | ||
918 | |||
919 | 1 – set the signal; | ||
920 | |||
921 | 2-65535 – use the physical input "Interlock". | ||
922 | )))|(% style="width:58px" %)U16 | ||
923 | |||
924 |