Skip to main content

Manuel du compteur d’énergie VM-3P5A Victron

9. Annexe

Dans cette section​:

9.1. Modbus UDP Interface

This appendix describes the Modbus UDP interface implemented by the VM-3P75CT and the VM-3P5A energy meters. It is intended for integrators and developers who want to read measurement data or configuration data directly over the network, in addition to the standard GX device and VictronConnect integration described earlier in this manual.

9.2. Overview

Both the VM-3P75CT and the VM-3P5A communicate using Modbus over UDP rather than the more common Modbus TCP. The meter listens on UDP port 502 and only responds to Modbus Unit ID 1. All requests must use MBAP protocol ID 0. Requests that use a different protocol ID or a different Unit ID are ignored.

Modbus UDP uses the same request and response format as Modbus TCP, except that each message is carried in a single UDP datagram instead of a TCP stream. This keeps the protocol simple to implement, but it also means that individual requests or responses can be lost, delayed, or arrive out of order on a poor network. See Compatibility Notes (A.15) for guidance on handling this.

9.3. Connecting to the meter

To exchange Modbus UDP data with the meter:

  1. Connect the client device to the same IP network as the meter.

  2. Find the meter IP address. This can be done in one of two ways: look it up in the DHCP lease table of your router, or discover it using mDNS. The meter advertises itself under the service name _victron-energy-meter._udp.

  3. Send Modbus requests to meter_ip:502 over UDP, using Unit ID 1.

9.4. Supported function codes

The meter supports the following Modbus function codes. Any other function code results in exception 0x01 (Illegal Function).

Function code

Name

0x03

Read Holding Registers

9.5. Exception codes

Code

Meaning

0x01

Illegal Function

0x02

Illegal Data Address

0x03

Illegal Data Value

0x04

Slave Device Failure

9.6. Address space overview

Base address

Size (16 bit registers)

End address

Access

Description

0x1000

12

0x100B

Read

Device info block (product, serial number, firmware, hardware)

0x2000

38

0x2025

Read

Configuration block

0x3000

144

0x308F

Read

Main meter data map (measurements, energies, mirrors)

Note

A single request must stay fully inside one block. A request that spans more than one block is rejected with exception 0x02 (Illegal Data Address).

9.7. Data representation

  • Registers are 16 bit words.

  • 32 bit values are sent as two consecutive registers, high word first, then low word.

  • Text and byte array values are sent as raw bytes, packed two bytes per register.

  • Within each register, the byte order is big endian, as is standard for Modbus.

  • Some registers use fixed sentinel values to mark data that is invalid or not available, for example 0x7FFF, 0xFFFF, or 0x7FFFFFFF.

9.8. Function level limits

Function

Limit

0x03 Read Holding Registers

1 to 125 registers per request

9.9. Device info block (0x1000, read only)

Address

Words

Name

Type

Access

0x1000

1

Product ID

uint16

Read

0x1001

8

Serial number

string (16)

Read

0x1009

2

Firmware version

uint32

Read

0x100B

1

Hardware revision

uint16

Read

9.10. Configuration block (0x2000, read only)

Address

Words

Description

Logical type

Access

Notes

0x2000

1

Phase configuration

uint8 in uint16

Read

0 = SinglePhaseL1

1 = SinglePhaseL2 (if supported)

2 = SinglePhaseL3 (if supported)

3 = ThreePhase

4 = SplitPhase

0x2001

1

Meter role

uint8 in

uint16

Read

0 = Grid

1 = Pv

2 = Generator

3 = AcMeter

4 = EvCharger

5 = HeatPump

6 = WaterPump

7 = WaterHeater

0x2002

32

User description

string (up to 64 bytes)

Read

32 registers, packed byte by byte

0x2022

1

Meter position

uint8 in

uint16

Read

0 = AcInput1

1 = AcOutput

2 = AcInput2

0x2023

1

System instance

uint8 in

uint16

Read

Instance index, 0 to 255

0x2024

2

Meter capabilities

uint32 (high, low)

Read

bit0 grid meter role support

bit1 PV inverter role support

bit2 generator role support

bit3 AC meter role support

bit4 EV charger role support

bit5 heat pump role support

bit6 split phase support

bit7 water pump role support

bit8 water heater role support

bit9 PQ snapshots timeout support

bit10 UDP PQ snapshots support

bit11 single phase L2 support

bit12 single phase L3 support

9.11. Main meter data block (0x3000, read only)

This block contains the live measurements, energy totals, and several mirrored sections that exist for compatibility with existing client software.

9.11.1. Primary live data and totals (0x3000 to 0x303F)

Address

Words

Description

Type

Access

Notes

0x3000

1

L1 voltage

int16

Read

0.01 V

0x3001

1

L1 current

int16

Read

0.01 A - VM-3P75CT only

0x3002

2

L1 real power

int32 (high, low)

Read

1 W

0x3004

2

L1 apparent power

int32 (high, low)

Read

1 VA

0x3006

2

L1 forward energy

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x3008

2

L1 reverse energy

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x300A

4

Reserved

-

Read

Always 0

0x300E

2

Reserved

-

Read

Always 0

0x3010

1

L2 voltage

int16

Read

0.01 V

0x3011

1

L2 current

int16

Read

0.01 A - VM-3P75CT only

0x3012

2

L2 real power

int32 (high, low)

Read

1 W

0x3014

2

L2 apparent power

int32 (high, low)

Read

1 VA

0x3016

2

L2 forward energy

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x3018

2

L2 reverse energy

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x301A

4

Reserved

-

Read

Always 0

0x301E

2

Reserved

-

Read

Always 0

0x3020

1

L3 voltage

int16

Read

0.01 V

0x3021

1

L3 current

int16

Read

0.01 A - VM-3P75CT only

0x3022

2

L3 real power

int32 (high, low)

Read

1 W

0x3024

2

L3 apparent power

int32 (high, low)

Read

1 VA

0x3026

2

L3 forward energy

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x3028

2

L3 reverse energy

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x302A

4

Reserved

-

Read

Always 0

0x302E

2

Reserved

-

Read

Always 0

0x3030

2

Total real power

int32 (high, low)

Read

1 W

0x3032

1

Grid frequency

uint16

Read

0.01 Hz

0x3033

1

PE to N voltage

int16

Read

0.01 V

0x3034

2

Total forward energy

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x3036

2

Total reverse energy

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x3038

1

Error code

uint8 in uint16

Read

0x3039

1

Neutral current

int16

Read

0.01 A

0x303A

1

Total power factor

int16

Read

0.001

0x303B

1

Phase sequence

uint8 in

uint16

Read

0 = L1L2L3

1 = L1L3L2

0xFF = Invalid

0x303C

2

Alarms and warnings

uint32 (high, low)

Read

bits 1 to 0: phase rotation level

0 = Unsupported

1 = Ok

2 = Warning

3 = Alarm

Bits 31 to 2 reserved.

0x303E

1

Grid frequency (mHz resolution)

uint16

Read

0.001 Hz

0x303F

1

Reserved

-

Read

Always 0

9.11.2. Mirror and per phase auxiliary map (0x3040 to 0x305F)

Address

Words

Description

Type

Access

Notes

0x3040

1

L1 voltage (mirror)

int16

Read

0.01 V

0x3041

1

L1 current (mirror)

int16

Read

0.01 A - VM-3P75CT only

0x3042

2

L1 forward energy (mirror)

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x3044

2

L1 reverse energy (mirror)

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x3046

1

L1 line to line voltage

uint16

Read

0.01 V

0x3047

1

L1 power factor

int16

Read

0.001

0x3048

1

L2 voltage (mirror)

int16

Read

0.01 V

0x3049

1

L2 current (mirror)

int16

Read

0.01 A - VM-3P75CT only

0x304A

2

L2 forward energy (mirror)

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x304C

2

L2 reverse energy (mirror)

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x304E

1

L2 line to line voltage

uint16

Read

0.01 V

0x304F

1

L2 power factor

int16

Read

0.001

0x3050

1

L3 voltage (mirror)

int16

Read

0.01 V

0x3051

1

L3 current (mirror)

int16

Read

0.01 A - VM-3P75CT only

0x3052

2

L3 forward energy (mirror)

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x3054

2

L3 reverse energy (mirror)

uint32 (high, low)

Read

0.01 kWh (10 Wh)

0x3056

1

L3 line to line voltage

uint16

Read

0.01 V

0x3057

1

L3 power factor

int16

Read

0.001

0x3058

2

L1 high range current

int32 (high, low)

Read

0.01 A - VM-3P5A only

0x305A

2

L2 high range current

int32 (high, low)

Read

0.01 A - VM-3P5A only

0x305C

2

L3 high range current

int32 (high, low)

Read

0.01 A - VM-3P5A only

0x305E

2

Reserved

-

Read

Always 0

Addresses 0x3060 to 0x307F (32 registers) are reserved and always read back as 0.

9.11.3. Power mirror map (0x3080 to 0x308F)

Address

Words

Description

Type

Access

Notes

0x3080

2

Total real power (mirror)

int32 (high, low)

Read

1 W

0x3082

2

L1 real power (mirror)

int32 (high, low)

Read

1 W

0x3084

2

L1 apparent power (mirror)

int32 (high, low)

Read

1 VA

0x3086

2

L2 real power (mirror)

int32 (high, low)

Read

1 W

0x3088

2

L2 apparent power (mirror)

int32 (high, low)

Read

1 VA

0x308A

2

L3 real power (mirror)

int32 (high, low)

Read

1 W

0x308C

2

L3 apparent power (mirror)

int32 (high, low)

Read

1 VA

0x308E

2

Reserved

-

Read

Always 0

9.12. Recommended polling strategy

  1. Read the static identification data once, from the 0x1000 block.

  2. Read the configuration snapshot from the 0x2000 block on startup, and again whenever a configuration change is expected.

  3. Poll the live values in the 0x3000 block at a fixed interval suited to your application.

  4. Treat reserved addresses as always 0.

  5. Apply the scaling given in this appendix, for example 0.01 V, 0.01 A, 0.01 Hz, or 0.001 for power factor.

  6. Treat sentinel values and 0xFFFF fallback words as not available or invalid.

9.13. Important Compatibility Notes

  • This is UDP, so requests and responses are connectionless and may be lost or reordered on a poor network.

  • The register map includes mirrored addresses to remain compatible with existing client software.