- Home
- Modbus register maps
- ABB
- EQ meter B21 (Modbus RTU)
Energy meter · Modbus register map
ABB EQ meter B21 (Modbus RTU) Modbus register map
Updated 16 October 2026
The B21 is ABB's single-phase EQ DIN-rail kWh meter. Versions with the RS485 port talk Modbus RTU using the same hex-addressed holding-register map as the rest of the EQ family. This map keeps the values that make sense on a single-phase meter: total, tariff, L1 and resettable energy, L1 voltage, current, power, angles and power factor, identification, clock status, conversion factors and resets.
This page lists 95 Modbus registers for the ABB EQ meter B21 (Modbus RTU) — 19 writable — with the table, 0-based wire address, data type, word order, scale, units and access of each, re-typed from ABB’s own free documentation (linked below) and checked against it.
- Manufacturer
- ABB
- Model
- EQ meter B21 (Modbus RTU)
- Equipment type
- Energy meter
- Registers
- 95 (19 writable)
- Transport
- Modbus RTU
- Default unit ID
- Not stated
- Documented addressing
- hexadecimal, 0-based
- 32-bit word order
- ABCD high word first (big-endian)
- Also known as
- B21, EQ B21
Integration notes: ABB EQ meter B21 (Modbus RTU)
Switch the RS485 port to Modbus in the meter menu, then poll holding registers with function 3 at their hex addresses. Energy is 64-bit (4 registers) with 0.01 resolution, high word first.
Minimum registers to map
Addresses are 0-based wire addresses. Enough to monitor and run the unit; map more as the job needs.
| Register | Name | Type | Why | Access |
|---|---|---|---|---|
| HR 20480 | Active import energy | UINT64 ABCD | Total active import energy | Read |
| HR 20484 | Active export energy | UINT64 ABCD | Total active export energy | Read |
| HR 23296 | Voltage L1-N | UINT32 ABCD | Voltage L1-N | Read |
| HR 23308 | Current L1 | UINT32 ABCD | Current L1 | Read |
| HR 23316 | Active power Total | INT32 ABCD | Total active power | Read |
| HR 23340 | Frequency | UINT16 | Frequency | Read |
| HR 35072 | Serial number | UINT32 ABCD | Serial number | Read |
Enable Modbus control & writes
In the meter menu, open the RS485 communication settings and set the protocol to Modbus (not EQ-Bus), then set baud rate, address and parity.
Byte order & addressing
- Hex wire addresses, no 40001 offset.
- Readable range 0x1000-0x8EFF, up to 125 registers per request.
- Missing quantities return FFFF / 7FFF... rather than an exception.
Network setup
- Address range 1-247.
- Modbus baud rates: 1200 to 115200; parity None, Odd or Even.
Watch out for
- Modbus is carried on the RS485 port; M-Bus variants use M-Bus instead.
- Writes to unsupported registers are not rejected; read back to confirm.
ABB EQ meter B21 (Modbus RTU) Modbus registers
Address = 0-based wire address (the documented number is shown under it when it differs) · Order: ABCD = high word first, CDAB = low word first · Scale: engineering value = raw × scale.
| Table | Address | Name | Description | Type | Order | Scale | Units | Access | Values / bits |
|---|---|---|---|---|---|---|---|---|---|
| HR | 4098doc 1002 | DMTME phase voltage L1-N | DMTME-compatible block, whole units. | UINT32 | ABCD | V | Read | ||
| HR | 4112doc 1010 | DMTME line current L1 | DMTME-compatible block. | UINT32 | ABCD | mA | Read | ||
| HR | 4120doc 1018 | DMTME power factor L1 | DMTME-compatible block; published as PF x 1000. | INT32 | ABCD | × 0.001 | Read | ||
| HR | 4136doc 1028 | DMTME apparent power L1 | DMTME-compatible block, whole units. | UINT32 | ABCD | VA | Read | ||
| HR | 4144doc 1030 | DMTME active power L1 | DMTME-compatible block, whole units. | UINT32 | ABCD | W | Read | ||
| HR | 4152doc 1038 | DMTME reactive power L1 | DMTME-compatible block, whole units. | UINT32 | ABCD | var | Read | ||
| HR | 4166doc 1046 | DMTME frequency | DMTME-compatible block. | UINT32 | ABCD | mHz | Read | ||
| HR | 4512doc 11A0 | DMTME current transformer ratio | DMTME-compatible block. | UINT32 | ABCD | Read | |||
| HR | 4514doc 11A2 | DMTME voltage transformer ratio | DMTME-compatible block. | UINT32 | ABCD | Read | |||
| HR | 20480doc 5000 | Active import energy | Total accumulator, 2 decimals. | UINT64 | ABCD | × 0.01 | kWh | Read | |
| HR | 20484doc 5004 | Active export energy | Total accumulator, 2 decimals. | UINT64 | ABCD | × 0.01 | kWh | Read | |
| HR | 20488doc 5008 | Active net energy | Import minus export, signed. | INT64 | ABCD | × 0.01 | kWh | Read | |
| HR | 20492doc 500C | Reactive import energy | Total accumulator, 2 decimals. | UINT64 | ABCD | × 0.01 | kvarh | Read | |
| HR | 20496doc 5010 | Reactive export energy | Total accumulator, 2 decimals. | UINT64 | ABCD | × 0.01 | kvarh | Read | |
| HR | 20500doc 5014 | Reactive net energy | Import minus export, signed. | INT64 | ABCD | × 0.01 | kvarh | Read | |
| HR | 20504doc 5018 | Apparent import energy | Total accumulator, 2 decimals. | UINT64 | ABCD | × 0.01 | kVAh | Read | |
| HR | 20508doc 501C | Apparent export energy | Total accumulator, 2 decimals. | UINT64 | ABCD | × 0.01 | kVAh | Read | |
| HR | 20512doc 5020 | Apparent net energy | Import minus export, signed. | INT64 | ABCD | × 0.01 | kVAh | Read | |
| HR | 20516doc 5024 | Active import CO2 | CO2 equivalent of imported active energy. | UINT64 | ABCD | × 0.001 | kg | Read | |
| HR | 20532doc 5034 | Active import currency | Cost equivalent of imported active energy. | UINT64 | ABCD | × 0.001 | currency | Read | |
| HR | 20848doc 5170 | Active import tariff 1 | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 20852doc 5174 | Active import tariff 2 | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 20856doc 5178 | Active import tariff 3 | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 20860doc 517C | Active import tariff 4 | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 20880doc 5190 | Active export tariff 1 | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 20884doc 5194 | Active export tariff 2 | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 20888doc 5198 | Active export tariff 3 | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 20892doc 519C | Active export tariff 4 | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 20912doc 51B0 | Reactive import tariff 1 | UINT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 20916doc 51B4 | Reactive import tariff 2 | UINT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 20920doc 51B8 | Reactive import tariff 3 | UINT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 20924doc 51BC | Reactive import tariff 4 | UINT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 20944doc 51D0 | Reactive export tariff 1 | UINT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 20948doc 51D4 | Reactive export tariff 2 | UINT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 20952doc 51D8 | Reactive export tariff 3 | UINT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 20956doc 51DC | Reactive export tariff 4 | UINT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 21600doc 5460 | Active import energy L1 | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 21612doc 546C | Active export energy L1 | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 21624doc 5478 | Active net energy L1 | INT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 21636doc 5484 | Reactive import energy L1 | UINT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 21648doc 5490 | Reactive export energy L1 | UINT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 21660doc 549C | Reactive net energy L1 | INT64 | ABCD | × 0.01 | kvarh | Read | ||
| HR | 21804doc 552C | Resettable active import | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 21808doc 5530 | Resettable active export | UINT64 | ABCD | × 0.01 | kWh | Read | ||
| HR | 21812doc 5534 | Resettable reactive import | Manual's Unit column prints 'kWh' (res. 0,01, 4 regs, Unsigned); listed as kvarh. | UINT64 | ABCD | × 0.01 | kvarh | Read | |
| HR | 21816doc 5538 | Resettable reactive export | Manual's Unit column prints 'kWh' (res. 0,01, 4 regs, Unsigned); listed as kvarh. | UINT64 | ABCD | × 0.01 | kvarh | Read | |
| HR | 23296doc 5B00 | Voltage L1-N | UINT32 | ABCD | × 0.1 | V | Read | ||
| HR | 23308doc 5B0C | Current L1 | UINT32 | ABCD | × 0.01 | A | Read | ||
| HR | 23316doc 5B14 | Active power Total | Signed; see note on the ~21 MW range limit. | INT32 | ABCD | × 0.01 | W | Read | |
| HR | 23318doc 5B16 | Active power L1 | INT32 | ABCD | × 0.01 | W | Read | ||
| HR | 23324doc 5B1C | Reactive power Total | Signed; see note on the ~21 MW range limit. | INT32 | ABCD | × 0.01 | var | Read | |
| HR | 23326doc 5B1E | Reactive power L1 | INT32 | ABCD | × 0.01 | var | Read | ||
| HR | 23332doc 5B24 | Apparent power Total | Signed; see note on the ~21 MW range limit. | INT32 | ABCD | × 0.01 | VA | Read | |
| HR | 23334doc 5B26 | Apparent power L1 | INT32 | ABCD | × 0.01 | VA | Read | ||
| HR | 23340doc 5B2C | Frequency | UINT16 | × 0.01 | Hz | Read | |||
| HR | 23341doc 5B2D | Phase angle power Total | Range -180 to +180. | INT16 | × 0.1 | ° | Read | ||
| HR | 23342doc 5B2E | Phase angle power L1 | Range -180 to +180. | INT16 | × 0.1 | ° | Read | ||
| HR | 23345doc 5B31 | Phase angle voltage L1 | INT16 | × 0.1 | ° | Read | |||
| HR | 23351doc 5B37 | Phase angle current L1 | INT16 | × 0.1 | ° | Read | |||
| HR | 23354doc 5B3A | Power factor Total | Range -1.000 to +1.000. | INT16 | × 0.001 | Read | |||
| HR | 23355doc 5B3B | Power factor L1 | Range -1.000 to +1.000. | INT16 | × 0.001 | Read | |||
| HR | 23358doc 5B3E | Current quadrant Total | UINT16 | Read | 1 = Quadrant 1; 2 = Quadrant 2; 3 = Quadrant 3; 4 = Quadrant 4 | ||||
| HR | 23359doc 5B3F | Current quadrant L1 | UINT16 | Read | 1 = Quadrant 1; 2 = Quadrant 2; 3 = Quadrant 3; 4 = Quadrant 4 | ||||
| HR | 25344doc 6300 | Output 1 | UINT16 | Read/write | 0 = OFF; 1 = ON | ||||
| HR | 25345doc 6301 | Output 2 | UINT16 | Read/write | 0 = OFF; 1 = ON | ||||
| HR | 35072doc 8900 | Serial number | UINT32 | ABCD | Read | ||||
| HR | 35080doc 8908 | Meter firmware version | ASCII, e.g. 1.0.0; unused bytes are 0. | STRING[16] | Read | ||||
| HR | 35088doc 8910 | Modbus mapping version | High byte = major, low byte = minor version. | UINT16 | Read | ||||
| HR | 35168doc 8960 | Type designation | ASCII, 12 characters including null terminator. | STRING[12] | Read | ||||
| HR | 35331doc 8A03 | Day of week | 1-7, Monday = 1. | UINT16 | Read | ||||
| HR | 35332doc 8A04 | DST active | UINT16 | Read | 0 = DST inactive; 1 = DST active | ||||
| HR | 35333doc 8A05 | Day type | 0-3 means day type 1-4. | UINT16 | Read | ||||
| HR | 35334doc 8A06 | Season | 0-3 means season 1-4. | UINT16 | Read | ||||
| HR | 35335doc 8A07 | Current tariff | Active tariff, 1 to 4. | UINT16 | Read/write | ||||
| HR | 35375doc 8A2F | Power fail counter | UINT16 | Read | |||||
| HR | 35400doc 8A48 | Reset counter active energy import | Times the resettable register was cleared. | UINT64 | ABCD | Read | |||
| HR | 35404doc 8A4C | Reset counter active energy export | UINT64 | ABCD | Read | ||||
| HR | 35408doc 8A50 | Reset counter reactive energy import | UINT64 | ABCD | Read | ||||
| HR | 35412doc 8A54 | Reset counter reactive energy export | UINT64 | ABCD | Read | ||||
| HR | 35844doc 8C04 | CT ratio numerator | UINT32 | ABCD | Read/write | ||||
| HR | 35846doc 8C06 | VT ratio numerator | UINT32 | ABCD | Read/write | ||||
| HR | 35848doc 8C08 | CT ratio denominator | UINT32 | ABCD | Read/write | ||||
| HR | 35850doc 8C0A | VT ratio denominator | UINT32 | ABCD | Read/write | ||||
| HR | 36064doc 8CE0 | CO2 conversion factor | UINT32 | ABCD | × 0.001 | kg/kWh | Read/write | ||
| HR | 36066doc 8CE2 | Currency conversion factor | UINT32 | ABCD | × 0.01 | Currency/kWh | Read/write | ||
| HR | 36068doc 8CE4 | LED source | UINT16 | Read/write | 0 = Active energy; 1 = Reactive energy | ||||
| HR | 36069doc 8CE5 | Number of elements | Measuring elements, 1 to 3. | UINT16 | Read/write | ||||
| HR | 36608doc 8F00 | Reset power fail counter | Write 1 to reset. | UINT16 | Write | ||||
| HR | 36613doc 8F05 | Reset power outage time | Write 1 to reset. | UINT16 | Write | ||||
| HR | 36635doc 8F1B | Reset resettable active energy import | Write 1 to reset. | UINT16 | Write | ||||
| HR | 36636doc 8F1C | Reset resettable active energy export | Write 1 to reset. | UINT16 | Write | ||||
| HR | 36637doc 8F1D | Reset resettable reactive energy import | Write 1 to reset. | UINT16 | Write | ||||
| HR | 36638doc 8F1E | Reset resettable reactive energy export | Write 1 to reset. | UINT16 | Write | ||||
| HR | 36639doc 8F1F | Reset previous values | Write 1 to reset. | UINT16 | Write | ||||
| HR | 36640doc 8F20 | Reset demand | Write 1 to reset. | UINT16 | Write |
Notes on this map
- Addresses are printed in hexadecimal exactly as sent on the bus (the manual says not to subtract 40000 or 1). All data is in holding registers, read with function 3 and written with function 6 or 16.
- Multi-register values are big-endian: the most significant byte is the high byte of the lowest register, so 32-bit and 64-bit values are ABCD (high word first).
- Unsupported quantities still answer, but with an 'invalid' marker: FFFF in every register for unsigned values, and the largest positive value (7FFF, 7FFFFFFF ...) for signed values.
- Instantaneous power registers are signed 32-bit with 2 decimals, which caps them near +/-21 MW; for larger systems the manual points to the DMTME-compatible block, which reports whole watts.
- Built from the current manual revision. The 2013 Revision A also listed input states/counters, error/warning/alarm flag words, load-profile and log resets; the current revision no longer lists them, so they are left out.
- Left out: the DMTME-block energy registers (103E, 1040) whose unit is printed as 'Wh*100' / 'VArh*100', which does not make the scaling direction unambiguous.
- Left out: event-log, alarm-configuration, pulse-output and tariff-configuration register groups, which work through selector/header registers or OBIS-coded multi-register fields rather than simple point reads.
- The B21 manual reprints the full EQ mapping, including L2/L3, line-to-line and 3-phase quantities; those are left out here because a single-phase meter returns the 'invalid' marker for them.
- Outputs 1 and 2 (6300, 6301) are the only Modbus I/O registers listed. The reset table still lists input counter / stored-state resets for inputs 1-4 (8F0B-8F16), but no input registers are mapped, so those resets are left out.
- Left out: date/time (8A00) and power outage time (8A39), which pack bytes across three registers rather than a standard data type.
- Resettable reactive energy import/export (5534, 5538): the manual's Unit column prints 'kWh' for these two rows, while the quantity name is reactive energy. Size (4 registers), resolution (0,01) and data type (Unsigned) are printed unambiguously and match the other reactive registers, so they are kept and listed as kvarh; the unit is the only misprint.
Check it against the live device. A register map tells you what the controller can expose; the unit in front of you may differ by firmware or options. Read a few registers and compare them with the unit’s own display; for a 32-bit value the float and byte-order decoder shows all four word orders at once, so a wrong word order or scale is obvious. New to this? Read what a register map is and why addresses are off by one.
Questions about the ABB EQ meter B21 (Modbus RTU)
What Modbus registers does the ABB EQ meter B21 (Modbus RTU) have?
This map lists 95 registers: 95 holding registers. 19 of them can be written. Registers vary with firmware, options and configuration, so confirm against the device.
Are the ABB EQ meter B21 (Modbus RTU) Modbus addresses 0-based or 1-based?
The manufacturer's document numbers registers hexadecimal, 0-based. Every address on this page is the 0-based wire address you put in the request; the documented number is shown under it where it differs. Start registers are printed in hex exactly as sent on the bus (5000 = 0x5000); the manual says not to subtract 40000 or 1. Function 3 reads, 6/16 write.
What byte order does the ABB EQ meter B21 (Modbus RTU) use for 32-bit values?
Multi-register values in this map use ABCD (high word first (big-endian)). Set your client to this order for every 32/64-bit value in the table.
What are the minimum Modbus registers to integrate the ABB EQ meter B21 (Modbus RTU)?
Start with HR 20480 Active import energy (Total active import energy); HR 20484 Active export energy (Total active export energy); HR 23296 Voltage L1-N (Voltage L1-N); HR 23308 Current L1 (Current L1); HR 23316 Active power Total (Total active power); HR 23340 Frequency (Frequency); HR 35072 Serial number (Serial number).
How do I enable Modbus control of the ABB EQ meter B21 (Modbus RTU)?
In the meter menu, open the RS485 communication settings and set the protocol to Modbus (not EQ-Bus), then set baud rate, address and parity.
Where is the official ABB EQ meter B21 (Modbus RTU) Modbus documentation?
The source is B21 User Manual (2CMC485004M0201 Revision D), revision 2025-11-07, published free by ABB at https://search.abb.com/library/Download.aspx?DocumentID=2CMC485004M0201&LanguageCode=en&DocumentPartId=&Action=Launch.
More ABB Modbus register maps
- Variable frequency drive
ABB ACH580 HVAC drive (embedded Modbus RTU)
ACH580 drives running the ACH580 HVAC control program, embedded fieldbus (EFB) set to Modbus RTU, addressing mode 0 (default).
Also known as: ACH580-01, ACH580-07, ACH580-31, ACH580-34, ACH580 HVAC control program - Variable frequency drive
ABB ACQ580 water and wastewater drive (embedded Modbus RTU)
ACQ580 drives running the ACQ580 pump control program, embedded fieldbus (EFB) Modbus RTU, addressing mode 0 (default); firmware manual 3AXD50000035867 Rev H.
Also known as: ACQ580-01, ACQ580-04, ACQ580-07, ACQ580-31, ACQ580-34, ACQ580 pump control program - Variable frequency drive
ABB ACS355 machinery drive (embedded Modbus RTU)
ACS355 drives with firmware 5.110 or later using the embedded fieldbus (Modbus RTU) over an FMBA-01 adapter on terminal X3 (EIA-485) or the panel port (RS-232).
Also known as: ACS355-01E, ACS355-03E, ACS355-01U, ACS355-03U, ACS355 with FMBA-01 - Variable frequency drive
ABB ACS480 general purpose drive (embedded Modbus RTU)
ACS480 drives running the ACS480 standard control program, embedded fieldbus (EFB) Modbus RTU, addressing mode 0 (default); firmware manual 3AXD50000047399 Rev G.
Also known as: ACS480-04, ACS480 standard control program - Variable frequency drive
ABB ACS580 general purpose drive (embedded Modbus RTU)
ACS580 drives running the ACS580 standard control program, embedded fieldbus (EFB) Modbus RTU, addressing mode 0 (default).
Also known as: ACS580-01, ACS580-04, ACS580-07, ACS580 standard control program - Variable frequency drive
ABB ACS880 industrial drive, primary control program (embedded Modbus RTU)
ACS880 drives running the primary control program (AINLX) 3.4x or later, embedded fieldbus (EFB) Modbus RTU on terminal XD2D, 58.33 Addressing mode = Mode 0 (default).
Also known as: ACS880-01, ACS880-04, ACS880-07, ACS880-11, ACS880-17, ACS880-31, ACS880-37, AINLX, ACS880 primary control program - Energy meter
ABB EQ meter B23 / B24 (Modbus RTU)
ABB EQ B23 (direct, 65 A) and B24 (CT-connected) three-phase DIN meters fitted with the RS485 interface set to Modbus.
Also known as: B23, B24, EQ B23, EQ B24 - Power meter (network analyzer)
ABB M4M 20 / M4M 30 network analyzer
ABB M4M 20 and M4M 30 network analyzers, Modbus RTU and Modbus TCP versions, map v1.3O; items marked M4M 30 only are absent on M4M 20.
Also known as: M4M 20, M4M 30, M4M 20 Modbus, M4M 30 Modbus, M4M 20 Ethernet, M4M 30 Ethernet, M4M 20 I/O, M4M 30 I/O, M4M 2X, M4M 30-M, M4M 32
Source: B21 User Manual · 2CMC485004M0201 Revision D · rev. 2025-11-07. Register numbers, types, scaling and units are reproduced as published; descriptions are our own.