ABB B21 Modbus register map
Single-phase DIN rail energy meter of the EQ B-series (direct connected, 65 A), Modbus RTU over RS485
- Official
- 89 registers
- Modbus RTU
- Revision 3 · 2026-10-18
- Identity: firmware, serial number
Official: Written from the manufacturer's documentation, but not tested on a device yet. Check the map against the manufacturer's documentation before you write to a live device. Tested it? Report a test.
Communication
- Protocol
- Modbus RTU
- Unit ID
- 1
- Serial
- 9600 8E1 · 9600 baud, 8 data bits, even parity, 1 stop bit defaults
- Byte / word order
- ABCD · bytes big-endian, words high first
- Addresses
- 0-based
- Max read
- 125 registers per request
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 89 holding registers
- Groups
- 15
- Translation tables
- 1
- Revision
- 3 · 2026-10-18
- Added
- ()
- File
- maps/abb/b21.mbmap.json · 17 KB · history
- SHA-256
- 8f6e687184200b1c612c26b62cdd972579d7f4442135c719a12bc16e65a1a090
- Manufacturer
- abb.com
Device identity
What a tool can read to check that this map fits the connected device (SPEC.md section 4.7). Registers with a role are read like any other register.
| Role | Register | Address | Type | Values |
|---|---|---|---|---|
| Serial number | Serial number | holding 35072 | uint32 ABCD | |
| Firmware | Firmware version | holding 35080 | string[8] |
Sources and notes
- B21 User Manual · version 2CMC485004M0201 revision D, 2025-11-07
Source: ABB, "B21 User Manual", 2CMC485004M0201 revision D (2025-11-07); https://library.abb.com/d/2CMC485004M0201
- ABB EQ meter B21 (single phase, direct connected, 65 A) with RS485, protocol set to Modbus.
- Addresses are exactly as sent on the bus. Readable range is 0x1000-0x8EFF; any block of 1-125 registers works.
- The manual lists the common EQ mapping; only the single-phase quantities are in this map. The others read as "invalid".
- Quantities a model does not have read as "invalid": all FFFF for unsigned, the largest positive value for signed.
- Outputs, tariffs, resettable registers, CO2 and currency depend on the variant (Steel, Bronze, Silver). Steel meters (B21 1xx-xxx) only have import registers.
- The manual does not state the factory RS485 settings; check them on the meter display.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| HR | 20480 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 20484 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 20488 | int64 ABCD | R | kWh | ×0.01 | Import minus export | |
| HR | 20492 | uint64 ABCD | R | kvarh | ×0.01 | ||
| HR | 20496 | uint64 ABCD | R | kvarh | ×0.01 | ||
| HR | 20500 | int64 ABCD | R | kvarh | ×0.01 | ||
| HR | 20504 | uint64 ABCD | R | kVAh | ×0.01 | ||
| HR | 20508 | uint64 ABCD | R | kVAh | ×0.01 | ||
| HR | 20512 | int64 ABCD | R | kVAh | ×0.01 | ||
| HR | 20516 | uint64 ABCD | R | kg | ×0.001 | Uses the CO2 conversion factor at 0x8CE0 | |
| HR | 20532 | uint64 ABCD | R | ×0.001 | Uses the currency conversion factor at 0x8CE2 | ||
| HR | 20848 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 20852 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 20856 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 20860 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 20880 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 20884 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 20888 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 20892 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 20912 | uint64 ABCD | R | kvarh | ×0.01 | ||
| HR | 20916 | uint64 ABCD | R | kvarh | ×0.01 | ||
| HR | 20920 | uint64 ABCD | R | kvarh | ×0.01 | ||
| HR | 20924 | uint64 ABCD | R | kvarh | ×0.01 | ||
| HR | 20944 | uint64 ABCD | R | kvarh | ×0.01 | ||
| HR | 20948 | uint64 ABCD | R | kvarh | ×0.01 | ||
| HR | 20952 | uint64 ABCD | R | kvarh | ×0.01 | ||
| HR | 20956 | uint64 ABCD | R | kvarh | ×0.01 | ||
| HR | 21804 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 21808 | uint64 ABCD | R | kWh | ×0.01 | ||
| HR | 21812 | uint64 ABCD | R | kvarh | ×0.01 | The manual's table gives kWh; kvarh assumed | |
| HR | 21816 | uint64 ABCD | R | kvarh | ×0.01 | The manual's table gives kWh; kvarh assumed | |
| HR | 23296 | uint32 ABCD | R | V | ×0.1 | ||
| HR | 23308 | uint32 ABCD | R | A | ×0.01 | ||
| HR | 23316 | int32 ABCD | R | W | ×0.01 | Limited to about ±21 MW; use the DMTME block above that | |
| HR | 23318 | int32 ABCD | R | W | ×0.01 | ||
| HR | 23324 | int32 ABCD | R | var | ×0.01 | ||
| HR | 23326 | int32 ABCD | R | var | ×0.01 | ||
| HR | 23332 | int32 ABCD | R | VA | ×0.01 | ||
| HR | 23334 | int32 ABCD | R | VA | ×0.01 | ||
| HR | 23340 | uint16 | R | Hz | ×0.01 | ||
| HR | 23341 | int16 | R | ° | ×0.1 | -180 to +180 | |
| HR | 23342 | int16 | R | ° | ×0.1 | ||
| HR | 23345 | int16 | R | ° | ×0.1 | ||
| HR | 23351 | int16 | R | ° | ×0.1 | ||
| HR | 23354 | int16 | R | ×0.001 | |||
| HR | 23355 | int16 | R | ×0.001 | |||
| HR | 23358 | uint16 | R | 1-4 | |||
| HR | 23359 | uint16 | R | 1-4 | |||
| HR | 4142 | uint32 ABCD | R | W | No decimals; for powers above ±21 MW | ||
| HR | 4150 | uint32 ABCD | R | var | No decimals | ||
| HR | 4134 | uint32 ABCD | R | VA | No decimals | ||
| HR | 25344 | uint16 | RW | ||||
| HR | 25345 | uint16 | RW | ||||
| HR | 35072 | uint32 ABCD | R | ||||
| HR | 35080 | string[8] | R | Digits separated by periods, e.g. 1.0.0 | |||
| HR | 35088 | uint16 bits 8–15 | R | ||||
| HR | 35088 | uint16 bits 0–7 | R | ||||
| HR | 35168 | string[6] | R | e.g. B21 312-100 | |||
| HR | 35328 | uint16 bits 8–15 | R | Year byte of the date/time; the date/time is written as one 3-register value, not field by field | |||
| HR | 35328 | uint16 bits 0–7 | R | ||||
| HR | 35329 | uint16 bits 8–15 | R | ||||
| HR | 35329 | uint16 bits 0–7 | R | ||||
| HR | 35330 | uint16 bits 8–15 | R | ||||
| HR | 35330 | uint16 bits 0–7 | R | ||||
| HR | 35331 | uint16 | R | ||||
| HR | 35332 | uint16 | R | ||||
| HR | 35333 | uint16 | R | 0-3 = day type 1-4 | |||
| HR | 35334 | uint16 | R | 0-3 = season 1-4 | |||
| HR | 35335 | uint16 | RW | ||||
| HR | 35375 | uint16 | R | ||||
| HR | 35386 | uint16 bits 0–7 | R | h | Duration of the last outage; its days (3 bytes from 0x8A39) are not in this map | ||
| HR | 35387 | uint16 bits 8–15 | R | min | |||
| HR | 35387 | uint16 bits 0–7 | R | s | |||
| HR | 35400 | uint64 ABCD | R | Times the resettable register was reset | |||
| HR | 35404 | uint64 ABCD | R | ||||
| HR | 35408 | uint64 ABCD | R | ||||
| HR | 35412 | uint64 ABCD | R | ||||
| HR | 36064 | uint32 ABCD | RW | kg/kWh | ×0.001 | ||
| HR | 36066 | uint32 ABCD | RW | ×0.01 | Currency per kWh | ||
| HR | 36068 | uint16 | RW | ||||
| HR | 36069 | uint16 | R | 1-3 | |||
| HR | 36608 | uint16 | W | ||||
| HR | 36613 | uint16 | W | ||||
| HR | 36635 | uint16 | W | ||||
| HR | 36636 | uint16 | W | ||||
| HR | 36637 | uint16 | W | ||||
| HR | 36638 | uint16 | W | ||||
| HR | 36639 | uint16 | W | ||||
| HR | 36640 | uint16 | W |
No registers match
Try part of the name, an address (decimal or 0x hex) or clear the filters.
Help improve this map
- I tested it on a deviceReport whether it worked, even if you did not write the map.
- Suggest a correctionEdit the file on GitHub; it opens a pull request.
- Report a problemA wrong address, type, scale or byte order.
- Read the formatWhat each key of the file means (SPEC.md).