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 | |||
![]() |
5.1 | 9 | The BMS Main 3 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. |
![]() |
1.1 | 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 | * 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 parameter 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 | The bytes order of the word is **little endian**. | ||
36 | |||
37 | === Input registers === | ||
38 | |||
![]() |
5.3 | 39 | (% style="width:616px" %) |
40 | |(% style="width:73px" %)**Register address**|(% style="width:66px" %)**Number of registers**|(% style="width:437px" %)**Content**|(% style="width:37px" %)**Type** | ||
41 | |(% style="width:73px" %)**0x0000**|(% style="width:66px" %)1|(% style="width:437px" %)((( | ||
![]() |
1.1 | 42 | Hardware version: |
43 | |||
44 | byte 0 — minor; | ||
45 | |||
46 | byte 1 — major. | ||
![]() |
5.3 | 47 | )))|(% style="width:37px" %)U8[2] |
48 | |(% style="width:73px" %)**0x0001-0x0002**|(% style="width:66px" %)2|(% style="width:437px" %)((( | ||
![]() |
1.1 | 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). | ||
![]() |
5.3 | 58 | )))|(% style="width:37px" %)U8[4] |
59 | |(% style="width:73px" %)**0x0003-0x0004**|(% style="width:66px" %)2|(% style="width:437px" %)((( | ||
![]() |
5.2 | 60 | Bootloader (ubl) version: |
![]() |
1.1 | 61 | |
62 | byte 0 — patch; | ||
63 | |||
64 | byte 1 — minor; | ||
65 | |||
66 | byte 2 — major; | ||
67 | |||
68 | byte 3 — not used (set to 0). | ||
![]() |
5.3 | 69 | )))|(% style="width:37px" %)U8[4] |
70 | |(% style="width:73px" %)**0x2000**|(% style="width:66px" %)1|(% style="width:437px" %)((( | ||
![]() |
5.2 | 71 | Discrete input signals 1 (bitfield): |
![]() |
1.1 | 72 | |
![]() |
5.2 | 73 | bit 0 — signal "Battery cover"; |
![]() |
1.1 | 74 | |
![]() |
5.2 | 75 | bit 1 — signal "Charger connected"; |
![]() |
1.1 | 76 | |
![]() |
5.2 | 77 | bit 2 — signal "Power up/down request"; |
![]() |
1.1 | 78 | |
![]() |
5.2 | 79 | bit 3 — signal "Inhibit charging"; |
![]() |
1.1 | 80 | |
![]() |
5.2 | 81 | bit 4 — signal "Inhibit discharging"; |
![]() |
1.1 | 82 | |
![]() |
5.2 | 83 | bit 5 — signal “CH contactor feedback”; |
![]() |
1.1 | 84 | |
![]() |
5.2 | 85 | bit 6 — signal “DCH contactor feedback”; |
![]() |
1.1 | 86 | |
![]() |
5.2 | 87 | bit 7 — signal “Insulation status”; |
![]() |
1.1 | 88 | |
![]() |
5.2 | 89 | bit 8 — signal “Charge request”; |
![]() |
1.1 | 90 | |
![]() |
5.2 | 91 | bit 9 — signal “Precharge request”; |
![]() |
1.1 | 92 | |
![]() |
5.2 | 93 | bit 10 — signal “Discharge request”; |
![]() |
1.1 | 94 | |
![]() |
5.2 | 95 | bit 11 — signal “PCH contactor feedback”; |
![]() |
1.1 | 96 | |
![]() |
5.2 | 97 | bit 12 — signal “CH/DCH contactor feedback”; |
![]() |
1.1 | 98 | |
![]() |
5.2 | 99 | bit 13 — signal “Main contactor feedback”; |
![]() |
1.1 | 100 | |
![]() |
5.2 | 101 | bit 14 — signal “Interlock”; |
![]() |
1.1 | 102 | |
![]() |
5.2 | 103 | bit 15 — signal “Fuse 1”. |
![]() |
5.3 | 104 | )))|(% style="width:37px" %)U16 |
105 | |(% style="width:73px" %)**0x2001-0x2002**|(% style="width:66px" %)2|(% style="width:437px" %)Current (sensor 1, high range), А|(% style="width:37px" %)REAL32 | ||
106 | |(% style="width:73px" %)**0x2003-0x2004**|(% style="width:66px" %)2|(% style="width:437px" %)Temperature (sensor 1), °C|(% style="width:37px" %)REAL32 | ||
107 | |(% style="width:73px" %)**0x2005-0x2006**|(% style="width:66px" %)2|(% style="width:437px" %)Humidity, RH%|(% style="width:37px" %)REAL32 | ||
108 | |(% style="width:73px" %)**0x2007-0x2008**|(% style="width:66px" %)2|(% style="width:437px" %)((( | ||
![]() |
5.2 | 109 | Errors 1 (bitfield): |
![]() |
1.1 | 110 | |
![]() |
5.2 | 111 | bit 0 — error "Overcurrent"; |
![]() |
1.1 | 112 | |
![]() |
5.2 | 113 | bit 1 — error "Undervoltage"; |
![]() |
1.1 | 114 | |
![]() |
5.2 | 115 | bit 2 — error "Overvoltage"; |
![]() |
1.1 | 116 | |
![]() |
5.2 | 117 | bit 3 — error "Low temperature (DCH)"; |
![]() |
1.1 | 118 | |
![]() |
5.2 | 119 | bit 4 — error "High temperature (DCH)"; |
![]() |
1.1 | 120 | |
![]() |
5.2 | 121 | bit 5 — error "Battery cover"; |
![]() |
1.1 | 122 | |
![]() |
5.2 | 123 | bit 6 — error "High humidity"; |
![]() |
1.1 | 124 | |
![]() |
5.2 | 125 | bit 7 — error "Water"; |
![]() |
1.1 | 126 | |
![]() |
5.2 | 127 | bit 8 — error "Logic high temperature"; |
![]() |
1.1 | 128 | |
![]() |
5.2 | 129 | bit 9 — error "Logic offline"; |
![]() |
1.1 | 130 | |
![]() |
5.2 | 131 | bit 10 — "Critical error"; |
![]() |
1.1 | 132 | |
![]() |
5.2 | 133 | bit 11 — "Crown error"; |
![]() |
1.1 | 134 | |
![]() |
5.2 | 135 | bit 12 — "Cell count error"; |
![]() |
1.1 | 136 | |
![]() |
5.2 | 137 | bit 13 — error "HYG offline"; |
![]() |
1.1 | 138 | |
![]() |
5.2 | 139 | bit 14 — reserved (set to 0); |
![]() |
1.1 | 140 | |
![]() |
5.2 | 141 | bit 15 — error "Combilift offline"; |
![]() |
1.1 | 142 | |
![]() |
5.2 | 143 | bit 16 — error "Short circuit"; |
![]() |
1.1 | 144 | |
![]() |
5.2 | 145 | bit 17 — error "High contactor temperature"; |
![]() |
1.1 | 146 | |
![]() |
5.2 | 147 | bit 18 — "Logic count error"; |
![]() |
1.1 | 148 | |
![]() |
5.2 | 149 | bit 19 — "ADC error"; |
![]() |
1.1 | 150 | |
![]() |
5.2 | 151 | bit 20 — “Current sensor error”; |
![]() |
1.1 | 152 | |
![]() |
5.2 | 153 | bit 21 — “CH contactor cycles error”; |
![]() |
1.1 | 154 | |
![]() |
5.2 | 155 | bit 22 — “DCH contactor cycles error”; |
![]() |
1.1 | 156 | |
![]() |
5.2 | 157 | bit 23 — error "Shunt offline"; |
![]() |
1.1 | 158 | |
![]() |
5.2 | 159 | bit 24 — “Shunt error”; |
![]() |
1.1 | 160 | |
![]() |
5.2 | 161 | bit 25 — reserved (set to 0); |
![]() |
1.1 | 162 | |
![]() |
5.2 | 163 | bit 26 — error “WDT reset”; |
![]() |
1.1 | 164 | |
![]() |
5.2 | 165 | bit 27 — error "No temperature sensors"; |
![]() |
1.1 | 166 | |
![]() |
5.2 | 167 | bit 28 — error "Temperature sensor shorted"; |
![]() |
1.1 | 168 | |
![]() |
5.2 | 169 | bit 29 — error “Spirit offline”; |
![]() |
1.1 | 170 | |
![]() |
5.2 | 171 | bits 30-31 – not used. |
![]() |
5.3 | 172 | )))|(% style="width:37px" %)U32 |
173 | |(% style="width:73px" %)**0x2009-0x200A**|(% style="width:66px" %)2|(% style="width:437px" %)((( | ||
![]() |
5.2 | 174 | Internal signals (bitfield): |
![]() |
1.1 | 175 | |
176 | bit 0 — signal "Low SOC"; | ||
177 | |||
178 | bit 1 — signal "High charging current"; | ||
179 | |||
180 | bit 2 — signal “Charging” (0 – open, 1 – closed); | ||
181 | |||
182 | bit 3 — signal "Allow charging" (0 – open, 1 – closed); | ||
183 | |||
184 | bit 4 — signal "Charging current present"; | ||
185 | |||
186 | bit 5 — signal “Discharging” (0 – open, 1 – closed); | ||
187 | |||
188 | bit 6 — signal "Discharging current present"; | ||
189 | |||
190 | bit 7 — signal "Voltage too high for charging"; | ||
191 | |||
192 | bit 8 — signal "Heater" (0 – off, 1 – on); | ||
193 | |||
194 | bit 9 — signal "Cooler" (0 – off, 1 – on); | ||
195 | |||
196 | bit 10 — signal “Shutdown request (HYG/Spirit)”; | ||
197 | |||
198 | bit 11 — signal “Init” (current sensor calibration or BMS Logic scanning is performed); | ||
199 | |||
200 | bit 12 — signal “Precharging” (0 – open, 1 – closed); | ||
201 | |||
202 | bit 13 — signal “Shutdown request (Combilift)”; | ||
203 | |||
204 | bit 14 — signal "Cell analysis"; | ||
205 | |||
206 | bit 15 — signal “Balancing 1”; | ||
207 | |||
208 | bit 16 — signal “Balancing 2”; | ||
209 | |||
210 | bit 17 — signal “Discharging (AUX)” (0 – open, 1 – closed); | ||
211 | |||
212 | bit 18 — signal “Power down ACK”; | ||
213 | |||
214 | bit 19 — signal “Crown EWS”; | ||
215 | |||
216 | bit 20 — signal “Main contactor” (0 – open, 1 – closed); | ||
217 | |||
218 | bit 21 — signal “Service reset”; | ||
219 | |||
220 | bit 22 — signal “Charging/Discharging” (0 – open, 1 – closed); | ||
221 | |||
222 | bit 23 — signal “Ready to charge”; | ||
223 | |||
224 | bit 24 — signal “Ready to discharge”; | ||
225 | |||
226 | bit 25 — signal “Power up”; | ||
227 | |||
![]() |
5.6 | 228 | bit 26 — signal “External 1”; |
229 | |||
![]() |
5.8 | 230 | bit 27 — signal “Heater (AUX)”; |
![]() |
5.6 | 231 | |
![]() |
8.1 | 232 | bits 28-31 — not used. |
![]() |
5.3 | 233 | )))|(% style="width:37px" %)U32 |
234 | |(% style="width:73px" %)**0x200B**|(% style="width:66px" %)1|(% style="width:437px" %)((( | ||
![]() |
5.2 | 235 | Discrete output signals (bitfield): |
![]() |
1.1 | 236 | |
![]() |
5.2 | 237 | bit 0 — state of the output 1; |
![]() |
1.1 | 238 | |
![]() |
5.2 | 239 | bit 1 — state of the output 2; |
![]() |
1.1 | 240 | |
![]() |
5.2 | 241 | bit 2 — state of the output 3; |
![]() |
1.1 | 242 | |
![]() |
5.2 | 243 | bit 3 — state of the output 4; |
![]() |
1.1 | 244 | |
![]() |
5.2 | 245 | bits 4-15 — not used. |
![]() |
5.3 | 246 | )))|(% style="width:37px" %)U16 |
247 | |(% style="width:73px" %)**0x200C**|(% style="width:66px" %)1|(% style="width:437px" %)((( | ||
![]() |
5.2 | 248 | Power switch states (bitfield): |
![]() |
1.1 | 249 | |
![]() |
5.2 | 250 | bit 0 — state of the power switch 1 (0 – open, 1 – closed); |
![]() |
1.1 | 251 | |
![]() |
5.2 | 252 | bit 1 — state of the power switch 2 (0 – open, 1 – closed); |
![]() |
1.1 | 253 | |
![]() |
5.2 | 254 | bit 2 — state of the power switch 3 (0 – open, 1 – closed); |
![]() |
1.1 | 255 | |
![]() |
5.2 | 256 | bit 3 — state of the power switch 4 (0 – open, 1 – closed); |
![]() |
1.1 | 257 | |
![]() |
5.2 | 258 | bit 4 — state of the power switch 5 (0 – open, 1 – closed); |
![]() |
1.1 | 259 | |
![]() |
5.2 | 260 | bit 5 — state of the power switch 6 (0 – open, 1 – closed); |
![]() |
1.1 | 261 | |
![]() |
5.2 | 262 | bits 6-15 — not used. |
![]() |
5.3 | 263 | )))|(% style="width:37px" %)U16 |
![]() |
5.5 | 264 | |(% style="width:73px" %)**0x200E-0x200F**|(% style="width:66px" %)2|(% style="width:437px" %)((( |
![]() |
5.2 | 265 | Errors 2 (bitfield): |
![]() |
1.1 | 266 | |
267 | bit 0 — error "Low temperature (CH)"; | ||
268 | |||
269 | bit 1 — error “High temperature (CH)”; | ||
270 | |||
271 | bit 2 — reserved (set to 0); | ||
272 | |||
273 | bit 3 — reserved (set to 0); | ||
274 | |||
275 | bit 4 — error “Unallowable charging”; | ||
276 | |||
277 | bit 5 — error “Stuck contactor”; | ||
278 | |||
279 | bit 6 — “CH contactor feedback error”; | ||
280 | |||
281 | bit 7 — “DCH contactor feedback error”; | ||
282 | |||
283 | bit 8 — “Insulation fault”; | ||
284 | |||
285 | bit 9 — “PCH contactor feedback error”; | ||
286 | |||
287 | bit 10 — “CH/DCH contactor feedback error”; | ||
288 | |||
289 | bit 11 — “Main contactor feedback error”; | ||
290 | |||
291 | bit 12 — reserved (set to 0); | ||
292 | |||
293 | bit 13 — “General error”; | ||
294 | |||
![]() |
5.2 | 295 | bit 14 — “High voltage fault”; |
![]() |
1.1 | 296 | |
![]() |
5.2 | 297 | bit 15 — “Power switch error”; |
![]() |
1.1 | 298 | |
![]() |
5.2 | 299 | bit 16 — “HVIL error”; |
![]() |
1.1 | 300 | |
![]() |
5.2 | 301 | bit 17 — “Precharge error”; |
![]() |
1.1 | 302 | |
![]() |
5.2 | 303 | bit 18 — “Power fault”; |
![]() |
1.1 | 304 | |
![]() |
7.1 | 305 | bit 19 — “Current limit" error; |
306 | |||
307 | bits 20-31 — not used. | ||
![]() |
5.3 | 308 | )))|(% style="width:37px" %)U32 |
309 | |(% style="width:73px" %)**0x2010**|(% style="width:66px" %)1|(% style="width:437px" %)Address of the BMS Logic device the parameters of which are in registers 0x2011-0x20C9|(% style="width:37px" %)U16 | ||
310 | |(% style="width:73px" %)**0x2011**|(% style="width:66px" %)1|(% style="width:437px" %)((( | ||
![]() |
5.2 | 311 | BMS Logic state (bitfield): |
![]() |
1.1 | 312 | |
![]() |
5.2 | 313 | bit 0 — device is present; |
![]() |
1.1 | 314 | |
![]() |
5.2 | 315 | bit 1 — device is online; |
![]() |
1.1 | 316 | |
![]() |
5.2 | 317 | bit 2 — device is ready; |
![]() |
1.1 | 318 | |
![]() |
5.2 | 319 | bit 3 — data from the device is actual; |
![]() |
1.1 | 320 | |
![]() |
5.2 | 321 | bit 4 — temperature sensor 1 is present; |
![]() |
1.1 | 322 | |
![]() |
5.2 | 323 | bit 5 — temperature sensor 2 is present; |
![]() |
1.1 | 324 | |
![]() |
5.2 | 325 | bit 6 — temperature sensor 1 is shorted; |
![]() |
1.1 | 326 | |
![]() |
5.2 | 327 | bit 7 — temperature sensor 2 is shorted; |
![]() |
1.1 | 328 | |
![]() |
5.2 | 329 | bits 8-15 — not used. |
![]() |
5.3 | 330 | )))|(% style="width:37px" %)U16 |
331 | |(% style="width:73px" %)**0x2012-0x2013**|(% style="width:66px" %)2|(% style="width:437px" %)BMS Logic device temperature, °C|(% style="width:37px" %)REAL32 | ||
332 | |(% style="width:73px" %)**0x2014-0x2015**|(% style="width:66px" %)2|(% style="width:437px" %)((( | ||
![]() |
5.2 | 333 | Cell balancing flags (bitfield): |
![]() |
1.1 | 334 | |
![]() |
5.2 | 335 | bit i — balancing resistor is connected to the (i+1)^^th^^ cell. |
![]() |
5.3 | 336 | )))|(% style="width:37px" %)U32 |
337 | |(% style="width:73px" %)**0x2016-0x2029**|(% style="width:66px" %)20|(% style="width:437px" %)((( | ||
![]() |
5.2 | 338 | Array of cell states. Each element of the array corresponds to a cell and is a bitfield: |
![]() |
1.1 | 339 | |
![]() |
5.2 | 340 | bit 0 — cell is present; |
![]() |
1.1 | 341 | |
![]() |
5.2 | 342 | bit 1 — temperature sensor is present; |
![]() |
1.1 | 343 | |
![]() |
5.2 | 344 | bit 2 — need to connect a balancing resistor to the cell; |
![]() |
1.1 | 345 | |
![]() |
5.2 | 346 | bit 3 — balancing resistor is connected to the cell; |
![]() |
1.1 | 347 | |
![]() |
5.2 | 348 | bit 4 — temperature sensor is shorted; |
![]() |
1.1 | 349 | |
![]() |
5.2 | 350 | bit 5 — wires are connected to the cell; |
![]() |
1.1 | 351 | |
![]() |
5.2 | 352 | bits 6-15 — not used. |
![]() |
5.3 | 353 | )))|(% style="width:37px" %)U16[20] |
354 | |(% style="width:73px" %)**0x202A-0x2051**|(% style="width:66px" %)40|(% style="width:437px" %)Array of cell voltages (V)|(% style="width:37px" %)REAL32[20] | ||
355 | |(% style="width:73px" %)**0x2052-0x2079**|(% style="width:66px" %)40|(% style="width:437px" %)Array of cell temperatures (°C)|(% style="width:37px" %)REAL32[20] | ||
356 | |(% style="width:73px" %)**0x207A-0x20A1**|(% style="width:66px" %)40|(% style="width:437px" %)Array of cell SOCs ~(%)|(% style="width:37px" %)REAL32[20] | ||
357 | |(% style="width:73px" %)**0x20A2-0x20C9**|(% style="width:66px" %)40|(% style="width:437px" %)Array of cell resistances (Ohm)|(% style="width:37px" %)REAL32[20] | ||
358 | |(% style="width:73px" %)**0x20CA**|(% style="width:66px" %)1|(% style="width:437px" %)((( | ||
![]() |
5.2 | 359 | BMS Logic board version: |
![]() |
1.1 | 360 | |
![]() |
5.2 | 361 | byte 0 – minor; |
![]() |
1.1 | 362 | |
![]() |
5.2 | 363 | byte 1 – major. |
![]() |
5.3 | 364 | )))|(% style="width:37px" %)U8[2] |
365 | |(% style="width:73px" %)**0x20CB-0x20CC**|(% style="width:66px" %)2|(% style="width:437px" %)((( | ||
![]() |
5.2 | 366 | BMS Logic firmware version: |
![]() |
1.1 | 367 | |
![]() |
5.2 | 368 | byte 0 – patch; |
![]() |
1.1 | 369 | |
![]() |
5.2 | 370 | byte 1 – minor; |
![]() |
1.1 | 371 | |
![]() |
5.2 | 372 | byte 2 – major; |
![]() |
1.1 | 373 | |
![]() |
5.2 | 374 | byte 3 – not used (set to 0). |
![]() |
5.3 | 375 | )))|(% style="width:37px" %)U8[4] |
376 | |(% style="width:73px" %)**0x20CD**|(% style="width:66px" %)1|(% style="width:437px" %)Number of cells BMS Logic can manage|(% style="width:37px" %)U16 | ||
377 | |(% style="width:73px" %)**0x20CE**|(% style="width:66px" %)1|(% style="width:437px" %)BMS Logic serial number|(% style="width:37px" %)U16 | ||
378 | |(% style="width:73px" %)**0x20F0-0x20F1**|(% style="width:66px" %)2|(% style="width:437px" %)Temperature (sensor 2), °C|(% style="width:37px" %)REAL32 | ||
379 | |(% style="width:73px" %)**0x20F2-0x20F3**|(% style="width:66px" %)2|(% style="width:437px" %)Device supply voltage, V|(% style="width:37px" %)REAL32 | ||
380 | |(% style="width:73px" %)**0x20F4**|(% style="width:66px" %)1|(% style="width:437px" %)((( | ||
![]() |
5.2 | 381 | Discrete input signals 2 (bitfield): |
![]() |
1.1 | 382 | |
![]() |
5.2 | 383 | bit 0 — signal "Fuse 2"; |
![]() |
1.1 | 384 | |
![]() |
5.2 | 385 | bit 1 — signal "Fuse 3"; |
![]() |
1.1 | 386 | |
![]() |
5.2 | 387 | bit 2 — signal "Circuit breaker status"; |
![]() |
1.1 | 388 | |
![]() |
5.2 | 389 | bit 3 — signal "Balancing request"; |
![]() |
1.1 | 390 | |
![]() |
5.2 | 391 | bit 4 — signal "Close Main contactor"; |
![]() |
1.1 | 392 | |
![]() |
5.4 | 393 | bit 5 — signal "Close External 1"; |
394 | |||
395 | bits 6-15 — not used. | ||
![]() |
5.3 | 396 | )))|(% style="width:37px" %)U16 |
397 | |(% style="width:73px" %)**0x2100-0x2101**|(% style="width:66px" %)2|(% style="width:437px" %)Battery state of charge (SOC), %|(% style="width:37px" %)REAL32 | ||
398 | |(% style="width:73px" %)**0x2102**|(% style="width:66px" %)1|(% style="width:437px" %)Number of connected BMS Logic devices|(% style="width:37px" %)U16 | ||
399 | |(% style="width:73px" %)**0x2103**|(% style="width:66px" %)1|(% style="width:437px" %)Number of connected cells|(% style="width:37px" %)U16 | ||
400 | |(% style="width:73px" %)**0x2104-0x2105**|(% style="width:66px" %)2|(% style="width:437px" %)Battery voltage, V|(% style="width:37px" %)REAL32 | ||
401 | |(% style="width:73px" %)**0x2106-0x2107**|(% style="width:66px" %)2|(% style="width:437px" %)Battery resistance, Ohm|(% style="width:37px" %)REAL32 | ||
402 | |(% style="width:73px" %)**0x2108-0x2109**|(% style="width:66px" %)2|(% style="width:437px" %)Effective capacity, A×h|(% style="width:37px" %)REAL32 | ||
403 | |(% style="width:73px" %)**0x210A-0x210B**|(% style="width:66px" %)2|(% style="width:437px" %)Balancing effectivity, %|(% style="width:37px" %)REAL32 | ||
404 | |(% style="width:73px" %)**0x210C-0x210D**|(% style="width:66px" %)2|(% style="width:437px" %)State of health, %|(% style="width:37px" %)REAL32 | ||
405 | |(% style="width:73px" %)**0x210E-0x210F**|(% style="width:66px" %)2|(% style="width:437px" %)Depth of discharge, A×h|(% style="width:37px" %)REAL32 | ||
406 | |(% style="width:73px" %)**0x2110-0x2111**|(% style="width:66px" %)2|(% style="width:437px" %)Minimum BMS Logic temperature|(% style="width:37px" %)REAL32 | ||
407 | |(% style="width:73px" %)**0x2112**|(% style="width:66px" %)1|(% style="width:437px" %)Address of the BMS Logic device whose temperature is minimal|(% style="width:37px" %)U16 | ||
408 | |(% style="width:73px" %)**0x2113-0x2114**|(% style="width:66px" %)2|(% style="width:437px" %)Maximum BMS Logic temperature|(% style="width:37px" %)REAL32 | ||
409 | |(% style="width:73px" %)**0x2115**|(% style="width:66px" %)1|(% style="width:437px" %)Address of the BMS Logic device whose temperature is maximal|(% style="width:37px" %)U16 | ||
410 | |(% style="width:73px" %)**0x2116-0x2117**|(% style="width:66px" %)2|(% style="width:437px" %)BMS Logic polling rate, commands pre second|(% style="width:37px" %)REAL32 | ||
411 | |(% style="width:73px" %)**0x2118-0x2119**|(% style="width:66px" %)2|(% style="width:437px" %)Minimum cell temperature|(% style="width:37px" %)REAL32 | ||
412 | |(% style="width:73px" %)**0x211A**|(% style="width:66px" %)1|(% style="width:437px" %)Address of the BMS Logic device which is connected to the cell whose temperature is minimal|(% style="width:37px" %)U16 | ||
413 | |(% style="width:73px" %)**0x211B**|(% style="width:66px" %)1|(% style="width:437px" %)Position of the cell whose temperature is minimal|(% style="width:37px" %)U16 | ||
414 | |(% style="width:73px" %)**0x211C-0x211D**|(% style="width:66px" %)2|(% style="width:437px" %)Maximum cell temperature|(% style="width:37px" %)REAL32 | ||
415 | |(% style="width:73px" %)**0x211E**|(% style="width:66px" %)1|(% style="width:437px" %)Address of the BMS Logic device which is connected to the cell whose temperature is maximal|(% style="width:37px" %)U16 | ||
416 | |(% style="width:73px" %)**0x211F**|(% style="width:66px" %)1|(% style="width:437px" %)Position of the cell whose temperature is maximal|(% style="width:37px" %)U16 | ||
417 | |(% style="width:73px" %)**0x2120-0x2121**|(% style="width:66px" %)2|(% style="width:437px" %)Minimum cell voltage|(% style="width:37px" %)REAL32 | ||
418 | |(% style="width:73px" %)**0x2122**|(% style="width:66px" %)1|(% style="width:437px" %)Address of the BMS Logic device which is connected to the cell whose voltage is minimal|(% style="width:37px" %)U16 | ||
419 | |(% style="width:73px" %)**0x2123**|(% style="width:66px" %)1|(% style="width:437px" %)Position of the cell whose voltage is minimal|(% style="width:37px" %)U16 | ||
420 | |(% style="width:73px" %)**0x2124-0x2125**|(% style="width:66px" %)2|(% style="width:437px" %)Maximum cell voltage|(% style="width:37px" %)REAL32 | ||
421 | |(% style="width:73px" %)**0x2126**|(% style="width:66px" %)1|(% style="width:437px" %)Address of the BMS Logic device which is connected to the cell whose voltage is maximal|(% style="width:37px" %)U16 | ||
422 | |(% style="width:73px" %)**0x2127**|(% style="width:66px" %)1|(% style="width:437px" %)Position of the cell whose voltage is maximal|(% style="width:37px" %)U16 | ||
423 | |(% style="width:73px" %)**0x2128**|(% style="width:66px" %)1|(% style="width:437px" %)((( | ||
![]() |
5.2 | 424 | Error flag: |
![]() |
1.1 | 425 | |
![]() |
5.2 | 426 | 0 — no errors; |
![]() |
1.1 | 427 | |
![]() |
5.2 | 428 | 1 — there are some errors. |
![]() |
5.3 | 429 | )))|(% style="width:37px" %)U16 |
430 | |(% style="width:73px" %)**0x2130-0x2131**|(% style="width:66px" %)2|(% style="width:437px" %)Energy received from the charger, W×h|(% style="width:37px" %)REAL32 | ||
431 | |(% style="width:73px" %)**0x2132-0x2133**|(% style="width:66px" %)2|(% style="width:437px" %)Energy consumed by the load, W×h|(% style="width:37px" %)REAL32 | ||
432 | |(% style="width:73px" %)**0x2134-0x2135**|(% style="width:66px" %)2|(% style="width:437px" %)Energy dissipated by the balancing resistors, W×h|(% style="width:37px" %)REAL32 | ||
433 | |(% style="width:73px" %)**0x217B-0x217C**|(% style="width:66px" %)2|(% style="width:437px" %)Coulomb received from the charger, A×h|(% style="width:37px" %)REAL32 | ||
434 | |(% style="width:73px" %)**0x217D-0x217E**|(% style="width:66px" %)2|(% style="width:437px" %)Coulomb consumed by the load, A×h|(% style="width:37px" %)REAL32 | ||
435 | |(% style="width:73px" %)**0x21B8**|(% style="width:66px" %)1|(% style="width:437px" %)Flag indicating that some cell is being balanced|(% style="width:37px" %)U16 | ||
436 | |(% style="width:73px" %)**0x21CA-0x21CB**|(% style="width:66px" %)2|(% style="width:437px" %)Average cell voltage, V|(% style="width:37px" %)REAL32 | ||
![]() |
5.5 | 437 | |(% style="width:73px" %)**0x2400-0x2401**|(% style="width:66px" %)2|(% style="width:437px" %)Current (sensor 1, low range), A|(% style="width:37px" %)REAL32 |
438 | |(% style="width:73px" %)((( | ||
439 | **0x2402-0x2403** | ||
440 | )))|(% style="width:66px" %)2|(% style="width:437px" %)Final battery current, A|(% style="width:37px" %)REAL32 | ||
![]() |
5.3 | 441 | |(% style="width:73px" %)**0x2410**|(% style="width:66px" %)1|(% style="width:437px" %)((( |
![]() |
5.2 | 442 | Battery state (enumeration): |
![]() |
1.1 | 443 | |
![]() |
5.2 | 444 | 0 – Unknown; |
![]() |
1.1 | 445 | |
![]() |
5.2 | 446 | 1 – Charging ON; |
![]() |
1.1 | 447 | |
![]() |
5.2 | 448 | 2 – Charging OFF; |
![]() |
1.1 | 449 | |
![]() |
5.2 | 450 | 3 – Relaxed (after charging); |
![]() |
1.1 | 451 | |
![]() |
5.2 | 452 | 4 – Discharging ON; |
![]() |
1.1 | 453 | |
![]() |
5.2 | 454 | 5 – Discharging OFF; |
![]() |
1.1 | 455 | |
![]() |
5.2 | 456 | 6 – Relaxed (after discharging). |
![]() |
5.3 | 457 | )))|(% style="width:37px" %)U16 |
![]() |
5.5 | 458 | |(% style="width:73px" %)**0x2411-0x2412**|(% style="width:66px" %)2|(% style="width:437px" %)Duration of the battery state (0x2410), seconds|(% style="width:37px" %)U32 |
![]() |
1.1 | 459 | |
460 | === Holding registers === | ||
461 | |||
![]() |
5.3 | 462 | (% style="width:617px" %) |
463 | |(% style="width:71px" %)**Register address**|(% style="width:75px" %)**Number of registers**|(% style="width:469px" %)**Content** | ||
464 | |(% style="width:71px" %)**0x4000**|(% style="width:75px" %)1|(% style="width:469px" %)Address of the BMS Logic device whose parameters should be in the input registers 0x2011-0x20C9 | ||
465 | |(% style="width:71px" %)**0x5100**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 466 | Software control of the "Battery cover" signal. Allowable values: |
467 | |||
468 | 0 – clear the signal; | ||
469 | |||
470 | 1 – set the signal; | ||
471 | |||
472 | 2-65535 – use the physical input "Battery cover". | ||
![]() |
5.3 | 473 | ))) |
474 | |(% style="width:71px" %)**0x5101**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 475 | Software control of the "Charger connected" signal. Allowable values: |
476 | |||
477 | 0 – clear the signal; | ||
478 | |||
479 | 1 – set the signal; | ||
480 | |||
481 | 2-65535 – use the physical input "Charger connected". | ||
![]() |
5.3 | 482 | ))) |
483 | |(% style="width:71px" %)**0x5102**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 484 | Software control of the "Power up/down request" signal. Allowable values: |
485 | |||
486 | 0 – clear the signal; | ||
487 | |||
488 | 1 – set the signal; | ||
489 | |||
490 | 2-65535 – use the physical input "Power down request". | ||
![]() |
5.3 | 491 | ))) |
492 | |(% style="width:71px" %)**0x5103**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 493 | Software control of the "Inhibit charging" signal. Allowable values: |
494 | |||
495 | 0 – clear the signal; | ||
496 | |||
497 | 1 – set the signal; | ||
498 | |||
499 | 2-65535 – use the physical input "Inhibit charging". | ||
![]() |
5.3 | 500 | ))) |
501 | |(% style="width:71px" %)**0x5104**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 502 | Software control of the "Inhibit discharging" signal. Allowable values: |
503 | |||
504 | 0 – clear the signal; | ||
505 | |||
506 | 1 – set the signal; | ||
507 | |||
508 | 2-65535 – use the physical input "Inhibit discharging". | ||
![]() |
5.3 | 509 | ))) |
510 | |(% style="width:71px" %)**0x5105**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 511 | Software control of the "CH contactor feedback" signal. Allowable values: |
512 | |||
513 | 0 – clear the signal; | ||
514 | |||
515 | 1 – set the signal; | ||
516 | |||
517 | 2-65535 – use the physical input "Charging contactor feedback". | ||
![]() |
5.3 | 518 | ))) |
519 | |(% style="width:71px" %)**0x5106**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 520 | Software control of the "DCH contactor feedback" signal. Allowable values: |
521 | |||
522 | 0 – clear the signal; | ||
523 | |||
524 | 1 – set the signal; | ||
525 | |||
526 | 2-65535 – use the physical input "Discharging contactor feedback". | ||
![]() |
5.3 | 527 | ))) |
528 | |(% style="width:71px" %)**0x5107**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 529 | Software control of the "Insulation status" signal. Allowable values: |
530 | |||
531 | 0 – clear the signal; | ||
532 | |||
533 | 1 – set the signal; | ||
534 | |||
535 | 2-65535 – use the physical input "Insulation status". | ||
![]() |
5.3 | 536 | ))) |
537 | |(% style="width:71px" %)**0x5108**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 538 | Software control of the "Charge request" signal. Allowable values: |
539 | |||
540 | 0 – clear the signal; | ||
541 | |||
542 | 1 – set the signal; | ||
543 | |||
544 | 2-65535 – use the physical input "Charge request". | ||
![]() |
5.3 | 545 | ))) |
546 | |(% style="width:71px" %)**0x5109**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 547 | Software control of the "Precharge request" signal. Allowable values: |
548 | |||
549 | 0 – clear the signal; | ||
550 | |||
551 | 1 – set the signal; | ||
552 | |||
553 | 2-65535 – use the physical input "Precharge request". | ||
![]() |
5.3 | 554 | ))) |
555 | |(% style="width:71px" %)**0x510A**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 556 | Software control of the "Discharge request" signal. Allowable values: |
557 | |||
558 | 0 – clear the signal; | ||
559 | |||
560 | 1 – set the signal; | ||
561 | |||
562 | 2-65535 – use the physical input "Discharge request". | ||
![]() |
5.3 | 563 | ))) |
564 | |(% style="width:71px" %)**0x510B**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 565 | Software control of the "PCH contactor feedback" signal. Allowable values: |
566 | |||
567 | 0 – clear the signal; | ||
568 | |||
569 | 1 – set the signal; | ||
570 | |||
571 | 2-65535 – use the physical input "PCH contactor feedback". | ||
![]() |
5.3 | 572 | ))) |
573 | |(% style="width:71px" %)**0x510C**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 574 | Software control of the "CH/DCH contactor feedback" signal. Allowable values: |
575 | |||
576 | 0 – clear the signal; | ||
577 | |||
578 | 1 – set the signal; | ||
579 | |||
580 | 2-65535 – use the physical input "CH/DCH contactor feedback". | ||
![]() |
5.3 | 581 | ))) |
582 | |(% style="width:71px" %)**0x510D**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 583 | Software control of the "Main contactor feedback" signal. Allowable values: |
584 | |||
585 | 0 – clear the signal; | ||
586 | |||
587 | 1 – set the signal; | ||
588 | |||
589 | 2-65535 – use the physical input "Main contactor feedback". | ||
![]() |
5.3 | 590 | ))) |
591 | |(% style="width:71px" %)**0x510E**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 592 | Software control of the "Interlock" signal. Allowable values: |
593 | |||
594 | 0 – clear the signal; | ||
595 | |||
596 | 1 – set the signal; | ||
597 | |||
598 | 2-65535 – use the physical input "Interlock". | ||
![]() |
5.3 | 599 | ))) |
600 | |(% style="width:71px" %)**0x510F**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 601 | Software control of the "Fuse 1" signal. Allowable values: |
602 | |||
603 | 0 – clear the signal; | ||
604 | |||
605 | 1 – set the signal; | ||
606 | |||
607 | 2-65535 – use the physical input "Fuse 1". | ||
![]() |
5.3 | 608 | ))) |
609 | |(% style="width:71px" %)**0x5110**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 610 | Software control of the "Fuse 2" signal. Allowable values: |
611 | |||
612 | 0 – clear the signal; | ||
613 | |||
614 | 1 – set the signal; | ||
615 | |||
616 | 2-65535 – use the physical input "Fuse 2". | ||
![]() |
5.3 | 617 | ))) |
618 | |(% style="width:71px" %)**0x5111**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 619 | Software control of the "Fuse 3" signal. Allowable values: |
620 | |||
621 | 0 – clear the signal; | ||
622 | |||
623 | 1 – set the signal; | ||
624 | |||
625 | 2-65535 – use the physical input "Fuse 3". | ||
![]() |
5.3 | 626 | ))) |
627 | |(% style="width:71px" %)**0x5112**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 628 | Software control of the "Circuit breaker status" signal. Allowable values: |
629 | |||
630 | 0 – clear the signal; | ||
631 | |||
632 | 1 – set the signal; | ||
633 | |||
634 | 2-65535 – use the physical input "Circuit breaker status". | ||
![]() |
5.3 | 635 | ))) |
636 | |(% style="width:71px" %)**0x5113**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 637 | Software control of the "Balancing request" signal. Allowable values: |
638 | |||
639 | 0 – clear the signal; | ||
640 | |||
641 | 1 – set the signal; | ||
642 | |||
643 | 2-65535 – use the physical input "Balancing request". | ||
![]() |
5.3 | 644 | ))) |
645 | |(% style="width:71px" %)**0x5114**|(% style="width:75px" %)1|(% style="width:469px" %)((( | ||
![]() |
1.1 | 646 | Software control of the "Close Main contactor" signal. Allowable values: |
647 | |||
648 | 0 – clear the signal; | ||
649 | |||
650 | 1 – set the signal; | ||
651 | |||
652 | 2-65535 – use the physical input "Close Main contactor". | ||
![]() |
5.3 | 653 | ))) |
![]() |
1.1 | 654 | |
655 |