Uvod u Modbus

Modbus je jednostavan komunikacijski protokol koji se često koristi za integraciju uređaja za grijanje, ventilaciju i klimatizaciju (HVAC). Koristi komunikaciju tipa master-slave (nadređeni-podređeni): na zajedničku sabirnicu može se spojiti više uređaja, svaki mora imati jedinstven Slave ID, a nadređeni uređaj uvijek šalje upite pojedinim podređenim uređajima koji mu odgovaraju.

Topologija master-slave

U većini slučajeva TapHome se koristi u načinu rada u kojem je centralna jedinica Core Modbus master (nadređeni uređaj), a spojeni uređaji su Modbus slave (podređeni uređaji). To se postavlja u odjeljku Hardver → Modbus RTU ili Modbus TCP. Moguć je i obrnuti smjer, kada TapHome Core nekom drugom nadređenom sustavu daje podatke o svojim uređajima. To se definira u odjeljku Izložite uređaje → Modbus RTU ili Modbus TCP.

Fizički slojevi

Modbus može komunicirati preko različitih fizičkih slojeva:

  • preko serijske linije, obično RS-485. To se naziva Modbus RTU
  • preko LAN mreže pomoću protokola TCP/IP
  • preko LAN mreže pomoću protokola UDP, što sustav TapHome trenutačno ne podržava

Modbus registri

Modbus definira 4 vrste registara:

RegistarKraticaPristupVeličinaFunkcijski kodovi
Holding RegistersHČitanje i upis16 bitaČitanje: 03, upis više registara: 16 (0x10)
  - Write Single HoldingSHČitanje i upis16 bitaUpis jednog registra: 06
Coil (Discrete Output Coils)CČitanje i upis1 bitČitanje: 01, upis više registara: 15 (0xF)
  - Write Single CoilSCČitanje i upis1 bitUpis jednog registra: 05
Discrete Input ContactsDSamo čitanje1 bitČitanje: 02
Analog Input RegistersASamo čitanje16 bitaČitanje: 04

Broj registra (adresa registra) je 16-bitni, odnosno može imati vrijednost od 0 do 65535. Adresa registra može se unijeti u decimalnom obliku (npr. 20) ili u heksadecimalnom obliku (npr. 0x14). Na registrima se mogu izvoditi sljedeće operacije:

  • čitanje više registara
  • upis jednog registra
  • upis više registara

Napomena: Neke implementacije protokola Modbus dodaju još naredbi: report slave id, maskiranje bitova, istodobni upis i čitanje itd., ali ih TapHome ne podržava.

Slave ID, Unit ID i adresiranje registara. Svaki Modbus uređaj na sabirnici ima jedinstven Slave ID (kod protokola Modbus TCP ponekad se naziva Unit ID). Za čitanje ili upis vrijednosti potrebna su vam tri podatka iz Modbus tablice uređaja: vrsta registra (H = Holding, C = Coil, D = Discrete Input, A = Analog Input; funkcijski kod izvodi se iz vrste), adresa registra (od 0 do 65535, unosi se decimalno 20 ili heksadecimalno 0x14) i vrsta podatka (Int16, UInt16, Float itd.). TapHome koristi adresu registra točno onako kako je napisana u dokumentaciji uređaja. Ako dokumentacija vašeg uređaja navodi brojeve registara koji počinju od 1, oduzmite 1 kako biste dobili adresu koja počinje od 0, a koju TapHome očekuje. Slave ID, vrsta registra i adresa registra zajedno jednoznačno određuju bilo koju vrijednost na Modbus uređaju.

Podaci o tome što je pohranjeno u kojem registru i u kojem formatu dio su dokumentacije uređaja koju daje dobavljač ili proizvođač uređaja. Primjer Modbus dokumentacije dobavljača Modbus uređaja:

Primjer Modbus registara

Vrsta registra C (Coil), indeks 58: budući da ima samo 2 vrijednosti (otvoreno / zatvoreno) i osim čitanja omogućuje i upis, odgovarajuća vrsta uređaja TapHome je digitalni izlaz.

Kratke upute za integraciju Modbus uređaja u TapHome

  1. Spojite uređaj na odgovarajuću sabirnicu (za Modbus RTU i ASCII) ili na LAN (za Modbus TCP). Za TCP uređaj provjerite je li u istoj mreži kao centralna jedinica TapHome Core, na primjer pomoću aplikacije Fing (iOS, Android) ili IP Scanner (Windows).
  2. U aplikaciji TapHome → Hardver dodajte novo sučelje Modbus RTU ili Modbus TCP i postavite komunikacijske parametre prema dokumentaciji. Za Modbus RTU to su Baud rate, Stop bits, Parity, Data bits, a za Modbus TCP IP adresa.
  3. U Modbus dokumentaciji uređaja pronađite koji Slave ID koristi. Kod protokola Modbus TCP ponekad se naziva Unit ID. Ako želite koristiti više uređaja na jednoj sabirnici s protokolom Modbus RTU, svakom od njih morate promijeniti Slave ID tako da bude jedinstven na toj liniji sabirnice.
  4. Test komunikacije: pomoću alata Ručne operacije pokušajte pročitati neki podatak prema dokumentaciji (Modbus tablici) za taj uređaj. Ako sve radi, trebali biste vidjeti očitanu vrijednost.
  5. Ako je test komunikacije uspio, izradite modul koji predstavlja Modbus uređaj.
  6. Odaberite koje podatke iz Modbus dokumentacije želite prikazati u sustavu TapHome i izradite odgovarajuće uređaje. Započnite čitanjem vrijednosti (Read script), a kod aktuatora nastavite upisom (Write script).
  7. Kada osnovne funkcije uređaja rade, u skripte dodajte definicije pogrešaka, upozorenja ili informacija (Error, Warning, Information).
  8. Po potrebi za uređaje i module TapHome možete definirati i servisne atribute i servisne radnje
  9. Kada je sve podešeno i komunikacija radi ispravno, izvezite modul u XML datoteku kako biste ga mogli koristiti sljedeći put. Možete doprinijeti i zajednici na github.com/taphome-official/modbus_templates

Hijerarhija

Ova dokumentacija namijenjena je scenariju u kojem je centralna jedinica TapHome Core Modbus master, a fizički uređaji dodani u odjeljak Hardver → Modbus RTU / TCP su Modbus slave uređaji. TapHome Modbus komunikaciju organizira u tri razine: sučelje → modul → uređaj. Slave ID postavlja se na razini modula, a vrsta registra i adresa registra kojima se čita ili upisuje pojedina vrijednost definiraju se u skripti svakog uređaja.

Sučelje

Hardver → Modbus RTU: uređaji su spojeni na neku sabirnicu (BUS), definirani su osnovni parametri prijenosa RS-485, kao što su brzina prijenosa (baudrate), paritet, stop bitovi ili jesu li podaci ASCII ili binarni. Na tu sabirnicu mogu se spojiti samo uređaji s istim komunikacijskim postavkama. Komunikacija također može ispravno raditi samo ako su vodiči A i B ispravno spojeni. Hardver → Modbus TCP: uređaji su spojeni na isti LAN kao centralna jedinica Core. Definiran je jedan TCP port, zajednički za sve uređaje spojene na to sučelje.

Modul

Sučelje može sadržavati jedan ili više modula, koji u većini slučajeva pokrivaju komunikaciju s cijelim fizičkim uređajem. S gledišta konfiguracije modul definira jedinstven Slave ID spojenog uređaja za Modbus RTU, a za Modbus TCP dodatno i IP adresu (i Unit ID).

Uređaj

Predstavlja određeni upravljački element ili senzor u sustavu TapHome. Uvijek mora biti dio jednog nadređenog modula.

Primjer

5 klima-uređaja spojenih na jednu sabirnicu koristi zajedničko sučelje Modbus RTU koje definira priključak sabirnice, brzinu prijenosa (baudrate) i ostale komunikacijske parametre. Sučelje sadrži 5 modula, od kojih svaki predstavlja jedan klima-uređaj s jedinstvenim Slave ID-om. Svaki modul ima ispod sebe definirane uređaje, kao što su termostat, način rada hlađenje / grijanje, snaga ventilatora ili nagib lamela. Pojedini uređaji imaju definirane naredbe za čitanje i/ili upis Modbus vrijednosti.

Podržani uređaji:

  • Digitalni izlaz
  • Analogni izlaz
  • Termostat
  • Prekidač s više vrijednosti
  • Senzor temperature
  • Električno brojilo
  • Statusni kontakt
  • Tipka
  • Varijabla

Skripte za čitanje i upis Modbus vrijednosti

Uređaji TapHome komuniciraju s fizičkim Modbus uređajima pomoću skripti.

Informacija: Više informacija o skriptnom jeziku, osobito odjeljak o operacijama s bitovima

Za komunikaciju s Modbus uređajima na njima su definirani odjeljci za skripte:

  • Initialize script: pokreće se pri pokretanju uređaja (npr. nakon ponovnog pokretanja centralne jedinice)
  • Read script: postavljanje vrijednosti globalnih varijabli ili čitanje stanja pogreške
  • Read Value script: skripta za čitanje određene vrijednosti (veličine) iz Modbus uređaja (npr. zadane temperature na termostatu ili izmjerene temperature na termostatu)
  • Write Value script: upis vrijednosti u Modbus uređaj

Funkcije za komunikaciju s Modbus uređajima

MODBUSR (Modbus Read) Funkcija za čitanje Modbus registra. Ovisno o vrsti podatka to može biti 1 registar (za 16-bitne vrste podataka), 2 registra (za 32-bitne vrste podataka) ili više registara (za vrste podataka String).

MODBUSR(vrsta_registra, adresa_registra, vrsta_podatka, [NEOBVEZNO: broj_znakova ako je data_type=String])
Primjer: MODBUSR(H, 20, Int16)/100

Pročitajte registar H s brojem (ili adresom) 20 i protumačite ga kao 16-bitni Integer (cijeli broj s predznakom + ili -). Na kraju tu vrijednost podijelite brojem 100 (pomaknite decimalni zarez za 2 mjesta ulijevo).

Informacija: Adresa registra može se unijeti i u heksadecimalnom obliku, npr. vrijednost 20 može se napisati kao 0x14.

MODBUSW (Modbus Write)

MODBUSW(vrsta_registra, adresa_registra, vrsta_podatka, vrijednost_za_upis)
Primjer: MODBUSW(H, 20, Int16, Te * 100)

U registar H s adresom 20 upišite vrijednost varijable Te pomnoženu brojem 100 (pomak decimalnog zareza za 2 mjesta udesno).

MODBUSWNE (Modbus Write if Not Equal)

Isto kao MODBUSW, s razlikom što prije upisa pročita vrijednost iz registra i upiše je samo ako se vrijednost za upis razlikuje od pročitane. Cijela operacija traje dulje, a tipično se koristi pri postavljanju svojstava Modbus uređaja kod kojih se konfiguracija upisuje u memoriju EEPROM s ograničenim brojem upisa.

Napomena: Funkcije MODBUSR, MODBUSW i MODBUSWNE mogu se koristiti samo u Modbus skriptama. Ako se upotrijebe u drugim skriptama, smatraju se pogreškom.

Vrste Modbus podataka

Sadržaj registara definiran je u Modbus tablici. Budući da je veličina jednog Modbus registra 16 bita, najčešće se koriste 16-bitne vrijednosti Int16 ili UInt16, a decimalna mjesta dobivaju se dijeljenjem s 10 ili 100. Neki Modbus uređaji ipak koriste i brojeve s pomičnim zarezom (Float, 32 bita, spremljene u dva registra), ili imaju promijenjen redoslijed bajtova (big endian, little endian), ili jedan broj upisuju u dva registra (32-bitne varijante). Ponekad je ispravnu vrstu podatka najlakše otkriti pomoću alata izravno u aplikaciji TapHome (Ručne operacije), u kojem možete učitati 1 ili više registara i dinamički mijenjati vrstu podatka.

  • Int16 (od -32 768 do 32 767)
  • Uint16 (od 0 do 65 535)
  • Int32 (od -2 147 483 648 do 2 147 483 647)
  • Uint32 (od 0 do 4 294 967 295)
  • Float (IEEE 754, broj s pomičnim zarezom jednostruke preciznosti)
  • Bool 0 = false, 1 = true
  • BigEndianInt16 = Int16
  • LittleEndianInt16
  • BigEndianUint16 = Uint16
  • LittleEndianUint16
  • BigEndianInt32 / BigEndianInt32ByteSwap
  • LittleEndianInt32 / LittleEndianInt32ByteSwap
  • BigEndianUint32 / BigEndianUint32ByteSwap
  • LittleEndianUint32 / LittleEndianUint32ByteSwap
  • BigEndianFloat / BigEndianFloatByteSwap
  • LittleEndianFloat / LittleEndianFloatByteSwap
  • String

Može se koristiti i format BCD, zahvaljujući funkcijama TOBCD() i FROMBCD().

Ažuriranje i Poll Interval

Svaki uređaj u Modbus sučelju ima definiran atribut Poll Interval. On određuje koliko često centralna jedinica TapHome treba tražiti nove vrijednosti Modbus uređaja. Modbus komunikacija je tipa master-slave, pa podaci iz Modbus uređaja mogu stići u TapHome samo kada ih TapHome zatraži. Što je Poll Interval dulji, to se vrijednost u sustavu TapHome kasnije osvježava. Prekratak Poll Interval može značiti da će TapHome biti nepotrebno opterećen dohvaćanjem nepotrebnih vrijednosti i da možda neće stići poslužiti sve uređaje u zadanom vremenskom intervalu. Na primjer, kod protokola Modbus RTU i nižih brzina prijenosa (Baud Rate), npr. 9600, jedan upit i odgovor mogu trajati desetke ms. Za termometre je u većini slučajeva dovoljan interval od 15 000 ms (15 s), a za tipke, naprotiv, što kraći, npr. 50 ms. Neki Modbus uređaji očekuju da nadređeni uređaj periodički upisuje trenutačnu vrijednost u registar. Za to služi atribut Periodična registracija.

Definiranje stanja pogreške iz skripti

U nekim je skriptama moguće na uređaju definirati pogrešku / upozorenje / informaciju na temelju podataka pročitanih iz Modbus registara uređaja. Te se poruke u sustavu TapHome prikazuju jednako kao interne poruke o pogreškama sustava TapHome. Po izboru poruci o pogrešci može se dodati brojčani kod pogreške, ako je to praktično za servisiranje Modbus uređaja.

Napomena: Na uređaju se može definirati samo jedna poruka o pogrešci bez koda ili samo jedna poruka o pogrešci po kodu pogreške.

ADDERROR(), ADDWARNING(), ADDINFO()

ADDERROR([Neobvezno: custom_code], text)

Primjer: u odjeljku Read Script uređaja Analogni izlaz nalazi se kod:

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

…koji se na uređaju prikazuje porukama:

Primjer poruka o pogreškama

Servisni atributi i radnje

Osim vrijednosti (ili više vrijednosti, kao kod termostata) iz spojenog Modbus uređaja, moduli i uređaji TapHome mogu čitati i servisne atribute ili izvoditi servisne radnje. Oni tada nisu dostupni na Dashboardu drugim korisnicima sustava, nego služe samo za detaljnije podatke o Modbus uređaju, bez nepotrebnog opterećivanja sustava velikim brojem varijabli i radnji.

Servisni atributi prikazuju se u naprednim postavkama modula ili uređaja TapHome. Obično se koriste za prikaz podataka o uređaju, kao što su model, serijski broj, verzija firmvera, verzija hardvera, vrijeme od zadnjeg ponovnog pokretanja itd. To su korisni podaci s gledišta servisiranja Modbus uređaja, ali za njih nema smisla izrađivati zasebne uređaje TapHome.

Servisne radnje prikazuju se u naprednim postavkama modula ili uređaja TapHome, sasvim na dnu, kao gumbi. Kada se pritisnu, izvode unaprijed postavljenu Modbus radnju koja u registar upisuje potrebne podatke. Primjeri upotrebe: postavljanje ili promjena Slave ID-a, zamjena filtra, postavljanje brojača na potrebnu vrijednost, ponovno postavljanje uređaja i slično.

Skripte i pomoćne varijable na modulu

Globalne varijable modula

Varijable definirane na modulu mogu se koristiti u svim skriptama na modulu i dijele se sa svim uređajima dodijeljenima tom modulu.

Init script

Neobvezno. Pokreće se pri pokretanju modula. Ako je popunjena, a još se nije izvršila, ostale se skripte neće izvršavati.

💬 Povratna vrijednost: zanemaruje se ⚙️ Pristup varijablama: globalne varijable modula ⚠️ Podrška za stanje pogreške: ne

Read script

Pokreće se pri svakom upitu prema modulu.

💬 Povratna vrijednost: zanemaruje se ⚙️ Pristup varijablama: globalne varijable modula ⚠️ Podrška za stanje pogreške: da

Write script

Pokretanje:

  • pri promjeni varijable uređaja
  • ako je atribut „Periodična registracija” omogućen, pokreće se automatski

💬 Povratna vrijednost: zanemaruje se ⚙️ Pristup varijablama: globalne varijable modula, vrijednosti uređaja koji pripadaju tom modulu (pazite, to nisu globalne varijable uređaja, skripta modula nema pristup njima). To se koristi kada vrijednosti više uređaja tog modula treba upisati u jedan registar. ⚠️ Podrška za stanje pogreške: ne

Servisni atributi modula

Svaki modul može imati definiran neograničen broj servisnih atributa. Skripte se izvršavaju svaki put kada korisnik (sa servisnim dopuštenjima) u aplikaciji otvori zaslon naprednih postavki modula. Njihove vrijednosti prikazuju se na vrhu, odmah nakon čitanja iz Modbus uređaja.

💬 Povratna vrijednost: prikazuje se kao vrijednost tog atributa ⚙️ Pristup varijablama: globalne varijable modula ⚠️ Podrška za stanje pogreške: ne

Servisne radnje modula

Svaki modul može imati definiran neograničen broj servisnih radnji. Skripte se pokreću kada korisnik (sa servisnim dopuštenjima) u aplikaciji otvori zaslon naprednih postavki modula i pritisne jedan od definiranih gumba s nazivom servisne radnje. Svaka servisna radnja definirana je svojim nazivom, parametrima i skriptom za izvršavanje. 💬 Povratna vrijednost: zanemaruje se ⚙️ Pristup varijablama: globalne varijable modula, parametri koje je zadao korisnik ⚠️ Podrška za stanje pogreške: ne

Skripte i pomoćne varijable na uređaju

Globalne varijable uređaja

Varijable definirane na uređaju mogu se koristiti u svim skriptama definiranima na tom uređaju i ne mogu se koristiti nigdje izvan uređaja. Uređaj u njima može pohranjivati svoje stanje, dijeliti ih među svojim skriptama i slično.

Init script uređaja

Neobvezno. Pokreće se pri pokretanju uređaja. Ako je popunjena, a još se nije izvršila, ostale se skripte neće izvršavati. 💬 Povratna vrijednost: zanemaruje se ⚙️ Pristup varijablama: globalne varijable modula, globalne varijable uređaja ⚠️ Podrška za stanje pogreške: ne

Read script uređaja

Pokreće se pri svakom upitu prema uređaju, prije skripti „Read Value Scripts”. 💬 Povratna vrijednost: zanemaruje se ⚙️ Pristup varijablama: globalne varijable modula, globalne varijable uređaja ⚠️ Podrška za stanje pogreške: da. Pogreške se odnose na cijeli uređaj (npr. na cijeli termostat, a ne samo na njegovu zadanu vrijednost ili vrijednost trenutačne temperature).

Write value script

Pokretanje:

  • pri svakoj promjeni vrijednosti
  • ako je atribut „Periodična registracija” uključen, i pri svakom upitu

💬 Povratna vrijednost: zanemaruje se ⚙️ Pristup varijablama: globalne varijable modula, globalne varijable uređaja, određena vrijednost veličine koju treba upisati u uređaj preko Modbusa. ⚠️ Podrška za stanje pogreške: ne

Read value script

Pokreće se pri svakom upitu prema uređaju. 💬 Povratna vrijednost: automatski se dodjeljuje kao vrijednost tog uređaja ⚙️ Pristup varijablama: globalne varijable modula, globalne varijable uređaja, zadnja učitana vrijednost varijable, podatak koji treba pročitati (korisno, na primjer, ako uređaj javlja da još nije učitan itd.) ⚠️ Podrška za stanje pogreške: da. Poruke o pogreškama trebaju se odnositi na tu veličinu na uređaju. Na primjer, ako se naredba ADDERROR(1, “Senzor nije spojen”) nalazi u skripti Read Temperature uređaja Termostat, korisnik će u aplikaciji na termostatu vidjeti poruku o pogrešci s tri podatka: Temperatura, kod 1, tekst „Senzor nije spojen”.

Servisni atributi uređaja

Svaki uređaj može imati definiran neograničen broj servisnih atributa. Skripte se izvršavaju svaki put kada korisnik (sa servisnim dopuštenjima) u aplikaciji otvori zaslon naprednih postavki uređaja. Njihove vrijednosti prikazuju se na vrhu, odmah nakon čitanja iz Modbus uređaja. 💬 Povratna vrijednost: prikazuje se kao vrijednost tog atributa ⚙️ Pristup varijablama: globalne varijable modula, globalne varijable uređaja ⚠️ Podrška za stanje pogreške: ne

Servisne radnje uređaja

Svaki uređaj može imati definiran neograničen broj servisnih radnji. Skripte se izvršavaju kada korisnik (sa servisnim dopuštenjima) u aplikaciji otvori zaslon naprednih postavki uređaja i pritisne jedan od definiranih gumba s nazivom servisne radnje. Svaka servisna radnja definirana je svojim nazivom, parametrima i skriptom za izvršavanje. 💬 Povratna vrijednost: zanemaruje se ⚙️ Pristup varijablama: globalne varijable modula, globalne varijable uređaja, parametri koje je zadao korisnik ⚠️ Podrška za stanje pogreške: ne

Dodavanje iz predloška

Omogućuje konfiguraciju Modbus komunikacije s uređajem bez ikakvog znanja o protokolu Modbus ili o tome kako ga konfigurirati u sustavu TapHome. Gotovi predlošci nalaze se:

  • izravno u aplikaciji: Dodaj iz predloška → odaberite određeni uređaj → ispunite osnovne podatke i potvrdite. Svi ti predlošci održavaju se u git projektu zajednice na https://github.com/taphome/modbus_templates i svatko ondje može predložiti nove izmjene. Ono što ulazi u aplikacije mora izravno odobriti tim TapHome.
  • u vlastitoj XML datoteci: Dodaj iz predloška → Dodaj iz datoteke. Možete izraditi vlastitu XML datoteku koja definira cijeli predložak izravno na Modbus modulu, u kontekstnom izborniku (3 točke gore desno), radnjom Spremi kao predložak. Bit će nam drago ako nam pomognete proširiti broj podržanih uređaja i svojom XML datotekom pridonesete zajedničkom git projektu zajednice.

Više informacija o konfiguraciji Modbus komunikacije pomoću predložaka

Ručne operacije

Praktičan alat za brzu početnu provjeru Modbus tablice. Omogućuje:

  • učitavanje sljedećih X registara u tablicu počevši od određenog registra, a zatim dinamičko prebacivanje pročitanih vrijednosti u različite vrste podataka
  • upis vrijednosti u zadani registar

Skeniranje Slave ID-ova

Pri postavljanju komunikacije s Modbus uređajem čest je slučaj da je tvornički zadani Slave ID različit od 1 i da nije lako otkriti ispravan broj. Za to služi ovaj alat. Može skenirati zadani raspon Slave ID-ova tako da pokušava čitati iz odabranog registra, svaki put sa Slave ID-om koji se testira.

Podaci o registrima

Nalaze se u donjem dijelu Modbus modula. Za svaki korišteni registar navode se podaci o:

  • nazivu uređaja TapHome koji iz njega čita ili u njega upisuje
  • datumu i vremenu zadnjeg uspješnog čitanja iz registra
  • zadnjoj vrijednosti pročitanoj iz registra
  • datumu i vremenu zadnjeg uspješnog upisa u registar
  • zadnjoj vrijednosti upisanoj u registar

Prefetch

TapHome izrađuje popis registara koje treba čitati iz Modbus uređaja i upisivati u njih, ovisno o postavljenom Poll intervalu. Prefetch je postupak zahvaljujući kojem centralna jedinica unaprijed učitava u međuspremnik vrijednosti koje će joj trebati tijekom ažuriranja. Cilj je na najmanju moguću mjeru smanjiti broj zahtjeva i razmjena zahtjeva i odgovora. Na Prefetch utječu 2 postavke:

  • Max prefetch register group size (nalazi se u naprednim postavkama modula): određuje najveći broj registara koji se mogu pročitati ili upisati Modbus komunikacijom jednim zahtjevom.
  • Prefetch mode (može se postaviti za svaki uređaj):
  • No prefetch. Za ovaj uređaj neće se izvoditi unaprijed učitavanje. To znači da će se vrijednosti čitati pojedinačno i točno u trenutku izvršavanja skripte. Primjer upotrebe: kod komunikacije s DALI pretvaračem vrijednost određenog svjetla ne može se pročitati izravno, nego se mora zatražiti što prije, pretvarač je pripremi i tek je onda vrati. Bilo kakvo unaprijed učitavanje u tom slučaju nema smisla.
  • Isolated prefetch. Unaprijed učitava više registara odjednom, ali samo one koji su definirani u ovom uređaju. Na primjer, kada su u uređaju termostat potrebni registri 3 i 4, a registri 1, 2, 5, 6 koriste se u drugim uređajima, zahtjev za registre 3 i 4 izvršit će se zasebno, samo za ta 2 registra. Neki Modbus uređaji to zahtijevaju.
  • Normal prefetch. Svi traženi registri iz uređaja koje treba osvježiti pokušavaju se pročitati najmanjim brojem zahtjeva. Kod niza registara s prekidima čitaju se i registri koji se ne koriste, ako su u prošlosti uspješno pročitani. Primjer: traže se registri 99 i 101. Ako je registar 100 u prošlosti uspješno pročitan, a Max prefetch register group size je 3 ili više, jednim zahtjevom pročitat će se 3 registra počevši od registra 99. Ako se registar 100 nigdje ne koristi i nikada nije uspješno pročitan, postoji rizik da čitanje preko takvog registra vrati Modbus iznimku, npr. „Illegal data address” kao odgovor na cijeli zahtjev.

Na Prefetch se može utjecati i izravno iz skripte: ako pri čitanju koristimo registar SC ili SH (umjesto C ili H), vrijednost se tijekom izvršavanja skripte čita registar po registar i ne uzima se iz predmemorije. Slično i pri upisu: ako koristimo registar SC ili SH (umjesto C ili H), vrijednost se upisuje registar po registar i drugom Modbus funkcijom. Protokol Modbus podržava 4 funkcije upisa: upis više registara H, više registara C, upis jednog registra H ili jednog registra C odjednom. Pozor: ne podržavaju svi uređaji nužno sve te funkcije. Na taj se način po potrebi čitanje i upis mogu kombinirati i izvoditi „jedan po jedan”.

Napredne postavke

TCP priključak (Modbus TCP)

U većini slučajeva zadana vrijednost je 502, ali moguće je da neki uređaji slušaju na drugom portu.

Read / Write Timeout

Vrijeme nakon kojeg TapHome prestaje čekati odgovor i javlja pogrešku „Timeout”, što znači da uređaj nije odgovorio na zahtjev u zadanom vremenskom intervalu. Spori Modbus uređaji možda ne mogu odgovoriti dovoljno brzo pa je taj interval potrebno produljiti na 1 ili nekoliko sekundi. Ali pazite na nepotrebno visoke vrijednosti, jer ako iz nekog razloga komunikacija s Modbus uređajem ne uspije, nepotrebno se odgađa komunikacija s drugim Modbus uređajima koji čekaju na odgovor.

Delay Between Requests

Kašnjenje koje TapHome umeće između pojedinih zahtjeva prema Modbus uređaju. Za Modbus TCP zadano je 0 ms, a za Modbus RTU to kašnjenje prema specifikaciji ovisi o brzini komunikacije (baud rate) i iznosi najmanje 3,5 znaka. Postoje ipak Modbus TCP uređaji koji između zahtjeva zahtijevaju i do 5000 ms, ili obrnuto, neki Modbus RTU uređaji podnose i kraća kašnjenja pa mogu komunicirati brže.

Use ASCII communication

Modbus ASCII je rjeđe korišten standard u kojem komunikacija nije binarna, nego se odvija pomoću ASCII znakova. Većina tih uređaja koristi i postavku „7 data bit” (7 podatkovnih bitova).