TapHome

Orno OR-WE-517

Modbus RTU
Dodane przez
Ostatnia aktualizacja: 03. 2026
Orno OR-WE-517

Orno OR-WE-517 to trójfazowy wielotaryfowy licznik energii na szynę DIN, komunikujący się przez Modbus RTU po RS-485. Jest to licznik bezpośredniego podłączenia o znamionowym prądzie do 80 A na fazę, z certyfikatem MID (Dyrektywa 2014/32/UE), zajmujący 4,3 modułu na szynie TH-35. Szablon TapHome udostępnia 11 liczników energii elektrycznej obejmujących prąd fazowy, energię fazową, całkowitą energię trójfazową i 4-taryfowe liczniki energii, wraz z atrybutami serwisowymi dla napięcia, mocy biernej/pozornej, współczynnika mocy i dwukierunkowego (pobór/oddanie) rozkładu energii.

Wszystkie rejestry pomiarowe wykorzystują kodowanie IEEE 754 Float32 (2 słowa Modbus na wartość), odczytywane przez kod funkcji 03 (rejestry holding). Szablon udostępnia również akcje serwisowe do ustawiania zegara czasu rzeczywistego licznika, konfigurowania harmonogramów taryfowych i zmiany slave ID Modbus.

Podłączenie sprzętowe

Okablowanie RS-485

OR-WE-517 posiada wbudowany interfejs RS-485 do komunikacji Modbus RTU. Podłącz licznik do magistrali TapHome Core RS-485 za pomocą dwużyłowego ekranowanego kabla komunikacyjnego:

  • Zacisk A na liczniku do A+/D+ na TapHome RS-485
  • Zacisk B na liczniku do B-/D- na TapHome RS-485

Zastosuj okablowanie daisy-chain. Topologie gwiazdy lub odgałęzień powodują odbicia sygnału i błędy komunikacji. Połączenie między konwerterem a licznikiem powinno być wykonane ekranowanym kablem komunikacyjnym przystosowanym do standardu RS-485.

Do wstępnej konfiguracji i testowania można również użyć standardowego konwertera USB-RS485. Konwerter nie jest dołączony do licznika.

Konfiguracja

Parametry komunikacji

Domyślne ustawienia Modbus odpowiadają szablonowi TapHome bez konieczności modyfikacji:

ParametrDomyślnieZakres
Prędkość transmisji9600 bps1200, 2400, 4800, 9600
Bity danych8Stałe
ParzystośćParzystaStała
Bity stopu1Stałe
Slave ID11–255

Ramka komunikacyjna wykorzystuje format 11-bitowy: 1 bit startu, 8 bitów danych, 1 bit parzystości parzystej i 1 bit stopu z kontrolą CRC.

Slave ID

Przy podłączeniu wielu liczników na tej samej magistrali RS-485 każdy licznik musi mieć unikalny Slave ID. Domyślny Slave ID to 1 (konfigurowalny od 1 do 255 przez rejestr holding H:2). Po zaimportowaniu szablonu TapHome dostosuj Slave ID w ustawieniach połączenia modułu, aby odpowiadał fizycznemu licznikowi. Szablon udostępnia również akcję serwisową Slave ID do zdalnej zmiany adresu przez Modbus.

Bieżący Slave ID i prędkość transmisji są widoczne na wyświetlaczu LCD licznika (strony 42 i 43).

Możliwości urządzenia

Szablon tworzy 11 urządzeń ModbusElectricityMeter i ModbusVariable zorganizowanych w trzy grupy: czujniki prądu fazowego, liczniki energii fazowej i taryfowe liczniki energii. Całkowite urządzenie trójfazowe agreguje wszystkie fazy z dodatkowymi atrybutami systemowymi.

Monitorowanie prądu fazowego

Trzy urządzenia zapewniają pomiar prądu w czasie rzeczywistym dla każdej fazy:

  • Prąd L1 — prąd fazy 1 (H:22, A) z napięciem L1 jako atrybut serwisowy (H:14, V)
  • Prąd L2 — prąd fazy 2 (H:24, A) z napięciem L2 (H:16, V)
  • Prąd L3 — prąd fazy 3 (H:26, A) z napięciem L3 (H:18, V)
Pomiar energii fazowej

Trzy urządzenia śledzą zużycie energii czynnej i zapotrzebowanie na moc dla każdej fazy z kompleksowym zestawem atrybutów serwisowych:

  • Faza L1 — całkowita energia czynna (H:258, kWh) i moc czynna (H:30, kW). Atrybuty serwisowe obejmują napięcie, prąd, moc bierną (kVAr), moc pozorną (kVA), współczynnik mocy i dwukierunkowe liczniki energii (pobór/oddanie energii czynnej i biernej).
  • Faza L2 — całkowita energia czynna (H:260, kWh) i moc czynna (H:32, kW). Te same atrybuty serwisowe fazowe co L1.
  • Faza L3 — całkowita energia czynna (H:262, kWh) i moc czynna (H:34, kW). Te same atrybuty serwisowe fazowe co L1.
Całkowita energia trójfazowa

Jedno urządzenie dostarcza sumy systemowe:

  • Energia całkowita (trójfazowa) — całkowita energia czynna (H:256, kWh) i całkowite zapotrzebowanie na moc czynną (H:28, kW). Atrybuty serwisowe obejmują częstotliwość sieci (Hz), całkowitą moc bierną (kVAr), całkowitą moc pozorną (kVA), całkowity współczynnik mocy i dwukierunkowe liczniki energii (pobór/oddanie energii czynnej i biernej).
Taryfowe liczniki energii

Cztery urządzenia śledzą kumulatywną energię według strefy taryfowej (T1–T4):

  • Taryfa T1 do Taryfa T4 — każda raportuje całkowitą energię czynną (kWh) z atrybutami serwisowymi dla energii czynnej poboru/oddania i energii biernej poboru/oddania/całkowitej. Liczniki taryfowe śledzą wyłącznie energię kumulatywną, nie chwilowe zapotrzebowanie na moc.

Licznik obsługuje do 8 interwałów czasowych dziennie (od poniedziałku do niedzieli indywidualnie) do przypisywania stref taryfowych T1–T4. Harmonogramy taryfowe są konfigurowalne przez akcję serwisową Set Tariffs, która umożliwia programowanie interwałów dla konkretnego dnia lub wszystkich dni jednocześnie.

Możliwość obsługi 4 taryf jest kluczowym wyróżnikiem OR-WE-517 w porównaniu z OR-WE-516 (który obsługuje RS-485, ale nie ma planowania taryfowego). OR-WE-513 nie ma ani RS-485, ani obsługi taryf.

Akcje serwisowe

Szablon udostępnia trzy akcje serwisowe do zdalnej konfiguracji:

  • Date/Time — ustawienie wewnętrznego zegara czasu rzeczywistego licznika (rok, miesiąc, dzień, godzina, minuty, sekundy i dzień tygodnia) przez rejestry H:60–H:65
  • Set Tariffs — konfiguracja do 8 dziennych interwałów taryfowych (T1–T4) dla wybranego dnia lub wszystkich dni jednocześnie, zapisywanych do rejestrów harmonogramu taryfowego od H:768
  • LCD Cycle time — ustawienie interwału automatycznego przewijania wyświetlacza LCD (1–120 sekund)
Dodatkowe możliwości

OR-WE-517 udostępnia również rejestry dla całkowitej energii biernej fazowej (L1/L2/L3), numeru seryjnego, wersji firmware i sprzętu, kombinowanego kodu konfiguracyjnego i rejestru przypisania taryf świątecznych/weekendowych. Mogą one zostać dodane w przyszłej aktualizacji szablonu.

Rozwiązywanie problemów

Brak komunikacji
  1. Sprawdź połączenia zacisków RS-485 A/B – zamień A i B, jeśli komunikacja nie działa, ponieważ konwencje oznaczania różnią się między producentami
  2. Potwierdź, że prędkość transmisji w TapHome odpowiada ustawieniu licznika (domyślnie 9600 bps, widoczna na stronie LCD 43)
  3. Sprawdź, czy Slave ID się zgadza (domyślnie 1, widoczne na stronie LCD 42 w formacie “Id 255”, gdzie 255 to bieżący adres)
  4. Upewnij się, że ustawienie parzystości to Even (8E1) – ten licznik domyślnie używa parzystości parzystej, w odróżnieniu od niektórych liczników, które domyślnie nie używają parzystości (8N1)
Nieprawidłowe odczyty
  1. Upewnij się, że licznik jest okablowany jako system trójfazowy 4-przewodowy ze wszystkimi trzema przewodami fazowymi i przewodem neutralnym przeprowadzonymi przez zaciski licznika
  2. W przypadku pomiaru dwukierunkowego (pobór/oddanie energii) sprawdź kierunek CT lub kierunek przewodu zgodnie z przepływem energii – odwrócone okablowanie powoduje, że energia pobrana rejestruje się jako oddana
Komunikacja przez konwerter Ethernet

OR-WE-517 jest również dostępny przez konwerter RS-485 na Ethernet (np. Waveshare RS485 to ETH). Przy użyciu takiego konwertera typ protokołu musi być ustawiony na RTU over TCP (nie standardowy Modbus TCP). Standardowe ramkowanie TCP nie działa z tym licznikiem.

Dostępne urządzenia

Orno OR-WE-517 Moduł
Atrybuty serwisowe
Slave ID
Prędkość transmisji
Czas cyklu LCD
Przekładnia CTPrzekładnia przekładnika prądowego — dotyczy wyłącznie liczników typu CT, nie instalacji z podłączeniem bezpośrednim
Współczynnik wyjścia S0
CzasBieżąca data i czas z wewnętrznego zegara czasu rzeczywistego licznika
Taryfy (Pn)
Taryfy (Wt)
Taryfy (Śr)
Taryfy (Cz)
Taryfy (Pt)
Taryfy (So)
Taryfy (Nd)
Akcje serwisowe
Data/CzasUstawia wewnętrzny zegar czasu rzeczywistego licznika — data, czas i dzień tygodnia dla obsługi planu taryfowego
Ustaw taryfyKonfiguracja do 8 dziennych interwałów taryfowych (T1–T4) dla wybranego dnia lub wszystkich dni jednocześnie
Slave IDZmiana adresu Modbus slave (1–255) dla konfiguracji magistrali RS-485 z wieloma licznikami
Czas cyklu LCDUstawienie interwału automatycznego przewijania wyświetlacza LCD w sekundach

OR-WE-517

Atrybuty serwisowe
${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)
Akcje serwisowe
Date/Time
Parametry: 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}
Parametry: 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
Parametry: Parameter1 (1–255 ID)
modbusw(H, 0x02, Uint16, ID)
LCD Cycle time
Parametry: Time [s] (1–120 t)
modbusw(H, 0x0d, Uint16, t)
Prąd L1 Zmienna Tylko do odczytu
Rejestr: H:22 Float Jednostka: A
Atrybuty serwisowe
Napięcie L1

Prąd L1

Odczyt
MODBUSR(H, 22, Float)
Atrybuty serwisowe
L1 ${electric_voltage} [V]
round(modbusr(H, 0x0e, Float)*10)/10
Prąd L2 Zmienna Tylko do odczytu
Rejestr: H:24 Float Jednostka: A
Atrybuty serwisowe
Napięcie L2

Prąd L2

Odczyt
MODBUSR(H, 24, Float)
Atrybuty serwisowe
L2 ${electric_voltage} [V]
round(modbusr(H, 0x10, Float)*10)/10
Prąd L3 Zmienna Tylko do odczytu
Rejestr: H:26 Float Jednostka: A
Atrybuty serwisowe
Napięcie L3

Prąd L3

Odczyt
MODBUSR(H, 26, Float)
Atrybuty serwisowe
L3 ${electric_voltage} [V]
round(modbusr(H, 0x12, Float)*10)/10
Faza L1 Licznik energii Tylko do odczytu

Licznik energii fazy 1 — całkowita energia czynna i moc czynna z napięciem, prądem, mocą bierną/pozorną, współczynnikiem mocy i dwukierunkowymi licznikami energii

Rejestr: H:258 (readtotalconsumption), H:30 (readdemand) Float Jednostka: kWh / kW
Atrybuty serwisowe
Napięcie
Prąd
Moc bierna
Moc pozorna
Współczynnik mocy
Energia czynna pobrana
Energia czynna oddana
Energia bierna pobrana
Energia bierna oddana

Faza L1

Odczyt całkowitego zużycia
MODBUSR(H, 0x102, Float)
Odczyt zapotrzebowania
MODBUSR(H, 0x1e, Float)
Atrybuty serwisowe
${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")
Faza L2 Licznik energii Tylko do odczytu
Rejestr: H:260 (readtotalconsumption), H:32 (readdemand) Float Jednostka: kWh / kW
Atrybuty serwisowe
Napięcie
Prąd
Moc bierna
Moc pozorna
Współczynnik mocy
Energia czynna pobrana
Energia czynna oddana
Energia bierna pobrana
Energia bierna oddana

Faza L2

Odczyt całkowitego zużycia
MODBUSR(H, 0x104, Float)
Odczyt zapotrzebowania
MODBUSR(H, 0x20, Float)
Atrybuty serwisowe
${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")
Faza L3 Licznik energii Tylko do odczytu
Rejestr: H:262 (readtotalconsumption), H:34 (readdemand) Float Jednostka: kWh / kW
Atrybuty serwisowe
Napięcie
Prąd
Moc bierna
Moc pozorna
Współczynnik mocy
Energia czynna pobrana
Energia czynna oddana
Energia bierna pobrana
Energia bierna oddana

Faza L3

Odczyt całkowitego zużycia
MODBUSR(H, 0x106, Float)
Odczyt zapotrzebowania
MODBUSR(H, 0x22, Float)
Atrybuty serwisowe
${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")
Taryfa T1 Licznik energii Tylko do odczytu

Skumulowany licznik energii taryfa 1 — całkowita energia czynna z podziałem na energię czynną/bierną pobraną i oddaną

Rejestr: H:304 (readtotalconsumption) Float Jednostka: kWh
Atrybuty serwisowe
Energia czynna pobrana
Energia czynna oddana
Całkowita energia bierna
Energia bierna pobrana
Energia bierna oddana

Taryfa T1

Odczyt całkowitego zużycia
MODBUSR(H, 0x130, Float)
Atrybuty serwisowe
${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")
Taryfa T2 Licznik energii Tylko do odczytu
Rejestr: H:316 (readtotalconsumption) Float Jednostka: kWh
Atrybuty serwisowe
Energia czynna pobrana
Energia czynna oddana
Całkowita energia bierna
Energia bierna pobrana
Energia bierna oddana

Taryfa T2

Odczyt całkowitego zużycia
MODBUSR(H, 0x13c, Float)
Atrybuty serwisowe
${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")
Taryfa T3 Licznik energii Tylko do odczytu
Rejestr: H:328 (readtotalconsumption) Float Jednostka: kWh
Atrybuty serwisowe
Energia czynna pobrana
Energia czynna oddana
Całkowita energia bierna
Energia bierna pobrana
Energia bierna oddana

Taryfa T3

Odczyt całkowitego zużycia
MODBUSR(H, 0x148, Float)
Atrybuty serwisowe
${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")
Taryfa T4 Licznik energii Tylko do odczytu
Rejestr: H:340 (readtotalconsumption) Float Jednostka: kWh
Atrybuty serwisowe
Energia czynna pobrana
Energia czynna oddana
Całkowita energia bierna
Energia bierna pobrana
Energia bierna oddana

Taryfa T4

Odczyt całkowitego zużycia
MODBUSR(H, 0x154, Float)
Atrybuty serwisowe
${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 całkowita (3-fazowa) Licznik energii Tylko do odczytu

Suma systemu 3-fazowego — energia czynna i zapotrzebowanie na moc z częstotliwością sieci, mocą bierną/pozorną, współczynnikiem mocy i dwukierunkowymi licznikami energii

Rejestr: H:256 (readtotalconsumption), H:28 (readdemand) Float Jednostka: kWh / kW
Atrybuty serwisowe
Częstotliwość sieci
Całkowita moc bierna
Całkowita moc pozorna
Całkowity współczynnik mocy
Energia czynna pobrana
Energia czynna oddana
Energia bierna pobrana
Energia bierna oddana

Energia całkowita (3-fazowa)

Odczyt całkowitego zużycia
MODBUSR(H, 0x100, Float)
Odczyt zapotrzebowania
MODBUSR(H, 0x1c, Float)
Atrybuty serwisowe
${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")
Połączenie: Modbus RTU • 9600 baud• 8E1 • Slave ID: $[SlaveId]
Możliwe ulepszenia (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

Źródła