TapHome pro Modbus RTU / ASCII / TCP
TapHome jako Modbus slave pro BMS, SCADA či PLC přes Modbus TCP, RTU nebo ASCII: vyberte hodnoty a akce zařízení, předejte mapu registrů masteru a tam ji čtěte.
Poslední aktualizace:
TapHome může pracovat jako Modbus slave (server), takže systém řízení budovy (BMS), SCADA nebo PLC čte a ovládá zařízení TapHome přes Modbus TCP nebo přes Modbus RTU či ASCII na RS485. V části Vystavit zařízení vyberete hodnoty a akce každého zařízení, TapHome každé přidělí vlastní registr a výsledkem je mapa registrů, kterou předáte tomu, kdo nastavuje master. Takto může zařízení číst i druhý Core (propojení více Core).
Jak to funguje
- Na Core přidejte rozhraní Modbus a vyberte, co smí master vidět a dělat: hodnoty (teplota, úroveň žaluzií, stav spínače …) a akce (příkazy žaluzií, přepnutí …).
- Mapa registrů vzniká průběžně s výběrem: každá hodnota dostane rozsah registrů na nejbližší volné adrese a hned za ním registr platnosti.
- Na masteru zadá integrátor stejné registry jako body nebo tagy. Čtení vrátí aktuální hodnotu; zápis změní zařízení jako manuální změna, stejně jako v aplikaci.
Core dál řídí své moduly a smart rules; Modbus jen sdílí hodnoty a akce, které jste vybrali.
Příklad: žaluzie a termostat pro BMS
BMS budovy čte teplotu v místnosti, nastavuje požadovanou teplotu termostatu a může zastavit žaluzie. Na Core v části Vystavit zařízení vyberte Přidat nové rozhraní → Modbus TCP a potom přidejte žaluzie a termostat. Toto je úplná konfigurace na straně TapHome — klikněte na registr nebo na Přidat zařízení a uvidíte další krok:
- IP adresa Core — BMS se připojuje na tuto adresu. Dejte Core pevnou adresu, například rezervací DHCP v routeru.
- Slave ID — BMS musí posílat stejné Unit ID; požadavek s jiným dostane výjimku 0x0A.
- Hodnota zabírá dva registry: samotnou hodnotu a za ní registr platnosti. ×100 je násobitel: úroveň žaluzií 0,55 se čte jako 55.
- Akce má jeden registr, do kterého BMS zapisuje. Stop je coil: zápis ON zastaví žaluzie.
- Nastavení registru — typ registru, index, datový typ, násobitel, pořadí bajtů a registr platnosti. Výchozí hodnoty obvykle vyhovují; index změňte, když BMS očekává pevné rozložení.
- Přidat zařízení — zaškrtněte hodnoty a akce zařízení; OK je přidá na nejbližší volné adresy. Zapisovatelné hodnoty dostanou holding register (H) nebo coil (C), hodnoty jen pro čtení input register (A) nebo discrete input (D).
Na straně BMS nebo SCADA
Master potřebuje IP adresu a port Core (nebo nastavení linky RS485), Slave ID a seznam bodů. Pro příklad výše:
| Bod | Registr TapHome | Číslování od 1 | Funkční kód | Hodnota |
|---|---|---|---|---|
| Úroveň žaluzií | H 0 | 40001 | 03 čtení, 06 zápis | 0–100 |
| Platnost úrovně žaluzií | H 1 | 40002 | 03 | 0 = platná |
| Úhel lamel | H 2 | 40003 | 03 čtení, 06 zápis | 0–100 |
| Platnost úhlu lamel | H 3 | 40004 | 03 | 0 = platná |
| Zastavení žaluzií | C 4 | 00005 | 05 zápis | ON = zastavit |
| Teplota | A 5 | 30006 | 04 | ÷ 10 = °C |
| Platnost teploty | A 6 | 30007 | 04 | 0 = platná |
| Požadovaná teplota | H 7 | 40008 | 03 čtení, 06 zápis | ÷ 10 = °C |
| Platnost požadované teploty | H 8 | 40009 | 03 | 0 = platná |
Všechny registry jsou Int16 (coil je jeden bit). H = holding register, A = input register, C = coil.
TapHome čísluje registry od 0, tak jak se posílají v požadavku. Mastery, které používají číslování od 1 (40001 pro holding register 0), mají číslo o jedna vyšší — posun o jedna je nejčastější příčina čtení nesprávné hodnoty.
Čtení a zápis z příkladu přes pymodbus 3.16:
| |
Knihovny pro jiné jazyky: NModbus4 (C#), libmodbus (C), digitalpetri/modbus (Java), goburrow/modbus (Go). Protokol vysvětluje Simply Modbus.
Master by měl číst registr platnosti spolu s hodnotou (obojí jedním požadavkem) a každý kód jiný než 0 brát jako poruchu — ztracené zařízení se pak v BMS ukáže jako porucha, ne jako zamrzlá hodnota.
Rozhraní a komunikační vlastnosti
| Rozhraní | Vlastnosti | Výchozí |
|---|---|---|
| Modbus TCP | TCP port, Slave ID | port 502, nejbližší volné Slave ID na portu |
| Modbus RTU, Modbus ASCII | svorka BUS 1, BUS 2 nebo BUS 3, přenosová rychlost, datové bity, parita, stop bity, Slave ID | bez svorky, 9600 Bd, 8 datových bitů (ASCII 7), parita None, 1 stop bit, Slave ID 1 |
- Více masterů přes TCP: více rozhraní Modbus TCP může sdílet jeden port, pokud mají různá Slave ID — například jedno pro BMS a jedno pro druhý Core, každé s vlastními registry. Najednou nejvýše 10 spojení.
- RS485: rozhraní RTU nebo ASCII se spustí až po výběru svorky a jedna svorka nese jedno rozhraní.
- Slave ID je 1 až 247. Rozhraní odpovídá jen na vlastní: Modbus TCP vrátí na jiné Unit ID (i 0 nebo 255) výjimku 0x0A, RTU a ASCII na rámce pro jinou adresu neodpovídají.
Seznam rozhraní ukazuje konflikty, například stejný port a Slave ID dvakrát nebo rozhraní bez svorky.
Nastavení registru
| Nastavení | Hodnoty |
|---|---|
| Typ registru | H holding register, A input register, C coil, D discrete input. Master může zapisovat jen do H a C. |
| Index registru | 0 až 65535, adresa v požadavku Modbus. |
| Datový typ | Bool, Int16 a UInt16 zabírají jeden registr, Int32, UInt32 a Float dva. C a D nesou jen Bool. |
| Multiplier | Čtení: registr = hodnota × násobitel. Zápis: hodnota = registr ÷ násobitel. Teploty mají výchozí ×10, úrovně a procenta ×100 (0,55 → 55). |
| Threshold | Místo násobitele pro Bool na číselné hodnotě: true, když hodnota dosáhne alespoň prahu; zápis true do coilu nastaví hodnotu na práh, false na 0. |
| Endianness | BigEndian nebo LittleEndian; Byte swap navíc prohodí bajty uvnitř každého registru u Int32, UInt32 a Float. |
Detail rozhraní označí registry, jejichž rozsahy se překrývají. Překrývající se hodnota se neobsluhuje — dejte každé hodnotě vlastní rozsah včetně jejího registru platnosti.
Registr platnosti a náhradní hodnota
Include validity register (u C a D Include validity bit) je ve výchozím stavu zapnutý. Registr jen pro čtení hned za hodnotou oznamuje masteru, zda je hodnota platná; když není, registry hodnoty místo ní vrátí Fallback value (u Float NaN s volbou Use NaN as fallback).
| Kód | Význam |
|---|---|
| 0 | platná |
| 1 | hodnota se nevejde do datového typu (například NaN v celočíselném typu) |
| 2 | zařízení je nedostupné nebo v chybě |
| 3 | nastavení registru je neplatné |
| 5 | zatím žádná hodnota, například hned po startu Core |
U C a D je bit platnosti 1, když hodnota není platná.
Akce
- Akce bez parametrů (Stop, Toggle …) má jeden registr na H nebo C. Zápis 1 nebo více, případně coil ON, ji spustí; zápis 0 vrátí výjimku 0x03.
- Akce s parametry (přičtení k úrovni žaluzií, nastavení rozsahu …) má jeden holding register na každý parametr, jeden za druhým. Jeden zápis musí pokrýt všechny; zápis jen některých vrátí výjimku 0x03.
- Registry akcí jsou jen pro zápis — jejich čtení vrátí výjimku 0x02.
Co dostane master
TapHome obsluhuje funkční kódy 01, 02, 03, 04, 05, 06, 15 a 16. Jeden požadavek může číst více hodnot za sebou; jinak master dostane výjimku:
| Výjimka | Kdy |
|---|---|
| 0x01 | nepodporovaný funkční kód |
| 0x02 | adresa nepřiřazená žádné hodnotě, rozsah s mezerou, zápis do A nebo D, čtení registru akce, zápis do registru platnosti |
| 0x03 | hodnota, kterou zařízení nemůže přijmout, nebo neplatný zápis akce; zápis více hodnot se provede celý, nebo vůbec |
| 0x04 | zařízení zápis odmítlo |
| 0x0A | Modbus TCP: jiné Slave ID (Unit ID), než má rozhraní |
Modbus TCP zavře spojení, které je 15 minut nečinné.
Aktualizace na 2026.1
Při aktualizaci řídicí jednotky na 2026.1 se existující rozhraní Modbus slave převedou automaticky se zachováním adres registrů a Slave ID. Registr Stop žaluzie KNX, žaluzie a zařízení Roleta typu Packet parser a virtuálního zařízení Roleta se nepřevede; master, který ho používal, dostane na jeho adrese výjimku 0x02 (release notes 2026.1).
Od verze 2026.1 odpovídá Modbus TCP jen na vlastní Slave ID — pokud váš master posílá Unit ID 0 nebo 255, nastavte ho na Slave ID rozhraní.
Ladění spojení Modbus RTU
RS485 je sdílená sběrnice, takže počítač s převodníkem USB na RS485 (například FTDI USB-RS485-WE-1800-BT) a terminálovým softwarem, jako je Terminal pro Windows, může během integrace odposlouchávat komunikaci.