Skip to content

Modbus TCP Register Map

Power Meter – Holding Registers (FC03)


1. Overview

This document describes the Modbus TCP Holding Register map (Function Code 03) for the Power Meter device. It is intended for system integrators, SCADA/BMS engineers, and OEM partners.

The register map provides instantaneous electrical measurements only. Energy counters are not implemented.


2. Communication Parameters

ParameterValue
ProtocolModbus TCP
Function Code03 – Read Holding Registers
Addressing0-based
Unit ID1 (default)
32-bit Byte OrderMSW first
Signed EncodingTwo’s complement

3. Data Model

3.1 Data Types

TypeDescription
UINT16Unsigned 16-bit integer
INT16Signed 16-bit integer
UINT32Unsigned 32-bit integer (2 registers)
INT32Signed 32-bit integer (2 registers)

All 32-bit values are encoded using two consecutive 16-bit registers, with Most Significant Word first.


3.2 Scaling Convention

Engineering values are calculated using a scale factor:

Engineering value = Register value × Scale
QuantityScale
Voltage0.01
Current0.001
Power Factor0.001
Frequency0.001
THD0.01
Temperature0.1
Power (P, Q, S)1
RSSI1

3.3 Special Values

  • Power Factor = 2000 → value invalid / undefined
  • Active and reactive power values support import/export
  • RSSI values are expressed in dBm

4. Holding Registers Map (FC03)

4.1 Voltages

Addr (HEX)Addr (DEC)LenNameTypeScaleUnitDescription
0x100040962Voltage 3PH equivalentUINT320.01VAverage L-N
0x100240982Voltage L1-NUINT320.01V
0x100441002Voltage L2-NUINT320.01V
0x100641022Voltage L3-NUINT320.01V
0x100841042Voltage L1-L2UINT320.01V
0x100A41062Voltage L2-L3UINT320.01V
0x100C41082Voltage L3-L1UINT320.01V

4.2 Currents

Addr (HEX)Addr (DEC)LenNameTypeScaleUnitDescription
0x100E41102Current 3PH equivalentUINT320.001AAverage phases
0x101041122Current L1UINT320.001A
0x101241142Current L2UINT320.001A
0x101441162Current L3UINT320.001A

4.3 Power Factor

Addr (HEX)Addr (DEC)LenNameTypeScaleUnitNotes
0x101641182Power Factor 3PHINT320.0012000 = invalid
0x101841202Power Factor L1INT320.0012000 = invalid
0x101A41222Power Factor L2INT320.0012000 = invalid
0x101C41242Power Factor L3INT320.0012000 = invalid

4.4 Apparent Power (S)

Addr (HEX)Addr (DEC)LenNameTypeScaleUnit
0x102641342Apparent Power 3PHUINT321VA
0x102841362Apparent Power L1UINT321VA
0x102A41382Apparent Power L2UINT321VA
0x102C41402Apparent Power L3UINT321VA

4.5 Active Power (P)

Addr (HEX)Addr (DEC)LenNameTypeScaleUnit
0x102E41422Active Power 3PHINT321W
0x103041442Active Power L1INT321W
0x103241462Active Power L2INT321W
0x103441482Active Power L3INT321W

4.6 Reactive Power (Q)

Addr (HEX)Addr (DEC)LenNameTypeScaleUnit
0x103641502Reactive Power 3PHINT321var
0x103841522Reactive Power L1INT321var
0x103A41542Reactive Power L2INT321var
0x103C41562Reactive Power L3INT321var

4.7 Frequency

Addr (HEX)Addr (DEC)LenNameTypeScaleUnit
0x104641662Frequency 3PH averageUINT320.001Hz
0x104841682Frequency L1UINT320.001Hz
0x104A41702Frequency L2UINT320.001Hz
0x104C41722Frequency L3UINT320.001Hz

4.8 Total Harmonic Distortion (THD)

Addr (HEX)Addr (DEC)LenNameTypeScaleUnit
0x108242262THD Voltage L1UINT320.01%
0x108442282THD Voltage L2UINT320.01%
0x108642302THD Voltage L3UINT320.01%
0x108842322THD Current L1UINT320.01%
0x108A42342THD Current L2UINT320.01%
0x108C42362THD Current L3UINT320.01%

4.9 Temperatures

Addr (HEX)Addr (DEC)LenNameTypeScaleUnit
0x109042401AFE TemperatureINT160.1°C
0x109142411MCU TemperatureINT160.1°C

4.10 Diagnostics

Addr (HEX)Addr (DEC)LenNameTypeScaleUnit
0x109242421WiFi RSSIINT161dBm

5. Example Read (mbpoll)

bash
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