Introducere în Modbus

Modbus este un protocol de comunicație simplu, folosit adesea pentru integrarea echipamentelor HVAC. Folosește comunicația master-slave: la magistrala comună pot fi conectate mai multe dispozitive, fiecare trebuie să aibă un Slave ID unic, iar dispozitivul master interoghează mereu dispozitivele slave individuale, care îi răspund.

Topologia master - slave

În majoritatea cazurilor, TapHome funcționează în configurația în care unitatea de control Core este Modbus Master, iar dispozitivele conectate sunt Modbus Slave. Acest lucru se setează în secțiunea Hardware → Modbus RTU sau Modbus TCP. Este posibil și sensul invers, când TapHome Core furnizează unui alt sistem de nivel superior informații despre dispozitivele sale. Acesta se definește în secțiunea Expun dispozitive → Modbus RTU sau Modbus TCP.

Straturi fizice

Modbus poate comunica prin diferite straturi fizice:

  • printr-o linie serială, de regulă RS485. Aceasta se numește Modbus RTU
  • prin rețeaua LAN, prin protocolul TCP/IP
  • prin rețeaua LAN, prin protocolul UDP - momentan nu este acceptat de sistemul TapHome

Registre Modbus

Modbus definește 4 tipuri de registre:

RegistruPe scurtAccesDimensiuneCoduri de funcție
Holding RegistersHCitire-scriere16 bițiCitire: 03, scriere multiplă: 16 (0x10)
  - Write Single HoldingSHCitire-scriere16 bițiScriere unică: 06
Coil (Discrete Output Coils)CCitire-scriere1 bitCitire: 01, scriere multiplă: 15 (0xF)
  - Write Single CoilSCCitire-scriere1 bitScriere unică: 05
Discrete Input ContactsDDoar citire1 bitCitire: 02
Analog Input RegistersADoar citire16 bițiCitire: 04

Numărul registrului (adresa registrului) are 16 biți, adică poate avea o valoare de la 0 la 65535. Adresa registrului se poate introduce în format zecimal (de ex. 20) sau hexazecimal (de ex. 0x14). Asupra registrelor se pot efectua următoarele operații:

  • citirea mai multor registre
  • scrierea unui singur registru
  • scrierea mai multor registre

Notă: Unele implementări Modbus adaugă comenzi suplimentare: raportarea Slave ID-ului, mascarea biților, scrierea și citirea simultană etc., dar acestea nu sunt acceptate de TapHome.

Slave ID, Unit ID și adresarea registrelor. Fiecare dispozitiv Modbus de pe o magistrală are un Slave ID unic (la Modbus TCP se numește uneori Unit ID). Pentru a citi sau a scrie o valoare aveți nevoie de trei informații din tabelul Modbus al dispozitivului: tipul registrului (H = Holding, C = Coil, D = Discrete Input, A = Analog Input — codul de funcție rezultă din tip), adresa registrului (de la 0 la 65535, introdusă zecimal 20 sau hexazecimal 0x14) și tipul de date (Int16, UInt16, Float etc.). TapHome folosește adresa registrului exact așa cum este scrisă în documentația dispozitivului — dacă dispozitivul numerotează registrele de la 1, scădeți 1 pentru a obține adresa numerotată de la 0 pe care o așteaptă TapHome. Slave ID-ul, tipul registrului și adresa registrului identifică împreună în mod unic orice valoare de pe un dispozitiv Modbus.

Informațiile despre ce este stocat în fiecare registru și în ce format fac parte din documentația echipamentului, pe care o pune la dispoziție furnizorul sau producătorul acestuia. Exemplu de documentație Modbus de la un furnizor de dispozitive Modbus:

Modbus Register Example

Registrul de tip C (Coil), indexul 58: deoarece are doar 2 valori (deschis / închis) și permite, pe lângă citire, și scrierea, tipul potrivit de dispozitiv TapHome este Ieșire digitală.

Instrucțiuni rapide pentru integrarea unui dispozitiv Modbus în TapHome

  1. Conectați dispozitivul la magistrala corespunzătoare (pentru Modbus RTU și ASCII) sau la rețeaua LAN (pentru Modbus TCP). La un dispozitiv TCP asigurați-vă că se află în aceeași rețea ca unitatea de control TapHome Core, de exemplu cu Fing (iOS, Android) sau IP Scanner (Windows).
  2. În TapHome → Hardware adăugați o interfață nouă Modbus RTU sau Modbus TCP și setați parametrii de comunicație conform documentației. La Modbus RTU sunt Baud rate, Stop bits, Parity, Data bits, la Modbus TCP este adresa IP.
  3. Aflați din documentația Modbus a dispozitivului ce Slave ID folosește. La Modbus TCP se numește uneori Unit ID. Dacă doriți să folosiți mai multe dispozitive pe o singură magistrală Modbus RTU, trebuie să schimbați Slave ID-ul fiecăruia, astfel încât să fie unic pe linia de magistrală respectivă.
  4. Testul de comunicație - cu instrumentul Operații manuale încercați să citiți o informație conform documentației (tabelului Modbus) a dispozitivului respectiv. Dacă totul funcționează, ar trebui să vedeți valoarea citită.
  5. Dacă testul de comunicație a reușit, creați un Modul care reprezintă dispozitivul Modbus
  6. Alegeți ce informații din documentația Modbus doriți să prezentați în sistemul TapHome și creați dispozitivele corespunzătoare. Începeți cu citirea valorilor (scriptul Read), iar la actuatoare continuați cu scrierea (scriptul Write).
  7. Dacă funcțiile de bază ale dispozitivului funcționează, adăugați în scripturi definițiile de eroare, avertisment sau informație.
  8. Dacă este necesar, puteți defini pentru dispozitivele și modulele TapHome și atribute de service și acțiuni de service
  9. Dacă totul este configurat și comunică corect, exportați Modulul într-un fișier XML, ca să îl puteți folosi data viitoare. Puteți contribui și la comunitate pe github.com/taphome-official/modbus_templates

Ierarhie

Această documentație este destinată scenariului în care unitatea de control TapHome Core este master Modbus, iar dispozitivele fizice adăugate în secțiunea Hardware → Modbus RTU / TCP sunt slave Modbus. TapHome organizează comunicația Modbus pe trei niveluri: Interfață → Modul → Dispozitiv. Slave ID-ul se setează la nivelul Modulului, iar tipul și adresa registrului folosite pentru citirea sau scrierea fiecărei valori se definesc în scriptul fiecărui Dispozitiv.

Interfață

Hardware → Modbus RTU: dispozitivele sunt conectate pe o magistrală, se definesc parametrii de bază ai transmisiei RS485, cum ar fi baudrate, paritatea, stop bits sau dacă datele sunt ASCII ori binare. Pe această magistrală pot fi conectate doar dispozitive cu aceleași setări de comunicație. De asemenea, comunicația poate funcționa corect numai dacă firele A și B sunt conectate corect. Hardware → Modbus TCP: dispozitivele sunt conectate în aceeași rețea LAN ca unitatea de control Core. Se definește un singur port TCP, comun pentru toate dispozitivele conectate la această interfață.

Modul

O interfață poate conține unul sau mai multe module, care în majoritatea cazurilor gestionează comunicația cu întregul dispozitiv fizic. Din punctul de vedere al configurării, Modulul definește Slave ID-ul unic al dispozitivului conectat la Modbus RTU, iar la Modbus TCP în plus adresa IP (și Unit ID-ul).

Dispozitiv

Reprezintă un element de comandă sau un senzor concret în sistemul TapHome. Trebuie să facă întotdeauna parte dintr-un Modul părinte.

Exemplu

5 unități de aer condiționat conectate pe o singură magistrală folosesc o interfață Modbus RTU comună, care definește portul magistralei, baudrate-ul și ceilalți parametri de comunicație. Interfața conține 5 module, fiecare reprezentând o unitate de aer condiționat cu un Slave ID unic. Sub fiecare modul sunt definite dispozitive, de exemplu termostatul, modul răcire / încălzire, puterea ventilatorului sau înclinarea lamelelor. Dispozitivele individuale au definite comenzi pentru citirea și/sau scrierea valorilor Modbus.

Dispozitive acceptate:

  • Ieșire digitală
  • Ieșire analogică
  • Termostat
  • Comutator cu mai multe valori
  • Senzor de temperatură
  • Contor electric
  • Contact de stare
  • Buton
  • Variabilă

Scripturi pentru citirea și scrierea valorilor Modbus

Dispozitivele TapHome comunică cu dispozitivele Modbus fizice prin scripturi.

Info: Mai multe informații despre limbajul de scripting, în special secțiunea despre operațiile pe biți

Pentru comunicația cu dispozitivele Modbus sunt definite următoarele secțiuni de scripting:

  • Scriptul Initialize: rulează la pornirea dispozitivului (de ex. după repornirea unității de control)
  • Scriptul Read: setarea valorilor variabilelor globale sau citirea stărilor de eroare
  • Scriptul Read Value: script pentru citirea unei anumite valori (mărimi) de la dispozitivul Modbus (de ex. temperatura setată pe termostat sau temperatura măsurată de termostat)
  • Scriptul Write Value: scrierea valorii în dispozitivul Modbus

Funcții pentru comunicația cu dispozitivele Modbus

MODBUSR (Modbus Read) Funcție pentru citirea unui registru Modbus. În funcție de tipul de date, poate fi vorba de 1 registru (pentru tipurile de date pe 16 biți), 2 registre (pentru tipurile de date pe 32 de biți) sau mai multe registre (pentru tipurile de date String)

MODBUSR(register_type, register_address, data_type, [OPTIONAL: number_of_characters if data_type=String])
Example: MODBUSR(H, 20, Int16)/100

Se citește registrul H cu numărul (sau adresa) 20 și se interpretează ca Integer pe 16 biți (număr întreg cu semn +-). La final, valoarea se împarte la 100 (virgula zecimală se mută cu 2 poziții la stânga).

Info: Adresa registrului se poate introduce și în format hexazecimal, de ex. valoarea 20 se poate scrie ca 0x14.

MODBUSW (Modbus Write)

MODBUSW(register_type, register_address, data_type, value_to_write)
Example: MODBUSW(H, 20, Int16, Te * 100)

În registrul H cu adresa 20 se scrie valoarea variabilei Te înmulțită cu 100 (virgula zecimală se mută cu 2 poziții la dreapta).

MODBUSWNE (Modbus Write if Not Equal)

Funcționează la fel ca MODBUSW, cu diferența că înainte de scriere citește valoarea din registru și o scrie doar dacă valoarea de scris diferă de cea citită. Întreaga operație durează mai mult, iar utilizarea tipică este la setarea proprietăților unui dispozitiv Modbus, unde configurația se scrie în memoria EEPROM, care are un număr limitat de scrieri.

Notă: Funcțiile MODBUSR, MODBUSW și MODBUSWNE se pot folosi doar în scripturile Modbus. Folosirea lor în alte scripturi este considerată eroare.

Tipuri de date Modbus

Conținutul registrelor este definit în tabelul Modbus. Deoarece un registru Modbus are 16 biți, cel mai des se folosesc valori Int16 sau UInt16 pe 16 biți, iar zecimalele se obțin prin împărțire la 10 sau 100. Unele dispozitive Modbus folosesc însă și numere în virgulă mobilă (Float, 32 de biți, stocate în două registre), au ordinea octeților schimbată (big endian, little endian) sau scriu un număr în două registre (variante pe 32 de biți). Uneori, cel mai simplu mod de a afla tipul de date corect este utilitarul direct din aplicația TapHome (Operații manuale), unde puteți citi 1 sau mai multe registre și puteți schimba dinamic tipul de date.

  • Int16 (de la -32.768 la 32.767)
  • Uint16 (de la 0 la 65.535)
  • Int32 (de la -2.147.483.648 la 2.147.483.647)
  • Uint32 (de la 0 la 4.294.967.295)
  • Float (IEEE 754, virgulă mobilă cu precizie simplă)
  • Bool 0 = false, 1 = true
  • BigEndianInt16 = Int16
  • LittleEndianInt16
  • BigEndianUint16 = Uint16
  • LittleEndianUint16
  • BigEndianInt32 / BigEndianInt32ByteSwap
  • LittleEndianInt32 / LittleEndianInt32ByteSwap
  • BigEndianUint32 / BigEndianUint32ByteSwap
  • LittleEndianUint32 / LittleEndianUint32ByteSwap
  • BigEndianFloat / BigEndianFloatByteSwap
  • LittleEndianFloat / LittleEndianFloatByteSwap
  • String

Se poate folosi și formatul BCD, datorită funcțiilor TOBCD() și FROMBCD()

Actualizare și Poll Interval

Fiecare dispozitiv din interfața Modbus are definit atributul Poll Interval. Acesta stabilește cât de des trebuie să ceară unitatea de control TapHome valori noi de la dispozitivul Modbus. Comunicația Modbus este de tip master-slave, așa că informațiile de la dispozitivul Modbus pot ajunge în TapHome doar atunci când TapHome le cere. Cu cât Poll Interval este mai lung, cu atât valoarea se actualizează mai târziu în TapHome. Un Poll Interval prea scurt poate însemna că TapHome este încărcat inutil cu obținerea unor valori de care nu este nevoie și că nu reușește să deservească toate dispozitivele în intervalul de timp dat. De exemplu, la Modbus RTU și la viteze Baud Rate mai mici, de ex. 9600, o interogare / un răspuns poate dura zeci de ms. Pentru termometre este suficient în majoritatea cazurilor un interval de 15000 ms (15 s), pentru butoane, dimpotrivă, cât mai scurt, de ex. 50 ms. Unele dispozitive Modbus așteaptă ca masterul să scrie periodic valoarea curentă în registru. Pentru aceasta există atributul Înregistrare periodică.

Definirea stărilor de eroare din scripturi

În unele scripturi se poate defini o eroare / un avertisment / o informație pe dispozitiv, pe baza informațiilor citite din registrele Modbus ale dispozitivului. Aceste mesaje se afișează în TapHome la fel ca mesajele de eroare interne TapHome. Opțional, la mesajul de eroare se poate adăuga un cod de eroare numeric, dacă este util pentru service-ul dispozitivului Modbus.

Notă: Pe un dispozitiv se poate defini doar un singur mesaj de eroare fără cod sau doar un singur mesaj de eroare pentru fiecare cod de eroare.

ADDERROR(), ADDWARNING(), ADDINFO()

ADDERROR([Optional: custom_code], text)

Exemplu: în secțiunea Read Script a dispozitivului Ieșire analogică se află codul:

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");

…care apar pe dispozitiv sub forma următoarelor mesaje:

Error Messages Example

Atribute și acțiuni de service

Pe lângă o valoare (sau mai multe valori, de exemplu la Termostat) de la dispozitivul Modbus conectat, modulele și dispozitivele TapHome pot citi și atribute de service sau pot executa acțiuni de service. Acestea nu sunt apoi accesibile în dashboard pentru ceilalți utilizatori ai sistemului, ci servesc doar pentru informații mai detaliate despre dispozitivul Modbus, fără a încărca inutil sistemul cu un număr mare de variabile și acțiuni.

Atributele de service se afișează în setările de service ale modulului sau dispozitivului TapHome. De regulă se folosesc pentru afișarea informațiilor despre dispozitiv, cum ar fi Model, Număr de serie, Versiune firmware, Versiune hardware, Timp de la ultima repornire etc. Sunt informații utile din punctul de vedere al service-ului dispozitivului Modbus, dar nu are sens să se creeze pentru ele dispozitive TapHome separate.

Acțiunile de service se afișează în setările de service ale modulului sau dispozitivului TapHome, chiar în partea de jos, sub formă de butoane. La apăsare execută o acțiune Modbus prestabilită, care scrie informațiile necesare în registru. Exemple de utilizare: setarea sau schimbarea Slave ID-ului, înlocuirea filtrului, setarea contorului la valoarea dorită, resetarea dispozitivului și altele asemănătoare.

Scripturi și variabile auxiliare pe modul

Variabilele globale ale modulului

Variabilele definite pe un modul se pot folosi în toate scripturile modulului și sunt partajate cu toate dispozitivele atribuite modulului respectiv.

Scriptul Init

Opțional. Rulează la pornirea modulului. Dacă este completat și nu a rulat încă, celelalte scripturi nu se pot executa.

💬 Valoarea returnată: ignorată ⚙️ Acces la variabile: variabilele globale ale modulului ⚠️ Suport pentru stări de eroare: nu

Scriptul Read

Rulează la fiecare interogare a modulului.

💬 Valoarea returnată: ignorată ⚙️ Acces la variabile: variabilele globale ale modulului ⚠️ Suport pentru stări de eroare: da

Scriptul Write

Rulează:

  • la schimbarea variabilei dispozitivului
  • dacă atributul „Înregistrare periodică” este activat, pornește automat

💬 Valoarea returnată: ignorată ⚙️ Acces la variabile: variabilele globale ale modulului, valorile dispozitivelor care aparțin modulului respectiv (atenție, nu sunt variabilele globale ale dispozitivelor - scriptul modulului nu are acces la ele). Se folosește atunci când valorile mai multor dispozitive ale modulului respectiv trebuie scrise într-un singur registru. ⚠️ Suport pentru stări de eroare: nu

Atributele de service ale modulului

Fiecare modul poate avea definit un număr nelimitat de atribute de service. Scripturile se execută de fiecare dată când un utilizator (cu drepturi de service) deschide în aplicație ecranul cu setările de service ale modulului. Se afișează în partea de sus, imediat după citirea de la dispozitivul Modbus.

💬 Valoarea returnată: se afișează ca valoare a atributului respectiv ⚙️ Acces la variabile: variabilele globale ale modulului ⚠️ Suport pentru stări de eroare: nu

Acțiunile de service ale modulului

Fiecare modul poate avea definit un număr nelimitat de acțiuni de service. Scripturile pornesc atunci când utilizatorul (cu drepturi de service) deschide în aplicație ecranul cu setările de service ale modulului și apasă unul dintre butoanele definite cu numele acțiunii de service. Fiecare acțiune de service este definită prin numele său, parametri și scriptul de execuție. 💬 Valoarea returnată: ignorată ⚙️ Acces la variabile: variabilele globale ale modulului, parametrii introduși de utilizator ⚠️ Suport pentru stări de eroare: nu

Scripturi și variabile auxiliare pe dispozitiv

Variabilele globale ale dispozitivului

Variabilele definite pe un dispozitiv se pot folosi în toate scripturile definite pe acel dispozitiv și nu se pot folosi nicăieri în afara lui. Dispozitivul își poate păstra în ele starea, le poate partaja între scripturile sale etc.

Scriptul Init al dispozitivului

Opțional. Rulează la pornirea dispozitivului. Dacă este completat și nu a rulat încă, celelalte scripturi nu se pot executa. 💬 Valoarea returnată: ignorată ⚙️ Acces la variabile: variabilele globale ale modulului, variabilele globale ale dispozitivului ⚠️ Suport pentru stări de eroare: nu

Scriptul Read al dispozitivului

Rulează la fiecare interogare a dispozitivului, înaintea „scripturilor Read Value”. 💬 Valoarea returnată: ignorată ⚙️ Acces la variabile: variabilele globale ale modulului, variabilele globale ale dispozitivului ⚠️ Suport pentru stări de eroare: da. Erorile se referă la întregul dispozitiv (de ex. la întregul termostat, nu doar la valoarea temperaturii setate sau a temperaturii actuale).

Scriptul Write Value

Rulează:

  • la fiecare schimbare a valorii
  • dacă atributul „Înregistrare periodică” este activat, și la fiecare interogare

💬 Valoarea returnată: ignorată ⚙️ Acces la variabile: variabilele globale ale modulului, variabilele globale ale dispozitivului, valoarea concretă a mărimii care trebuie scrisă prin Modbus în dispozitiv. ⚠️ Suport pentru stări de eroare: nu

Scriptul Read Value

Rulează la fiecare interogare a dispozitivului. 💬 Valoarea returnată: se atribuie automat ca valoare a dispozitivului respectiv ⚙️ Acces la variabile: variabilele globale ale modulului, variabilele globale ale dispozitivului, ultima valoare citită a variabilei, informația de citit (utilă de exemplu dacă dispozitivul indică faptul că valoarea nu a fost încă citită etc.) ⚠️ Suport pentru stări de eroare: da. Mesajele de eroare trebuie să se refere la mărimea respectivă de pe dispozitiv. De exemplu, dacă comanda ADDERROR(1, “Sensor not connected”) se află în scriptul Read Temperature al dispozitivului Termostat, utilizatorul va vedea în aplicație pe termostat un mesaj de eroare cu trei informații: Temperature, codul 1, textul „Sensor not connected”.

Atributele de service ale dispozitivului

Fiecare dispozitiv poate avea definit un număr nelimitat de atribute de service. Scripturile se execută de fiecare dată când un utilizator (cu drepturi de service) deschide în aplicație ecranul cu setările de service ale dispozitivului. Se afișează în partea de sus, imediat după citirea de la dispozitivul Modbus. 💬 Valoarea returnată: se afișează ca valoare a atributului respectiv ⚙️ Acces la variabile: variabilele globale ale modulului, variabilele globale ale dispozitivului ⚠️ Suport pentru stări de eroare: nu

Acțiunile de service ale dispozitivului

Fiecare dispozitiv poate avea definit un număr nelimitat de acțiuni de service. Scripturile se execută atunci când utilizatorul (cu drepturi de service) deschide în aplicație ecranul cu setările de service ale dispozitivului și apasă unul dintre butoanele definite cu numele acțiunii de service. Fiecare acțiune de service este definită prin numele său, parametri și scriptul de execuție. 💬 Valoarea returnată: ignorată ⚙️ Acces la variabile: variabilele globale ale modulului, variabilele globale ale dispozitivului, parametrii introduși de utilizator ⚠️ Suport pentru stări de eroare: nu

Adăugare din șablon

Permite configurarea comunicației Modbus cu dispozitivul fără să cunoașteți protocolul Modbus sau modul în care se configurează în TapHome. Șabloanele gata făcute se găsesc:

  • direct în aplicație: Adăugați din șablon → selectați dispozitivul concret → completați informațiile de bază și confirmați. Toate aceste șabloane sunt întreținute într-un proiect git al comunității la https://github.com/taphome/modbus_templates și oricine poate propune acolo modificări noi. Ce ajunge în aplicații trebuie aprobat direct de echipa TapHome
  • în propriul fișier XML: Adăugați din șablon → Adăugați din fișier. Puteți crea propriul fișier XML care definește întregul șablon direct pe modulul Modbus, în meniul contextual (cele 3 puncte din dreapta sus), cu acțiunea Salvați ca șablon. Ne bucurăm dacă ne ajutați să extindem numărul de dispozitive acceptate și contribuiți cu fișierul XML la proiectul git comun al comunității.

Mai multe informații despre configurarea comunicației Modbus cu ajutorul șabloanelor

Operații manuale

Instrument practic pentru o verificare inițială rapidă a tabelului Modbus. Permite:

  • citirea în tabel a următoarelor X registre, începând de la un anumit registru, și apoi schimbarea dinamică a tipului de date în care se interpretează valorile citite
  • scrierea valorii în registrul dat

Scanarea Slave ID-urilor

La configurarea comunicației cu un dispozitiv Modbus se întâmplă des ca Slave ID-ul implicit din fabrică să fie altul decât 1 și ca numărul corect să nu fie ușor de aflat. Pentru asta servește acest utilitar. Poate scana intervalul de Slave ID-uri specificat, încercând să citească din registrul selectat, de fiecare dată cu Slave ID-ul testat.

Informații despre registre

Se află în partea de jos a modulului Modbus. Pentru fiecare registru folosit afișează informații despre:

  • Numele TapHome al dispozitivului care citește din el sau scrie în el
  • Data și ora ultimei citiri reușite din registru
  • Ultima valoare citită din registru
  • Data și ora ultimei scrieri reușite în registru
  • Ultima valoare scrisă în registru

Prefetch

TapHome creează o listă de registre de citit din dispozitivele Modbus și de scris în ele, în funcție de valoarea Poll interval setată. Prefetch este procesul prin care unitatea de control preîncarcă în buffer valorile de care va avea nevoie la actualizare. Scopul este reducerea la minimum a numărului de cereri și de cicluri cerere-răspuns. Prefetch este influențat de 2 setări:

  • Max prefetch register group size (se află în setările de service ale modulului): stabilește numărul maxim de registre care pot fi citite sau scrise printr-o singură cerere în comunicația Modbus.
  • Regimul Prefetch (se poate seta pentru fiecare dispozitiv):
  • No prefetch. Pentru acest dispozitiv nu se face preîncărcare. Asta înseamnă că valorile se citesc individual și exact în momentul în care se execută scriptul. Exemplu de utilizare: la comunicația cu un convertor DALI, valoarea unei anumite lumini nu se poate citi direct, ci trebuie cerută cât mai repede, convertorul o pregătește și abia apoi o returnează. Orice preîncărcare este inutilă în acest caz.
  • Isolated prefetch. Preîncarcă mai multe registre deodată, dar doar pe cele definite în acest dispozitiv. De exemplu, dacă dispozitivul termostat folosește registrele 3 și 4, iar registrele 1, 2, 5, 6 sunt folosite în celelalte dispozitive, cererea pentru registrele 3 și 4 se face separat, doar pentru aceste 2 registre. Unele dispozitive Modbus necesită acest lucru.
  • Normal prefetch. TapHome încearcă să citească toate registrele cerute de dispozitivele care trebuie actualizate cu un număr minim de cereri. Dacă registrele nu formează o secvență continuă, se citesc și registrele nefolosite, dacă au fost citite cu succes în trecut. Exemplu: se cer registrele 99 și 101. Dacă registrul 100 a fost citit cu succes în trecut, iar Max prefetch register group size este 3 sau mai mult, se citesc cu o singură cerere 3 registre începând de la registrul 99. Dacă registrul 100 nu este folosit nicăieri și nu a fost niciodată citit cu succes, există riscul ca citirea peste un astfel de registru să returneze o excepție Modbus, de ex. „Illegal data address”, ca răspuns la întreaga cerere.

Prefetch se poate influența și direct din script: dacă la citire folosim registrul SC sau SH (în loc de C sau H), registrele se citesc individual, în timpul execuției scriptului, și nu se preia din memoria cache. La fel, la scriere, dacă folosim registrul SC sau SH (în loc de C sau H), registrele se scriu individual și printr-o altă funcție Modbus. Protocolul Modbus are 4 funcții de scriere: scrierea mai multor registre H, a mai multor registre C, scrierea unui singur registru H sau a unui singur registru C. Atenție: nu toate dispozitivele acceptă neapărat toate aceste funcții. Astfel, dacă este necesar, citirea și scrierea în bloc se pot combina cu citirea și scrierea individuală („câte unul”).

Setări avansate

TCP Port (Modbus TCP)

În majoritatea cazurilor valoarea implicită este 502, dar este posibil ca unele dispozitive să asculte pe alt port.

Read / Write Timeout

Timpul după care TapHome nu mai așteaptă răspunsul și raportează eroarea „Timeout”, ceea ce înseamnă că dispozitivul nu a răspuns la cerere în intervalul de timp dat. Dispozitivele Modbus lente pot să nu reușească să răspundă la timp și atunci este necesar să extindeți acest interval la 1 secundă sau la câteva secunde. Atenție însă la valorile inutil de mari, pentru că dacă din anumite motive comunicarea cu un dispozitiv Modbus eșuează, celelalte dispozitive Modbus care așteaptă răspunsul sunt întârziate nejustificat.

Delay Between Requests

Întârzierea pe care TapHome o introduce între cererile individuale către un dispozitiv Modbus. La Modbus TCP este implicit 0 ms, la Modbus RTU această întârziere este, conform specificației, de cel puțin durata transmisiei a 3,5 caractere, în funcție de viteza de comunicație (baud rate). Există însă dispozitive Modbus TCP care necesită până la 5000 ms între cereri sau, dimpotrivă, unele dispozitive Modbus RTU funcționează și cu întârzieri mai scurte și pot comunica astfel mai rapid.

Use ASCII communication

Modbus ASCII este un standard mai puțin folosit, în care comunicația nu este binară, ci se face prin caractere ASCII. Majoritatea acestor dispozitive folosesc și setarea „7 data bit”.