ABB M2M Basic Modbus register map
Three-phase energy and power quality meter with RS485 Modbus RTU: three data banks (32-bit integers, floats and 16-bit values)
- Official
- 208 registers
- Modbus RTU
- Revision 3 · 2026-10-18
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
- 1default
- 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
Connection values are defaults: the device may be configured differently.
Map
- Registers
- 208 holding registers
- Groups
- 3
- Revision
- 3 · 2026-10-18
- Added
- ()
- File
- maps/abb/m2m-basic.mbmap.json · 32 KB · history
- SHA-256
- 42e2a5033c194d121512b2e42dedd918925ab29e6835cf815304707aa2abc5c7
- Manufacturer
- abb.com
Sources and notes
- M2M Basic - Communication Protocol · version V1.0 document 2CSG445012D0201, memory maps of section 2.2.3
Source: ABB, "M2M Basic - Communication Protocol", Technical specification V1.0, 2CSG445012D0201
- Only function code 03 (read holding registers) is supported, up to 125 registers per request. Slave address 1 to 247; baud rate 4800 to 38400, 8 data bits, 1 or 2 stop bits, even, odd or no parity (set on the instrument).
- The same measurements appear in three banks: scaled 32-bit integers from 4096, IEEE 754 floats from 12288 (no scaling needed) and 16-bit values from 80/100 expressed as a fraction of the rated value (16384 = rated value). Use the float bank when possible.
- The manual does not state the word order; values are read with the most significant word first.
- Energy values are integers holding the energy x 100 (Wh x 100, varh x 100 and so on), so the map scales them by 0.01.
- In the 16-bit bank the manual marks the formats with an asterisk it does not explain; the rated values come from the CT, VT and nominal power registers 80 to 88.
- Requesting registers past the end of the map returns zeros; starting at an address that is not listed returns exception 02.
| Area | Address | Name | Type | Access | Unit | Scale | Description |
|---|---|---|---|---|---|---|---|
| HR | 80 | uint16 | R | ||||
| HR | 81 | uint16 | R | Number of decimal places: 0, 1, 2 or 3 | |||
| HR | 82 | uint16 | R | ||||
| HR | 83 | uint16 | R | ||||
| HR | 84 | uint16 | R | Number of decimal places: 0, 1, 2 or 3 | |||
| HR | 85 | uint16 | R | ||||
| HR | 86 | uint16 | R | ||||
| HR | 87 | uint16 | R | Number of decimal places: 0, 1, 2 or 3 | |||
| HR | 88 | uint16 | R | ||||
| HR | 100 | uint16 | R | 16384 = rated value | |||
| HR | 101 | uint16 | R | 16384 = rated value | |||
| HR | 102 | uint16 | R | 16384 = rated value | |||
| HR | 103 | uint16 | R | 16384 = rated value | |||
| HR | 104 | uint16 | R | 16384 = rated value | |||
| HR | 105 | uint16 | R | 16384 = rated value | |||
| HR | 106 | uint16 | R | 16384 = rated value | |||
| HR | 107 | uint16 | R | 16384 = rated value | |||
| HR | 108 | uint16 | R | 16384 = rated value | |||
| HR | 109 | uint16 | R | 16384 = rated value | |||
| HR | 110 | int16 | R | 16384 = rated value | |||
| HR | 111 | int16 | R | 16384 = rated value | |||
| HR | 112 | int16 | R | 16384 = rated value | |||
| HR | 113 | int16 | R | 16384 = rated value | |||
| HR | 114 | int16 | R | 16384 = rated value | |||
| HR | 115 | int16 | R | 16384 = rated value | |||
| HR | 116 | int16 | R | 16384 = rated value | |||
| HR | 117 | int16 | R | 16384 = rated value | |||
| HR | 118 | uint16 | R | 16384 = rated value | |||
| HR | 119 | uint16 | R | 16384 = rated value | |||
| HR | 120 | uint16 | R | 16384 = rated value | |||
| HR | 121 | uint16 | R | 16384 = rated value | |||
| HR | 122 | int16 | R | 16384 = rated value | |||
| HR | 123 | int16 | R | 16384 = rated value | |||
| HR | 124 | int16 | R | 16384 = rated value | |||
| HR | 125 | int16 | R | 16384 = rated value | |||
| HR | 126 | uint16 | R | Hz | ×0.006103515625 | ||
| HR | 127 | uint16 | R | MWh | |||
| HR | 128 | uint16 | R | kWh | |||
| HR | 129 | uint16 | R | Wh | |||
| HR | 130 | uint16 | R | Mvarh | |||
| HR | 131 | uint16 | R | kvarh | |||
| HR | 132 | uint16 | R | varh | |||
| HR | 133 | uint16 | R | MWh | |||
| HR | 134 | uint16 | R | kWh | |||
| HR | 135 | uint16 | R | Wh | |||
| HR | 136 | uint16 | R | Mvarh | |||
| HR | 137 | uint16 | R | kvarh | |||
| HR | 138 | uint16 | R | varh | |||
| HR | 139 | uint16 | R | ° | ×0.02197265625 | ||
| HR | 140 | uint16 | R | ° | ×0.02197265625 | ||
| HR | 141 | uint16 | R | ° | ×0.02197265625 | ||
| HR | 142 | uint16 | R | ° | ×0.02197265625 | ||
| HR | 143 | uint16 | R | 16384 = rated value | |||
| HR | 144 | uint16 | R | 16384 = rated value | |||
| HR | 145 | uint16 | R | 16384 = rated value | |||
| HR | 146 | int16 | R | 16384 = rated value | |||
| HR | 147 | int16 | R | 16384 = rated value | |||
| HR | 148 | uint16 | R | 16384 = rated value | |||
| HR | 149 | uint16 | R | ||||
| HR | 150 | uint16 | R | ||||
| HR | 151 | uint16 | R | ||||
| HR | 152 | uint16 | R | ||||
| HR | 153 | uint16 | R | ||||
| HR | 154 | uint16 | R | ||||
| HR | 155 | int16 | R | 16384 = rated value | |||
| HR | 156 | int16 | R | 16384 = rated value | |||
| HR | 157 | int16 | R | 16384 = rated value | |||
| HR | 158 | int16 | R | 16384 = rated value | |||
| HR | 159 | uint16 | R | 16384 = rated value | |||
| HR | 160 | uint16 | R | 16384 = rated value | |||
| HR | 161 | uint16 | R | 16384 = rated value | |||
| HR | 162 | uint16 | R | 16384 = rated value | |||
| HR | 163 | uint16 | R | 16384 = rated value | |||
| HR | 164 | uint16 | R | 16384 = rated value | |||
| HR | 165 | uint16 | R | MVAh | |||
| HR | 166 | uint16 | R | kVAh | |||
| HR | 167 | uint16 | R | VAh | |||
| HR | 168 | uint16 | R | 16384 = rated value | |||
| HR | 169 | uint16 | R | 16384 = rated value | |||
| HR | 170 | uint16 | R | 16384 = rated value | |||
| HR | 4096 | uint32 ABCD | R | V | |||
| HR | 4098 | uint32 ABCD | R | V | |||
| HR | 4100 | uint32 ABCD | R | V | |||
| HR | 4102 | uint32 ABCD | R | V | |||
| HR | 4104 | uint32 ABCD | R | V | |||
| HR | 4106 | uint32 ABCD | R | V | |||
| HR | 4108 | uint32 ABCD | R | V | |||
| HR | 4110 | uint32 ABCD | R | A | ×0.001 | ||
| HR | 4112 | uint32 ABCD | R | A | ×0.001 | ||
| HR | 4114 | uint32 ABCD | R | A | ×0.001 | ||
| HR | 4116 | uint32 ABCD | R | A | ×0.001 | ||
| HR | 4118 | int32 ABCD | R | ×0.001 | |||
| HR | 4120 | int32 ABCD | R | ×0.001 | |||
| HR | 4122 | int32 ABCD | R | ×0.001 | |||
| HR | 4124 | int32 ABCD | R | ×0.001 | |||
| HR | 4126 | int32 ABCD | R | ×0.001 | |||
| HR | 4128 | int32 ABCD | R | ×0.001 | |||
| HR | 4130 | int32 ABCD | R | ×0.001 | |||
| HR | 4132 | int32 ABCD | R | ×0.001 | |||
| HR | 4134 | uint32 ABCD | R | VA |
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).