Passa al contenuto principale
Versione: v2 (latest)

Mappa Registri Modbus TCP

RE-431-D — Holding Registers (FC03)


1. Panoramica

Questo documento descrive la mappa completa dei registri Holding Modbus TCP (Function Code 03) del dispositivo RE-431-D di Renua-SB Srl.

È destinato a:

  • system integrator
  • ingegneri SCADA / BMS
  • partner OEM

La mappa registri espone:

  • grandezze elettriche istantanee (tensioni, correnti, potenze, frequenza, THD, fattore di potenza)
  • contatori di energia ad alta risoluzione (64-bit) e formato compatto (32-bit)
  • identificazione del dispositivo (vendor, modello, firmware, serial number)
  • diagnostica (temperature interne, RSSI WiFi)

2. Parametri di comunicazione

2.1 Modbus TCP

ParametroValore
ProtocolloModbus TCP
Function Code03 – Read Holding Registers
Porta TCP502
Unit ID (Slave ID)1 (fisso)
Indirizzamento0-based
Byte order valori 32-bitMSW first (Big Endian)
Codifica signedTwo's complement
Max registri per request125
Client TCP simultanei2 max

2.2 Modbus RTU (variante RE-431-D-RS485)

ParametroValore
ProtocolloModbus RTU
Slave ID1–247 (default 1, configurabile)
Baud rate9600, 19200 (default), 38400, 57600, 115200
Parità8N1 (default), 8E1, 8O1

La configurazione del bus RTU è accessibile da web admin (Settings → Modbus) o menu fisico del dispositivo.


3. Modello dati

3.1 Tipi di dato

TipoBytesRegistriDescrizione
UINT1621Intero senza segno a 16 bit
INT1621Intero con segno a 16 bit
UINT3242Intero senza segno a 32 bit
INT3242Intero con segno a 32 bit
UINT6484Intero senza segno a 64 bit
STRINGvariavariaASCII, 2 char/registro, MSB first

Tutti i valori a 32 e 64 bit occupano registri Holding consecutivi con Most Significant Word (MSW) per primo.


3.2 Convenzione di scaling

Il valore ingegneristico si ottiene applicando il fattore di scala:

Valore ingegneristico = Valore letto × Scala
GrandezzaScalaUnità SI
Tensione0.01V
Corrente0.001A
Frequenza0.001Hz
Fattore di potenza0.001
Potenza attiva (P)1W
Potenza reattiva (Q)1var
Potenza apparente (S)1VA
THD0.01%
Temperatura0.1°C
RSSI1dBm
Energia 64-bit (cento-Wh)0.00001kWh
Energia 32-bit (deci-kWh)0.1kWh

3.3 Valori speciali e note

  • Fattore di potenza = 2000 → valore non valido / indefinito (corrente sotto la soglia minima di misura)
  • Le potenze attive e reattive (INT32) supportano import/export con il segno (±)
    • P > 0: import (consumo dalla rete)
    • P < 0: export (immissione in rete)
    • Q > 0: induttivo
    • Q < 0: capacitivo
  • RSSI espresso in dBm (valori tipicamente negativi, range −100..−30)
  • I contatori di energia sono persistenti (non si azzerano al riavvio del dispositivo)

4. Mappa registri Holding (FC03)


4.1 Tensioni

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnitàDescrizione
0x100040962Tensione equivalente trifaseUINT320.01VMedia L-N
0x100240982Tensione L1-NUINT320.01VFase-Neutro
0x100441002Tensione L2-NUINT320.01VFase-Neutro
0x100641022Tensione L3-NUINT320.01VFase-Neutro
0x100841042Tensione L1-L2UINT320.01VConcatenata
0x100A41062Tensione L2-L3UINT320.01VConcatenata
0x100C41082Tensione L3-L1UINT320.01VConcatenata

4.2 Correnti

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnitàDescrizione
0x100E41102Corrente equivalente trifaseUINT320.001AMedia fasi
0x101041122Corrente L1UINT320.001A
0x101241142Corrente L2UINT320.001A
0x101441162Corrente L3UINT320.001A

4.3 Fattore di potenza

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnitàNote
0x101641182Fattore di potenza trifaseINT320.0012000 = non valido
0x101841202Fattore di potenza L1INT320.0012000 = non valido
0x101A41222Fattore di potenza L2INT320.0012000 = non valido
0x101C41242Fattore di potenza L3INT320.0012000 = non valido

4.4 Potenza apparente (S)

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x102641342Potenza apparente trifaseUINT321VA
0x102841362Potenza apparente L1UINT321VA
0x102A41382Potenza apparente L2UINT321VA
0x102C41402Potenza apparente L3UINT321VA

4.5 Potenza attiva (P)

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnitàSegno
0x102E41422Potenza attiva trifaseINT321W+ import, − export
0x103041442Potenza attiva L1INT321W+ import, − export
0x103241462Potenza attiva L2INT321W+ import, − export
0x103441482Potenza attiva L3INT321W+ import, − export

4.6 Potenza reattiva (Q)

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnitàSegno
0x103641502Potenza reattiva trifaseINT321var+ induttivo, − capacitivo
0x103841522Potenza reattiva L1INT321var+ induttivo, − capacitivo
0x103A41542Potenza reattiva L2INT321var+ induttivo, − capacitivo
0x103C41562Potenza reattiva L3INT321var+ induttivo, − capacitivo

4.7 Frequenza

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x104641662Frequenza media trifaseUINT320.001Hz
0x104841682Frequenza L1UINT320.001Hz
0x104A41702Frequenza L2UINT320.001Hz
0x104C41722Frequenza L3UINT320.001Hz

4.8 Distorsione armonica totale (THD)

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x108242262THD tensione L1UINT320.01%
0x108442282THD tensione L2UINT320.01%
0x108642302THD tensione L3UINT320.01%
0x108842322THD corrente L1UINT320.01%
0x108A42342THD corrente L2UINT320.01%
0x108C42362THD corrente L3UINT320.01%

4.9 Temperature

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x109042401Temperatura AFEINT160.1°C
0x109142411Temperatura MCUINT160.1°C

4.10 Diagnostica

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x109242421RSSI WiFiINT161dBm

4.11 Contatori di energia — alta risoluzione (64-bit, cento-Wh)

I contatori di energia sono persistenti tra i riavvii del dispositivo. Il formato a 64-bit (cento-Wh, LSB = 0.01 Wh) garantisce risoluzione massima e range eternamente sufficiente.

Conversione: kWh = Valore letto × 0.00001

Energia apparente (S)

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x110043524Energia apparente trifase totaleUINT640.00001kVAh
0x110443564Energia apparente L1UINT640.00001kVAh
0x110843604Energia apparente L2UINT640.00001kVAh
0x110C43644Energia apparente L3UINT640.00001kVAh

Energia attiva — Import (P+)

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x111043684Energia attiva import trifase totaleUINT640.00001kWh
0x111443724Energia attiva import L1UINT640.00001kWh
0x111843764Energia attiva import L2UINT640.00001kWh
0x111C43804Energia attiva import L3UINT640.00001kWh

Energia attiva — Export (P−)

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x112043844Energia attiva export trifase totaleUINT640.00001kWh
0x112443884Energia attiva export L1UINT640.00001kWh
0x112843924Energia attiva export L2UINT640.00001kWh
0x112C43964Energia attiva export L3UINT640.00001kWh

Energia reattiva — Import (Q+)

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x113044004Energia reattiva import trifase totaleUINT640.00001kvarh
0x113444044Energia reattiva import L1UINT640.00001kvarh
0x113844084Energia reattiva import L2UINT640.00001kvarh
0x113C44124Energia reattiva import L3UINT640.00001kvarh

Energia reattiva — Export (Q−)

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x114044164Energia reattiva export trifase totaleUINT640.00001kvarh
0x114444204Energia reattiva export L1UINT640.00001kvarh
0x114844244Energia reattiva export L2UINT640.00001kvarh
0x114C44284Energia reattiva export L3UINT640.00001kvarh

Range 0x1150–0x117F: riservato a espansioni future (formato 64-bit).


4.12 Contatori di energia — formato compatto (32-bit, deci-kWh)

Gli stessi contatori di energia esposti in formato 32-bit a 2 registri, comodo per PLC che non supportano nativamente il tipo UINT64.

Conversione: kWh = Valore letto × 0.1 Range utile: fino a circa 429 GWh per ogni contatore.

Energia apparente (S) — 32-bit

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x118044802Energia apparente trifase totaleUINT320.1kVAh
0x118244822Energia apparente L1UINT320.1kVAh
0x118444842Energia apparente L2UINT320.1kVAh
0x118644862Energia apparente L3UINT320.1kVAh

Energia attiva — Import (P+) — 32-bit

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x118844882Energia attiva import trifase totaleUINT320.1kWh
0x118A44902Energia attiva import L1UINT320.1kWh
0x118C44922Energia attiva import L2UINT320.1kWh
0x118E44942Energia attiva import L3UINT320.1kWh

Energia attiva — Export (P−) — 32-bit

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x119044962Energia attiva export trifase totaleUINT320.1kWh
0x119244982Energia attiva export L1UINT320.1kWh
0x119445002Energia attiva export L2UINT320.1kWh
0x119645022Energia attiva export L3UINT320.1kWh

Energia reattiva — Import (Q+) — 32-bit

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x119845042Energia reattiva import trifase totaleUINT320.1kvarh
0x119A45062Energia reattiva import L1UINT320.1kvarh
0x119C45082Energia reattiva import L2UINT320.1kvarh
0x119E45102Energia reattiva import L3UINT320.1kvarh

Energia reattiva — Export (Q−) — 32-bit

Addr (HEX)Addr (DEC)LenNomeTipoScalaUnità
0x11A045122Energia reattiva export trifase totaleUINT320.1kvarh
0x11A245142Energia reattiva export L1UINT320.1kvarh
0x11A445162Energia reattiva export L2UINT320.1kvarh
0x11A645182Energia reattiva export L3UINT320.1kvarh

4.13 Identificazione dispositivo

Stringhe ASCII (2 caratteri per registro, MSB first, null-padded). Sola lettura.

Addr (HEX)Addr (DEC)LenNomeTipoEsempio
0x1300486420VendorSTRINGRenua-SB Srl
0x1314488420ModelloSTRINGRE-431-D-RS485
0x132849048Versione firmwareSTRING2.0.0
0x133049128Numero di serieSTRINGRE43100001

5. Esempi di lettura con mbpoll

mbpoll è uno strumento da riga di comando per testare device Modbus. Installazione: apt install mbpoll (Debian/Ubuntu) o brew install mbpoll (macOS).

L'opzione -0 indica indirizzamento 0-based (corrispondente alla colonna "Addr (DEC)"). L'opzione -B forza il byte order Big Endian per i valori 32-bit (MSW first).

5.1 Lettura tensione L1-N

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

Valore letto 23367 → applicando scala 0.01 → 233.67 V.

5.2 Lettura corrente L1

mbpoll -m tcp -a 1 -0 -r 4112 -B -c 1 -t 4:int 192.168.1.186

Valore letto in mA → applicare scala 0.001 per ottenere Ampere.

5.3 Lettura potenza attiva trifase (signed)

mbpoll -m tcp -a 1 -0 -r 4142 -B -c 1 -t 4:int 192.168.1.186

Tipo INT32 con segno:

  • valore positivo → consumo (import)
  • valore negativo → immissione in rete (export)

5.4 Lettura simultanea di tutte le tensioni (L1-N, L2-N, L3-N)

mbpoll -m tcp -a 1 -0 -r 4098 -B -c 3 -t 4:int 192.168.1.186

Restituisce 3 valori UINT32 corrispondenti alle 3 tensioni fase-neutro.

5.5 Lettura energia attiva import totale (UINT64, 4 registri)

mbpoll non supporta nativamente UINT64. Si leggono i 4 registri come 2 UINT32 e si ricompongono lato client:

mbpoll -m tcp -a 1 -0 -r 4368 -B -c 2 -t 4:int 192.168.1.186

Lato client, ricomporre il valore a 64-bit:

UINT64 = (registro_alto × 2^32) + registro_basso
kWh = UINT64 × 0.00001

5.6 Lettura del modello del dispositivo

mbpoll -m tcp -a 1 -0 -r 4884 -B -c 20 -t 4:hex 192.168.1.186

Restituisce 20 registri contenenti la stringa ASCII (2 char/registro). Esempio: 0x5245 0x2D34 0x3331 0x2D44 0x2D52 0x5334 0x3835 ...RE-431-D-RS485.


6. Esempio Python (pymodbus)

from pymodbus.client import ModbusTcpClient
import struct

client = ModbusTcpClient('192.168.1.186', port=502)
client.connect()

def read_u32(addr):
r = client.read_holding_registers(address=addr, count=2, slave=1)
return (r.registers[0] << 16) | r.registers[1]

def read_s32(addr):
val = read_u32(addr)
return struct.unpack('>i', struct.pack('>I', val))[0]

def read_u64(addr):
r = client.read_holding_registers(address=addr, count=4, slave=1)
result = 0
for reg in r.registers:
result = (result << 16) | reg
return result

def read_string(addr, words):
r = client.read_holding_registers(address=addr, count=words, slave=1)
chars = []
for reg in r.registers:
chars.append(chr((reg >> 8) & 0xFF))
chars.append(chr(reg & 0xFF))
return ''.join(chars).rstrip('\x00')

# Tensioni fase-neutro
v_l1 = read_u32(0x1002) * 0.01
v_l2 = read_u32(0x1004) * 0.01
v_l3 = read_u32(0x1006) * 0.01
print(f"V_L1={v_l1:.2f}V V_L2={v_l2:.2f}V V_L3={v_l3:.2f}V")

# Potenza attiva trifase (signed)
p_total = read_s32(0x102E)
direzione = "import" if p_total >= 0 else "export"
print(f"P_total = {p_total} W ({direzione})")

# Energia attiva import totale
e_import_kwh = read_u64(0x1110) * 0.00001
print(f"Energia attiva import: {e_import_kwh:.2f} kWh")

# Identificazione
vendor = read_string(0x1300, 20)
model = read_string(0x1314, 20)
firmware = read_string(0x1328, 8)
serial = read_string(0x1330, 8)
print(f"{vendor} {model} fw {firmware} sn {serial}")

client.close()

7. Codici di errore Modbus

CodeNomeQuando si verifica
0x01ILLEGAL_FUNCTIONFunction Code diverso da 0x03
0x02ILLEGAL_DATA_ADDRESSIndirizzo fuori dal range mappato
0x03ILLEGAL_DATA_VALUEQuantity = 0 oppure Quantity > 125

8. Compatibilità

Lo schema della mappa è progettato per essere compatibile con i sistemi SCADA / BMS industriali più diffusi e con le mappe standard del settore:

  • Schneider Electric PM5000 series (Power Meter family)
  • ABB M2M energy meters
  • Carlo Gavazzi WM-series
  • Janitza UMG 96 series

I dispositivi RE-431-D possono essere integrati direttamente come "Generic Modbus Device" con device profile personalizzato, oppure usando un profile compatibile Schneider PM5000 con minimi adattamenti sullo scaling.