Wiki source code of 6.2 Modbus protocol
Last modified by Admin on 2025/02/04 10:14
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 Mini 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. | ||
10 | |||
11 | Interaction with the device is performed over the RS-485 bus (Modbus RTU) or the Ethernet network (Modbus TCP). | ||
12 | |||
13 | 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 | * device address (by default) — 32. | ||
19 | |||
20 | Ethernet connection parameters: | ||
21 | |||
22 | * port — 502. | ||
23 | |||
24 | There is a description of the Input и Holding registers below. Column "Type" contains method of parameters coding: | ||
25 | |||
26 | * U8 — unsigned 8-bit integer number; | ||
27 | * U16 — unsigned 16-bit integer number; | ||
28 | * S16 — signed 16-bit integer number; | ||
29 | * U32 — unsigned 32-bit integer number; | ||
30 | * REAL32 — single precision floating point number ([[IEEE 754>>url:https://ru.wikipedia.org/wiki/IEEE_754]] standard); | ||
31 | * U8[x] — array of unsigned 8-bit integer numbers having a length of x; | ||
32 | * U16[x] — array of unsigned 16-bit integer numbers having a length of x; | ||
33 | * REAL32[x] — array of single precision floating point numbers having a length of x. | ||
34 | |||
35 | Words are in the **little endian**. | ||
36 | |||
37 | === Input registers === | ||
38 | |||
39 | (% style="width:651px" %) | ||
40 | |(% style="width:92px" %)**Register address**|(% style="width:94px" %)**Number of registers**|(% style="width:368px" %)**Content**|(% style="width:96px" %)**Type** | ||
41 | |(% style="width:92px" %)**0x0000**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
42 | Hardware version: | ||
43 | |||
44 | byte 0 — minor; | ||
45 | |||
46 | byte 1 — major. | ||
47 | )))|(% style="width:96px" %)U8[2] | ||
48 | |(% style="width:92px" %)**0x0001-0x0002**|(% style="width:94px" %)2|(% style="width:368px" %)((( | ||
49 | Firmware version: | ||
50 | |||
51 | byte 0 — patch; | ||
52 | |||
53 | byte 1 — minor; | ||
54 | |||
55 | byte 2 — major; | ||
56 | |||
57 | byte 3 — not used (set to 0). | ||
58 | )))|(% style="width:96px" %)U8[4] | ||
59 | |(% style="width:92px" %)**0x0003-0x0004**|(% style="width:94px" %)2|(% style="width:368px" %)((( | ||
60 | Bootloader version: | ||
61 | |||
62 | byte 0 — patch; | ||
63 | |||
64 | byte 1 — minor; | ||
65 | |||
66 | byte 2 — major; | ||
67 | |||
68 | byte 3 — not used (set to 0). | ||
69 | )))|(% style="width:96px" %)U8[4] | ||
70 | |(% style="width:92px" %)**0x2000**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
71 | Discrete input signals 1 (bitfield): | ||
72 | |||
![]() |
2.1 | 73 | bit 0 – “Battery cover”; |
![]() |
1.1 | 74 | |
![]() |
2.1 | 75 | bit 1 – “Charger connected”; |
![]() |
1.1 | 76 | |
![]() |
2.1 | 77 | bit 2 – “Power up/down request”; |
![]() |
1.1 | 78 | |
![]() |
2.1 | 79 | bit 3 – “Inhibit charging”; |
![]() |
1.1 | 80 | |
![]() |
2.1 | 81 | bit 4 – “Inhibit discharging”; |
![]() |
1.1 | 82 | |
![]() |
2.1 | 83 | bit 5 – reserved (set to 0); |
![]() |
1.1 | 84 | |
![]() |
2.1 | 85 | bit 6 – reserved (set to 0); |
![]() |
1.1 | 86 | |
![]() |
2.1 | 87 | bit 7 – “Insulation status”; |
![]() |
1.1 | 88 | |
89 | bit 8 – “Charge request”; | ||
90 | |||
91 | bit 9 – “Precharge request”; | ||
92 | |||
93 | bit 10 – “Discharge request”; | ||
94 | |||
![]() |
2.1 | 95 | bit 11 – reserved (set to 0); |
![]() |
1.1 | 96 | |
![]() |
2.1 | 97 | bit 12 – reserved (set to 0); |
![]() |
1.1 | 98 | |
![]() |
2.1 | 99 | bit 13 – reserved (set to 0); |
![]() |
1.1 | 100 | |
101 | bit 14 – “Interlock”; | ||
102 | |||
103 | bit 15 – “Fuse 1”. | ||
104 | )))|(% style="width:96px" %)U16 | ||
105 | |(% style="width:92px" %)**0x2001-0x2002**|(% style="width:94px" %)2|(% style="width:368px" %)Current measured by the primary sensor, А|(% style="width:96px" %)REAL32 | ||
106 | |(% style="width:92px" %)**0x2003-0x2004**|(% style="width:94px" %)2|(% style="width:368px" %)External temperature, °C|(% style="width:96px" %)REAL32 | ||
107 | |(% style="width:92px" %)**0x2007-0x2008**|(% style="width:94px" %)2|(% style="width:368px" %)((( | ||
108 | Errors 1 (bitfield): | ||
109 | |||
110 | bit 0 – “Overcurrent”; | ||
111 | |||
112 | bit 1 – “Undervoltage”; | ||
113 | |||
114 | bit 2 – “Overvoltage”; | ||
115 | |||
116 | bit 3 – “Low DCH temperature”, temperature is too low for discharging; | ||
117 | |||
118 | bit 4 – “High DCH temperature”, temperature is too high for discharging; | ||
119 | |||
120 | bit 5 – “Battery cover”; | ||
121 | |||
![]() |
3.1 | 122 | bit 6 – reserved (set to 0); |
![]() |
1.1 | 123 | |
![]() |
3.1 | 124 | bit 7 – reserved (set to 0); |
![]() |
1.1 | 125 | |
![]() |
3.1 | 126 | bit 8 – reserved (set to 0); |
![]() |
1.1 | 127 | |
![]() |
3.1 | 128 | bit 9 – “Cell monitor offline”, connection with the cell monitor is lost; |
![]() |
1.1 | 129 | |
130 | bit 10 – “Critical error”; | ||
131 | |||
132 | bit 11 – “Crown error”, connection with the Crown forklift is lost; | ||
133 | |||
![]() |
3.1 | 134 | bit 12 – “Cell count error”, number of cells is incorrect; |
![]() |
1.1 | 135 | |
136 | bit 13 – “HYG offline”, connection with the HYG forklift is lost; | ||
137 | |||
138 | bit 14 – “Need acknowledgement”, errors were detected in the past and should be acknowledged; | ||
139 | |||
140 | bit 15 – “Combilift offline”, connection with the Combilift forklift is lost; | ||
141 | |||
142 | bit 16 – “Short circuit”; | ||
143 | |||
144 | bit 17 – “High contactor temperature”, the discharging contactor is overheated; | ||
145 | |||
![]() |
3.1 | 146 | bit 18 – reserved (set to 0); |
![]() |
1.1 | 147 | |
![]() |
3.1 | 148 | bit 19 – “ADC error”, battery current cannot be measured by the ADC; |
![]() |
1.1 | 149 | |
150 | bit 20 – “Current sensor error”, wires which connect the current sensor with the BMS are damaged; | ||
151 | |||
152 | bit 21 – “CH contactor cycles error”, the charging contactor switches very often; | ||
153 | |||
154 | bit 22 – “DCH contactor cycles error”, the discharging contactor switches very often; | ||
155 | |||
156 | bit 23 – “Shunt offline”, connection with the BMS Current sensor is lost; | ||
157 | |||
158 | bit 24 – “Shunt error”, internal error of the BMS Current sensor; | ||
159 | |||
![]() |
3.1 | 160 | bit 25 – reserved (set to 0); |
![]() |
1.1 | 161 | |
162 | bit 26 – “WDT reset”, device is reset by the watchdog timer; | ||
163 | |||
164 | bit 27 – “No temperature sensors”; | ||
165 | |||
166 | bit 28 – “Temperature sensor is shorted”; | ||
167 | |||
168 | bit 29 – “Spirit offline”, connection with the Spirit truck is lost; | ||
169 | |||
170 | bits 30–31 – reserved. | ||
171 | )))|(% style="width:96px" %)U32 | ||
172 | |(% style="width:92px" %)**0x2009-0x200A**|(% style="width:94px" %)2|(% style="width:368px" %)((( | ||
173 | Internal signals (bitfield): | ||
174 | |||
![]() |
3.1 | 175 | bit 0 – “Low SOC”; |
![]() |
1.1 | 176 | |
![]() |
3.1 | 177 | bit 1 – “High charging current”; |
![]() |
1.1 | 178 | |
![]() |
3.1 | 179 | bit 2 – “Charging” (0 – open, 1 – closed); |
![]() |
1.1 | 180 | |
![]() |
3.1 | 181 | bit 3 – “Allow charging” (0 – open, 1 – closed); |
![]() |
1.1 | 182 | |
![]() |
3.1 | 183 | bit 4 – “Charging current present”; |
![]() |
1.1 | 184 | |
![]() |
3.1 | 185 | bit 5 – “Discharging” (0 – open, 1 – closed); |
![]() |
1.1 | 186 | |
![]() |
3.1 | 187 | bit 6 – “Discharging current present”; |
![]() |
1.1 | 188 | |
![]() |
3.1 | 189 | bit 7 – “Voltage too high” (EV); |
![]() |
1.1 | 190 | |
![]() |
3.1 | 191 | bit 8 – “Heater” (0 – off, 1 – on); |
![]() |
1.1 | 192 | |
![]() |
3.1 | 193 | bit 9 – “Cooler” (0 – off, 1 – on); |
![]() |
1.1 | 194 | |
![]() |
3.1 | 195 | bit 10 – “HYG shutdown”, command from the HYG forklift to open the discharging contactor; |
![]() |
1.1 | 196 | |
![]() |
3.1 | 197 | bit 11 – “Init”, initialization signal (during the initialization current sensor is calibrating and BMS Logic devices are scanning); |
![]() |
1.1 | 198 | |
![]() |
3.1 | 199 | bit 12 – “Precharging” (0 – open, 1 – closed); |
![]() |
1.1 | 200 | |
![]() |
3.1 | 201 | bit 13 – “Combilift shutdown”, command from the Combilift forklift to open the discharging contactor; |
![]() |
1.1 | 202 | |
![]() |
3.1 | 203 | bit 14 – “Cell analysis”, signal of started analysis of the cells; |
![]() |
1.1 | 204 | |
![]() |
3.1 | 205 | bit 15 – reserved (set to 0); |
![]() |
1.1 | 206 | |
![]() |
3.1 | 207 | bit 16 – reserved (set to 0); |
![]() |
1.1 | 208 | |
![]() |
3.1 | 209 | bit 17 – “Discharging (AUX)” (0 – open, 1 – closed); |
![]() |
1.1 | 210 | |
![]() |
3.1 | 211 | bit 18 – “Acknowledgement of power down”; |
![]() |
1.1 | 212 | |
![]() |
3.1 | 213 | bit 19 – “Crown EWS”; |
![]() |
1.1 | 214 | |
![]() |
3.1 | 215 | bit 20 – “Main contactor” (0 – open, 1 – closed); |
![]() |
1.1 | 216 | |
217 | bit 21 – “Service reset”; | ||
218 | |||
219 | bit 22 – “Charging/Discharging” (0 – open, 1 – closed); | ||
220 | |||
221 | bit 23 – “Ready to charge” (the voltage of the cells is less than the threshold value and there are no errors that prohibit charging); | ||
222 | |||
223 | bit 24 – “Ready to discharge” (the voltage of the cells is greater than the threshold value and there are no errors that prohibit discharging); | ||
224 | |||
225 | bit 25 – “Power up”; | ||
226 | |||
![]() |
3.1 | 227 | bit 26 – “External 1”; |
228 | |||
229 | bits 27–31 – reserved. | ||
![]() |
1.1 | 230 | )))|(% style="width:96px" %)U32 |
231 | |(% style="width:92px" %)**0x200B**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
232 | Discrete output signals (bitfield): | ||
233 | |||
234 | bit 0 — state of the output #1; | ||
235 | |||
236 | bit 1 — state of the output #2; | ||
237 | |||
238 | bit 2 — state of the output #3; | ||
239 | |||
240 | bit 3 — state of the output #4; | ||
241 | |||
242 | bits 4-15 — not used. | ||
243 | )))|(% style="width:96px" %)U16 | ||
244 | |(% style="width:92px" %)**0x200C**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
245 | MOSFETs states (bitfield): | ||
246 | |||
247 | bit 0 — state of the MOSFET #1; | ||
248 | |||
249 | bit 1 — state of the MOSFET #2; | ||
250 | |||
251 | bit 2 — state of the MOSFET #3; | ||
252 | |||
253 | bit 3 — state of the MOSFET #4; | ||
254 | |||
255 | bits 4-15 — not used. | ||
256 | )))|(% style="width:96px" %)U16 | ||
257 | |(% style="width:92px" %)**0x200E**|(% style="width:94px" %)2|(% style="width:368px" %)((( | ||
258 | Errors 2 (bitfield): | ||
259 | |||
![]() |
3.1 | 260 | bit 0 – “Low CH temperature”, temperature is too low for charging; |
![]() |
1.1 | 261 | |
262 | bit 1 – “High CH temperature”, temperature is too high for charging; | ||
263 | |||
264 | bit 2 – “SD mount error”; | ||
265 | |||
266 | bit 3 – “SD read/write error”; | ||
267 | |||
268 | bit 4 – “Unallowable charging”, charging the battery through the discharging contactor; | ||
269 | |||
270 | bit 5 – “Stuck contactor”; | ||
271 | |||
![]() |
3.1 | 272 | bit 6 – reserved (set to 0); |
![]() |
1.1 | 273 | |
![]() |
3.1 | 274 | bit 7 – reserved (set to 0); |
![]() |
1.1 | 275 | |
276 | bit 8 – “Insulation fault”; | ||
277 | |||
![]() |
3.1 | 278 | bit 9 – reserved (set to 0); |
![]() |
1.1 | 279 | |
![]() |
3.1 | 280 | bit 10 – reserved (set to 0); |
![]() |
1.1 | 281 | |
![]() |
3.1 | 282 | bit 11 – reserved (set to 0); |
![]() |
1.1 | 283 | |
![]() |
3.1 | 284 | bit 12 – "Contactor feedback error"; |
![]() |
1.1 | 285 | |
286 | bit 13 – “General error”; | ||
287 | |||
![]() |
3.1 | 288 | bit 14 – reserved (set to 0); |
289 | |||
290 | bit 15 – reserved (set to 0); | ||
291 | |||
292 | bit 16 – reserved (set to 0); | ||
293 | |||
294 | bit 17 – "Precharge error"; | ||
295 | |||
296 | bit 18 – reserved (set to 0); | ||
297 | |||
298 | bit 19 – "Current limit error"; | ||
299 | |||
300 | bits 20-31 — reserved. | ||
![]() |
1.1 | 301 | )))|(% style="width:96px" %)U32 |
302 | |(% style="width:92px" %)**0x2011**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
303 | State of the cell monitor (bitfield): | ||
304 | |||
305 | bit 0 — device is present; | ||
306 | |||
307 | bit 1 — device is online; | ||
308 | |||
309 | bit 2 — device is ready; | ||
310 | |||
311 | bit 3 — data from the device is actual; | ||
312 | |||
313 | bit 4 — temperature sensor #1 is present; | ||
314 | |||
315 | bit 5 — temperature sensor #2 is present; | ||
316 | |||
317 | bit 6 — temperature sensor #1 is shorted; | ||
318 | |||
319 | bit 7 — temperature sensor #2 is shorted; | ||
320 | |||
321 | bits 8-15 — reserved. | ||
322 | )))|(% style="width:96px" %)U16 | ||
![]() |
3.1 | 323 | |(% style="width:92px" %)**0x2012-0x2013**|(% style="width:94px" %)2|(% style="width:368px" %)Temperature of the device, °C|(% style="width:96px" %)REAL32 |
![]() |
1.1 | 324 | |(% style="width:92px" %)**0x2014-0x2015**|(% style="width:94px" %)2|(% style="width:368px" %)((( |
325 | Cell balancing flags (bitfield): | ||
326 | |||
![]() |
3.1 | 327 | bit i — balancing resistor is connected to the (i+1)^^th^^ cell. |
![]() |
1.1 | 328 | )))|(% style="width:96px" %)U32 |
329 | |(% style="width:92px" %)**0x2016-0x2029**|(% style="width:94px" %)20|(% style="width:368px" %)((( | ||
![]() |
3.1 | 330 | Array of cell states. Each element of the array corresponds to a cell and is a bitfield: |
![]() |
1.1 | 331 | |
332 | bit 0 — cell is present; | ||
333 | |||
334 | bit 1 — temperature sensor is present; | ||
335 | |||
336 | bit 2 — need to connect a balancing resistor to the cell; | ||
337 | |||
338 | bit 3 — balancing resistor is connected to the cell; | ||
339 | |||
340 | bit 4 — temperature sensor is shorted; | ||
341 | |||
342 | bit 5 — wires are connected to the cell; | ||
343 | |||
![]() |
3.1 | 344 | bit 6 — the cell is balancing; |
345 | |||
346 | bits 7-15 — reserved. | ||
![]() |
1.1 | 347 | )))|(% style="width:96px" %)U16[20] |
![]() |
3.1 | 348 | |(% style="width:92px" %)**0x202A-0x2051**|(% style="width:94px" %)40|(% style="width:368px" %)Array of cell voltages (V)|(% style="width:96px" %)REAL32[20] |
349 | |(% style="width:92px" %)**0x2052-0x2079**|(% style="width:94px" %)40|(% style="width:368px" %)Array of cell temperatures (°C)|(% style="width:96px" %)REAL32[20] | ||
350 | |(% style="width:92px" %)**0x207A-0x20A1**|(% style="width:94px" %)40|(% style="width:368px" %)Array of cell SOCs ~(%)|(% style="width:96px" %)REAL32[20] | ||
351 | |(% style="width:92px" %)**0x20A2-0x20C9**|(% style="width:94px" %)40|(% style="width:368px" %)Array of cell resistances (Ohm)|(% style="width:96px" %)REAL32[20] | ||
![]() |
4.1 | 352 | |(% style="width:92px" %)**0x20CD**|(% style="width:94px" %)1|(% style="width:368px" %)Number of cells connected|(% style="width:96px" %)U16 |
![]() |
1.1 | 353 | |(% style="width:92px" %)**0x20F4**|(% style="width:94px" %)1|(% style="width:368px" %)((( |
354 | Discrete input signals 2 (bitfield): | ||
355 | |||
356 | bit 0 – “Fuse 2”; | ||
357 | |||
358 | bit 1 – “Fuse 3”; | ||
359 | |||
360 | bit 2 – “Circuit breaker status”; | ||
361 | |||
![]() |
2.1 | 362 | bit 3 – "Balancing request"; |
363 | |||
364 | bit 4 – "Close Main contactor"; | ||
365 | |||
366 | bit 5 – "Close External 1"; | ||
367 | |||
368 | bits 6-15 – reserved. | ||
![]() |
1.1 | 369 | )))|(% style="width:96px" %)U16 |
370 | |(% style="width:92px" %)**0x2100-0x2101**|(% style="width:94px" %)2|(% style="width:368px" %)Battery state of charge (SOC), %|(% style="width:96px" %)REAL32 | ||
371 | |(% style="width:92px" %)**0x2103**|(% style="width:94px" %)1|(% style="width:368px" %)Number of cells|(% style="width:96px" %)U16 | ||
372 | |(% style="width:92px" %)**0x2104-0x2105**|(% style="width:94px" %)2|(% style="width:368px" %)Battery voltage, V|(% style="width:96px" %)REAL32 | ||
373 | |(% style="width:92px" %)**0x2106-0x2107**|(% style="width:94px" %)2|(% style="width:368px" %)Battery resistance, Ohm|(% style="width:96px" %)REAL32 | ||
374 | |(% style="width:92px" %)**0x2108-0x2109**|(% style="width:94px" %)2|(% style="width:368px" %)Effective capacity, A×h|(% style="width:96px" %)REAL32 | ||
375 | |(% style="width:92px" %)**0x210A-0x210B**|(% style="width:94px" %)2|(% style="width:368px" %)Balancing effectivity, %|(% style="width:96px" %)REAL32 | ||
376 | |(% style="width:92px" %)**0x210C-0x210D**|(% style="width:94px" %)2|(% style="width:368px" %)State of health, %|(% style="width:96px" %)REAL32 | ||
377 | |(% style="width:92px" %)**0x210E-0x210F**|(% style="width:94px" %)2|(% style="width:368px" %)Depth of discharge, A×h|(% style="width:96px" %)REAL32 | ||
378 | |(% style="width:92px" %)**0x2118-0x2119**|(% style="width:94px" %)2|(% style="width:368px" %)Minimum cell temperature|(% style="width:96px" %)REAL32 | ||
379 | |(% style="width:92px" %)**0x211B**|(% style="width:94px" %)1|(% style="width:368px" %)Position of the cell whose temperature is minimal|(% style="width:96px" %)U16 | ||
380 | |(% style="width:92px" %)**0x211C-0x211D**|(% style="width:94px" %)2|(% style="width:368px" %)Maximum cell temperature|(% style="width:96px" %)REAL32 | ||
381 | |(% style="width:92px" %)**0x211F**|(% style="width:94px" %)1|(% style="width:368px" %)Position of the cell whose temperature is maximal|(% style="width:96px" %)U16 | ||
382 | |(% style="width:92px" %)**0x2120-0x2121**|(% style="width:94px" %)2|(% style="width:368px" %)Minimum cell voltage|(% style="width:96px" %)REAL32 | ||
383 | |(% style="width:92px" %)**0x2123**|(% style="width:94px" %)1|(% style="width:368px" %)Position of the cell whose voltage is minimal|(% style="width:96px" %)U16 | ||
384 | |(% style="width:92px" %)**0x2124-0x2125**|(% style="width:94px" %)2|(% style="width:368px" %)Maximum cell voltage|(% style="width:96px" %)REAL32 | ||
385 | |(% style="width:92px" %)**0x2127**|(% style="width:94px" %)1|(% style="width:368px" %)Position of the cell whose voltage is maximal|(% style="width:96px" %)U16 | ||
386 | |(% style="width:92px" %)**0x2128**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
387 | Error flag: | ||
388 | |||
389 | 0 — no errors; | ||
390 | |||
391 | 1 — there are some errors. | ||
392 | )))|(% style="width:96px" %)U16 | ||
393 | |(% style="width:92px" %)**0x2130-0x2131**|(% style="width:94px" %)2|(% style="width:368px" %)Energy received from the charger, W×h|(% style="width:96px" %)REAL32 | ||
394 | |(% style="width:92px" %)**0x2132-0x2133**|(% style="width:94px" %)2|(% style="width:368px" %)Energy consumed by the load, W×h|(% style="width:96px" %)REAL32 | ||
395 | |(% style="width:92px" %)**0x2134-0x2135**|(% style="width:94px" %)2|(% style="width:368px" %)Energy dissipated by the balancing resistors, W×h|(% style="width:96px" %)REAL32 | ||
396 | |(% style="width:92px" %)**0x2170**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
![]() |
3.1 | 397 | Battery state: |
![]() |
1.1 | 398 | |
![]() |
3.1 | 399 | 0 – Unknown; |
![]() |
1.1 | 400 | |
![]() |
3.1 | 401 | 1 – Charging ON; |
402 | |||
403 | 2 – Charging OFF; | ||
404 | |||
405 | 3 – Relaxed (after charging); | ||
406 | |||
407 | 4 – Discharging ON; | ||
408 | |||
409 | 5 – Discharging OFF; | ||
410 | |||
411 | 6 – Relaxed (after discharging). | ||
![]() |
1.1 | 412 | )))|(% style="width:96px" %)U16 |
![]() |
3.1 | 413 | |(% style="width:92px" %)**0x2171-0x2172**|(% style="width:94px" %)2|(% style="width:368px" %)Duration of the battery state (0x2170), seconds|(% style="width:96px" %)U32 |
![]() |
1.1 | 414 | |(% style="width:92px" %)**0x217B-0x217C**|(% style="width:94px" %)2|(% style="width:368px" %)Coulomb received from the charger, A×h|(% style="width:96px" %)REAL32 |
415 | |(% style="width:92px" %)**0x217D-0x217E**|(% style="width:94px" %)2|(% style="width:368px" %)Coulomb consumed by the load, A×h|(% style="width:96px" %)REAL32 | ||
416 | |(% style="width:92px" %)**0x21B8**|(% style="width:94px" %)1|(% style="width:368px" %)Flag indicating that the cells are balancing|(% style="width:96px" %)U16 | ||
417 | |(% style="width:92px" %)**0x21B9**|(% style="width:94px" %)2|(% style="width:368px" %)Average cell voltage, V|(% style="width:96px" %)REAL32 | ||
418 | |(% style="width:92px" %)**0x2400**|(% style="width:94px" %)2|(% style="width:368px" %)Current measured by the auxiliary current sensor, A|(% style="width:96px" %)REAL32 | ||
419 | |(% style="width:92px" %)**0x2402**|(% style="width:94px" %)2|(% style="width:368px" %)((( | ||
420 | Final battery current, A | ||
421 | |||
422 | Note — Typically it is the sum of the values measured by the main and auxiliary current sensors | ||
423 | )))|(% style="width:96px" %)REAL32 | ||
424 | |||
425 | === Holding registers === | ||
426 | |||
427 | (% style="width:653px" %) | ||
428 | |(% style="width:92px" %)**Register address**|(% style="width:94px" %)**Number of registers**|(% style="width:368px" %)**Content**|(% style="width:96px" %)**Type** | ||
429 | |(% style="width:92px" %)**0x4100**|(% style="width:94px" %)2|(% style="width:368px" %)((( | ||
430 | Command to acknowledge errors in the errors journal (bitfield). Each //i//^^th^^ bit corresponds to (//i//+1) record. | ||
431 | |||
432 | Notes: | ||
433 | |||
434 | 1 – After the errors are acknowledged, the register value will be set to 0. | ||
435 | |||
436 | 2 – To acknowledge all errors, set 0xFFFFFFFF. | ||
437 | )))|(% style="width:96px" %)U32 | ||
438 | |(% style="width:92px" %)**0x5100**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
439 | Software control of the "Battery cover" signal. Allowable values: | ||
440 | |||
441 | 0 – clear the signal; | ||
442 | |||
443 | 1 – set the signal; | ||
444 | |||
445 | 2-65535 – use the physical input "Battery cover". | ||
446 | )))|(% style="width:96px" %)U16 | ||
447 | |(% style="width:92px" %)**0x5101**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
448 | Software control of the "Charger connected" signal. Allowable values: | ||
449 | |||
450 | 0 – clear the signal; | ||
451 | |||
452 | 1 – set the signal; | ||
453 | |||
454 | 2-65535 – use the physical input "Charger connected". | ||
455 | )))|(% style="width:96px" %)U16 | ||
456 | |(% style="width:92px" %)**0x5102**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
![]() |
3.1 | 457 | Software control of the "Power up/down request" signal. Allowable values: |
![]() |
1.1 | 458 | |
459 | 0 – clear the signal; | ||
460 | |||
461 | 1 – set the signal; | ||
462 | |||
463 | 2-65535 – use the physical input "Power down request". | ||
464 | )))|(% style="width:96px" %)U16 | ||
465 | |(% style="width:92px" %)**0x5103**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
466 | Software control of the "Inhibit charging" signal. Allowable values: | ||
467 | |||
468 | 0 – clear the signal; | ||
469 | |||
470 | 1 – set the signal; | ||
471 | |||
472 | 2-65535 – use the physical input "Inhibit charging". | ||
473 | )))|(% style="width:96px" %)U16 | ||
474 | |(% style="width:92px" %)**0x5104**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
475 | Software control of the "Inhibit discharging" signal. Allowable values: | ||
476 | |||
477 | 0 – clear the signal; | ||
478 | |||
479 | 1 – set the signal; | ||
480 | |||
481 | 2-65535 – use the physical input "Inhibit discharging". | ||
482 | )))|(% style="width:96px" %)U16 | ||
483 | |(% style="width:92px" %)**0x5107**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
484 | Software control of the "Insulation status" signal. Allowable values: | ||
485 | |||
486 | 0 – clear the signal; | ||
487 | |||
488 | 1 – set the signal; | ||
489 | |||
490 | 2-65535 – use the physical input "Insulation status". | ||
491 | )))|(% style="width:96px" %)U16 | ||
492 | |(% style="width:92px" %)**0x5108**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
493 | Software control of the "Charge request" signal. Allowable values: | ||
494 | |||
495 | 0 – clear the signal; | ||
496 | |||
497 | 1 – set the signal; | ||
498 | |||
499 | 2-65535 – use the physical input "Charge request". | ||
500 | )))|(% style="width:96px" %)U16 | ||
501 | |(% style="width:92px" %)**0x5109**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
502 | Software control of the "Precharge request" signal. Allowable values: | ||
503 | |||
504 | 0 – clear the signal; | ||
505 | |||
506 | 1 – set the signal; | ||
507 | |||
508 | 2-65535 – use the physical input "Precharge request". | ||
509 | )))|(% style="width:96px" %)U16 | ||
510 | |(% style="width:92px" %)**0x510A**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
511 | Software control of the "Discharge request" signal. Allowable values: | ||
512 | |||
513 | 0 – clear the signal; | ||
514 | |||
515 | 1 – set the signal; | ||
516 | |||
517 | 2-65535 – use the physical input "Discharge request". | ||
518 | )))|(% style="width:96px" %)U16 | ||
519 | |(% style="width:92px" %)**0x510E**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
520 | Software control of the "Interlock" signal. Allowable values: | ||
521 | |||
522 | 0 – clear the signal; | ||
523 | |||
524 | 1 – set the signal; | ||
525 | |||
526 | 2-65535 – use the physical input "Interlock". | ||
527 | )))|(% style="width:96px" %)U16 | ||
528 | |(% style="width:92px" %)**0x510F**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
529 | Software control of the "Fuse 1" signal. Allowable values: | ||
530 | |||
531 | 0 – clear the signal; | ||
532 | |||
533 | 1 – set the signal; | ||
534 | |||
535 | 2-65535 – use the physical input "Fuse 1". | ||
536 | )))|(% style="width:96px" %)U16 | ||
537 | |(% style="width:92px" %)**0x5110**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
538 | Software control of the "Fuse 2" signal. Allowable values: | ||
539 | |||
540 | 0 – clear the signal; | ||
541 | |||
542 | 1 – set the signal; | ||
543 | |||
544 | 2-65535 – use the physical input "Fuse 2". | ||
545 | )))|(% style="width:96px" %)U16 | ||
546 | |(% style="width:92px" %)**0x5111**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
547 | Software control of the "Fuse 3" signal. Allowable values: | ||
548 | |||
549 | 0 – clear the signal; | ||
550 | |||
551 | 1 – set the signal; | ||
552 | |||
553 | 2-65535 – use the physical input "Fuse 3". | ||
554 | )))|(% style="width:96px" %)U16 | ||
555 | |(% style="width:92px" %)**0x5112**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
556 | Software control of the "Circuit breaker status" signal. Allowable values: | ||
557 | |||
558 | 0 – clear the signal; | ||
559 | |||
560 | 1 – set the signal; | ||
561 | |||
562 | 2-65535 – use the physical input "Circuit breaker status". | ||
563 | )))|(% style="width:96px" %)U16 | ||
564 | |(% style="width:92px" %)**0x5113**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
565 | Software control of the "Balancing request" signal. Allowable values: | ||
566 | |||
567 | 0 – clear the signal; | ||
568 | |||
569 | 1 – set the signal; | ||
570 | |||
571 | 2-65535 – use the physical input "Balancing request". | ||
572 | )))|(% style="width:96px" %)U16 | ||
573 | |(% style="width:92px" %)**0x5114**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
574 | Software control of the "Close Main contactor" signal. Allowable values: | ||
575 | |||
576 | 0 – clear the signal; | ||
577 | |||
578 | 1 – set the signal; | ||
579 | |||
580 | 2-65535 – use the physical input "Close Main contactor". | ||
581 | )))|(% style="width:96px" %)U16 | ||
582 | |(% style="width:92px" %)**0x5115**|(% style="width:94px" %)1|(% style="width:368px" %)((( | ||
583 | Software control of the "Close External 1" signal. Allowable values: | ||
584 | |||
585 | 0 – clear the signal; | ||
586 | |||
587 | 1 – set the signal; | ||
588 | |||
589 | 2-65535 – use the physical input "Close External 1". | ||
590 | )))|(% style="width:96px" %)U16 |