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.001—2000 = non valido
0x101841202Fattore di potenza L1INT320.001—2000 = non valido
0x101A41222Fattore di potenza L2INT320.001—2000 = non valido
0x101C41242Fattore di potenza L3INT320.001—2000 = 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.