modbus industrijski protokol plc signal automatika.rsModbus – serijski komunikacioni protokol predstavljen davne 1979.godine od strane kompanije Modicon, namenjen komunikaciji između progaramabilnih logičkih kontrolera-PLC-ova. Karakterišu ga jednostavnost i robusnost. Besplatan je te je veoma pogodan za upotrebu. Ovaj protokol je master/slave protokol sa half-duplex prenosom iz grupe Fieldbus protokola. Podržava jedan master i do 247 slave uređaja u jednoj Modbus mreži.

 Protokol definiše precizira sastav grupe poslatih bajtova kao i skup funkcijski kodova koje te poruke mogu prenositi. Protokol ne definiše fizički nivo prenosa ali uglavnom se koriste RS232 (prvobitno) i RS485 (da bi se uvećala daljina prenosa i omogućila multidrop struktura).

 Moderna verzija Modbus koristi Ethernet kao bazični sloj a Modbus/TCP podržava i internet okruženje. Koriste se tri tipa Modbus prenosa:

  • ASCII–jedan byte poruke se sastavlja od dva ASCII karaktera;
  • RTU– poruke se sastaje od binarnih bajtova;
  • Modbus/TCP (ovde se modbus poruka ugrađuje u standardni okvir TCP/IP poruke).

 Modbus ASCII i RTU prenos se koriste na RS232 i RS485 mrežama dok Modbus/TCP protokol operiše na svim fizičkim nivoima koje podržava TCP/IP protokol kao što su 10BASE-T i 100BASE-T LAN kao i serijski PPP i SLIP mrežni nivoi. Modbus protokol podržavaju razni PLC, ali i razni inteligentni sensori.

1 modbus industrijski protokol plc signal automatika.rs

Slika br.1 Modbus sistem sa jednim master uređajem i više slave uređaja

Struktura MODBUS poruke

 U daljem tekstu imaćete priliku da se upoznate sa strukturom modbus poruke. Modbus poruka ima jasno definisanu strukturu koja ne zavisi od tipa prenosa (RS232 ili TCP/IP). U slučaju prostih konekcija (RS485 ili RS232) cela mreža je namenjena samo za Modbus poruke i Modbus poruka se šalje upravo onako kako je definisana u ovom poglavlju. U slučaju da se Modbus poruka šalje preko neke druge mreže, ona se mora ugraditi u standardnu poruku za prenos tom mrežom, kao na primer u standardnu TCP/IP poruku preko Ethernet mreže.
Modbus poruka ima četiri osnovna elementa, koji se šalju po istom rasporedu. Poruka se sastoji od:
  1. Device address – adrese primaoca,
  2. Function code – koda funkcije koju treba izvršiti,
  3. Data -eventualno potrebnih podataka za funkciju,
  4. Error check – polja za proveru greške.
 Početak i kraj poruka se prepoznaju preko Frame start i Frame end karaktera ili signala. Ti signali zavise od tipa prenosa, što je objašnjeno u sledećem poglavlju.
Modbus konverzaciju uvek počinje master jedinica. Ona šalje poruku koja se zove master query i kojom se uobičajeno obraća jednoj slave jedinici. Jedna slave jedinica se prepoznaje na osnovu svoje adrese koja se slaže sa Device address poljem i sprema odgovor. Ostale neprozvane slave jedinice ne odgovaraju i ostaju sa izlazima u stanju visoke impedance. Odgovor može biti puna Modbus poruka, koja sadrži podatke koje master traži, a može bit ii samo prosta potvrda prijema (acknowledgement) u kojoj se sastoji od 1, 2 i 4 elemenata Modbus poruke (dakle, često master ne traži podatke, nego samo neku akciju). Šematski prikaz tipične Modbus komunikacije prikazan je na slici br.2.
2 modbus industrijski protokol plc signal automatika.rs
Slika br.2 Dva tipična ciklusa tokom Modbus komunikacije. Master query (1) i potpun odgovor od slave jedinice (2a) , ili Master query (1) i samo potvrda prijema od strane slave jedinice (2b)

Osnovni modovi prenosa

 Modbus konekcija se može izvršiti preko dva bazična moda za transmisiju i kodovanje poruke, ASCII i RTU. Modbus/ASCII šalje poruku koja se može čitati u ASCII formatu dok Modbus/RTU šalje poruku u binarnom formatu. Master i slave moraju da budu konfigurisani za isti mod prenosa.
Modbus/ASCII. Modbus/ASCII (American Standard Code for Information Interchange) šalje bajtove poruke kodirane u heksadecimalnom sistemu. Da bi jedan bajt sa mogućim brojnim opsegom od 0 do 255 heksadecimalno kodovao potrebna su dva ASCII hex karaktera ili dva nova bajta. Dozvoljeni karakteri su 0…9 i A…F i svaki se prenosi jednim bajtom (8) ili radi uštede vremena sa grupom od 7 bitova. Na primer karakter koji predstavlja broj ‘0’ je ASCII kodovan bajtom 48 ili 0x30, karakter ‘1’ se koduje i prenosi bajtom 0x31 , slovu ‘A’ odgovara bajt 65 ili 0x41 i tako dalje. Ako master zove slave na adresi 26, on šalje dvobajtno polje Device address ‘1’ ‘A’ = 0x31 0x41 = 00110001 01000001
 Modbus/ASCII šalje duplo više bajtova nego što treba ali ima i prednosti. Pošto su za slanje svih polja dozvoljeni samo karakteri 0…9 i A…F za detekciju starta se koristi karakter ‘:’ dok se kraj poruke signalira karakterima ‘CR/LF’.
 Modbus/RTU. Modbus/RTU (Remote terminal unit) šalje podatke u binarnom formatu, bajtove koji mogu primiti vrednost od 0-255. Svaki bajt informacije se šalje direktno, bez konverzije. Ako master zove slave na adresi 26, on salje jednobajtno polje Device address = 0x1A = 00011010
Modbus/RTU šalje duplo manje bajtova ali ima dodatan utrošak vremena radi sinhronizacije starta poruke. Pošto sada bajtovi poruke mogu poprimiti sve moguće brojne kombinacije, nije više moguće izdvojiti jednu od njih za start karakter. Zato se u RTU modu start može pokreniti uvek nakon tišine na iniju u trajanju od 3.5 karaktera. Stop poruke se takođe može detektovati preko tišine na liniju u trajanju od 3.5 karaktera. Ovo znači da mora postoja period neaktivnosti na liniju u trajanju od 3.5 karaktera. Svaki Modbud prijemnik u RTU modu čisti svoj prijemni bafer nakon tišine u trajanju od 1.5 karaktera i spreman je za novu poruku. On takođe smatra da je poruka gotova ako detektuje tišinu u trajanju od 1.5 karaktera.
Podrazumeva se da trajanje karaktera zavisi od podešene brzine prenosa jednog bita i broja bitova u tipičnom bajtu poruke. Modbus to ne specificira, nego koristi podešeno u korišćenim low level protokolima. Na primer , ako se koristi RS232 protokol za prenos jednog Modbus byte, sa podešenim jednim bitom parnosti, imamo 1 +8+1+1 bitova, što za brzinu prenosa 9600b/s dovodi do jednog karaktera u trajanju od 1.145 ms.
3 modbus industrijski protokol plc signal automatika.rs
Tabela br.1

 Tabela br.1 pokazuje da Modbus/ASCII poruka počinje sadrži samo hexadecimalne ASCII karaktere (time istu poruku čine više bajtova), počinje sa dodatnim ‘:’ karakterom, završava sa dodatnom carriage return/linefeed sekvencom i time je manje efikasna od RTU poruke koja šalje binarno kodovane podatke. Ali, kod Modbus/RTU poruke je važno da poruka bude poslata kontinualno bez pause u prenosu duže od 3.5 karaktera. Ako je to nemoguće ostvariti, mora se koristiti Modbus/ASCII transfer.

U oba osnovna tipa transfera master detektuje grešku u prenosu ako ne dobije odgovor od slave jedinice i detektuje timeout. Ukoliko slave detektuje grešku u pristigloj poruci (master query), on neće reagovati na nju a neće ni odgovoriti masteru čime indiretkno i njega obaveštava o grešci.

Oba osnovna tipa Modbus transfera ne zahtevaju otvaranje ili zatvaranje konekcije pre i posle slanja jedne ili više poruka.

Modbus/TCP je nova, treća vrsta Modbus transfera. Predstavlja varijantu Modbus/RTU transfera koja je prilagođena internet okruženju, i koja primenjuje TCP/IP protokol. Modbus/TCP koristi RTU binarni prenos sa TCP/IP detekcijom greške u poruci ili transferu. Modbus/TCP za razliku od ASCII i RTU protokol koji radi na osnovu konekcije. On dozvoljava više konekcija ka istoj ili više slave jedinica. U slučaju Modbus/TCP master mora da otvori i zatvari konekciju pre i posle slanja poruke.

Detekcija greške u Modbus poruci

 Modbus uređaji testiraju tačnost primljene poruke pomoću error check polja. Ovo polje je jednobajtno u ASCII modu prenosa i dvobajtno u RTU modu prenosa. Prijemnik poredi vrednost toga polja sa vrednosti koju je on izračunao na osnovu prijmljenih bajtova i u slučaju razlike detektuje grešku prenosa i ne odgovara na poruku.

LRC detekcija u ASCII modu

 U ASCII modu jedan bajt poruke je rezervisan za proveru greške. Ovaj bajt poruke nosi Longitudinal Redundancy Check (LRC) kod koji se: 
  • Računa na predaji na osnovu poslatih bajtova i utiskuje u poruku.
  • Po prijemu poruke, isto se računa ali na osnovu primljenih bajtova
  • Prijemnik poredi ove dve LRC vrednosti i ako se slažu poruka je bez greške.

Procedura za LRC račun je ista i na predaji i na prijemu:

  1. Saberi sve bajtove u poruci, ali bez start bajta ‘:’ i bez završnih CR/LF karaktera.
  2. Bajtove sabiraj u 8-bitnoj aritmetici, prenos igorisati,
  3. Napravi drugi komplement dobijenog broja (Oduzmi konačan broj od 0xFF (255) i dodaj 1 da bi se dobio njegov II komplement

CRC detekcija u RTU modu

 U RTU modu su dva bajta poruke rezervisana za proveru greške. Ovo 16 –bitno polje se zove Cyclic Redundancy Check (CRC) i računa se na sledeći način (isto na prijemu i predaji):
  1. 16 -bitni registar se napuni jedinicama, crc =0xFFFF
  2. Vrši se logička XOR operacija nad crc registrom i bajtom poruke,
  3. Ukoliko je LSB = 1
    a. Sadržaj crc registra se pomera za jedno mesto udesno
    b. Nad sadržajem crc registra se opet vrši XOR ali sa nekim unapred definisanim brojem (npr. 0xA001)
  4. Ukoliko je LSB = 0
    a. Sadržaj crc registra se pomera za jedno mesto udesno
  5. U najviši bit (MSB) se upisuje nula,
  6. Operacije 2-5 se ponavljaju 8 puta, za svih 8 bitova jednog bajta
  7. Zatim se sve to ponavlja 2-6 , za sve bajtove poruke i konačna crc se upisuje u 16-bitno polje.

 Dalja objašnjejna termina i pojmova možete pronaći na sajtu Katedre za energetsku elektroniku i pretvarače, Fakultet tehničkih nauka u Novom Sadu.

 

POSTAVI ODGOVOR

Please enter your comment!
Please enter your name here

This site uses Akismet to reduce spam. Learn how your comment data is processed.