---
title: "Modbus a TapHome rendszerben RTU/ASCII/TCP"
description: "A TapHome integrálása BMS-be vagy SCADA-ba Modbuson: kidolgozott példa a TapHome oldali regisztertérképpel, a master adatpontlistájával és Python kóddal."
url: "https://taphome.com/hu/docs/expose-devices/modbus/"
language: hu
lastmod: 2026-11-09
generator: hugo
ai:
  topics: ["modbus-integration","expose-devices","bms-integration","modbus-tcp","rs485-communication","system-integration"]
  questions: ["Hogyan integrálhatom a TapHome-ot egy BMS- vagy SCADA-rendszerbe?","Hogyan oszthatom meg a TapHome eszközeit Modbuson keresztül?","Hogyan néz ki a TapHome Modbus regisztertérképe?","Melyik regisztercímet használja a BMS egy megosztott értékhez?","Milyen regisztertípusokat és adattípusokat használhat egy megosztott érték?","Mit ad vissza az érvényességi regiszter?","Hogyan indít el egy Modbus master egy eszközműveletet, például egy árnyékolóparancsot?","Melyik Slave ID-ra válaszol a TapHome?","Miért kap a master 0x02-es vagy 0x0A-s Modbus kivételt?","Mi változott a Modbus slave interfészeknél a TapHome 2026.1-ben?"]
---

# Modbus a TapHome rendszerben RTU/ASCII/TCP

A TapHome Modbus slave-ként BMS, SCADA vagy PLC számára TCP-n, RTU-n vagy ASCII-n: válaszd ki az eszközök értékeit és műveleteit, a regisztertérképet add át a masternek.

Utoljára frissítve: 2026-11-09

A TapHome Modbus slave-ként (szerverként) is működhet, így egy épületfelügyeleti rendszer (BMS), SCADA vagy PLC Modbus TCP-n, illetve RS485-ön Modbus RTU-n vagy ASCII-n olvassa és vezérli a TapHome eszközeit. Az **Eszközök megosztása** részben kiválasztod az egyes eszközök értékeit és műveleteit, a TapHome mindegyiknek saját regisztert ad, az eredmény pedig egy regisztertérkép, amelyet átadsz annak, aki a mastert beállítja. Egy második Core is így olvashatja az eszközöket ([több Core összekapcsolása](https://taphome.com/hu/docs/configuration/multiple-cores/)).

## Hogyan működik

1. **A Core-on** adj hozzá egy Modbus interfészt, és válaszd ki, mit láthat és mit tehet a master: értékeket (hőmérséklet, árnyékolók szintje, kapcsoló állapota …) és műveleteket (árnyékolóparancsok, átkapcsolás …).
2. **A regisztertérkép** a kiválasztással együtt épül fel: minden érték a következő szabad címen kap egy regisztertartományt, közvetlenül utána pedig egy érvényességi regisztert.
3. **A masteren** az integrátor ugyanezeket a regisztereket adja meg adatpontként (tag-ként). Az olvasás az aktuális értéket adja vissza; az írás kézi változtatásként módosítja az eszközt, ahogy az alkalmazásban.

A Core továbbra is a saját moduljait és smart rule-jait működteti; a Modbus csak a kiválasztott értékeket és műveleteket osztja meg.

## Példa: árnyékoló és termosztát egy BMS számára

Egy épület BMS-e olvassa a helyiség hőmérsékletét, beállítja a termosztát alapjelét, és meg tudja állítani az árnyékolót. A Core-on az **Eszközök megosztása** részben válaszd az **Új felület hozzáadása** → **Modbus TCP** lehetőséget, majd add hozzá az árnyékolót és a termosztátot. Ez a teljes konfiguráció a TapHome oldalán — kattints egy regiszterre vagy az **Eszköz hozzáadása** gombra a következő lépés megtekintéséhez:



1. **A Core IP-címe** — a BMS ehhez csatlakozik. Adj a Core-nak fix címet, például DHCP-foglalással a routerben.
2. **Slave ID** — a BMS-nek ugyanazt a Unit ID-t kell küldenie; a más Unit ID-val érkező kérés 0x0A kivételt kap.
3. **Egy érték** két regisztert foglal el: magát az értéket és utána az érvényességi regisztert. A *×100* a szorzó (Multiplier): a 0,55-ös árnyékolószint 55-ként olvasható.
4. **Egy műveletnek** egy regisztere van, amelybe a BMS ír. A Stop egy coil: ON írása megállítja az árnyékolót.
5. **Regiszterbeállítások** — regisztertípus, index, adattípus, szorzó, bájtsorrend és az érvényességi regiszter. Az alapértékek általában megfelelnek; az indexet akkor módosítsd, ha a BMS rögzített elrendezést vár.
6. **Eszköz hozzáadása** — jelöld be az eszköz értékeit és műveleteit; az **OK** a következő szabad címekre adja hozzá őket. Az írható értékek holding regisztert (H) vagy coilt (C), a csak olvasható értékek input regisztert (A) vagy discrete inputot (D) kapnak.

## A BMS vagy SCADA oldalán

A masternek szüksége van a Core IP-címére és portjára (vagy az RS485 vonal beállításaira), a Slave ID-ra és az adatpontlistára. A fenti példához:

**Adatpontlista**

| Adatpont                         | TapHome regiszter | 1-től számozott jelölés | Funkciókód          | Érték           |
|----------------------------------|-------------------|-------------------------|---------------------|-----------------|
| Árnyékolók szintje               | H 0               | 40001                   | 03 olvasás, 06 írás | 0–100           |
| Árnyékolók szintje – érvényesség | H 1               | 40002                   | 03                  | 0 = érvényes    |
| Árnyékoló dőlése                 | H 2               | 40003                   | 03 olvasás, 06 írás | 0–100           |
| Árnyékoló dőlése – érvényesség   | H 3               | 40004                   | 03                  | 0 = érvényes    |
| Árnyékoló megállítása            | C 4               | 00005                   | 05 írás             | ON = megállítás |
| Hőmérséklet                      | A 5               | 30006                   | 04                  | ÷ 10 = °C       |
| Hőmérséklet – érvényesség        | A 6               | 30007                   | 04                  | 0 = érvényes    |
| Beállított érték                 | H 7               | 40008                   | 03 olvasás, 06 írás | ÷ 10 = °C       |
| Beállított érték – érvényesség   | H 8               | 40009                   | 03                  | 0 = érvényes    |

Minden regiszter Int16 (a coil egy bit). H = holding regiszter, A = input regiszter, C = coil.

> A TapHome 0-tól számozza a regisztereket, ahogyan a kérésben szerepelnek. Az 1-től számozó jelölést használó mastereknél (40001 a 0-s holding regiszterhez) a szám eggyel nagyobb — az eggyel való eltolódás a leggyakoribb oka annak, hogy a master rossz értéket olvas.



**Python (pymodbus)**

A példa olvasása és írása a [pymodbus](https://github.com/pymodbus-dev/pymodbus) 3.16 segítségével:

\```python from pymodbus.client import ModbusTcpClient client = ModbusTcpClient(&#34;192.168.1.50&#34;, port=502) client.connect() # Hőmérséklet: 5-ös input regiszter (érték × 10) és 6-os (érvényesség, 0 = érvényes) 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;) # Beállított érték 22,5 °C: 7-es holding regiszter, ×10-zel szorozva írva client.write\_register(7, 225, device\_id=1) # Az árnyékoló megállítása: ON írása a 4-es coilba client.write\_coil(4, True, device\_id=1) client.close() \`\`\`

Könyvtárak más nyelvekhez: [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). A protokollt a [Simply Modbus](http://www.simplymodbus.ca/) magyarázza el.

A masternek az érvényességi regisztert az értékkel együtt kell olvasnia (egy kérésben mindkettőt), és minden 0-tól eltérő kódot hibaként kell kezelnie — így egy elveszett eszköz a BMS-ben hibaként jelenik meg, nem befagyott értékként.

## Interfészek és kommunikációs tulajdonságok

| Interfész | Tulajdonságok | Alapérték |
|---|---|---|
| **Modbus TCP** | **TCP port**, **Slave ID** | 502-es port, a porton következő szabad Slave ID |
| **Modbus RTU**, **Modbus ASCII** | BUS 1, BUS 2 vagy BUS 3 terminál, átviteli sebesség, adatbitek, paritás, stopbitek, **Slave ID** | nincs terminál, 9600 baud, 8 adatbit (ASCII 7), paritás None, 1 stopbit, Slave ID 1 |

- **Több master TCP-n:** több Modbus TCP interfész is használhatja ugyanazt a portot, ha eltérő a Slave ID-juk — például egy a BMS-hez és egy egy második Core-hoz, mindegyik saját regiszterekkel. Egyszerre legfeljebb 10 kapcsolat lehet.
- **RS485:** az RTU vagy ASCII interfész csak akkor indul el, ha kiválasztasz egy terminált, és egy terminálon csak egy interfész lehet.
- **A Slave ID** 1 és 247 között lehet. Az interfész csak a sajátjára válaszol: a Modbus TCP más Unit ID-ra (0-ra vagy 255-re is) 0x0A kivételt ad vissza, az RTU és az ASCII nem válaszol a más címre szóló keretekre.

Az interfészek listája jelzi az ütközéseket, például ha ugyanaz a port és Slave ID kétszer szerepel, vagy ha egy interfésznek nincs terminálja.

## Regiszterbeállítások

| Beállítás | Értékek |
|---|---|
| **Regiszter típusa** | **H** holding regiszter, **A** input regiszter, **C** coil, **D** discrete input. A master csak H-t és C-t írhat. |
| **Regiszterindex** | 0 és 65535 között, a cím a Modbus kérésben. |
| **Adattípus** | A Bool, az Int16 és az UInt16 egy regisztert foglal el, az Int32, az UInt32 és a Float kettőt. A C és a D csak Boolt hordoz. |
| **Multiplier** | Olvasás: regiszter = érték × szorzó. Írás: érték = regiszter ÷ szorzó. A hőmérséklet alapértelmezése ×10, a szinteké és a százalékoké ×100 (0,55 → 55). |
| **Threshold** | Bool esetén numerikus értéken a szorzó helyett: true, ha az érték eléri a küszöbértéket (legalább akkora); true írása egy coilba az értéket a küszöbértékre, false írása 0-ra állítja. |
| **Endianness** | BigEndian vagy LittleEndian; a **Byte swap** az Int32, UInt32 és Float minden regiszterén belül a bájtokat is felcseréli. |

Az interfész részletei megjelölik azokat a regisztereket, amelyek tartományai átfedik egymást. Az átfedő értéket a rendszer nem szolgálja ki — adj minden értéknek saját tartományt, az érvényességi regiszterével együtt.

## Érvényességi regiszter és tartalékérték

Az **Include validity register** (C és D esetén **Include validity bit**) alapértelmezés szerint be van kapcsolva. Az értéket közvetlenül követő, csak olvasható regiszter jelzi a masternek, hogy az érték érvényes-e; ha nem, az érték regiszterei helyette a **Fallback value** értéket adják vissza (Float esetén NaN-t a **Use NaN as fallback** beállítással).

| Kód | Jelentés |
|---|---|
| 0 | érvényes |
| 1 | az érték nem fér el az adattípusban (például NaN egész típusban) |
| 2 | az eszköz nem érhető el, vagy hibás |
| 3 | a regiszterbeállítások érvénytelenek |
| 5 | még nincs érték, például közvetlenül a Core indulása után |

C és D esetén az érvényességi bit 1, ha az érték nem érvényes.

## Műveletek

- **A paraméter nélküli műveletnek** (Stop, Átkapcsolás …) egy regisztere van H-n vagy C-n. 1 vagy nagyobb érték, illetve coil esetén ON írása elindítja; 0 írása 0x03 kivételt ad vissza.
- **A paraméteres műveletnek** (hozzáadás az árnyékolók szintjéhez, tartomány beállítása …) paraméterenként egy holding regisztere van, egymás után. Egyetlen írásnak mindegyiket le kell fednie; ha csak néhányat írsz, 0x03 kivételt ad vissza.
- A műveletregiszterek csak írhatók — olvasásuk 0x02 kivételt ad vissza.

## Mit kap a master

A TapHome a 01, 02, 03, 04, 05, 06, 15 és 16 funkciókódot szolgálja ki. Egy kérés több egymást követő értéket is olvashat; egyébként a master kivételt kap:

| Kivétel | Mikor |
|---|---|
| 0x01 | nem támogatott funkciókód |
| 0x02 | egyetlen értékhez sem rendelt cím, hézagos tartomány, írás A-ra vagy D-re, műveletregiszter olvasása, írás érvényességi regiszterbe |
| 0x03 | olyan érték, amelyet az eszköz nem tud fogadni, vagy érvénytelen műveletírás; a több értéket tartalmazó írás vagy teljesen végrehajtódik, vagy egyáltalán nem |
| 0x04 | az eszköz elutasította az írást |
| 0x0A | Modbus TCP: az interfészétől eltérő Slave ID (Unit ID) |

A Modbus TCP lezárja a 15 percig tétlen kapcsolatokat.

## Frissítés 2026.1-re

> [!WARNING]
> A vezérlőegység 2026.1-re frissítésekor a meglévő Modbus slave interfészek automatikusan átalakulnak, a regisztercímek és a Slave ID megtartásával. A KNX-árnyékoló, a Packet parser árnyékolója és **Napellenző** eszköze, valamint a virtuális **Napellenző** eszköz Stop regisztere nem alakul át; az ezt használó master a regiszter címén 0x02-es kivételt kap ([2026.1 kiadási megjegyzések](https://taphome.com/hu/docs/release-notes/2026-1/#expose-devices)).

A 2026.1 óta a Modbus TCP csak a saját Slave ID-jára válaszol — ha a mastered 0-s vagy 255-ös Unit ID-t küld, állítsd át az interfész Slave ID-jára.

## Modbus RTU-kapcsolatok hibakeresése

Az RS485 közös busz, így az integráció során egy USB–RS485 átalakítóval (például [FTDI USB-RS485-WE-1800-BT](https://ftdichip.com/products/usb-rs485-we-1800-bt/)) és terminálszoftverrel, például a Windowsra készült [Terminal](http://www.der-hammer.info/terminal/) programmal ellátott számítógép lehallgathatja a kommunikációt.
