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. RTU. Datorita modului de transmisie a datelor, modul ASCII este mai putin eficient decat modul 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 28
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. 29
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) Obs. 1. Mascarea cu valoarea 0xFF are rolul de ignorare a transportului in cazul aparitiei acestuia. 2. Functia SAU exclusiv (XOR) din ultima linie si incrementarea rezultatului cu 1 determina calcularea complementului fata de 2 a LRC-ului. Fig. 2.28 Pseudocod pentru determinarea LRC 30
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 (BASIC) Adresare Slave: Master: adresa trebuie sa fie 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 asemenea, si 19200) Clasa normala (REGULAR) La fel ca si in cazul clasei BASIC 9600, 19200 si alte viteze, configurabile Paritate EVEN EVEN si viteze suplimentare, configurabile Valori implicite 19200 daca este implementat, 9600 altfel EVEN Mod RTU RTU + ASCII RTU Interfata RS485 pe 2 fire sau RS232 RS485 pe 2 fire Tip conector recomandat RJ45 RS485 pe 2 fire (si optional pe 4 fire) sau RS232 Fig. 2.29 Clasele de implementare pentru dispozitivele MODBUS 31
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 unei erori interne Se aprinde intermitent in cazul altor erori (erori de Rosu comunicatie sau de configurare) Stare dispozitiv Optional Se aprinde la alimentarea dispozitivului Verde 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. 32