---
title: "TapHome pro Modbus RTU / ASCII / TCP"
description: "Integrujte TapHome do BMS nebo SCADA přes Modbus: příklad s mapou registrů na straně TapHome, seznamem bodů pro master a ukázkou v Pythonu."
url: "https://taphome.com/cs/docs/expose-devices/modbus/"
language: cs
lastmod: 2026-11-09
generator: hugo
ai:
  topics: ["modbus-integration","expose-devices","bms-integration","modbus-tcp","rs485-communication","system-integration"]
  questions: ["Jak integruji TapHome do systému BMS nebo SCADA?","Jak vystavím zařízení TapHome přes Modbus?","Jak vypadá mapa registrů Modbus v TapHome?","Jakou adresu registru použije BMS pro vystavenou hodnotu?","Jaké typy registrů a datové typy může vystavená hodnota použít?","Co vrací registr platnosti?","Jak Modbus master spustí akci zařízení, například příkaz žaluzií?","Na které Slave ID TapHome odpovídá?","Proč master dostává výjimku Modbus 0x02 nebo 0x0A?","Co se v rozhraních Modbus slave změnilo s TapHome 2026.1?"]
---

# 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: 2026-11-09

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](https://taphome.com/cs/docs/configuration/multiple-cores/)).

## Jak to funguje

1. **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í …).
2. **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.
3. **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:



1. **IP adresa Core** — BMS se připojuje na tuto adresu. Dejte Core pevnou adresu, například rezervací DHCP v routeru.
2. **Slave ID** — BMS musí posílat stejné Unit ID; požadavek s jiným dostane výjimku 0x0A.
3. **Hodnota** zabírá dva registry: samotnou hodnotu a za ní registr platnosti. *×100* je násobitel: úroveň žaluzií 0,55 se čte jako 55.
4. **Akce** má jeden registr, do kterého BMS zapisuje. Stop je coil: zápis ON zastaví žaluzie.
5. **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í.
6. **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:

**Seznam bodů**

| 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.



**Python (pymodbus)**

Čtení a zápis z příkladu přes [pymodbus](https://github.com/pymodbus-dev/pymodbus) 3.16:

\```python from pymodbus.client import ModbusTcpClient client = ModbusTcpClient(&#34;192.168.1.50&#34;, port=502) client.connect() # Teplota: input register 5 (hodnota × 10) a 6 (platnost, 0 = platná) rr = client.read\_input\_registers(5, count=2, device\_id=1) value, validity = client.convert\_from\_registers(rr.registers, client.DATATYPE.INT16) if validity == 0: print(f&#34;Temperature: {value / 10} °C&#34;) # Požadovaná teplota 22,5 °C: holding register 7, zapisuje se × 10 client.write\_register(7, 225, device\_id=1) # Zastavení žaluzií: zápis ON do coilu 4 client.write\_coil(4, True, device\_id=1) client.close() \`\`\`

Knihovny pro jiné jazyky: [NModbus4](https://github.com/NModbus4/NModbus4) (C#), [libmodbus](https://libmodbus.org) (C), [digitalpetri/modbus](https://github.com/digitalpetri/modbus) (Java), [goburrow/modbus](https://github.com/goburrow/modbus) (Go). Protokol vysvětluje [Simply Modbus](http://www.simplymodbus.ca/).

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

> [!WARNING]
> 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](https://taphome.com/cs/docs/release-notes/2026-1/#expose-devices)).

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](https://ftdichip.com/products/usb-rs485-we-1800-bt/)) a terminálovým softwarem, jako je [Terminal](http://www.der-hammer.info/terminal/) pro Windows, může během integrace odposlouchávat komunikaci.
