TapHome

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:

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

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:

Modbus TCP
Információ
1
IP-cím
Paraméterek
2
Eszközök
Árnyékolók
3
Árnyékolók szintje
Lamellaszög
4
Leállítás
Termosztát
Hőmérséklet
5
Beállított érték
6
Eszköz hozzáadása
Beállított érték
Regiszter típusa
Regiszterindex
Adattípus
Adattípus
Vissza
Árnyékolók
Értékek
Parancsok
OK
  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:

AdatpontTapHome regiszter1-től számozott jelölésFunkciókódÉrték
Árnyékolók szintjeH 04000103 olvasás, 06 írás0–100
Árnyékolók szintje – érvényességH 140002030 = érvényes
Árnyékoló dőléseH 24000303 olvasás, 06 írás0–100
Árnyékoló dőlése – érvényességH 340004030 = érvényes
Árnyékoló megállításaC 40000505 írásON = megállítás
HőmérsékletA 53000604÷ 10 = °C
Hőmérséklet – érvényességA 630007040 = érvényes
Beállított értékH 74000803 olvasás, 06 írás÷ 10 = °C
Beállított érték – érvényességH 840009030 = é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.

A példa olvasása és írása a pymodbus 3.16 segítségével:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from pymodbus.client import ModbusTcpClient

client = ModbusTcpClient("192.168.1.50", 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"Temperature: {value / 10} °C")

# 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 (C#), libmodbus (C), digitalpetri/modbus (Java), goburrow/modbus (Go). A protokollt a Simply Modbus 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észTulajdonságokAlapérték
Modbus TCPTCP port, Slave ID502-es port, a porton következő szabad Slave ID
Modbus RTU, Modbus ASCIIBUS 1, BUS 2 vagy BUS 3 terminál, átviteli sebesség, adatbitek, paritás, stopbitek, Slave IDnincs 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ípusaH holding regiszter, A input regiszter, C coil, D discrete input. A master csak H-t és C-t írhat.
Regiszterindex0 és 65535 között, a cím a Modbus kérésben.
AdattípusA 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.
MultiplierOlvasá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).
ThresholdBool 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.
EndiannessBigEndian 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ódJelentés
0érvényes
1az érték nem fér el az adattípusban (például NaN egész típusban)
2az eszköz nem érhető el, vagy hibás
3a regiszterbeállítások érvénytelenek
5mé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ételMikor
0x01nem támogatott funkciókód
0x02egyetlen é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
0x03olyan é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
0x04az eszköz elutasította az írást
0x0AModbus 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

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

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) és terminálszoftverrel, például a Windowsra készült Terminal programmal ellátott számítógép lehallgathatja a kommunikációt.