Sunteți pe pagina 1din 9

MODBUS RTU

1. Introducere
Un protocol de comunicatie este prin definitie un set de reguli necesare pentru a
transmite o informatie binara printr-un canal de comunicatie. Aceste reguli se aplica pentru
reprezentarea datelor, pentru transmisie, autentificare si detectare de erori ce pot aparea in
timpul transmisiei.
Un protocol de comunicatie trebuie sa urmareasca urmatoarele principii:
I. usor de implementat. Acest principiu poate fi realizat prin gruparea protocoalelor de
comunicatie pe mai multe niveluri interconectate, fiecare nivel avand un scop bine definit.
Fiecare nivel este separat de celelalte niveluri si interconectat numai cu nivelul de deasupra
sau, in anumite cazuri, cu cel de dedesubt, exceptand nivelul fizic. Prin aceasta separare pe
niveluri, protocoalele sunt mult mai usor de testat, existând posibilitatatea testarii
protocoalelor pe fiecare nivel, utilizand scenarii simple si usor de implementat.
Cel mai utilizat model pentru intelegerea protocoalelor de comunicatie este modelul
OSI (Open Systems Interconnection Basic Reference Model). Acest model are 7 niveluri bine
definite:
• nivelul aplicatie
• nivelul prezentare
• nivelul sesiune
• nivelul transport
• nivelul retea
• nivelul legatura de date
• nivelul fizic
Modelul OSI are rolul de a asigura ca informatiile de la sistemele făcute de diferiţi
producători, deci avand o structura diferita, pot fi transmise si interpretate în concordanţă cu
procedurile standardizate. Nivelul cel mai de jos (Nivelul fizic) are o conexiune fizică pentru a
schimba semnale/informatii cu alte dispozitive. Fiecare nivel, cu excepţia nivelului fizic, obţine
informatiile necesare de pe nivelul inferior. Modelul OSI defineşte doar funcţionarea
nivelurilor, nu şi implementarea tehnică (protocoalele) a acestora. Pentru a intelege mai bine
modelul OSI, mai jos sunt prezentate succinct cateva caracteristici specifice fiecarui nivel.

Nivelul fizic. Pe acest nivel are loc conexiunea fizica, de baza, intre doua sisteme care
comunica intre ele. Cuplajele electrice şi mecanice la mediul de transmitere sunt determinate
pe acest nivel, specificând (printre altele) cablul, distanţa de transmisie, conectarea contactelor
şi felul în care sunt reprezentaţi biţii.
Nivelul legatura de date. Acest nivel are responsabilitatea de a asigura o conexiune
sigura intre doua dispozitive. Din acest motiv, protocoalele de pe acest nivel determina
metodele de protectie la transmisie, a structurii telegramei, a metodelor de accesare, a
mediului de transmitere, de sincronizare si adresare a dispozitivelor.
Nivelul de retea. Pe acest nivel sunt dezvoltate protocoalele care identifica cele mai
bune rute de transmitere a datelor dintr-o retea, intre dispozitivele care comunica la distanta.
Acest serviciu (Routing) este oferit nivelului superior. Acest nivel are o importanţă semnificativa
atunci când diferite reţele sunt conectate prin intermediul unor gateway-uri.

1
Nivelul transport. Asigura transmiterea cu succes a datelor catre dispozitivul destinatar.
Acest nivel permite identificarea pachetelor transmise cu erori si corectarea acestor erori,
oferind astfel calitate si fiabilitate modelului OSI. Corectarea erorilor este realizata prin cereri
de retransmitere a pachetelor lipsa sau cu erori.
Nivelul sesiune. Are un rol esential in asigurarea conexiunii (inchidere/deschidere
porturi, servicii de sincronizare) intre doua dispozitive. Nivelul sesiune asigura o comunicatie
full duplex (bidirectionala) sau half duplex (unidirectionala).
Nivelul prezentare. Nivelul prezentare realizeaza codificarea datelor intr-un format
standard.
Nivelul aplicatie. Este un nivel abstract care gestioneaza serviciile retelei, de ex: posta
electronica, transfer de fisiere, accesul de la distanta la alte aplicatii. De asemenea, acest nivel
defineste si modul in care informatia este afisata utilizatorilor prin intermediul interfetelor
grafice.
II. siguranta. Se refera la detectarea erorilor si corectarea lor. Masura calitatii protocolului
este data prin numarul de biti eronati / numar de biti transmisi. Transmiterea unui numar mai
mare de biti eronati ar afecta sistemele de comunicatie. Detectarea erorilor pe modelul OSI
este realizată pe nivelurile legatura de date si transport.
III. flexibilitate. Se refera la capacitatea protocolului de a descoperi problemele de
topologie ale retelei precum si la formatul datelor transmise (audio, video sau fisiere).

2. Modbus
Protocolul MODBUS a fost definit in 1979 de producatorul de automate programabile
Modicon. El are o serie de avantaje, care l-au impus pe piata echipamentelor de automatizare.
In prezent circa 40% din totalul comunicatiilor industriale se bazeaza pe MODBUS.

Printre avantajele implementarii protocolului MODBUS pot fi considerate urmatoarele:


a. Este relativ simplu de implementat
b. Nu necesita hardware dedicat pe nivelul fizic
c. Dispune de un mecanism sigur de detectie a erorilor
d. Este complet open source si este foarte bine documentat
e. Lucreaza cu biti si cuvinte fara sa impuna restrictii suplimentare producatorilor

Protocolul prezinta si o serie de dezavantaje, printre care:


a. Are o structura rigida master-slave a retelei. In plus, un slave nu poate initia
comunicatia
b. Viteza de comunicatie e limitata la 19200 Bps
Cele mai cunoscute protocoale de comunicatie din familia modbus, sunt modbus ascii
si modbus rtu. Ulterior aparitiei modbus ascii si rtu, au fost dezvoltate alte variante ale
protocolului si anume:
a. MODBUS Plus
b. Modbus II
c. MODBUS TCP
Acestea nu sunt open source si sunt mult mai putin raspandite.
Data fiind specificitatea fiecarui protocol modbus, in continuare vor fi tratate aspecte
ce tin de protocolul modbus rtu. Acest protocol utilizeaza comunicatia seriala pentru schimbul
de mesaje/telegrame intre doua dispozitive master-slave. Acest protocol implementeaza doar

2
trei niveluri ale modelului OSI (fizic, legatura de date și aplicatie) si ofera o comunicatie de tip
master-slave intre dispozitivele conectate prin diferite tipuri de retele sau magistrale.
Nivelul Fizic
Pe nivelul fizic, protocolul modbus se bazeaza pe comunicatia seriala ce utilizeaza
interfetele RS485, RS232. Comunicatia intre doua dispozitive poate fi asigurata fie pe 2 sau 4
fire. Conexiunea pe 2 fire fiind cea mai des intalnita.

Fig 1.1. Conexiunea seriala master-slave pe 2 fire

• Reguli de acces
- Intr-o retea modbus exista un singur master.
- Toate secventele de comunicatie sunt initiate de master. In consecinta doua unitati
slave nu pot comunica direct una cu alta.
- Un singur slave poate raspunde la o cerere transmisa de dispozitivul master
- Toate pachetele transmise de master, fara erori, trebuie sa primeasca raspuns. Exista
totusi o exceptie de la aceasta regula, si anume pachetele de tip “broadcast”. Acestea sunt
adresate tuturor unitatilor slave.
• Reprezentarea datelor
Datorita faptului ca modbus a fost initial dezvoltat pentru comunicatia cu PLC-urile
Modicon, reprezentarea datelor este asociata cu resursele tipice ale PLC-urilor, si anume: iesiri
digitale (denumite “coils” – relee), intrari digitale, intrari analogice (input registers) si iesiri
analogice (holding registers).
La nivelul MODBUS, valorile binare asociate cu intrarile si iesirile digitale sunt
transferate in octeti, iar valorile asociate cu marimile analogice sunt codificate binar in cuvinte
de 16 biti si sunt transmise in reprezentarea “big endian” – cu octetul mai semnificativ transmis
primul. De exemplu, daca se transmite valoarea zecimala 4660 (hex 0x1234) aceasta
se va transmite sub forma a doi octeti 0x12 si 0x34 in aceasta ordine. Daca sunt
necesare numere mai mari decat 65535 (0xFFFF) atunci se vor folosi doua sau mai multe
holding registers pentru a stoca aceste variabile.
In ceea ce priveste transmiterea de mesaje prin seriala, pe nivelul fizic, protocolul
modbas rtu specifica urmatoarele formate:

Fig 1.2. Transmisia seriala cu bituld de paritate si fara bitul de paritate


Principalul avantaj al protocolului modbus rtu este că densitatea de caractere, mai
mare, permite un flux de date mai bun decât in modbus ASCII pentru aceeași rată de transfer.

3
Fiecare mesaj trebuie transmis într-un flux continuu. Un mesaj, transmis intre dispozitivele
master-slave, are urmatoarea structura:
1 bit de start
8 biți de date
1 bit de paritate
1 bit de stop sau 2 biți daca nu este utilizat bitul de paritate
Nivelul Legatura de Date
Protocolul MODBUS defineste o unitate de date PDU (Protocol Data Unit) care este
independenta de mediul de comunicare intre dispozitive.

Fig 1.3. Cadrul unui mesaj PDU


De asemenea, protocolul modbus defineste si o alta unitate de date ADU(Application
Data Unit) pe nivelul de apliatie. Maparea PDU pentru diferite magistrale/retele/protocoale
poate aduce diferite modificari pentru aceasta unitate.

Fig 1.3. Cadrul unui mesaj ADU


In acest sens, protocolul defineste forma raspunsului formulat de salve si forma cererii
oferita de master. Dispozitivelor slave li se atribuie adrese în intervalul 1 – 247. Astfel, o retea
modbus poate avea maxin 247 de dispozive slave. Un master se adresează unui slave prin
plasarea adresei dispozitivului slave în câmpul de adresă al mesajului.
Când slave-ul trimite răspunsul său, își plasează propria adresă în acest câmp de adresă
al răspunsului, pentru a anunța masterul ce dispozitiv slave răspunde. Adresa 0 este utilizată
pentru a transmite mesaje de broadcast. Aceasta adresa este recunoscuta de toate
dispozitivele slave.
Atunci când protocolul Modbus este utilizat în rețelele de nivel superior, este posibil ca
adresa de broadcast să fie înlocuita cu alte metode de a transmite mesaje de broadcast. De
exemplu, Modbus Plus utilizează o bază de date globală partajată care este actualizată in mod
constant.
Dimensiunea maximă a unue telegrame MODBUS RTU este de 256 octeți.

Fig 1.4. Cadrul unui mesaje RTU


În modul RTU, cadrele de mesaje sunt separate printr-un interval siletios de cel puțin
3,5 caractere.

4
Fig 1.5. Transmiterea unui cadru RTU
Dacă un interval silențios de peste 1,5 caractere are loc între două caractere, cadrul
mesajului este declarat incomplet și ar trebui eliminat de către receptor.

Fig 1.6. Transmiterea unui cadru RTU


Nivelul Aplicatie
Nivelul aplicatie specifica codul functiei. Codul funcției este codificat pe 8 biți și indică
slave-ului ce fel de acțiune trebuie efectuată, ce fel de date trebuie transmise. Codurile valide
sunt cuprinse în intervalul [1; 255] (intervalul 128 - 255 este rezervat).
Campul de date contine informatie aditionala care va fi utilizata/procesata de master.
Acest camp poate contine informatie legata de registri, de cantitatea de date care trebuie
procesata sau numarul de octeti cu informatie reala. Acest camp poate fi si gol, in acest caz
masterul nu are nevoie de informatii suplimentare pentru a executa actiunea indicata in
campul codul functiei. In cazul unei erori de executie a functiei ceruta de master, campul va
contine un cod al erorii, care va dicta modul in care eroarea va fi prelucrata.
Atunci cand un slave trimite un raspuns master-ului, se foloseste de campul codul
functiei pentru a indica un raspuns normal(error-free) sau aparitia unei erori (exception
response). Pentru un raspuns normal slave-ul va pune in codul functiei acelasi cod primit
pentru executie. In cazul unei erori, slave-ul va trimite un cod care este echivalent cu codul
primit pentru executie, in care cel mai semnificativ bit este trecut pe 1.
Protocolul MODBUS defineste 3 tipuri de PDU-uri:
- PDU cerere, mb_req_pdu
- PDU raspuns, mb_rsp_pdu
- PDU raspuns eroare, mb_excep_rsp_pdu
Protocolul MODBUS defineste, de asemenea, 4 tabele (memorie mapata), unde sunt
memorate datele colectate de dispozitivele slave. In functie de informatia continuta in campul
codul functiei, poate fi acesata o anumita tabela.

Dacă un anumit dispozitiv include toate aceste tipuri de registre, ramane la latitudinea
producătorului. Este foarte posibil ca toate I / O sa fie mapate numai in Holding Registers.
Registrele Coils sunt registre pe 1 bit, sunt utilizate pentru a controla ieșirile discrete și pot fi
citite sau scrise.
Discretes Input sunt registre pe 1 bit si sunt utilizate ca intrări și pot fi doar citite. Input
registers sunt registre pe 16 biți si sunt utilizate pentru diverse dispozitive de intrare. Holding
Registers sunt cele mai utilizate registre pe 16 biți. Acestea pot fi citite sau scrise și pot fi

5
utilizate pentru a stoca valoarea I/O, date de configurare sau pentru a stoca orice alta unitate
de informatie.
In imaginea urmatoare sunt prezentate cele mai importante/utilizate coduri. Se poate
observa ca in functie de codul functiei, poate fi accesat un anumit registru. De ex, daca un slave
primeste codul 0x03, automat, va fi transmisa informatia existenta in tabela Holding Registers.

Fig 1.7. Codurile functiilor


In ceea ce priveste codurile functiilor transmiese intre master si slave, protocolul
MODBUS defineste 3 tipuri de functii:

Fig 1.8. Tipuri de functii


Coduri de functii publice:
- sunt unice
- bine definite
- validate de comunitatea MODBUS-IDA.org
- au o documentatie publica
- au fost testate de-a lungul timpului
- pe langa codurile care definesc functiile folosite la momentul actual exista si coduri
care sunt rezervate pentru utilizari viitoare
Coduri de functii definite de utilizatori:
- utilizatorul poate alege un cod si implementa o functie care nu este definita
- codurile sunt implementate de fiecare dispoziv slave in parte, acelasi cod poate fi

6
implementat diferit de producatori diferiti
- daca un utilizator vrea sa mute o functie din codurile utilizator in codurile publice,
trebuie sa initieze un RFC prin care sa faca cunoscuta publicului noua functie, iar
daca functia este considerata suficient de importanta ii va fi atribuit un cod din lista
de coduri publice nefolosite
Coduri de functii rezervate
- sunt coduri de functii rezervate de anumite companii
- codurile nu sunt accesibile publicului larg

Diagrama de stari si timp pentru comunicatia modbus


Pentru a putea intelege mai bine modul in care sunt transmise mesaje intre dispozitivele
master si slave prin protocolul modbus, sunt prezentate doua diagrame de stare pentru
dispozitivul master si dispozitivul slave.
Diagrama de stari pentru dispozitivul Master:

Fig. 1.9. Diagrama Master

Câteva explicații pentru diagrama de stari de mai sus:


• Starea „Idle” = nu exista o cerere in asteptare. Aceasta este starea inițială după pornire.
O cerere poate fi trimisă numai în starea „Idle”. După trimiterea unei solicitări, masterul
părăsește starea „Idle” și nu mai poate trimite o noua solicitare.
• Când o solicitare unicast este trimisă unui sclav, masterul intră în starea „Waiting for
reply” și este pornit un „Timp de răspuns”. Acesta impiedică masterul să rămână la
nesfârșit în starea „Waiting for reply”. Perioada de răspuns este dependentă de
aplicație.
• La primirea unui răspuns, master-ul verifică răspunsul înainte de a începe procesarea
datelor. Verificarea este necesara deoarece pot aparea erori, de exemplu, un mesaj
transmis de un alt dispozitiv slave sau o eroare de transmisie în mesajul primit. În cazul
unor răspunsuri primite de la un sclav neașteptat, masterul mentine starea de „Waiting
for reply”. În cazul unei erori detectate, poate fi efectuată o retransmitere a mesajului.
• Dacă nu se primește răspuns, dupa expirarea timpului, se generează o eroare care este
procesata de master. Masterul intra în starea „Idle”, permițând reluarea cererii.
Numărul maxim de încercări depinde de configurarea principală.

7
• Atunci când se transmite un mesaj de broadcast, nu se asteapta răspuns de la
dispozitivele slave. Cu toate acestea, master-ul intra in starea „Waiting turnaround
delay” pentru a permite dispozitivelor slave să proceseze cererea curentă, înainte de a
trimite o nouă cerere.
• În modul unicast, timpul de răspuns trebuie să fie setat a.i. orice dispozitiv slave să
proceseze cererea și să returneze răspunsul.
• În mod obișnuit, intervalul de timp de răspuns este de la 1s la câteva secunde la 9600
bps; iar prioada „turnaround delay” este de la 100 ms la 200ms.
Diagrama de stari pentru dispozitivul Slave

Fig. 1.10. Diagrama Slave

Câteva explicații pentru diagrama de stari de mai sus:


• Starea „Idle” = nu exista o cerere in asteptare. Aceasta este starea inițială după
pornire.
• Când se primește o solicitare, slave-ul verifică pachetul înainte de a efectua acțiunea
solicitată de master. Pot apărea diferite erori: eroare de formatare a cererii, acțiune nevalidă,
etc. În caz de eroare, trebuie transmis un răspuns dispozitivului master.
• După finalizarea acțiunii necesare, un mesaj unicast cu informatia ceruta este
transmis maestr-ului.
• Dacă slave-ul detectează o eroare în mesajul primit sau mesajul nu este adresat
acestui slave, nu se transmite raspuns dispozitivului master.
• Contoarele de diagnosticare MODBUS sunt definite și ar trebui gestionate de orice
slave pentru a oferi informații de diagnosticare. Aceste contoare pot fi obținute folosind
functiile Diagnostic MODBUS
Diagrama de timp pentru comunicatia modbus Master - Slave
Figura următoare arată diagrama de timp pentru 3 scenarii tipice ale comunicațiilor
Master / Slave. In primul exemplu, un mesaj de tip request este transmis de master. Urmeaza
o perioada de asteprare.
Dupa expirarea acestei perioada masterul primeste un mesaj de la dispozitivul slave. In
al doilea exemplu, un mesaj de tip broadcast este transmis de master, iar dupa transmiterea
acetui mesaj, dispozitivul master nu asteapta raspuns. In al treilea exemplu, masterul transmite
un mesaj de tip request si nu primeste raspuns. Atat in cazul 2, cat si in cazul 3, dupa expirarea
perioadei de asteptare, masterul intra in starea Idle.

8
• durata starilor REQUEST, REPLY, BROACAST depind de caracteristicile de comunicare
(lungimea cablului și rata de transfer).
• durata starilor WAIT și TREATMENT depind de timpul de procesare a cererii pe dispozitivele
slave.

S-ar putea să vă placă și