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
| Parametro | Valore |
|---|---|
| Protocollo | Modbus TCP |
| Function Code | 03 – Read Holding Registers |
| Porta TCP | 502 |
| Unit ID (Slave ID) | 1 (fisso) |
| Indirizzamento | 0-based |
| Byte order valori 32-bit | MSW first (Big Endian) |
| Codifica signed | Two's complement |
| Max registri per request | 125 |
| Client TCP simultanei | 2 max |
2.2 Modbus RTU (variante RE-431-D-RS485)
| Parametro | Valore |
|---|---|
| Protocollo | Modbus RTU |
| Slave ID | 1–247 (default 1, configurabile) |
| Baud rate | 9600, 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
| Tipo | Bytes | Registri | Descrizione |
|---|---|---|---|
| UINT16 | 2 | 1 | Intero senza segno a 16 bit |
| INT16 | 2 | 1 | Intero con segno a 16 bit |
| UINT32 | 4 | 2 | Intero senza segno a 32 bit |
| INT32 | 4 | 2 | Intero con segno a 32 bit |
| UINT64 | 8 | 4 | Intero senza segno a 64 bit |
| STRING | varia | varia | ASCII, 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
| Grandezza | Scala | Unità SI |
|---|---|---|
| Tensione | 0.01 | V |
| Corrente | 0.001 | A |
| Frequenza | 0.001 | Hz |
| Fattore di potenza | 0.001 | — |
| Potenza attiva (P) | 1 | W |
| Potenza reattiva (Q) | 1 | var |
| Potenza apparente (S) | 1 | VA |
| THD | 0.01 | % |
| Temperatura | 0.1 | °C |
| RSSI | 1 | dBm |
| Energia 64-bit (cento-Wh) | 0.00001 | kWh |
| Energia 32-bit (deci-kWh) | 0.1 | kWh |
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: induttivoQ < 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) | Len | Nome | Tipo | Scala | Unità | Descrizione |
|---|---|---|---|---|---|---|---|
| 0x1000 | 4096 | 2 | Tensione equivalente trifase | UINT32 | 0.01 | V | Media L-N |
| 0x1002 | 4098 | 2 | Tensione L1-N | UINT32 | 0.01 | V | Fase-Neutro |
| 0x1004 | 4100 | 2 | Tensione L2-N | UINT32 | 0.01 | V | Fase-Neutro |
| 0x1006 | 4102 | 2 | Tensione L3-N | UINT32 | 0.01 | V | Fase-Neutro |
| 0x1008 | 4104 | 2 | Tensione L1-L2 | UINT32 | 0.01 | V | Concatenata |
| 0x100A | 4106 | 2 | Tensione L2-L3 | UINT32 | 0.01 | V | Concatenata |
| 0x100C | 4108 | 2 | Tensione L3-L1 | UINT32 | 0.01 | V | Concatenata |
4.2 Correnti
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità | Descrizione |
|---|---|---|---|---|---|---|---|
| 0x100E | 4110 | 2 | Corrente equivalente trifase | UINT32 | 0.001 | A | Media fasi |
| 0x1010 | 4112 | 2 | Corrente L1 | UINT32 | 0.001 | A | |
| 0x1012 | 4114 | 2 | Corrente L2 | UINT32 | 0.001 | A | |
| 0x1014 | 4116 | 2 | Corrente L3 | UINT32 | 0.001 | A |
4.3 Fattore di potenza
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità | Note |
|---|---|---|---|---|---|---|---|
| 0x1016 | 4118 | 2 | Fattore di potenza trifase | INT32 | 0.001 | — | 2000 = non valido |
| 0x1018 | 4120 | 2 | Fattore di potenza L1 | INT32 | 0.001 | — | 2000 = non valido |
| 0x101A | 4122 | 2 | Fattore di potenza L2 | INT32 | 0.001 | — | 2000 = non valido |
| 0x101C | 4124 | 2 | Fattore di potenza L3 | INT32 | 0.001 | — | 2000 = non valido |
4.4 Potenza apparente (S)
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1026 | 4134 | 2 | Potenza apparente trifase | UINT32 | 1 | VA |
| 0x1028 | 4136 | 2 | Potenza apparente L1 | UINT32 | 1 | VA |
| 0x102A | 4138 | 2 | Potenza apparente L2 | UINT32 | 1 | VA |
| 0x102C | 4140 | 2 | Potenza apparente L3 | UINT32 | 1 | VA |
4.5 Potenza attiva (P)
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità | Segno |
|---|---|---|---|---|---|---|---|
| 0x102E | 4142 | 2 | Potenza attiva trifase | INT32 | 1 | W | + import, − export |
| 0x1030 | 4144 | 2 | Potenza attiva L1 | INT32 | 1 | W | + import, − export |
| 0x1032 | 4146 | 2 | Potenza attiva L2 | INT32 | 1 | W | + import, − export |
| 0x1034 | 4148 | 2 | Potenza attiva L3 | INT32 | 1 | W | + import, − export |
4.6 Potenza reattiva (Q)
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità | Segno |
|---|---|---|---|---|---|---|---|
| 0x1036 | 4150 | 2 | Potenza reattiva trifase | INT32 | 1 | var | + induttivo, − capacitivo |
| 0x1038 | 4152 | 2 | Potenza reattiva L1 | INT32 | 1 | var | + induttivo, − capacitivo |
| 0x103A | 4154 | 2 | Potenza reattiva L2 | INT32 | 1 | var | + induttivo, − capacitivo |
| 0x103C | 4156 | 2 | Potenza reattiva L3 | INT32 | 1 | var | + induttivo, − capacitivo |
4.7 Frequenza
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1046 | 4166 | 2 | Frequenza media trifase | UINT32 | 0.001 | Hz |
| 0x1048 | 4168 | 2 | Frequenza L1 | UINT32 | 0.001 | Hz |
| 0x104A | 4170 | 2 | Frequenza L2 | UINT32 | 0.001 | Hz |
| 0x104C | 4172 | 2 | Frequenza L3 | UINT32 | 0.001 | Hz |
4.8 Distorsione armonica totale (THD)
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1082 | 4226 | 2 | THD tensione L1 | UINT32 | 0.01 | % |
| 0x1084 | 4228 | 2 | THD tensione L2 | UINT32 | 0.01 | % |
| 0x1086 | 4230 | 2 | THD tensione L3 | UINT32 | 0.01 | % |
| 0x1088 | 4232 | 2 | THD corrente L1 | UINT32 | 0.01 | % |
| 0x108A | 4234 | 2 | THD corrente L2 | UINT32 | 0.01 | % |
| 0x108C | 4236 | 2 | THD corrente L3 | UINT32 | 0.01 | % |
4.9 Temperature
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1090 | 4240 | 1 | Temperatura AFE | INT16 | 0.1 | °C |
| 0x1091 | 4241 | 1 | Temperatura MCU | INT16 | 0.1 | °C |
4.10 Diagnostica
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1092 | 4242 | 1 | RSSI WiFi | INT16 | 1 | dBm |
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) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1100 | 4352 | 4 | Energia apparente trifase totale | UINT64 | 0.00001 | kVAh |
| 0x1104 | 4356 | 4 | Energia apparente L1 | UINT64 | 0.00001 | kVAh |
| 0x1108 | 4360 | 4 | Energia apparente L2 | UINT64 | 0.00001 | kVAh |
| 0x110C | 4364 | 4 | Energia apparente L3 | UINT64 | 0.00001 | kVAh |
Energia attiva — Import (P+)
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1110 | 4368 | 4 | Energia attiva import trifase totale | UINT64 | 0.00001 | kWh |
| 0x1114 | 4372 | 4 | Energia attiva import L1 | UINT64 | 0.00001 | kWh |
| 0x1118 | 4376 | 4 | Energia attiva import L2 | UINT64 | 0.00001 | kWh |
| 0x111C | 4380 | 4 | Energia attiva import L3 | UINT64 | 0.00001 | kWh |
Energia attiva — Export (P−)
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1120 | 4384 | 4 | Energia attiva export trifase totale | UINT64 | 0.00001 | kWh |
| 0x1124 | 4388 | 4 | Energia attiva export L1 | UINT64 | 0.00001 | kWh |
| 0x1128 | 4392 | 4 | Energia attiva export L2 | UINT64 | 0.00001 | kWh |
| 0x112C | 4396 | 4 | Energia attiva export L3 | UINT64 | 0.00001 | kWh |
Energia reattiva — Import (Q+)
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1130 | 4400 | 4 | Energia reattiva import trifase totale | UINT64 | 0.00001 | kvarh |
| 0x1134 | 4404 | 4 | Energia reattiva import L1 | UINT64 | 0.00001 | kvarh |
| 0x1138 | 4408 | 4 | Energia reattiva import L2 | UINT64 | 0.00001 | kvarh |
| 0x113C | 4412 | 4 | Energia reattiva import L3 | UINT64 | 0.00001 | kvarh |
Energia reattiva — Export (Q−)
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1140 | 4416 | 4 | Energia reattiva export trifase totale | UINT64 | 0.00001 | kvarh |
| 0x1144 | 4420 | 4 | Energia reattiva export L1 | UINT64 | 0.00001 | kvarh |
| 0x1148 | 4424 | 4 | Energia reattiva export L2 | UINT64 | 0.00001 | kvarh |
| 0x114C | 4428 | 4 | Energia reattiva export L3 | UINT64 | 0.00001 | kvarh |
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) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1180 | 4480 | 2 | Energia apparente trifase totale | UINT32 | 0.1 | kVAh |
| 0x1182 | 4482 | 2 | Energia apparente L1 | UINT32 | 0.1 | kVAh |
| 0x1184 | 4484 | 2 | Energia apparente L2 | UINT32 | 0.1 | kVAh |
| 0x1186 | 4486 | 2 | Energia apparente L3 | UINT32 | 0.1 | kVAh |
Energia attiva — Import (P+) — 32-bit
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1188 | 4488 | 2 | Energia attiva import trifase totale | UINT32 | 0.1 | kWh |
| 0x118A | 4490 | 2 | Energia attiva import L1 | UINT32 | 0.1 | kWh |
| 0x118C | 4492 | 2 | Energia attiva import L2 | UINT32 | 0.1 | kWh |
| 0x118E | 4494 | 2 | Energia attiva import L3 | UINT32 | 0.1 | kWh |
Energia attiva — Export (P−) — 32-bit
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1190 | 4496 | 2 | Energia attiva export trifase totale | UINT32 | 0.1 | kWh |
| 0x1192 | 4498 | 2 | Energia attiva export L1 | UINT32 | 0.1 | kWh |
| 0x1194 | 4500 | 2 | Energia attiva export L2 | UINT32 | 0.1 | kWh |
| 0x1196 | 4502 | 2 | Energia attiva export L3 | UINT32 | 0.1 | kWh |
Energia reattiva — Import (Q+) — 32-bit
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x1198 | 4504 | 2 | Energia reattiva import trifase totale | UINT32 | 0.1 | kvarh |
| 0x119A | 4506 | 2 | Energia reattiva import L1 | UINT32 | 0.1 | kvarh |
| 0x119C | 4508 | 2 | Energia reattiva import L2 | UINT32 | 0.1 | kvarh |
| 0x119E | 4510 | 2 | Energia reattiva import L3 | UINT32 | 0.1 | kvarh |
Energia reattiva — Export (Q−) — 32-bit
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Scala | Unità |
|---|---|---|---|---|---|---|
| 0x11A0 | 4512 | 2 | Energia reattiva export trifase totale | UINT32 | 0.1 | kvarh |
| 0x11A2 | 4514 | 2 | Energia reattiva export L1 | UINT32 | 0.1 | kvarh |
| 0x11A4 | 4516 | 2 | Energia reattiva export L2 | UINT32 | 0.1 | kvarh |
| 0x11A6 | 4518 | 2 | Energia reattiva export L3 | UINT32 | 0.1 | kvarh |
4.13 Identificazione dispositivo
Stringhe ASCII (2 caratteri per registro, MSB first, null-padded). Sola lettura.
| Addr (HEX) | Addr (DEC) | Len | Nome | Tipo | Esempio |
|---|---|---|---|---|---|
| 0x1300 | 4864 | 20 | Vendor | STRING | Renua-SB Srl |
| 0x1314 | 4884 | 20 | Modello | STRING | RE-431-D-RS485 |
| 0x1328 | 4904 | 8 | Versione firmware | STRING | 2.0.0 |
| 0x1330 | 4912 | 8 | Numero di serie | STRING | RE43100001 |
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
| Code | Nome | Quando si verifica |
|---|---|---|
0x01 | ILLEGAL_FUNCTION | Function Code diverso da 0x03 |
0x02 | ILLEGAL_DATA_ADDRESS | Indirizzo fuori dal range mappato |
0x03 | ILLEGAL_DATA_VALUE | Quantity = 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.