TapHome

TapHome pre Modbus RTU / ASCII / TCP

TapHome ako Modbus slave pre BMS, SCADA či PLC cez Modbus TCP, RTU alebo ASCII: vyberte hodnoty a akcie zariadení, mapu registrov dajte mastrovi a čítajte ju tam.

Posledná aktualizácia:

TapHome môže pracovať ako Modbus slave (server), takže systém riadenia budovy (BMS), SCADA alebo PLC číta a ovláda zariadenia TapHome cez Modbus TCP alebo cez Modbus RTU či ASCII na RS485. V časti Vystaviť zariadenia vyberiete hodnoty a akcie každého zariadenia, TapHome každej pridelí vlastný register a výsledkom je mapa registrov, ktorú odovzdáte tomu, kto nastavuje master. Takto môže zariadenia čítať aj druhý Core (prepojenie viacerých Core).

Ako to funguje

  1. Na Core pridajte rozhranie Modbus a vyberte, čo smie master vidieť a robiť: hodnoty (teplota, úroveň žalúzií, stav spínača …) a akcie (príkazy žalúzií, prepnutie …).
  2. Mapa registrov vzniká priebežne podľa vášho výberu: každá hodnota dostane rozsah registrov na najbližšej voľnej adrese a hneď za ním register platnosti.
  3. Na mastri zadá integrátor tie isté registre ako body alebo tagy. Čítanie vráti aktuálnu hodnotu; zápis zmení zariadenie ako manuálna zmena, rovnako ako v aplikácii.

Core ďalej riadi vlastné moduly a smart rules; Modbus len zdieľa hodnoty a akcie, ktoré ste vybrali.

Príklad: žalúzie a termostat pre BMS

BMS budovy číta teplotu v miestnosti, nastavuje požadovanú teplotu termostatu a môže zastaviť žalúzie. Na Core v časti Vystaviť zariadenia vyberte Pridať nové rozhranie → Modbus TCP a potom pridajte žalúzie a termostat. Toto je úplná konfigurácia na strane TapHome — kliknite na register alebo na Pridať zariadenie a uvidíte ďalší krok:

Modbus TCP
Informácie
1
IP adresa
Parametre
2
Zariadenia
Žalúzie
3
Úroveň žalúzií
Uhol lamiel
4
Zastaviť
Termostat
Teplota
5
Požadovaná teplota
6
Pridať zariadenie
Požadovaná teplota
Typ registra
Index registra
Dátový typ
Dátový typ
Späť
Žalúzie
Hodnoty
Príkazy
OK
  1. IP adresa Core — BMS sa k nemu pripája. Dajte Core pevnú adresu, napríklad rezerváciou DHCP v routeri.
  2. Slave ID — BMS musí posielať rovnaké Unit ID; požiadavka s iným ID dostane výnimku 0x0A.
  3. Hodnota zaberá dva registre: samotnú hodnotu a za ňou register platnosti. ×100 je násobiteľ: úroveň žalúzií 0,55 sa číta ako 55.
  4. Akcia má jeden register, do ktorého BMS zapisuje. Stop je coil: zápis ON zastaví žalúzie.
  5. Nastavenia registra — typ registra, index, dátový typ, násobiteľ, poradie bajtov a register platnosti. Predvolené hodnoty zvyčajne vyhovujú; index zmeňte, keď BMS očakáva pevné rozloženie.
  6. Pridať zariadenie — zaškrtnite hodnoty a akcie zariadenia; OK ich pridá na najbližšie voľné adresy. Zapisovateľné hodnoty dostanú holding register (H) alebo coil (C), hodnoty len na čítanie input register (A) alebo discrete input (D).

Na strane BMS alebo SCADA

Master potrebuje IP adresu a port Core (alebo nastavenia linky RS485), Slave ID a zoznam bodov. Pre príklad vyššie:

BodRegister TapHomeZápis od 1Funkčný kódHodnota
Úroveň žalúziíH 04000103 čítanie, 06 zápis0–100
Platnosť úrovne žalúziíH 140002030 = platná
Uhol lamielH 24000303 čítanie, 06 zápis0–100
Platnosť uhla lamielH 340004030 = platná
Zastavenie žalúziíC 40000505 zápisON = zastaviť
TeplotaA 53000604÷ 10 = °C
Platnosť teplotyA 630007040 = platná
Požadovaná teplotaH 74000803 čítanie, 06 zápis÷ 10 = °C
Platnosť požadovanej teplotyH 840009030 = platná

Všetky registre sú Int16 (coil je jeden bit). H = holding register, A = input register, C = coil.

TapHome čísluje registre od 0, tak ako sa posielajú v požiadavke. Mastre, ktoré používajú zápis od 1 (40001 pre holding register 0), majú číslo o jedna vyššie — posun o jednu je najčastejšia príčina čítania nesprávnej hodnoty.

Čítanie a zápis z príkladu cez pymodbus 3.16:

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

# Teplota: input register 5 (hodnota × 10) a 6 (platnosť, 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"Temperature: {value / 10} °C")

# Požadovaná teplota 22,5 °C: holding register 7, zapisuje sa × 10
client.write_register(7, 225, device_id=1)

# Zastavenie žalúzií: zápis ON do coilu 4
client.write_coil(4, True, device_id=1)
client.close()

Knižnice pre iné jazyky: NModbus4 (C#), libmodbus (C), digitalpetri/modbus (Java), goburrow/modbus (Go). Protokol vysvetľuje Simply Modbus.

Master by mal čítať register platnosti spolu s hodnotou (oboje jednou požiadavkou) a každý kód iný než 0 brať ako poruchu — stratené zariadenie sa potom v BMS ukáže ako porucha, nie ako zamrznutá hodnota.

Rozhrania a komunikačné vlastnosti

RozhranieVlastnostiPredvolené
Modbus TCPTCP port, Slave IDport 502, najbližšie voľné Slave ID na porte
Modbus RTU, Modbus ASCIIsvorka BUS 1, BUS 2 alebo BUS 3, prenosová rýchlosť, dátové bity, parita, stop bity, Slave IDbez svorky, 9600 Bd, 8 dátových bitov (ASCII 7), parita None, 1 stop bit, Slave ID 1
  • Viac mastrov cez TCP: viac rozhraní Modbus TCP môže zdieľať jeden port, ak majú rôzne Slave ID — napríklad jedno pre BMS a jedno pre druhý Core, každé s vlastnými registrami. Naraz najviac 10 spojení.
  • RS485: rozhranie RTU alebo ASCII sa spustí až po výbere svorky a jedna svorka nesie jedno rozhranie.
  • Slave ID je 1 až 247. Rozhranie odpovedá len na vlastné: Modbus TCP vráti na iné Unit ID (aj 0 alebo 255) výnimku 0x0A, RTU a ASCII na rámce pre inú adresu neodpovedajú.

Zoznam rozhraní ukazuje konflikty, napríklad rovnaký port a Slave ID dvakrát alebo rozhranie bez svorky.

Nastavenia registra

NastavenieHodnoty
Typ registraH holding register, A input register, C coil, D discrete input. Master môže zapisovať len do H a C.
Index registra0 až 65535, adresa v požiadavke Modbus.
Dátový typBool, Int16 a UInt16 zaberajú jeden register, Int32, UInt32 a Float dva. C a D nesú len Bool.
MultiplierČítanie: register = hodnota × násobiteľ. Zápis: hodnota = register ÷ násobiteľ. Teploty majú predvolene ×10, úrovne a percentá ×100 (0,55 → 55).
ThresholdNamiesto násobiteľa pre Bool na číselnej hodnote: true, keď hodnota dosiahne aspoň prah; zápis true do coilu nastaví hodnotu na prah, false na 0.
EndiannessBigEndian alebo LittleEndian; Byte swap navyše prehodí bajty vnútri každého registra pri Int32, UInt32 a Float.

Detail rozhrania označí registre, ktorých rozsahy sa prekrývajú. Prekrývajúca sa hodnota sa neobsluhuje — dajte každej hodnote vlastný rozsah vrátane jej registra platnosti.

Register platnosti a náhradná hodnota

Include validity register (pri C a D Include validity bit) je predvolene zapnutý. Register len na čítanie hneď za hodnotou oznamuje mastrovi, či je hodnota platná; keď nie je, registre hodnoty namiesto nej vrátia Fallback value (pri Float NaN s voľbou Use NaN as fallback).

KódVýznam
0platná
1hodnota sa nezmestí do dátového typu (napríklad NaN v celočíselnom type)
2zariadenie je nedostupné alebo v chybe
3nastavenia registra sú neplatné
5zatiaľ žiadna hodnota, napríklad hneď po štarte Core

Pri C a D je bit platnosti 1, keď hodnota nie je platná.

Akcie

  • Akcia bez parametrov (Stop, Toggle …) má jeden register na H alebo C. Zápis 1 alebo viac, prípadne coil ON, ju spustí; zápis 0 vráti výnimku 0x03.
  • Akcia s parametrami (pripočítanie k úrovni žalúzií, nastavenie rozsahu …) má jeden holding register na každý parameter, jeden za druhým. Jeden zápis musí pokryť všetky; zápis len niektorých vráti výnimku 0x03.
  • Registre akcií sú len na zápis — ich čítanie vráti výnimku 0x02.

Čo dostane master

TapHome obsluhuje funkčné kódy 01, 02, 03, 04, 05, 06, 15 a 16. Jedna požiadavka môže čítať viac hodnôt za sebou; inak master dostane výnimku:

VýnimkaKedy
0x01nepodporovaný funkčný kód
0x02adresa nepriradená žiadnej hodnote, rozsah s medzerou, zápis do A alebo D, čítanie registra akcie, zápis do registra platnosti
0x03hodnota, ktorú zariadenie nemôže prijať, alebo neplatný zápis akcie; zápis viacerých hodnôt sa vykoná celý, alebo vôbec
0x04zariadenie zápis odmietlo
0x0AModbus TCP: iné Slave ID (Unit ID), než má rozhranie

Modbus TCP zatvorí spojenie, ktoré je 15 minút nečinné.

Aktualizácia na 2026.1

Pri aktualizácii riadiacej jednotky na 2026.1 sa existujúce rozhrania Modbus slave prevedú automaticky so zachovaním adries registrov a Slave ID. Register Stop sa neprevedie pri žalúziách KNX, pri žalúziách a zariadeniach Markíza z Packet parsera a pri virtuálnych zariadeniach Markíza; master, ktorý ho používal, dostane na jeho adrese výnimku 0x02 (release notes 2026.1).

Od verzie 2026.1 odpovedá Modbus TCP len na vlastné Slave ID — ak váš master posiela Unit ID 0 alebo 255, nastavte ho na Slave ID rozhrania.

Ladenie pripojení Modbus RTU

RS485 je zdieľaná zbernica, takže počítač s prevodníkom USB na RS485 (napríklad FTDI USB-RS485-WE-1800-BT) a terminálovým softvérom, ako je Terminal pre Windows, môže počas integrácie odpočúvať komunikáciu.