Sunteți pe pagina 1din 5

SISTEME DE COMUNICATIE – CURS 5 - Constantinescu Catalin

2.3.5.2 Modul Modbus ASCII

Atunci cand se foloseste modul MODBUS ASCII fiecare octet din mesaj este trimis ca doua
caractere ASCII (de exemplu, octetul 0x7A este transmis ca doua caractere – 0x37 = “7”, respectiv
0x41 = “A”). Acest mod este utilizat atunci cand linia de comunicatie sau resursele dispozitivului
nu permit un management al timpului conform cu cerintele impuse de modul MODBUS RTU.

Datorita modului de transmisie a datelor, modul ASCII este mai putin eficient decat modul
RTU.

Codificarea este hexazecimala – caracterele ASCII 0 – 9, A – F. Un caracter hexazecimal


este transmis ca si cod ASCII intr-un cuvant al pachetului MODBUS ASCII.Structura unui caracter
(10 biti) in modul ASCII contine:

- un bit de START;
- 7 biti de date (cel mai putin semnificativ bit este primul transmis);
- un bit de paritate;
- un bit de STOP.

Paritatea recomandata este cea directa (chiar paritate – EVEN PARITY), insa pot fi utilizate
si celelalte paritati (ODD PARITY, respectiv NO PARITY). Paritatea implicita este EVEN
PARITY.

In cazul in care se opteaza pentru lucrul fara bit de paritate (NO PARITY), se vor utiliza 2
biti de STOP.

Fiecare caracter este trimis secvential, incepand cu cel mai putin semnificativ bit (LSB) si
terminand cu cel mai semnificativ (MSB) – fig. 2.25.

Fig. 2.25 Secventa de biti transmisa pentru fiecare caracter in modul ASCII

In modul ASCII un pachet are delimitate clar, prin caractere specifice inceputul, respectiv
sfarsitul. Un pachet trebuie sa inceapa cu caracterul “:” (codul ASCII 0x3A), si se termina prin
caracterele CR si LF (Carriage Return si Line Feed - codurile ASCII 0x0D, respectiv 0x0A).
Caracterul LF poate fi schimbat utilizand o comanda specifica MODBUS. Intre identificatorii de
inceput, respectiv sfarsit de pachet se afla celelalte date (adresa Slave, cod functie …) – fig. 2.26.

Caracterele permise pentru toate celelalte campuri sunt 0 – 9, A – F (codificate ASCII).


Echipamentele ce comunica in modul MODBUS ASCII monitorizeaza continuu linia pentru
identificarea caracterului “:”. Odata receptionat acest caracter, echipamentul va decodifica
urmatoarele caractere pana cand va intalni codurile ASCII specifice sfarsitului de pachet. Intre doua
caractere se poate scurge un timp de pauza de pana la o secunda. In cazul in care nu se configureaza

1
un alt timp, un interval de pauza mai mare de o secunda indica faptul ca a intervenit o eroare de
comunicatie. Sunt retele complexe care necesita timpi de pauza chiar de 4 – 5 secunde.

Fig. 2.26 Structura unui pachet Modbus ASCII

Fiecare octet de date are nevoie de doua caractere pentru codificare. Ca urmare, pentru a
asigura compatibilitatea la nivel de aplicatie intre modurile MODBUS ASCII si MODBUS RTU,
numarul maxim de carctere ASCII din campul de date este 2  252. Astfel, numarul maxim de
caractere continute de un pachet MODBUS ASCII este 513.

Tranzactiile specifice modului MODBUS ASCII pot fi sintetizate grafin intr-o diagrama de
evolutie a starilor, valabila atat pentru echipamentul Master, cat si pentru Slave – fig. 2.27.

Fig. 2.27 Diagrama de evolutie a starilor pentru transmisia in mod MODBUS ASCII

Starea Idle este starea normala, in care nici emisia, nici receptia nu sunt active.
Fiecare receptie a unui caracter “:” inseamna inceputul unui nou pachet. Daca un astfel de
caracter este receptionat in procesul de receptie a unui pachet, atunci pachetul curent este declarat
incomplet si este ignorat. In acest caz este alocat un nou buffer de receptie.

Dupa detectia sfarsitului de pachet, este calculat LRC-ul si verificat. In continuare este
analizata adresa pantru a se determina daca pachetul ii este adresat dispozitivului. Pentru a reduce
volumul de procesare specific receptiei si implicit timpul alocat, analiza adresei poate fi facuta
imediat ce aceasta a fost receptionata, fara a se astepta sfarsitul pachetului.

In modul ASCII, pachetul include un camp de verificare a erorii bazat pe calculul LRC
(Longitudinal Redundancy Checking – verificare redundanta longitudinala). In calculul LRC intra
continutul mesajului, mai putin caracterul de inceput (“:”), respectiv cele de sfarsit de pachet (“CR”,
“LR”). Calculul LRC nu este influentat de metoda de verificare a paritatii utilizata.

Dispozitivul care receptioneaza pachetul calculeaza LRC-ul pe masura ce primeste datele,


urmand ca la sfarsit sa compare valoarea calculata cu cea receptionata. In cazul in care valorile nu
sunt egale, se raporteaza eroare.

LRC se calculeaza insumand toti octetii pachetului si ignorand transporturile in cazul in care
acestea apar, dupa care rezultatul se complementeaza fata de 2. Ulterior calculului LRC, acesta este
codificat ASCII pe 2 octeti si impachetat inaintea perechii “CR” - “LF”.

Algoritmul de calcul al LRC poate fi usor reprezentat in pseudocod – fig. 2.28 – si, implicit
usor de implementat.

setare LRC = 0
pentru fiecare octet b din buffer executa
LRC = (LRC + b) AND 0xFF
terminare ciclu
LRC = (((LRC XOR 0xFF) + 1) AND 0xFF)

s.
scarea cu valoarea 0xFF are rolul de ignorare a transportului in cazul aparitiei acestuia.
nctia SAU exclusiv (XOR) din ultima linie si incrementarea rezultatului cu 1 determina calcularea complementului fata de 2 a

Fig. 2.28 Pseudocod pentru determinarea LRC


2.3.6 Clase de implementare pentru dispozitivele MODBUS si recomandari

Toate dispozitivele / echipamentele dintr-o retea MODBUS trebuie sa respecte toate


cerintele obligatorii ale aceleiasi clase de implementare.

Pentru clasificarea dispozitivelor / echipamentelor MODBUS sunt utilizati urmatorii


parametrii:

- adresarea;
- posibilitatea de BROADCAST;
- modul de transmisie;
- viteza de transmisie;
- formatul caracterelor;
- parametrii interfetelor electrice.

Sunt propuse doua clase – fig. 2.29:

- de baza (BASIC);
- normala (REGULAR).

Clasa normala (REGULAR) trebuie sa aiba capabilitati de configurare.

Clasa de baza Clasa normala


Valori implicite
(BASIC) (REGULAR)
Adresare Slave: Master: La fel ca si in cazul clasei
adresa trebuie sa fie BASIC
configurabila capabil sa
intre 1 si 247 acceseze un
Slave cu
adresa intre 1
si 247
Broadcast Da Da
Viteza de transfer 9600 (se recomanda, de 9600, 19200 si alte viteze, 19200 daca este
asemenea, si 19200) configurabile implementat,
9600 altfel
Paritate EVEN EVEN si viteze EVEN
suplimentare,
configurabile
Mod RTU RTU + ASCII RTU
Interfata RS485 pe 2 fire RS485 pe 2 fire (si RS485 pe 2 fire
sau optional pe 4 fire)
RS232 sau
RS232
Tip conector recomandat RJ45

Fig. 2.29 Clasele de implementare pentru dispozitivele MODBUS


In afara de respectarea cerintelor impuse de clasele de implementare, exista o serie de
recomandari a caror respectare conduce la implementarea flexibila si sigura a retelelor MODBUS.
Este recomandata, de exemplu, utilizarea unor elementel de semnalizare vizuala (cu LED) a starii
dispozitivelor MODBUS, ceea ce determina diagnoza rapida atat a aplicatiilor cat si a dispozitivelor
– fig. 2.30.

LED Nivel cerinta Stare Culoare recomandata


Comunicatie Necesar Se aprinde pe perioada Galben
emisiei sau receptiei unui
pachet (1 LED pentru
transmisie si un LED pentru
receptie sau un singur LED
pentru ambele scopuri)
Eroare Recomandat Se aprinde continuu in cazul Rosu
unei erori interne
Se aprinde intermitent in
cazul altor erori (erori de
comunicatie sau de
configurare)
Stare dispozitiv Optional Se aprinde la alimentarea Verde
dispozitivului

Fig. 2.30 Recomandari privind semnalizarea vizuala a starii dispozitivelor MODBUS

Pentru interoperabilitate este, de asemenea, recomandata respectarea alocarii pinilor in


conectorii specifici RS232 sau RS485.

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