Konečně jsem našel čas pořádný průzkum a popis Modbus komunikace a jejího využití v automatizaci domácností i komerčních budov.
První – v podstatě bezproblémovou – instalací bylo nasazení elektroměrů s Modbus komunikací pomocí Loxone Modbus Extension. Nastavení Eastron 630 popisuji v předchozích článcích (1) a (2). Jen tak na okraj podotýkám, že šablona z Loxone Library obsahuje několik chyb, stejně jako šablona pro další oblíbený elektroměr Inepro 380. Snad se k tomu někdy dostanu a udělám pořádnou šablonu – ve svých instalacích mám opraveno.
Zajímalo mě jednak využití skvělého produktu (zejména pro průmyslové použití) Moxa MGate 3170, kterých několik kusů se ke mně dostalo. Jde o převodníky obecně sériové komunikace (RS-485/RS-232) na síťovou komunikaci, ale o těch někdy příště. Taktéž jsem chtěl mít možnost vyčítat či zapisovat data z různých produktů z Ali, které jsou k dostání za pár peněz a umí poskytnout relevantní informace přes Modbus.
Na první pokusy je ovšem nejlepší pořídit si převodník USB-RS485, například tento (mám vyzkoušen):

Po připojení se nastaví jako nějaký port COM1-5, je možno zjistit přes Správce zařízení (WIN+X a vybrat Správce zařízení 😉 a v sekci Porty je následně vidět číslo COM portu (důležité pro nastavení komunikace – viz dále).
Nyní je třeba nainstalovat software pro Modbus komunikaci, kterých je nepřeberné množství. Já jsem zakotvil u free programu qModMaster (dále QMM) protože umožňuje jak RTU (to je sériová komunikace pomocí 2 vodičů A/B) tak TCP (čili přes počítačovou síť – většina sofistikovaných zařízení z oblasti elektro – např. tepelná čerpadla, střídače pro FVE apod. umožňuje Modbus komunikaci přes TCP/IP). QMM navíc disponuje samostatným oknem pro zobrazení komunikace na úrovni jednotlivých příkazů po bytech, což se někdy docela hodí (a ve finále to není tak složité, zpočátku jde o změť čísel, za chvíli se ale člověk zorientuje a vidí na té nejnižší úrovni, jak komunikace probíhá).
Občas používám Modbus Poll, který je graficky naprosto zastaralý (úroveň cca Win 3.11) a placený a za mě předražený (zatím jedu v demo režimu), ale umí zobrazit vícero oken, což se hodí, chceme-li vyčítat více registrů najednou. Samozřejmě je možné získat správná data postupně po jednotlivých registrech a poskládat si více senzorů pak až v Loxone do jednoho zařízení. Bude popsáno postupně dále v dalších článcích.
Zpět odbočka k hardware – pokud si budete objednávat převodník, přihoďte si do košíku i tento Meřič DC napětí a proudu – skvělá a navíc smysluplná věc na první hrátky s Modbus… Umožňuje to, co je zajímavé na Loxone Power and Backup, a sice měřit napětí a hlavně protékající stejnosměrný proud tímto měřičem. Má v sobě 2 kanály, až do 5A každý (pokud zvolíte správnou variantu) a určitě bych jej doporučil zařadit na jednotlivé DC větve rozvodů. Tak můžete hezky zjistit, kolik „žere“ které LED svítidlo na 24V či LED pásek či jen komponenty Loxone apod. aniž byste se chodili dívat do rozvaděče na Volt/Ampérmetr (nebo třeba tento jednodušší), i když i toto je samozřejmě řešení.

Pro fungující zapojení je třeba přivést na svorky GND a VN napájecí referenční napětí (klidně 24V přímo ze zdroje pro Loxone větev – spotřeba je minimální) a na svorky A/B komunikaci do USB převodníku či následně pro integraci s Loxone do Modbus extension či Moxa či jiného RTU/TCP převodníku. Nepřipojujte na svorky VN napájecí napětí +5V z převodníku USB, toto napětí je příliš nízké a měřák nebude dávat správné údaje. Na svorky I1+ a I1- připojte opět napájecí napětí (+24V) a na O1+ a O1- zapojte spotřebič (LED pásek nebo napájení Loxone dimmeru apod.). Pamatujte na max. přípustný proud 5A!
Nyní je vše připraveno pro samotné měření, takže po spuštění QMM je třeba jen nastavit parametry komunikace.
U Modbus protokolu to je:
- přenosová rychlost: (typicky 9600 baudů, následně násobky, kdy další používané „oblíbené“ hodnoty jsou 19200, 57600 a 115200)
- počet datových bitů: (v 99.9% případů 8)
- počet stop bitů: (0, 1, 2)
- parita: (sudá / lichá / žádná = N)
- a pak samozřejmě adresa zařízení, protože Modbus umožňuje řetězení zařízení (kdy každé musí mít pochopitelně různou adresu [1-254] ale VŠECHNY OSTATNÍ PARAMETRY MUSÍ BÝT STEJNÉ!
Většina sofistikovanějších zařízení umožňuje nastavit nejen svou adresu, ale i zbývající parametry, ovšem některé levnější „hračky“ toto neumí. Pak je tedy třeba přizpůsobit ostatní zařízení tomuto jednomu, které má parametry fixní. Ovšem např. jeden DC elektroměr od Peacefair má natvrdo nastaveny naprosto nestandardní 2 stop bity, což je poměrně problém.
Zde použitý DC volt/ampérmetr umožňuje nastavení většiny parametrů, ovšem aby je bylo možno nastavit, je třeba se připojit jeho z výroby nastavenými parametry, které jsou 9600/8/1/N čili rychlost 9600 baudů, 8 datových +1 stop bit a žádná parita. Defaultní adresa je 1. Nastavíme tedy v QMM parametry pro RTU komunikaci. Sériový port vyberte ten, na kterém máte převodník USB. Options -> Modbus RTU:

Pak ještě změníme Options -> Settings parametr Base addr na 0 (default je 1, což znamená, že přičítá k zadanému registru jedničku, čili pokud chcete vyčítat registr s adresou např. 32 DEC, zadáváte 33 DEC. Zbytečně matoucí).

Pak už jen Commands -> Connect a spojení by mělo být navázáno. Následně ještě View – Bus monitor otevře samostatné okno, kde je vidět formát zasílaných a přijímaných dat.
Jako první příklad zkusíme ověřit a následně změnit adresu zařízení:
Adresa zařízení je zapsána v registru FD hex čili 253 dec. Já jsem si již dříve změnil ID na 111, vy nechejte Unit ID: 1; function code je 03 čili čtení z registrů. Čteme jediný registr a výsledek chceme v desítkové soustavě.
Commands -> Read/Write by měl vrátit číslo 1 (u mě 111)

Pokud chcete změnit Unit ID např. na 111, je potřeba použít funkci 6 (zápis single registru). Zde v tomto příkladu měním Unit ID ze 101 na 111 (vy máte pořád Unit ID =1). Pouze se tedy změní funkce na 06 (Write single register) a dole v tabulce vpište nové ID (zde tedy 111). Následně Commands – R/W a… Error. Nelekejte se, to se jen zapsalo nové Unit ID (111) ale komunikace zůstala nastavena na původní Unit ID 101. Pokud nyní změníte Unit ID na 111 a dáte předchozí příklad (načíst hodnotu registru FD hex, mělo by vrátit 111).

Nyní již měření napětí a proudu (já používám unit s ID 101). Jde o funkci 03 čili čtení a adresy registrů jsou:
- 00 dec = protékající proud obvod 01
- 32 dec = napětí obvod 01
- 64 dec = protékající proud obvod 02
- 96 dec = napětí obvod 02
Počet registrů by měl být 2. Zde tedy měření proudu v obvodu 1 po připojení LED pásku: výsledek je 450 mA čili 0,45A a na druhém obrázku napětí 25,96V.


Příště zaintegrujeme tento měřák do Loxone.
Poznámka na závěr – tento měřič umí nastavit i parametry komunikace (vyzkoušeno) a případně i korigovat naměřené hodnoty podle např. laboratorního přesného měřáku zápisem do patřičných registrů, to jsem nezkoušel, pro mé potřeby je přesnost dostačující a odpovídá naměřeným hodnotám pomocí běžného volt/ampérmetru.
Kompletní přehled registrů přikládám ke stažení. Málokdy se u výrobku z Číny vidí takto podrobně a korektně zpracovaná dokumentace.