Wattmetr PZEM-004T

V souvislosti s tématem tvorby vlastních zařízení pro síť ZigBee, jsem na Ali pořídil měřidlo výkonu PZEM-004T, které dokáže měřit "zásuvkový" jednofázový výkon (+U, I, f, cosFI, energii). Změřené hodnoty pak dokáže předat nadřazenému zařízení, kterým může být třeba "arduinové" MCU nebo i třeba PC, pomocí UART portu (TTL). Pro komunikaci využívá protokol Modbus-RTU. Více o jeho parametrech je uvedeno ve specifikaci níže, která je překladem textu, který je k měřidlu přiložený jako návod k obsluze.

 

Popis

AC 80-260V 10A 100A digitální multifunkční měřič výkonu / napětí / proudu, testovací modul PZEM-004T pro Arduino TTL COM2\COM3\COM4.

Komunikační modul pro střídavý proud

Přehled

Tento dokument obsahuje specifikaci komunikačního modulu PZEM-004T AC,
modul se používá hlavně k měření střídavého napětí, proudu, činného výkonu, frekvence, výkonu, účiníku a činné energie, modul je bez zobrazovací funkce, data se čtou prostřednictvím TTL rozhraní.
PZEM-004T-10A: Rozsah měření 10 A (vestavěný bočník)
PZEM-004T-100A: Rozsah měření 100 A (externí transformátor)

1.Popis funkce

1.1 Napětí
1.1.1 Rozsah měření: 80~260V
1.1.2 Rozlišení: 0.1V
1.1.3 Přesnost měření: 0,5%

1.2 Proud
1.2.1 Rozsah měření: 0~10A (PZEM-004T-10A); 0~100A (PZEM-004T-100A)
1.2.2 Počáteční měřicí proud: 0,01A (PZEM-004T-10A); 0,02A (PZEM-004T-100A)
1.2.3 Rozlišení: 1: 0.001A
1.2.4 Přesnost měření: 0,5 %.

1.3 Činný výkon
1.3.1 Rozsah měření: 0~2.3kW(PZEM-004T-10A); 0~23kW(PZEM-004T-100A)
1.3.2 Spouštěcí (měřitelný) výkon: 0,4 W
1.3.3 Rozlišení: 0.1W
1.3.4 Formát zobrazení:
<1000W, zobrazuje jedno desetinné místo, např: 999.9W
≥1000W, zobrazuje pouze celé číslo, např: 1000W
1.3.5 Přesnost měření: 0,5 %

1.4 Účiník
1.4.1 Rozsah měření: 0.00~1.00
1.4.2 Řešení: 0.01
1.4.3 Přesnost měření: 1%

1.5 Frekvence
1.5.1 Rozsah měření: 45Hz~65Hz
1.5.2 Rozlišení: 0,1Hz
1.5.3 Přesnost měření: 0,5%

1.6 Činná energie
1.6.1 Rozsah měření: 0~9999,99kWh
1.6.2 Rozlišení: 1Wh
1.6.3 Přesnost měření: 0,5 %.
1.6.4 Formát displeje: 1.6.4
<10kWh, zobrazovací jednotka je Wh(1kWh=1000Wh), např: 9999Wh
≥10kWh, zobrazovací jednotka je kWh, např: 9999,99kWh, hodnota je 10 kWh.
1.6.5 Resetování energie: K resetování použijte software.

1.7 Alarm překročení výkonu
Lze nastavit prahovou hodnotu činného výkonu, pokud naměřený činný výkon překročí prahovou hodnotu, může spustit alarm.

1.8 Komunikační rozhraní
Rozhraní RS485

2 Komunikační protokol

2.1 Protokol fyzické vrstvy
Fyzická vrstva používá komunikační rozhraní UART-RS485.
Přenosová rychlost je 9600, 8 datových bitů, 1 stop bit, bez parity.

2.2 Protokol aplikační vrstvy
Aplikační vrstva používá ke komunikaci protokol Modbus-RTU. V současné době podporuje pouze kódy funkcí, jako jsou 0x03 (čtení holding-registru), 0x04 (čtení vstupního registru), 0x06.
(Zápis jednoho registru), 0x41 (Kalibrace), 0x42 (Reset energie) atd.
Funkční kód 0x41 je určen pouze pro interní použití (adresa může být pouze 0xF8), používá se pro tovární kalibraci a návrat do režimu tovární údržby, po zadání funkčního kódu (16bitového hesla), výchozí heslo je 0x3721
Rozsah adres podřízeného zařízení je 0x01 ~ 0xF7. Adresa 0x00 se používá jako broadcast
adresa, podřízená jednotka nemusí odpovídat nadřízené jednotce. Adresa 0xF8 se používá jako obecná adresa.
Tato adresa může být použita pouze v prostředí s jediným podřízeným zařízením a může být použita pro jeho nastavení atd.

2.3 Přečtení výsledku měření
Formát příkazu master pro čtení výsledku měření je (celkem 8 bajtů):
Adresa podřízeného + 0x04 + vysoký bajt adresy registru + nízký bajt adresy registru + číslo
registrů High Byte + Number of Registers Low Byte + CRC Check High Byte + CRC Check
Low Byte.
Formát příkazu odpovědi z podřízeného zařízení se dělí na dva druhy:
Správná odpověď: Adresa podřízeného + 0x04 + Počet bajtů + Registr 1 Data High Byte +
Register 1 Data Low Byte + ... + CRC Check High Byte + CRC Check Low Byte
Chybná odpověď: Adresa podřízeného + 0x84 + Abnormální kód + Kontrola CRC vysoký bajt + Kontrola CRC
nízký bajt
Analýza chybového kódu je následující (stejná jako níže)
- 0x01, neplatná funkce
- 0x02, neplatná adresa
- 0x03, neplatná data
- 0x04, chyba podřízeného zařízení

Registry výsledků měření jsou uspořádány podle následující tabulky
Adresa registru Popis Rozlišení
0x0000 Napětí 1LSB odpovídá 0.1V
0x0001 Proud (nižších 16 bitů) 1LSB odpovídá 0.001A
0x0002 Proud (vyšších 16 bitů)
0x0003 Výkon (nižších 16 bitů) 1LSB odpovídá 0.1W
0x0004 Výkon (vyšších 16 bitů)
0x0005 Energie (nižších 16 bitů) 1LSB odpovídá 1Wh
0x0006 Energie (vyšších 16 bitů)
0x0007 Frekvence 1LSB odpovídá 0.1Hz
0x0008 Účiník 1LSB odpovídá 0.01
0x0009 Alarm 0xFFFF - aktivní alarm
0x0000 - neaktivní alarm

Například master odešle následující příkaz (kontrolní kód CRC je nahrazen kódem
0xHH a 0xLL, stejně jako níže).
0x01 + 0x04 + 0x00 + 0x00 + 0x00 + 0x0A + 0xHH + 0xLL
Označuje, že master potřebuje přečíst 10 registrů s adresou slave 0x01 a počáteční
adresa registru je 0x0000
Správná odpověď od slave je následující:
0x01 + 0x04 + 0x14 + 0x08 + 0x98 + 0x03 + 0xE8+0x00 + 0x00 +0x08 + 0x98+ 0x00 +
0x00 + 0x00 + 0x00 + 0x00 + 0x00 + 0x01 + 0xF4 + 0x00 + 0x64 + 0x00 + 0x00 + 0x00 + 0xHH + 0xLL
Výše uvedené údaje ukazují
- Napětí je 0x0898, převedeno na desetinné číslo je 2200, na displeji se zobrazí 220,0V
- Proud je 0x000003E8, převedeno na desetinné číslo je 1000, zobrazí se 1,000A
- Výkon je 0x00000898, převedeno na desetinné číslo je 2200, zobrazí se 220.0W
- Energie je 0x00000000, převedeno na desetinné číslo je 0, zobrazí se 0Wh
- Frekvence je 0x01F4, převedeno na desetinné číslo je 500, zobrazí se 50.0Hz
- Účiník je 0x0064, převedeno na desetinné číslo je 100, zobrazí se 1.00
- Alarmový stav je 0x0000, označuje, že aktuální výkon je nižší než alarmový výkon.

2.4 Čtení a úprava parametrů podřízeného zařízení
V současné době podporuje pouze čtení a úpravu adresy podřízeného zařízení a prahové hodnoty alarmu napájení.

Registry jsou uspořádány podle následující tabulky
Adresa registru Popis Rozlišení
0x0001 Prahová hodnota alarmu napájení 1LSB odpovídá 1W
0x0002 Adresa Modbus-RTU Rozsah od 0x0001 do 0x00F7

V tomto místě musím poznamenat, že když jem se k PZEM připojil a načetl hodnoty parametrů, získal jsem poněkud jiný rozsah dostupných registrů, než je popsáno zde. Více k tomuto uvádím ve vlastní kapitole, níže v tomto článku.

Formát příkazu master pro načtení parametrů slave a načtení měření jsou stejné (podrobně popsané v části 2.3), pouze je třeba změnit kód funkce z původního 2.1 na 2.2. 0x04 na 0x03.
Formát příkazu master pro změnu parametrů podřízených zařízení je (celkem 8 bajtů):
Adresa podřízeného + 0x06 + Adresa registru High Byte + Adresa registru Low Byte + Registr Value High Byte + Register Value Low Byte + CRC Check High Byte + CRC Check Low Byte.
Formát příkazu odpovědi z podřízeného zařízení se dělí na dva druhy:
Správná odpověď: Adresa podřízeného + 0x06 + Počet bajtů + Adresa registru Low Byte + Hodnota registru High Byte + Hodnota registru Low Byte + CRC Check High Byte + CRC Check Low Byte.
Chybná odpověď:
Adresa podřízeného + 0x86 + Chybový kód + Kontrola CRC vysoký bajt + Kontrola CRC nízký bajt.
Například master nastaví práh alarmu napájení slave:
0x01 + 0x06 + 0x00 + 0x01 + 0x08 + 0xFC + 0xHH + 0xLL
Označuje, že master musí nastavit registr 0x0001 (práh alarmu napájení) na hodnotu 0x08FC (2300W).
Při správném nastavení se podřízená jednotka vrací k datům, která jsou odesílána z nadřízené jednotky.
Například master nastaví adresu slave.
0x01 + 0x06 + 0x00 + 0x02 + 0x00 + 0x05 + 0xHH + 0xLL
Označuje, že master musí nastavit registr 0x0002 (adresa Modbus-RTU) na hodnotu 0x0005.
Nastaveno správně, slave se vrátí k datům, která jsou odesílána z masteru.

2.5 Reset energie
Formát příkazu master pro resetování energie slave je (celkem 4 bajty):
Adresa slave + 0x42 + kontrola CRC vysoký bajt + kontrola CRC nízký bajt.
Správná odpověď: adresa slave + 0x42 + CRC check high byte + CRC check low byte.
Chybná odpověď: Adresa podřízeného + 0xC2 + Chybový kód + kontrola CRC vysoký bajt + kontrola CRC nízký bajt

2.6 Kalibrace
Formát příkazu master pro kalibraci slave je (celkem 6 bajtů):
0xF8 + 0x41 + 0x37 + 0x21 + CRC check high byte + CRC check low byte.
Správná odpověď: 0xF8 + 0x41 + 0x37 + 0x21 + CRC check high byte + CRC check low byte.
Chybná odpověď: 0xF8 + 0xC1 + Chybový kód + kontrola CRC vysoký bajt + kontrola CRC nízký bajt.
Je třeba poznamenat, že kalibrace trvá 3 až 4 sekundy poté, co master odešle zprávu. Pokud je kalibrace úspěšná, trvá 3 ~ 4 sekundy, než přijde odpověď od podřízeného zařízení.

2.7 Kontrola CRC
Kontrola CRC používá 16bitový formát, zabírá dva bajty, generátor polynomu je X16 + X15 + X2 +1, hodnota polynomu použitého pro výpočet je 0xA001. Hodnota kontroly CRC je datový rámec, který vydělí všechny výsledky kontroly všech bajtů kromě hodnoty kontroly CRC.

Vlastní zkušenosti, poznámky a ostatní

Jiný rozsah registrů parametrů

Na rozdíl od odstavce 2.4 návodu (výše) jsem zjistil, že modul poskytuje více nastavitelných parametrů než dva uvedené - tedy minimálně pro čtení. Když jsem totiž z připojeného PC zkusil místo s parametry načítat, dostal jsem v příslušných registrech jiné, než očekávané hodnoty. Zkusil jsem tedy, jestli za těmito registry nejsou nějaké další... no a byly. Celkem je možné načíst hodnoty sedmi registrů:

Snažil jsem se tedy na internetu dohledat nějaké informace na toto téma, bohužel nikde nic, jako by problém neexistoval. Tak teda nevím, rád bych ale význam tohoto chápal, protože si nejsem jist, zda třeba změna adresy zařízení, provedená dle dokumentace, nebude mít za následek změnu něčeho jiného, a v důsledku toho pak třeba špatnou fci zařízení.

Projekty s modulem PZEM

Na mnoha místech internetu lze najít různé projekty s tímto modulem, z nichž vybírám ty, které mě něčím zaujaly, nebo obsahovaly zajímavé doplňující informace. Dále zde přikládám odkazy na weby s informacemi, které s PZEM nějak, i když třeba nepřímo, souvisí.

Stránky produktu (výrobce Peacefair) najdeme zde: https://en.peacefair.cn/products/3487.html

Pro pokusy s modulem jsem využíval utilitu Modbus Master pro PC z webu: https://www.modbus.pl/modbus/modbus-master/

Na https://github.com/TheHWcave/Peacefair-PZEM-004T- lze např najít toto schéma 100A modulu s externím CT:

Kromě toho je tam taky popsána úprava pro možnost měření napětí od 0V (POZOR! zřejmě jde ale o informace týkající se modulu v1.0).

Na stránce https://koshka.ddns.net/?p=1584 najdeme webovou aplikaci pro komunikaci s modulem. Její nastavení je sice poněkud nepřehledné, ale po chvíli zápasení se mi ji nastavit a rozkomunikovat podařilo (zde upozorním, že sériové rozhraní je třeba nastavovat jako RS485, jinak aplikace neumožňuje nastavení adresy, což pro v3.0 nemá význam - modul pak nekomunikuje. Navíc pro RS232 pak ani v3.0 nelze vybrat). Pomocí aplikace lze mj. provést změnu adresy modulu či vynulování počítadla energie.
Vlastní webovou aplikaci lze pak spustit z této adresy: https://koshka.ddns.net/pzemweb/v1.1/

A nakonec uvedu projekt, kvůli kterému jsem vlastně modul pořizoval:
https://ptvo.info/zigbee-configurable-firmware-features/external-sensors/pzem-003/
Pomocí PTVO hodlám z PZEM+CC2530 vytvořit zařízení pro ZigBee, které mi bude zajišťovat měření příkonu multisplitové klimatizace, která slouží jako zdroj tepla/chladu v zahradním domě.