TapHome

Orno OR-WE-517

Modbus RTU
Inviato da
Ultimo aggiornamento: 03. 2026
Orno OR-WE-517

L’Orno OR-WE-517 e’ un contatore di energia trifase multitariffa per montaggio su guida DIN che comunica tramite Modbus RTU su RS-485. E’ un contatore a collegamento diretto con portata nominale fino a 80 A per fase, certificato MID (Direttiva 2014/32/UE), e occupa 4,3 moduli su guida TH-35. Il template TapHome fornisce 11 contatori elettrici che coprono la corrente per fase, l’energia per fase, l’energia trifase totale e contatori a 4 tariffe, insieme ad attributi di servizio per tensione, potenza reattiva/apparente, fattore di potenza e suddivisione dell’energia bidirezionale (prelievo/immissione).

Tutti i registri di misura utilizzano la codifica IEEE 754 Float32 (2 parole Modbus per valore), letti tramite il codice funzione 03 (registri holding). Il template fornisce anche azioni di servizio per l’impostazione dell’orologio in tempo reale del contatore, la configurazione delle fasce tariffarie e la modifica dello slave ID Modbus.

Collegamento hardware

Cablaggio RS-485

L’OR-WE-517 dispone di un’interfaccia RS-485 integrata per la comunicazione Modbus RTU. Collegare il contatore al bus RS-485 del TapHome Core utilizzando un cavo di comunicazione schermato a due conduttori:

  • Morsetto A sul contatore a A+/D+ su TapHome RS-485
  • Morsetto B sul contatore a B-/D- su TapHome RS-485

Utilizzare un cablaggio a daisy-chain. Le topologie a stella o a derivazione causano riflessioni del segnale ed errori di comunicazione. Il collegamento tra il convertitore e il contatore deve essere realizzato con un cavo di comunicazione schermato conforme allo standard RS-485.

Per la configurazione iniziale e i test e’ possibile utilizzare anche un convertitore USB-RS485 standard. Il convertitore non e’ incluso nella confezione del contatore.

Configurazione

Parametri di comunicazione

Le impostazioni Modbus predefinite corrispondono al template TapHome senza necessita’ di modifiche:

ParametroPredefinitoIntervallo
Baud rate9600 bps1200, 2400, 4800, 9600
Bit di dati8Fisso
Parita'PariFisso
Bit di stop1Fisso
Slave ID11–255

Il frame di comunicazione utilizza un formato a 11 bit: 1 bit di start, 8 bit di dati, 1 bit di parita’ pari e 1 bit di stop con controllo CRC.

Slave ID

Quando si collegano piu’ contatori sullo stesso bus RS-485, ogni contatore deve avere uno Slave ID univoco. Lo Slave ID predefinito e’ 1 (configurabile da 1 a 255 tramite il registro holding H:2). Dopo l’importazione del template TapHome, regolare lo Slave ID nelle impostazioni di connessione del modulo in modo che corrisponda al contatore fisico. Il template fornisce anche un’azione di servizio Slave ID per modificare l’indirizzo in remoto tramite Modbus.

Lo Slave ID corrente e il baud rate sono visibili sul display LCD del contatore (pagine 42 e 43 rispettivamente).

Funzionalita’ del dispositivo

Il template crea 11 dispositivi ModbusElectricityMeter e ModbusVariable organizzati in tre gruppi: sensori di corrente per fase, contatori di energia per fase e contatori di energia basati su tariffe. Un dispositivo di energia trifase totale aggrega tutte le fasi con attributi di sistema aggiuntivi.

Monitoraggio della corrente per fase

Tre dispositivi forniscono la misura della corrente in tempo reale per ogni fase:

  • Corrente L1 — corrente fase 1 (H:22, A) con tensione L1 come attributo di servizio (H:14, V)
  • Corrente L2 — corrente fase 2 (H:24, A) con tensione L2 (H:16, V)
  • Corrente L3 — corrente fase 3 (H:26, A) con tensione L3 (H:18, V)
Misurazione dell’energia per fase

Tre dispositivi monitorano il consumo di energia attiva e la domanda di potenza per fase con un set completo di attributi di servizio:

  • Fase L1 — energia attiva totale (H:258, kWh) e potenza attiva (H:30, kW). Gli attributi di servizio includono tensione, corrente, potenza reattiva (kVAr), potenza apparente (kVA), fattore di potenza e contatori di energia bidirezionali (prelievo/immissione di energia attiva e reattiva).
  • Fase L2 — energia attiva totale (H:260, kWh) e potenza attiva (H:32, kW). Stessi attributi di servizio per fase dell’L1.
  • Fase L3 — energia attiva totale (H:262, kWh) e potenza attiva (H:34, kW). Stessi attributi di servizio per fase dell’L1.
Energia trifase totale

Un dispositivo fornisce i totali a livello di sistema:

  • Energia totale (trifase) — energia attiva totale (H:256, kWh) e domanda di potenza attiva totale (H:28, kW). Gli attributi di servizio includono frequenza di rete (Hz), potenza reattiva totale (kVAr), potenza apparente totale (kVA), fattore di potenza totale e contatori di energia bidirezionali (prelievo/immissione di energia attiva e reattiva).
Contatori di energia tariffari

Quattro dispositivi monitorano l’energia cumulativa per zona tariffaria (T1–T4):

  • Tariffa T1 a Tariffa T4 — ciascuno riporta l’energia attiva totale (kWh) con attributi di servizio per l’energia attiva di prelievo/immissione e l’energia reattiva di prelievo/immissione/totale. I contatori tariffari monitorano solo l’energia cumulativa, non la domanda di potenza istantanea.

Il contatore supporta fino a 8 intervalli temporali al giorno (da lunedi’ a domenica singolarmente) per l’assegnazione delle zone tariffarie T1–T4. Le fasce tariffarie sono configurabili tramite l’azione di servizio Set Tariffs, che consente di programmare gli intervalli per un giorno specifico o per tutti i giorni contemporaneamente.

La capacita’ a 4 tariffe e’ il principale elemento di differenziazione dell’OR-WE-517 rispetto all’OR-WE-516 (che supporta RS-485 ma non ha la programmazione tariffaria). L’OR-WE-513 non ha ne’ RS-485 ne’ supporto tariffario.

Azioni di servizio

Il template fornisce tre azioni di servizio per la configurazione remota:

  • Date/Time — impostazione dell’orologio interno in tempo reale del contatore (anno, mese, giorno, ora, minuti, secondi e giorno della settimana) tramite i registri H:60–H:65
  • Set Tariffs — configurazione di fino a 8 intervalli tariffari giornalieri (T1–T4) per un giorno selezionato o per tutti i giorni contemporaneamente, scritti nei registri delle fasce tariffarie a partire da H:768
  • LCD Cycle time — impostazione dell’intervallo di scorrimento automatico del display LCD (1–120 secondi)
Funzionalita’ aggiuntive

L’OR-WE-517 espone anche registri per l’energia reattiva totale per fase (L1/L2/L3), numero di serie, versione firmware e hardware, un codice di configurazione combinato e un registro di assegnazione tariffaria per festivita’/fine settimana. Questi possono essere aggiunti in un futuro aggiornamento del template.

Risoluzione dei problemi

Nessuna comunicazione
  1. Verificare i collegamenti dei morsetti RS-485 A/B – invertire A e B se la comunicazione non funziona, poiche’ le convenzioni di etichettatura variano tra i produttori
  2. Confermare che il baud rate in TapHome corrisponda all’impostazione del contatore (predefinito 9600 bps, visibile sulla pagina LCD 43)
  3. Verificare che lo Slave ID corrisponda (predefinito 1, visibile sulla pagina LCD 42 nel formato “Id 255” dove 255 e’ l’indirizzo corrente)
  4. Controllare che l’impostazione della parita’ sia Even (8E1) – questo contatore utilizza la parita’ pari per impostazione predefinita, a differenza di alcuni contatori che utilizzano per impostazione predefinita nessuna parita’ (8N1)
Letture errate
  1. Assicurarsi che il contatore sia cablato come sistema trifase a 4 fili con tutti e tre i conduttori di fase e il neutro collegati attraverso i morsetti del contatore
  2. Per la misurazione bidirezionale (prelievo/immissione di energia), verificare la direzione del CT o la direzione del conduttore in base al flusso di energia – un cablaggio invertito causa la registrazione dell’energia prelevata come energia immessa
Comunicazione tramite convertitore Ethernet

L’OR-WE-517 puo’ essere accessibile anche tramite un convertitore RS-485 a Ethernet (ad es. Waveshare RS485 to ETH). Quando si utilizza un tale convertitore, il tipo di protocollo deve essere impostato su RTU over TCP (non Modbus TCP standard). Il framing TCP standard non funziona con questo contatore.

Dispositivi disponibili

Orno OR-WE-517 Modulo
Attributi di servizio
Slave ID
Baud rate
Tempo ciclo LCD
Rapporto CTRapporto del trasformatore di corrente — applicabile solo ai misuratori di tipo CT, non alle installazioni a collegamento diretto
Frequenza uscita S0
OraData e ora correnti dall'orologio in tempo reale interno del misuratore
Tariffe (Lu)
Tariffe (Ma)
Tariffe (Me)
Tariffe (Gi)
Tariffe (Ve)
Tariffe (Sa)
Tariffe (Do)
Azioni di servizio
Data/OraImposta l'orologio in tempo reale interno del misuratore — data, ora e giorno della settimana per il funzionamento del piano tariffario
Imposta tariffeConfigurazione di fino a 8 intervalli tariffari giornalieri (T1–T4) per un giorno selezionato o tutti i giorni in una volta
Slave IDModifica l'indirizzo Modbus slave (1–255) per configurazioni bus RS-485 con più misuratori
Tempo ciclo LCDImposta l'intervallo di scorrimento automatico del display LCD in secondi

OR-WE-517

Attributi di servizio
${device_SlaveId}
modbusr(H, 0x02, Uint16)
${baud_rate} [bps]
modbusr(H, 0x03, Uint16)
LCD ${cycle_time} [s]
modbusr(H, 0x0d, Uint16)
CT Rate
modbusr(H, 0x08, Uint16)
S0 output rate [imp/kWh]
modbusr(H, 0x09, Float)
${time}
var ret := modbusr(H, 0x3c, Uint32);
var ret1 := modbusr(H, 0x3e, Uint16);
var xx := modbusr(H, 0x40, Uint16);
tostring(getbyte(ret,1), "X2") 
+ ":" + tostring(getbyte(ret,2), "X2")
+ ":" + tostring(getbyte(ret,3), "X2")
+ " " + switch(getbyte(ret,0), 
1, "(Mo)",
2, "(Tu)",
3, "(We)",
4, "(Th)",
5, "(Fr)",
6, "(Sa)",
7, "(Su)", "Err")
+ " " + tostring(getbyte(ret1,1), "X2")
+ "." + tostring(getbyte(ret1,0), "X2")
+ ".20" + modbusr(H, 0x3f, LittleEndianUint16);

${tariff}s (Mo)
var wd1 := modbusr(H, 0x300, Uint32);
var wd2 := modbusr(H, 0x300 +2, Uint32);
var wd3 := modbusr(H, 0x300 +4, Uint32);
var wd4 := modbusr(H, 0x300 +6, Uint32);
var wd5 := modbusr(H, 0x300 +8, Uint32);
var wd6 := modbusr(H, 0x300 +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (Tu)
var wd1 := modbusr(H, 0x30c, Uint32);
var wd2 := modbusr(H, 0x30c +2, Uint32);
var wd3 := modbusr(H, 0x30c +4, Uint32);
var wd4 := modbusr(H, 0x30c +6, Uint32);
var wd5 := modbusr(H, 0x30c +8, Uint32);
var wd6 := modbusr(H, 0x30c +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (We)
var wd1 := modbusr(H, 0x318, Uint32);
var wd2 := modbusr(H, 0x318 +2, Uint32);
var wd3 := modbusr(H, 0x318 +4, Uint32);
var wd4 := modbusr(H, 0x318 +6, Uint32);
var wd5 := modbusr(H, 0x318 +8, Uint32);
var wd6 := modbusr(H, 0x318 +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (Th)
var wd1 := modbusr(H, 0x324, Uint32);
var wd2 := modbusr(H, 0x324 +2, Uint32);
var wd3 := modbusr(H, 0x324 +4, Uint32);
var wd4 := modbusr(H, 0x324 +6, Uint32);
var wd5 := modbusr(H, 0x324 +8, Uint32);
var wd6 := modbusr(H, 0x324 +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (Fr)
var wd1 := modbusr(H, 0x330, Uint32);
var wd2 := modbusr(H, 0x330 +2, Uint32);
var wd3 := modbusr(H, 0x330 +4, Uint32);
var wd4 := modbusr(H, 0x330 +6, Uint32);
var wd5 := modbusr(H, 0x330 +8, Uint32);
var wd6 := modbusr(H, 0x330 +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (Sa)
var wd1 := modbusr(H, 0x33c, Uint32);
var wd2 := modbusr(H, 0x33c +2, Uint32);
var wd3 := modbusr(H, 0x33c +4, Uint32);
var wd4 := modbusr(H, 0x33c +6, Uint32);
var wd5 := modbusr(H, 0x33c +8, Uint32);
var wd6 := modbusr(H, 0x33c +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
${tariff}s (Su)
var wd1 := modbusr(H, 0x348, Uint32);
var wd2 := modbusr(H, 0x348 +2, Uint32);
var wd3 := modbusr(H, 0x348 +4, Uint32);
var wd4 := modbusr(H, 0x348 +6, Uint32);
var wd5 := modbusr(H, 0x348 +8, Uint32);
var wd6 := modbusr(H, 0x348 +10, Uint32);

var out := "";
if ( getbyte(wd1,1) != 0, out := out +
    "[" + tostring(getbyte(wd1,3), "X2") + ":" + tostring(getbyte(wd1,2), "X2") + "-T" + tostring(getbyte(wd1,1), "X2") + "]" );
if ( getbyte(wd2,2) != 0, out := out +
    "[" + tostring(getbyte(wd1,0), "X2") + ":" + tostring(getbyte(wd2,3), "X2") + "-T" + tostring(getbyte(wd2,2), "X2") + "]" );
if ( getbyte(wd3,3) != 0, out := out +
    "[" + tostring(getbyte(wd2,1), "X2") + ":" + tostring(getbyte(wd2,0), "X2") + "-T" + tostring(getbyte(wd3,3), "X2") + "]" );
if ( getbyte(wd3,0) != 0, out := out +
    "[" + tostring(getbyte(wd3,2), "X2") + ":" + tostring(getbyte(wd3,1), "X2") + "-T" + tostring(getbyte(wd3,0), "X2") + "]" );
if ( getbyte(wd4,1) != 0, out := out +
    "[" + tostring(getbyte(wd4,3), "X2") + ":" + tostring(getbyte(wd4,2), "X2") + "-T" + tostring(getbyte(wd4,1), "X2") + "]" );
if ( getbyte(wd5,2) != 0, out := out +
    "[" + tostring(getbyte(wd4,0), "X2") + ":" + tostring(getbyte(wd5,3), "X2") + "-T" + tostring(getbyte(wd5,2), "X2") + "]" );
if ( getbyte(wd6,3) != 0, out := out +
    "[" + tostring(getbyte(wd5,1), "X2") + ":" + tostring(getbyte(wd5,0), "X2") + "-T" + tostring(getbyte(wd6,3), "X2") + "]" );
if ( getbyte(wd6,0) != 0, out := out +
    "[" + tostring(getbyte(wd6,2), "X2") + ":" + tostring(getbyte(wd6,1), "X2") + "-T" + tostring(getbyte(wd6,0), "X2") + "]" );

return(out)
Azioni di servizio
Date/Time
Parametri: Year (22–99 YY), Month (1–12 MM), Day (1–31 DD), Hour (1–24 HH), Minutes (0–59 MI), Seconds (0–59 SS), Day of Week
var out1 := (tobcd(MI) << 8) + tobcd(SS);
var out2 := (tobcd(DW) << 8) + tobcd(HH);
var out3 := (tobcd(MM) << 8) + tobcd(DD);

modbusw(H, 0x3c, LittleEndianUint16, out1, out2, out3, YY);
${set_tarriffs}
Parametri: Interval 1 - ${hour} (0–23 HH1), Interval 1 - ${minutes} (0–59 MI1), Interval 1 - ${tariff} (0–4 T1), Interval 2 - Hour (0–23 HH2), Interval 2 - Minutes (0–59 MI2), Interval 2 - ${tariff} (0–4 T2), Interval 3 - Hour (0–23 HH3), Interval 3 - Minutes (0–59 MI3), Interval 3 - ${tariff} (0–4 T3), Interval 4 - Hour (0–23 HH4), Interval 4 - Minutes (0–59 MI4), Interval 4 - ${tariff} (0–4 T4), Interval 5 - Hour (0–23 HH5), Interval 5 - Minutes (0–59 MI5), Interval 5 - ${tariff} (0–4 T5), Interval 6 - Hour (0–23 HH6), Interval 6 - Minutes (0–59 MI6), Interval 6 - ${tariff} (0–4 T6), Interval 7 - Hour (0–23 HH7), Interval 7 - Minutes (0–59 MI7), Interval 7 - ${tariff} (0–4 T7), Interval 8 - Hour (0–23 HH8), Interval 8 - Minutes (0–59 MI8), Interval 8 - ${tariff} (0–4 T8), Day
var wd1 := (tobcd(HH1) << 24) + (tobcd(MI1) << 16) + (tobcd(T1) << 8) + tobcd(HH2);
var wd2 := (tobcd(MI2) << 24) + (tobcd(T2) << 16) + (tobcd(HH3) << 8) + tobcd(MI3);
var wd3 := (tobcd(T3) << 24) + (tobcd(HH4) << 16) + (tobcd(MI4) << 8) + tobcd(T4);
var wd4 := (tobcd(HH5) << 24) + (tobcd(MI5) << 16) + (tobcd(T5) << 8) + tobcd(HH6);
var wd5 := (tobcd(MI6) << 24) + (tobcd(T6) << 16) + (tobcd(HH7) << 8) + tobcd(MI7);
var wd6 := (tobcd(T7) << 24) + (tobcd(HH8) << 16) + (tobcd(MI8) << 8) + tobcd(T8);

if DoW = 0 or DoW = 1
    modbusw(H, 0x300, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 2
    modbusw(H, 0x30c, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 3
    modbusw(H, 0x318, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 4
    modbusw(H, 0x324, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 5
    modbusw(H, 0x330, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 6
    modbusw(H, 0x33c, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
if DoW = 0 or DoW = 7
    modbusw(H, 0x348, Uint32, wd1, wd2, wd3, wd4, wd5, wd6);
end
Slave ID
Parametri: Parameter1 (1–255 ID)
modbusw(H, 0x02, Uint16, ID)
LCD Cycle time
Parametri: Time [s] (1–120 t)
modbusw(H, 0x0d, Uint16, t)
Corrente L1 Variabile Solo lettura
Registro: H:22 Float Unità: A
Attributi di servizio
Tensione L1

Corrente L1

Lettura
MODBUSR(H, 22, Float)
Attributi di servizio
L1 ${electric_voltage} [V]
round(modbusr(H, 0x0e, Float)*10)/10
Corrente L2 Variabile Solo lettura
Registro: H:24 Float Unità: A
Attributi di servizio
Tensione L2

Corrente L2

Lettura
MODBUSR(H, 24, Float)
Attributi di servizio
L2 ${electric_voltage} [V]
round(modbusr(H, 0x10, Float)*10)/10
Corrente L3 Variabile Solo lettura
Registro: H:26 Float Unità: A
Attributi di servizio
Tensione L3

Corrente L3

Lettura
MODBUSR(H, 26, Float)
Attributi di servizio
L3 ${electric_voltage} [V]
round(modbusr(H, 0x12, Float)*10)/10
Fase L1 Contatore elettrico Solo lettura

Misuratore di energia fase 1 — energia attiva totale e potenza attiva con tensione, corrente, potenza reattiva/apparente, fattore di potenza e contatori di energia bidirezionali

Registro: H:258 (readtotalconsumption), H:30 (readdemand) Float Unità: kWh / kW
Attributi di servizio
Tensione
Corrente
Potenza reattiva
Potenza apparente
Fattore di potenza
Energia attiva diretta
Energia attiva inversa
Energia reattiva diretta
Energia reattiva inversa

Fase L1

Lettura consumo totale
MODBUSR(H, 0x102, Float)
Lettura domanda
MODBUSR(H, 0x1e, Float)
Attributi di servizio
${electric_voltage} [V]
tostring(modbusr(H, 0x0e,Float), "F2")
${electric_current} [A]
tostring(modbusr(H, 0x16,Float), "F2")
${reactive_power} [kVAr]
tostring(modbusr(H, 0x26,Float), "F2")
${apparent_power} [kVA]
tostring(modbusr(H, 0x2e,Float), "F2")
${power_factor}
tostring(modbusr(H, 0x36,Float), "F2")
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x10a,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x112,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x122,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x12a,Float), "F2")
Fase L2 Contatore elettrico Solo lettura
Registro: H:260 (readtotalconsumption), H:32 (readdemand) Float Unità: kWh / kW
Attributi di servizio
Tensione
Corrente
Potenza reattiva
Potenza apparente
Fattore di potenza
Energia attiva diretta
Energia attiva inversa
Energia reattiva diretta
Energia reattiva inversa

Fase L2

Lettura consumo totale
MODBUSR(H, 0x104, Float)
Lettura domanda
MODBUSR(H, 0x20, Float)
Attributi di servizio
${electric_voltage} [V]
tostring(modbusr(H, 0x10,Float), "F2")
${electric_current} [A]
tostring(modbusr(H, 0x18,Float), "F2")
${reactive_power} [kVAr]
tostring(modbusr(H, 0x28,Float), "F2")
${apparent_power} [kVA]
tostring(modbusr(H, 0x30,Float), "F2")
${power_factor}
tostring(modbusr(H, 0x38,Float), "F2")
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x10c,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x114,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x124,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x12c,Float), "F2")
Fase L3 Contatore elettrico Solo lettura
Registro: H:262 (readtotalconsumption), H:34 (readdemand) Float Unità: kWh / kW
Attributi di servizio
Tensione
Corrente
Potenza reattiva
Potenza apparente
Fattore di potenza
Energia attiva diretta
Energia attiva inversa
Energia reattiva diretta
Energia reattiva inversa

Fase L3

Lettura consumo totale
MODBUSR(H, 0x106, Float)
Lettura domanda
MODBUSR(H, 0x22, Float)
Attributi di servizio
${electric_voltage} [V]
tostring(modbusr(H, 0x12,Float), "F2")
${electric_current} [A]
tostring(modbusr(H, 0x1a,Float), "F2")
${reactive_power} [kVAr]
tostring(modbusr(H, 0x2a,Float), "F2")
${apparent_power} [kVA]
tostring(modbusr(H, 0x32,Float), "F2")
${power_factor}
tostring(modbusr(H, 0x3a,Float), "F2")
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x10e,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x116,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x126,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x12e,Float), "F2")
Tariffa T1 Contatore elettrico Solo lettura

Contatore cumulativo di energia tariffa 1 — energia attiva totale con dettaglio energia attiva/reattiva diretta e inversa

Registro: H:304 (readtotalconsumption) Float Unità: kWh
Attributi di servizio
Energia attiva diretta
Energia attiva inversa
Energia reattiva totale
Energia reattiva diretta
Energia reattiva inversa

Tariffa T1

Lettura consumo totale
MODBUSR(H, 0x130, Float)
Attributi di servizio
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x132,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x134,Float), "F2")
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0x136,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x138,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x13a,Float), "F2")
Tariffa T2 Contatore elettrico Solo lettura
Registro: H:316 (readtotalconsumption) Float Unità: kWh
Attributi di servizio
Energia attiva diretta
Energia attiva inversa
Energia reattiva totale
Energia reattiva diretta
Energia reattiva inversa

Tariffa T2

Lettura consumo totale
MODBUSR(H, 0x13c, Float)
Attributi di servizio
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x13e,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x140,Float), "F2")
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0x142,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x144,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x146,Float), "F2")
Tariffa T3 Contatore elettrico Solo lettura
Registro: H:328 (readtotalconsumption) Float Unità: kWh
Attributi di servizio
Energia attiva diretta
Energia attiva inversa
Energia reattiva totale
Energia reattiva diretta
Energia reattiva inversa

Tariffa T3

Lettura consumo totale
MODBUSR(H, 0x148, Float)
Attributi di servizio
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x14a,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x14c,Float), "F2")
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0x14e,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x150,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x152,Float), "F2")
Tariffa T4 Contatore elettrico Solo lettura
Registro: H:340 (readtotalconsumption) Float Unità: kWh
Attributi di servizio
Energia attiva diretta
Energia attiva inversa
Energia reattiva totale
Energia reattiva diretta
Energia reattiva inversa

Tariffa T4

Lettura consumo totale
MODBUSR(H, 0x154, Float)
Attributi di servizio
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x156,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x158,Float), "F2")
${total_reactive_energy} [kVArh]
tostring(modbusr(H, 0x15a,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x15c,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x15e,Float), "F2")
Energia totale (3 fasi) Contatore elettrico Solo lettura

Totale sistema trifase — energia attiva e domanda di potenza con frequenza di rete, potenza reattiva/apparente, fattore di potenza e contatori di energia bidirezionali

Registro: H:256 (readtotalconsumption), H:28 (readdemand) Float Unità: kWh / kW
Attributi di servizio
Frequenza di rete
Potenza reattiva totale
Potenza apparente totale
Fattore di potenza totale
Energia attiva diretta
Energia attiva inversa
Energia reattiva diretta
Energia reattiva inversa

Energia totale (3 fasi)

Lettura consumo totale
MODBUSR(H, 0x100, Float)
Lettura domanda
MODBUSR(H, 0x1c, Float)
Attributi di servizio
${grid_frequency} [Hz]
tostring(modbusr(H, 0x14,Float), "F2")
${reactive_power} [kVAr]
tostring(modbusr(H, 0x24,Float), "F2")
${apparent_power} [kVA]
tostring(modbusr(H, 0x2c,Float), "F2")
${power_factor}
tostring(modbusr(H, 0x34,Float), "F2")
${forward_active_energy} [kWh]
tostring(modbusr(H, 0x108,Float), "F2")
${reverse_active_energy} [kWh]
tostring(modbusr(H, 0x110,Float), "F2")
${forward_reactive_energy} [kVArh]
tostring(modbusr(H, 0x120,Float), "F2")
${reverse_reactive_energy} [kVArh]
tostring(modbusr(H, 0x128,Float), "F2")
Connessione: Modbus RTU • 9600 baud• 8E1 • Slave ID: $[SlaveId]
Possibili miglioramenti (9)
  • H:280 Total Reactive Energy — Aggregate reactive energy counter (sum of all phases)
  • H:282 L1 Reactive Energy — Per-phase reactive energy — only forward/reverse reactive exposed, not total per-phase
  • H:284 L2 Reactive Energy — Per-phase reactive energy
  • H:286 L3 Reactive Energy — Per-phase reactive energy
  • H:0 Serial Number — 4-byte serial number, read-only
  • H:4 Software Version — Firmware version as float
  • H:6 Hardware Version — Hardware version as float
  • H:11 Combined Code — Configuration code, R/W
  • H:12 HOLIDAY-WEEKEND T — Holiday/weekend tariff assignment

Fonti