Modbus je jednoduchý komunikačný protokol, často používaný na integráciu zariadení HVAC. Využíva komunikáciu master-slave, kde k spoločnej zbernici môže byť pripojených niekoľko zariadení, pričom každé musí mať jedinečné Slave ID a master zariadenie vždy dopytuje jednotlivé slave zariadenia, ktoré mu odpovedajú.
Vo väčšine prípadov sa TapHome používa v režime, kde je riadiaca jednotka Core Modbus Master a pripojené zariadenia sú Modbus Slave. Toto sa nastavuje v sekcii Hardware → Modbus RTU alebo Modbus TCP. Je však možné použiť aj opačný smer, keď TapHome Core poskytuje inému nadriadenému systému informácie o svojich zariadeniach. Toto je definované v sekcii Sprístupniť zariadenia → Modbus RTU alebo Modbus TCP.
Modbus môže komunikovať cez rôzne fyzické vrstvy:
Modbus definuje 4 typy registrov:
Register | Kód | Prístup | Veľkosť | Funkčné kódy |
---|---|---|---|---|
Holding Registers | H | Čítanie-zápis | 16-bitov | Čítanie: 03, Zápis viacerých: 16 (0x10) |
- Write Single Holding | SH | Čítanie-zápis | 16-bitov | Zápis jedného: 06 |
Coil (Discrete Output Coils) | C | Čítanie-zápis | 1-bit | Čítanie: 01, Zápis viacerých: 15 (0xF) |
- Write Single Coil | SC | Čítanie-zápis | 1-bit | Zápis jedného: 05 |
Discrete Input Contacts | D | Iba na čítanie | 1-bit | Čítanie: 02 |
Analog Input Registers | A | Iba na čítanie | 16-bitov | Čítanie: 04 |
Číslo registra je 16-bitové, to znamená, že môže mať hodnotu od 0 do 65535. Na registroch je možné vykonávať operácie:
Niektoré implementácie Modbus pridávajú ďalšie príkazy: report slave id, bitové maskovanie, zápis a čítanie naraz atď., ale tie nie sú TapHome podporované.
Informácie o tom, čo je uložené v ktorom registri a v akom formáte, sú súčasťou dokumentácie zariadenia poskytnutej dodávateľom alebo výrobcom zariadenia. Príklad Modbus dokumentácie od dodávateľa Modbus zariadenia:
Typ registra C (Coil), index 58, keďže má len 2 hodnoty (otvorené / zatvorené) a okrem čítania umožňuje aj zápis, zodpovedajúci typ TapHome zariadenia je digitálny výstup.
Zrýchlené pokyny pre integráciu Modbus zariadenia do TapHome
Táto dokumentácia je určená pre scenár, kde je riadiaca jednotka TapHome Core Modbus master a fyzické zariadenia, ktoré sú pridané do sekcie Hardware → Modbus RTU / TCP, sú Modbus slave.
Hardware → Modbus RTU: zariadenia sú pripojené na určitú BUS, sú definované základné parametre prenosu RS485, ako je baudrate, parita, stop bity, alebo či sú dáta ASCII alebo binárne. Na túto zbernicu môžu byť pripojené iba zariadenia s rovnakými komunikačnými nastaveniami. Správna komunikácia môže fungovať len vtedy, ak sú A a B káble správne pripojené. Hardware → Modbus TCP: zariadenia sú pripojené na rovnakej LAN ako riadiaca jednotka Core. Je definovaný jeden TCP port, ktorý je spoločný pre všetky zariadenia pripojené k tomuto rozhraniu.
Rozhranie môže obsahovať jeden alebo viac modulov, ktoré vo väčšine prípadov pokrývajú komunikáciu s celým fyzickým zariadením. Z konfiguračného hľadiska modul definuje jedinečné Slave ID pripojeného zariadenia pre Modbus RTU a navyše IP adresu pre Modbus TCP.
Predstavuje špecifický riadiaci prvok alebo senzor v systéme TapHome. Musí byť vždy súčasťou jedného nadradeného Modulu.
5 klimatizačných jednotiek pripojených na jednej zbernici používa spoločné rozhranie Modbus RTU, ktoré definuje port zbernice, prenosovú rýchlosť a ďalšie komunikačné parametre. Rozhranie obsahuje 5 modulov, z ktorých každý predstavuje jednu klimatizačnú jednotku s jedinečným Slave ID. Každý modul má pod sebou definované zariadenia, ako napríklad termostat, režim chladenia/kúrenia, výkon ventilátora alebo naklápanie lamiel. Jednotlivé zariadenia majú definované príkazy pre čítanie a/alebo zápis Modbus hodnôt.
Podporované zariadenia:
Zariadenia TapHome komunikujú s fyzickými Modbus zariadeniami pomocou skriptov.
Viac informácií o skriptovacom jazyku, predovšetkým sekcia
Bitové operácie
Pre komunikáciu s Modbus zariadeniami sú na nich definované skriptovacie sekcie:
MODBUSR
(Modbus Read)Funkcia pre čítanie registra z Modbus. V závislosti od dátového typu to môže byť 1 register (pre 16-bitové dátové typy), 2 registre (pre 32-bitové dátové typy) alebo viac registrov (pre dátové typy String).
MODBUSR(typ_registra, adresa_registra, dátový_typ, [VOLITEĽNÉ: počet_znakov ak data_type=String])
Príklad: MODBUSR(H, 20, Int16)/100
Prečítajte register H číslo (alebo adresa) 20 a interpretujte ho ako 16-bitové celé číslo (celé číslo so znakom +/-). Nakoniec túto hodnotu vydelte číslom 100 (posuňte desatinnú čiarku o 2 miesta doľava).
Adresu registra je možné zadať aj v hexadecimálnom formáte, napr. hodnotu 20 je možné zapísať ako 0x14
.
MODBUSW
(Modbus Write)MODBUSW(typ_registra, adresa_registra, dátový_typ, hodnota_na_zápis)
Príklad: MODBUSW(H, 20, Int16, Te * 100)
Do registra H s adresou 20 zapíšte hodnotu premennej Te
vynásobenú číslom 100 (posunutie desatinnej čiarky o 2 doprava).
MODBUSWNE
(Modbus Write if Not Equal)Rovnaké ako MODBUSW
s tým rozdielom, že prečíta hodnotu z registra pred zápisom a zapíše ju len vtedy, ak sa zapísaná hodnota líši od prečítanej. Celá operácia trvá dlhšie a jej typické použitie je pri nastavovaní vlastností Modbus zariadenia, kde sa konfigurácia zapisuje do EEPROM pamäte s obmedzeným počtom zápisov.
Funkcie MODBUSR
, MODBUSW
a MODBUSWNE
je možné použiť iba v Modbus skriptoch. Ak sa použijú v iných skriptoch, považujú sa za chybu.
Obsah registrov je definovaný v Modbus tabuľke. Keďže veľkosť jedného Modbus registra je 16 bitov, najčastejšie sa používajú 16-bitové hodnoty Int16
alebo UInt16
a desatinné miesta sa určujú delením 10 alebo 100. Niektoré Modbus zariadenia však používajú aj 16-bitové registre s číslami s pohyblivou desatinnou čiarkou (Float
), alebo majú zmenené poradie bitov (big endian, little endian), zapisujú jedno číslo do dvoch registrov (32-bitové variácie). Niekedy je najjednoduchší spôsob, ako zistiť správny dátový typ, použiť nástroj priamo v aplikácii TapHome (Ručné operácie), kde môžete načítať 1 alebo viac registrov a dynamicky prepínať dátový typ.
Int16
: -32,768 až 32,767Uint16
: 0 až 65,535Int32
: -2 147 483 648 až 2 147 483 647Uint32
: 0 až 4 294 967 295Float
: IEEE 754 Jednoduchá presnosť s pohyblivou desatinnou čiarkouBool
: 0 = false, 1 = trueBigEndianInt16
= Int16
LittleEndianInt16
BigEndianUint16
= Uint16
LittleEndianUint16
BigEndianInt32
/ BigEndianInt32ByteSwap
LittleEndianInt32
/ LittleEndianInt32ByteSwap
BigEndianUint32
/ BigEndianUint32ByteSwap
LittleEndianUint32
/ LittleEndianUint32ByteSwap
BigEndianFloat
/ BigEndianFloatByteSwap
LittleEndianFloat
/ LittleEndianFloatByteSwap
String
: Formát BCD môže byť tiež použitý vďaka funkciám TOBCD()
a FROMBCD()
Každé zariadenie v Modbus rozhraní má definovaný atribút Poll Interval. Ten určuje, ako často má riadiaca jednotka TapHome dopytovať nové hodnoty Modbus zariadenia. Modbus komunikácia je typu Master-Slave, a preto informácie z Modbus zariadenia môžu do TapHome prísť iba vtedy, keď si ich TapHome vyžiada. Čím dlhší je Poll Interval, tým neskôr sa hodnota v TapHome aktualizuje. Príliš krátky Poll Interval môže znamenať, že TapHome bude zbytočne zaťažený získavaním nepotrebných hodnôt a nemusí mať čas obslúžiť všetky zariadenia v danom časovom intervale. Napríklad pri Modbus RTU a nižších rýchlostiach Baud Rate, napr. 9600, môže jedna požiadavka/odpoveď trvať desiatky ms. Pre teplomery je vo väčšine prípadov postačujúci interval 15000ms (15s), pre tlačidlá, naopak, čo najkratší, napr. 50 ms. Niektoré Modbus zariadenia očakávajú, že master bude periodicky zapisovať aktuálnu hodnotu do registra. Na to slúži atribút Periodic Write.
V niektorých skriptoch je možné definovať chybu / varovanie / informáciu na zariadení na základe informácií prečítaných z Modbus registrov zariadenia. Tieto správy sa zobrazujú v TapHome rovnako ako interné chybové správy TapHome. Voliteľne je možné k chybovej správe pridať numerický kód chyby, ak je to praktické pre servis Modbus zariadenia.
Na zariadení je možné definovať iba jednu chybovú správu bez kódu alebo iba jednu chybovú správu na jeden kód chyby.
ADDERROR()
, ADDWARNING()
, ADDINFO()
ADDERROR([Voliteľné: custom_code], text)
Príklad: v sekcii Read Script zariadenia Analog Output je kód:
ADDERROR("Error without code");
ADDWARNING("Warning without code");
ADDINFO("Info without code");
ADDERROR(1, "Error with code");
ADDWARNING(1, "Warning with code");
ADDINFO(1,"Info with code");
...čo sa na zariadení prejaví správami:
Okrem hodnoty (alebo viacerých hodnôt, ako napríklad termostat) z pripojeného Modbus zariadenia môžu moduly a zariadenia TapHome čítať aj servisné atribúty alebo vykonávať servisné akcie. Tieto potom nie sú prístupné na pracovnej ploche pre ostatných používateľov systému, ale slúžia len na podrobnejšie informácie o Modbus zariadení, bez zbytočného preťažovania systému veľkým množstvom premenných a akcií.
Servisné atribúty sa zobrazujú v servisných nastaveniach modulu alebo zariadenia TapHome. Typicky sa používajú na zobrazenie informácií o zariadení, ako sú Model, Sériové číslo, Verzia firmvéru, Verzia hardvéru, Čas od posledného reštartu atď. Sú to užitočné informácie z hľadiska servisu Modbus zariadenia, ale nemá zmysel pre ne vytvárať samostatné zariadenia TapHome.
Servisné akcie sa zobrazujú v servisných nastaveniach modulu alebo zariadenia TapHome, úplne dole ako tlačidlá. Po stlačení vykonajú prednastavenú Modbus akciu, ktorá zapíše požadované informácie do registra. Príklad použitia: Nastavenie alebo zmena Slave ID, Výmena filtra, Nastavenie počítadla na požadovanú hodnotu, Resetovanie zariadenia a podobne.
Premenné definované na module sú použiteľné vo všetkých skriptoch na module a sú zdieľané so všetkými zariadeniami priradenými k tomuto modulu.
Voliteľné. Spustí sa pri štarte modulu. Ak je vyplnený a ešte nebežal, nebudú povolené žiadne ďalšie skripty.
Spustí sa pri každom dopyte modulu.
Spustenie:
Každý modul môže mať definovaný neobmedzený počet servisných atribútov. Skripty sa vykonávajú vždy, keď používateľ (s servisnými oprávneniami) otvorí obrazovku servisných nastavení modulu v aplikácii. Sú zapísané hore, ihneď po prečítaní z Modbus zariadenia.
Každý modul môže mať definovaný neobmedzený počet servisných akcií. Skripty sa spustia, keď používateľ (s servisnými oprávneniami) otvorí aplikáciu na obrazovke servisných nastavení modulu a stlačí jedno z definovaných tlačidiel s názvom servisnej akcie. Každá servisná akcia je definovaná svojím názvom, parametrami a vykonávacím skriptom.
Premenné definované na zariadení sú použiteľné vo všetkých skriptoch definovaných na tomto zariadení a nie sú použiteľné nikde mimo zariadenia. Zariadenie v nich môže ukladať svoj stav, zdieľať ich medzi svojimi skriptami a pod.
Voliteľné. Spustí sa pri štarte zariadenia. Ak je vyplnený a ešte nebežal, nebudú povolené žiadne ďalšie skripty.
Spustí sa pri každom dopyte zariadenia, pred "Read Value Scripts".
Spustenie:
Spustí sa pri každom dopyte zariadenia.
ADDERROR(1, "Senzor nie je pripojený")
v skripte Read Temperature v zariadení Termostat, užívateľ uvidí chybovú správu v aplikácii na termostate s tromi informáciami: Teplota, kód 1, text "Senzor nie je pripojený".Každé zariadenie môže mať definovaný neobmedzený počet servisných atribútov. Skripty sa vykonávajú vždy, keď používateľ (s servisnými oprávneniami) otvorí obrazovku servisných nastavení zariadenia v aplikácii. Sú zapísané hore, ihneď po prečítaní z Modbus zariadenia.
Každé zariadenie môže mať definovaný neobmedzený počet servisných akcií. Skripty sa vykonávajú, keď používateľ (s servisnými oprávneniami) otvorí aplikáciu na obrazovke servisných nastavení zariadenia a stlačí jedno z definovaných tlačidiel s názvom servisnej akcie. Každá servisná akcia je definovaná svojím názvom, parametrami a vykonávacím skriptom.
Umožňuje konfiguráciu Modbus komunikácie so zariadením bez akýchkoľvek znalostí Modbus protokolu alebo toho, ako ho konfigurovať v TapHome. Predpripravené šablóny nájdete:
Viac informácií o konfigurácii Modbus komunikácie pomocou šablón
Praktický nástroj pre rýchle počiatočné overenie Modbus tabuľky. Umožňuje:
Bežnou praxou pri nastavovaní komunikácie s Modbus zariadením je, že továrenské predvolené Slave ID je iné ako 1, a nie je ľahké zistiť správne číslo. Na to slúži tento nástroj. Môže skenovať zadaný rozsah Slave ID pokusom o čítanie z vybraného registra vždy s testovaným Slave ID.
Nachádza sa v dolnej časti Modbus modulu. Pre každý použitý register uvádza informácie o:
TapHome vytvára zoznam registrov na čítanie a zápis z Modbus zariadení v závislosti od nastaveného Poll intervalu. Prefetch je proces, vďaka ktorému riadiaca jednotka prednačítava do vyrovnávacej pamäte hodnoty, ktoré bude potrebovať počas aktualizácie. Cieľom je minimalizovať počet požiadaviek a spiatočných ciest. Prefetch je ovplyvnený 2 nastaveniami:
Prefetch môže byť ovplyvnený aj priamo zo skriptu: Ak pri čítaní použijeme register SC
alebo SH
(namiesto C
alebo H
), potom sa hodnota číta jeden register po druhom počas vykonávania skriptu a nevyťahuje sa z vyrovnávacej pamäte. Podobne pri zápise, ak použijeme register SC
alebo SH
(namiesto C
alebo H
), hodnota sa zapisuje jeden register po druhom a inou Modbus funkciou. Modbus protokol podporuje 4 funkcie zápisu: zápis viacerých H, viacerých C, zápis jedného H alebo jedného C registra naraz. Pozor: nie všetky zariadenia môžu podporovať všetky tieto funkcie. Týmto spôsobom, ak je to potrebné, je možné kombinovať čítanie a zápis a "jeden po druhom".
Vo väčšine prípadov je predvolená hodnota 502, ale je možné, že niektoré zariadenia počúvajú na inom porte.
Čas, po ktorom TapHome vzdá čakanie na odpoveď a nahlási chybu „Timeout“. To znamená, že zariadenie neodpovedalo v danom intervale.
Oneskorenie, ktoré TapHome vkladá medzi jednotlivé požiadavky na Modbus zariadenie.
Typ Modbusu | Predvolené oneskorenie |
---|---|
Modbus TCP | 0ms |
Modbus RTU | Na základe komunikačnej rýchlosti (baud rate), typicky aspoň 3.5 znakov |
📌 Dôležité informácie o zariadeniach:
Modbus ASCII je menej bežný štandard, kde komunikácia nie je binárna, ale namiesto toho používa znaky ASCII.