Modbus TCP Register Map
Power Meter – Holding Registers (FC03)
1. Overview
This document describes the complete Modbus TCP Holding Register map (Function Code 03) for the Power Meter device.
It is intended for:
- System integrators
- SCADA / BMS engineers
- OEM partners
The register map exposes only instantaneous electrical quantities.
Energy counters are not implemented.
2. Communication Parameters
| Parameter | Value |
|---|---|
| Protocol | Modbus TCP |
| Function Code | 03 – Read Holding Registers |
| Addressing | 0-based |
| Unit ID (Slave ID) | 1 (default) |
| 32-bit value byte order | MSW first |
| Signed encoding | Two's complement |
3. Data Model
3.1 Data Types
| Type | Description |
|---|---|
| UINT16 | 16-bit unsigned integer |
| INT16 | 16-bit signed integer |
| UINT32 | 32-bit unsigned integer (2 registers) |
| INT32 | 32-bit signed integer (2 registers) |
All 32-bit values occupy 2 consecutive Holding registers with Most Significant Word (MSW) first.
3.2 Scaling Convention
The engineering value is obtained by applying the scale factor:
Engineering value = Raw value × Scale
| Quantity | Scale |
|---|---|
| Voltage | 0.01 |
| Current | 0.001 |
| Power factor | 0.001 |
| Frequency | 0.001 |
| THD | 0.01 |
| Temperature | 0.1 |
| Power (P, Q, S) | 1 |
| RSSI | 1 |
3.3 Special Values and Notes
- Power factor = 2000 → invalid / undefined value
- INT32 powers support import/export (± sign)
- RSSI expressed in dBm (typically negative values)
4. Holding Register Map (FC03)
4.1 Voltage
| Addr (HEX) | Addr (DEC) | Len | Name | Type | Scale | Unit | Description |
|---|---|---|---|---|---|---|---|
| 0x1000 | 4096 | 2 | Three-phase equivalent voltage | UINT32 | 0.01 | V | L-N average |
| 0x1002 | 4098 | 2 | Voltage L1-N | UINT32 | 0.01 | V | |
| 0x1004 | 4100 | 2 | Voltage L2-N | UINT32 | 0.01 | V | |
| 0x1006 | 4102 | 2 | Voltage L3-N | UINT32 | 0.01 | V | |
| 0x1008 | 4104 | 2 | Voltage L1-L2 | UINT32 | 0.01 | V | |
| 0x100A | 4106 | 2 | Voltage L2-L3 | UINT32 | 0.01 | V | |
| 0x100C | 4108 | 2 | Voltage L3-L1 | UINT32 | 0.01 | V |
4.2 Current
| Addr (HEX) | Addr (DEC) | Len | Name | Type | Scale | Unit | Description |
|---|---|---|---|---|---|---|---|
| 0x100E | 4110 | 2 | Three-phase equivalent current | UINT32 | 0.001 | A | Phase average |
| 0x1010 | 4112 | 2 | Current L1 | UINT32 | 0.001 | A | |
| 0x1012 | 4114 | 2 | Current L2 | UINT32 | 0.001 | A | |
| 0x1014 | 4116 | 2 | Current L3 | UINT32 | 0.001 | A |
4.3 Power Factor
| Addr (HEX) | Addr (DEC) | Len | Name | Type | Scale | Unit | Notes |
|---|---|---|---|---|---|---|---|
| 0x1016 | 4118 | 2 | Three-phase power factor | INT32 | 0.001 | — | 2000 = invalid |
| 0x1018 | 4120 | 2 | Power factor L1 | INT32 | 0.001 | — | 2000 = invalid |
| 0x101A | 4122 | 2 | Power factor L2 | INT32 | 0.001 | — | 2000 = invalid |
| 0x101C | 4124 | 2 | Power factor L3 | INT32 | 0.001 | — | 2000 = invalid |
4.4 Apparent Power (S)
| Addr (HEX) | Addr (DEC) | Len | Name | Type | Scale | Unit |
|---|---|---|---|---|---|---|
| 0x1026 | 4134 | 2 | Three-phase apparent power | UINT32 | 1 | VA |
| 0x1028 | 4136 | 2 | Apparent power L1 | UINT32 | 1 | VA |
| 0x102A | 4138 | 2 | Apparent power L2 | UINT32 | 1 | VA |
| 0x102C | 4140 | 2 | Apparent power L3 | UINT32 | 1 | VA |
4.5 Active Power (P)
| Addr (HEX) | Addr (DEC) | Len | Name | Type | Scale | Unit |
|---|---|---|---|---|---|---|
| 0x102E | 4142 | 2 | Three-phase active power | INT32 | 1 | W |
| 0x1030 | 4144 | 2 | Active power L1 | INT32 | 1 | W |
| 0x1032 | 4146 | 2 | Active power L2 | INT32 | 1 | W |
| 0x1034 | 4148 | 2 | Active power L3 | INT32 | 1 | W |
4.6 Reactive Power (Q)
| Addr (HEX) | Addr (DEC) | Len | Name | Type | Scale | Unit |
|---|---|---|---|---|---|---|
| 0x1036 | 4150 | 2 | Three-phase reactive power | INT32 | 1 | var |
| 0x1038 | 4152 | 2 | Reactive power L1 | INT32 | 1 | var |
| 0x103A | 4154 | 2 | Reactive power L2 | INT32 | 1 | var |
| 0x103C | 4156 | 2 | Reactive power L3 | INT32 | 1 | var |
4.7 Frequency
| Addr (HEX) | Addr (DEC) | Len | Name | Type | Scale | Unit |
|---|---|---|---|---|---|---|
| 0x1046 | 4166 | 2 | Three-phase average frequency | UINT32 | 0.001 | Hz |
| 0x1048 | 4168 | 2 | Frequency L1 | UINT32 | 0.001 | Hz |
| 0x104A | 4170 | 2 | Frequency L2 | UINT32 | 0.001 | Hz |
| 0x104C | 4172 | 2 | Frequency L3 | UINT32 | 0.001 | Hz |
4.8 Total Harmonic Distortion (THD)
| Addr (HEX) | Addr (DEC) | Len | Name | Type | Scale | Unit |
|---|---|---|---|---|---|---|
| 0x1082 | 4226 | 2 | THD voltage L1 | UINT32 | 0.01 | % |
| 0x1084 | 4228 | 2 | THD voltage L2 | UINT32 | 0.01 | % |
| 0x1086 | 4230 | 2 | THD voltage L3 | UINT32 | 0.01 | % |
| 0x1088 | 4232 | 2 | THD current L1 | UINT32 | 0.01 | % |
| 0x108A | 4234 | 2 | THD current L2 | UINT32 | 0.01 | % |
| 0x108C | 4236 | 2 | THD current L3 | UINT32 | 0.01 | % |
4.9 Temperature
| Addr (HEX) | Addr (DEC) | Len | Name | Type | Scale | Unit |
|---|---|---|---|---|---|---|
| 0x1090 | 4240 | 1 | AFE temperature | INT16 | 0.1 | °C |
| 0x1091 | 4241 | 1 | MCU temperature | INT16 | 0.1 | °C |
4.10 Diagnostics
| Addr (HEX) | Addr (DEC) | Len | Name | Type | Scale | Unit |
|---|---|---|---|---|---|---|
| 0x1092 | 4242 | 1 | WiFi RSSI | INT16 | 1 | dBm |
5. Read Example (mbpoll)
mbpoll -m tcp -a 1 -0 -r 4098 -B -c 1 -t 4:int 192.168.1.186
Protocol configuration: ModBus TCP
Slave configuration...: address = [1]
start reference = 4098, count = 1
Communication.........: 192.168.1.186, port 502, t/o 1.00 s, poll rate 1000 ms
Data type.............: 32-bit integer (big endian), output (holding) register table
-- Polling slave 1... Ctrl-C to stop)
[4098]: 23367
-- Polling slave 1... Ctrl-C to stop)
[4098]: 23373
-- Polling slave 1... Ctrl-C to stop)
[4098]: 23366
-- Polling slave 1... Ctrl-C to stop)
[4098]: 23367
-- Polling slave 1... Ctrl-C to stop)
[4098]: 23361
-- Polling slave 1... Ctrl-C to stop)
[4098]: 23356