Modbus tcp ip descriere. Protocol industrial ModBus

6.3. Serial MODBUS

Primele rețele MODBUS au fost bazate pe linii de comunicații seriale asincrone și au fost numite MODBUS RTU Și MODBUS ASCII . La nivel fizic, ele folosesc interfețe seriale standard cu modul de transmitere a caracterelor (vezi Fig. 6.1).

În prezent, în MODBUS-IDA aceste rețele sunt numite MODBUS prin linie serială și sunt descrise în standardul relevant. Acesta specifică regulile și recomandările de utilizare la niveluri de legătură și fizice.

Deoarece o rețea MODBUS RTU/ASCII poate avea o topologie magistrală, metoda de acces la magistrală este definită ca model Master/Slave. În rețelele MODBUS RTU și MODBUS ASCII, Procesul Master este întotdeauna Clientul, iar Procesele Slave sunt Serverele. Aceasta înseamnă că Maestrul trimite cereri, iar Sclavii le procesează. Această solicitare poate fi adresată fie unui nod individual, fie tuturor Slave de pe magistrală (difuzare).

Stratul de legătură de date MODBUS RTU/ASCII utilizează adresarea orientată către identificatorul de nod.Fiecare Slave trebuie să aibă propria sa adresă unică (1-247), Masterul nu este adresabil. Pentru cereri individuale, Leader (cu Procesul client) formează un cadru cu un mesaj de solicitare și îl trimite la adresa specificată. Sclavul (cu serverul Process) primește acest cadru și procesează mesajul. După procesarea acestuia, Slave formează un cadru cu un mesaj de răspuns și îl trimite înapoi liderului. Cadrul cu mesajul de răspuns funcționează și ca un cadru de confirmare, pe care Masterul îl va aștepta de la Slave pentru timpul specificat de timeout.

Pentru cererile de difuzare se folosește adresa 0. Solicitările de difuzare nu necesită confirmare, astfel încât după trimiterea unui cadru de difuzare, Masterul nu așteaptă un cadru de răspuns.

6.3.1. Stratul de legătură de date

Figura 6.11 prezintă vedere generală a cadrului serial MODBUS. Rețineți că delimitarea cadrului și tipul sumei de control nu sunt specificate aici, deoarece depinde de modul de transmisie ASCII sau RTU. În câmpul pentru adresa dispozitivului, Master (când solicită) indică adresa destinatarului, iar Slave (când răspunde) - adresa acestuia. Câmpurile MODBUS PDU sunt descrise mai sus.

Diagrama de timp din Fig. 6.12 prezintă trei situații tipice de funcționare ale modelului Master-Slave pe MODBUS Serial. Prima situație este un schimb tipic în modul unicast, a doua este în modul broadcast, a treia este reacția Slavului la o eroare de comunicare.

6.3.2. MODBUS RTU

Acest mod folosește 8 biți de date într-un simbol de 11 biți, ceea ce vă permite să transferați un octet per simbol. Format de caractere în modul RTU: 1 bit de pornire, 8 biți de date (bitul scăzut transmis mai întâi), 1 bit de paritate + 1 bit de oprire biți sau fără paritate + 2 biți de oprire.

Formatul cadrului MODBUS RTU este prezentat în Figura 6.13. Distincția dintre cadre se face folosind pauze între caractere. Un nou cadru nu ar trebui să apară în autobuz mai devreme de 3,5 * Тс față de cel precedent, unde Тс este timpul de transmitere a unui caracter. Dacă absența unui semnal pe linie (interval de tăcere) este mai mare de 1,5 * Tc, receptorul identifică capătul cadrului. Pe de altă parte, apariția unui nou cadru mai devreme de 3,5 * Tc va duce și la o eroare.

Câmpurile pentru adresă și codul funcției în modul RTU ocupă câte un octet, deoarece fiecare octet este transmis ca un caracter. Doi octeți calculați folosind algoritmul CRC16 sunt utilizați ca sumă de control.


6.3.3. MODBUS ASCII

În acest mod, fiecare octet al mesajului este transmis ca două caractere ASCII ale reprezentării lor hexazecimale, adică valoarea octetului 03 16 va fi transmisă ca cod ASCII al caracterelor „0” și „3” (0110000 0110011) Astfel, octeții de date, codul funcției și octetul câmpului de verificare vor fi transmise în coduricaracterele 0-9, A-F. Format de caractere în modul ASCII: 1 bit de pornire, 7 biți de date (bitul cel mai puțin semnificativ este transmis primul); 1 bit de paritate + 1 bit de oprire sau fără paritate + 2 biți de oprire.

Formatul cadrului este prezentat în Fig. 6.14. După cum puteți vedea, caracterul de început „:” și secvența de oprire „CR LF” sunt folosite pentru a diferenția cadrele. Receptoarele de pe autobuz monitorizează continuu caracterul „:”, care indică în mod unic începutul cadrului. Când este primit, receptorii prind câmpul de adresă etc. Aceasta este o metodă de sincronizare foarte simplă, care vă permite să fiți necritic față de pauzele dintre caractere (până la 1 secundă). Adresa Slave și codul funcției ocupă fiecare câte două caractere, în funcție de valoarea unui octet. Urmează n * 2 caractere de date, unde n este numărul de octeți de date. În modul ASCII, algoritmul LRC este utilizat pentru a calcula suma de control. În plus, suma de control este efectuată pe toți octeții cadrului, cu excepția secvenței de pornire și oprire a caracterelor.

Modul ASCII impune mai puține cerințe hardware prin utilizarea unei secvențe de început și post pentru a delimita cadrele și este insensibil la pauzele semnificative dintre caractere. Dar aceste avantaje se reflectă în dezavantajele sale. Modul RTU este mai solicitant cu privire la intervalele dintre cadre, dar este mult mai productiv decâtASCII.

Exemplul 6.4. MODBUS. Calculul timpului de interogare slave pe MODBUS-RTU.

Sarcină . Construiți cadre de formate de mesaje de cerere și răspuns pentru MODBUS RTU și calculați timpul total de interogare pentru 10 variabile analogice pe 16 biți pentru 4 slave (Fig. 6.15). Rata de transfer de date pe biți - 19200 bps. Procesul Master Client (TSX Premium) și Procesele Slave Server (TSX Micro PLC) primesc mesaje la începutul ciclului și trimit mesaje la sfârșitul ciclului. Timp ciclu master = 10 ms, Slave - 5s.

Finalizați sarcina. Variabilele analogice interne ale TSX Micro sunt accesate prin funcția 03 sau 04, astfel încât formatul cadrului va arăta ca în Figura 6.16.

Având în vedere că structura celorlalte cadre este similară, nu are rost să le prezentăm formatul.
Similar cu Fig. 6.12, vom construi o diagramă temporală a schimbului (Fig. 6.17).

Din partea aplicației client, un mesaj de solicitare este generat folosind o funcție de comunicare, ale cărei date sunt trimise prin portul de comunicație la sfârșitul ciclului sarcinii și primite de la port la începutul ciclului. Acest comportament pe partea clientului este în concordanță cu multe implementări pentru diferite PLC-uri.

În TSX, serverul Micro MODBUS este implementat la nivel de sistem de operare. Specificul implementării este că sistemul primește solicitări MODBUS de la portul de comunicație la începutul ciclului și trimite mesaje de răspuns la sfârșit.

Trebuie remarcat faptul că implementarea serverului MODBUS poate fi susținută la nivelul modulului de comunicație, iar schimbul de date cu memoria dispozitivului în sine se realizează prin intermediul bufferelor de comunicare. În acest caz, răspunsul serverului MODBUS va fi mult mai rapid și nu va depinde de ciclul programului. Pentru a calcula timpii de tranzacție pentru alte tipuri de sisteme, trebuie să vă familiarizați cu detaliile de implementare a acestora.

Figura 6.17 arată că sosirea unui cadru ajunge undeva în buclă. Aceasta înseamnă că procesarea și generarea răspunsului lor va dura aproximativ 1,5 cicluri. Trebuie înțeles că aceasta este o valoare medie, pentru cea mai proastă estimare este mai bine să rezervi 2 timpi de ciclu (adică când cadrul a sosit imediat după sondarea portului de comunicație). Astfel, timpul de tranzacție pentru un PLC, de exemplu PLC1 (TT1), va fi egal cu:

TT1=C5+T1.req+2*C1+T1.res+C5*2 (6,1)

TT1 este calculat luând în considerare 2 cicluri petrecute de către Slave pentru a genera un răspuns la mesajul de solicitare. Dacă tranzacția ar fi efectuată nu periodic, ca în funcție de starea sarcinii, ci la apariția unui eveniment, atunci în timpul tranzacției ar fi necesar să se includă și un alt ciclu de master. Este ușor să afișați timpul de interogare pentru toți sclavii:

ТТall=C5*9+C1*2+C2*2+C3*2+C4*2+T1.req+T1.res+ T2.req+T2.res+ T3.req+T3.res+ T4.req+T4.res+ (6,2)

Având în vedere că ciclurile Slave sunt aceleași, iar cadrele de cerere și cadrele de răspuns pentru toți slave au aceeași structură, formula generală va fi următoarea:

TTall= C5*9 + C1*8 + (T1.req+T2.req)*4(6,3)

Să calculăm timpii T1.req și T2.req.

Timpul de transmisie a cadrului (Tframe) poate fi calculat aproximativ prin numărul de simboluri (Nsymb) din cadru și timpul de transmisie a unui simbol (Tsymb):

Tframe=Nsymb*Tsymb (6.4)

Timpul de transmisie a unui caracter este calculat:

timpul de transmisie per simbol = numărul de biți per simbol/rată de biți;
Timpul de transmisie a cadrului va fi egal cu (div. Fig. 6.16 și Fig. 6.17):

T1.req=8*(11/19200)=4,58 ms

T1.res=25*(11/19200)=14,33 ms

TTall=90+40+ (4,58+14,33)*4= 206 ms.

Astfel, pentru a interoga 10 variabile de la 4 slave la o viteză de 19200 bps, este nevoie de aproximativ 206 ms. Dacă este necesară interogarea periodică, este recomandabil să rezervați un anumit timp, de exemplu, 100 ms în plus.

În unele cazuri, implementarea funcțiilor MODBUS Client revine sistemului de operare, iar accesul la acestea în programul PLC are loc prin intermediul funcțiilor de comunicare a interfeței. În special, acest lucru este tipic pentru majoritatea PLC-urilor de la Scneider Electric (Momentum, Quantum, TSX Micro, TSX Premium, M340). Într-un număr de alte sisteme, partea client la nivelul aplicației trebuie să fie complet înregistrată în programul PLC, iar interfața este furnizată doar pentru schimb cu portul de comunicație. În acest caz, sistemul oferă servicii pentru trimiterea și primirea mesajelor (care sunt generate și analizate chiar de programul utilizatorului), precum și generarea și verificarea unei sume de control.Să ne uităm la un exemplu.

Exemplul 6.5. MODBUS. Implementarea unui client MODBUS pe TSX Twido.

Sarcină . Scrieți un fragment de program pe PLC Twido pentru a citi 3 registre de la Slave cu adresa 1 (Fig. 6.18).

Soluţie . În Twido, partea client MODBUS trebuie implementată printr-o funcție generică EXCHx, care trimite și/sau primește date prin numărul portului de comunicație x. Parametrii funcției sunt un tabel de cuvinte (%MW), care conțin date de control al funcției, date de trimis și un buffer de primit. Dacă schimbul are loc prin portul de comunicație 2, atunci apelul de funcție va avea următorul format:

EXCH2 %MWy:n,

unde y este numărul primei variabile din tabelul selectat, n este numărul de cuvinte din tabel.

Formatul tabelului, adică datele care trebuie completate și zona de date care trebuie primită este aceeași pentru toate tipurile de comunicații. Pentru funcțiile 03/04 (citirea N cuvinte) prin MODBUS-RTU, acest tabel va avea forma prezentată în Tabelul 6.2).

Tabelul de parametri este format din 3 părți - subtabele. Tabelul de control al funcției specifică parametrii funcției în sine. Deci, în octetul înalt al cuvântului 0 este indicat că această funcție funcționează în ambele direcții, adică. După trimiterea datelor, trebuie să așteptați un răspuns. Octetul mic al aceluiași cuvânt indică lungimea tabelului de transmisie (în acest caz 6 octeți), astfel încât sistemul să știe despre octeții care trebuie transmisi (de la al 2-lea cuvânt la al 4-lea) și unde începe tamponul de recepție (din al 5-lea cuvant). Decalajele în transmisie și recepție sunt necesare pentru a alinia datele din buffer-uri la cuvinte.

Tabelul de transfer conține cererea în sine, adică. cadru fără cod CRC. Tabelul de primire este un buffer pe care sistemul îl va umple cu un cadru de răspuns dacă rezultatul este pozitiv. Astfel, înainte de a utiliza această funcție, este necesar să se construiască un cadru de cerere și răspuns excluzând câmpul CRC (Fig. 6.19)

Tabelul 6.2

Tabel de parametri

Index în tabel

Octet mare

Octet mic

Tabel de control al comunicațiilor funcţie

01 (tip de funcție trimitere+primire)

06 (lungimea mesei de transfer)

03 (bias în recepție)

00 (schimbarea transmisiei)

Masa de transfer

Adresa sclavului

03 (numărul funcției)

adresa de pornire a registrului

numărul de registre

Masa de recepție (mesaj-răspuns)

Adresele sclavului

03 (numărul funcției)

00 (octet pentru offset)

contor de octeți

primul registru

al doilea registru

...

N+6

Al-lea registru

După cum puteți vedea, cererea conține 6 octeți. Această sumă trebuie introdusă în octetul inferior al celui de-al 0-lea cuvânt al tabelului. Răspunsul este de așteptat să fie de 9 octeți. Dacă octeții cadrului de răspuns sunt plasați într-o secvență de cuvinte (în PLC Schneider Electric memoria este adresată în cuvinte), atunci octetul mare al primului registru recepționat (conform condiției, acesta este %MW100) va fi situat pe octetul inferior al celui de-al 2-lea cuvânt al bufferului, iar octetul scăzut al registrului primit va fi activatoctet înalt al celui de-al 3-lea cuvânt din buffer. Astfel, toate cuvintele acceptate vor fi mutate și vor fi greu de citit. Pentru a remedia această problemă, tabelul de parametri al funcției are un câmp de compensare de primire care specifică numărul de octeți din tamponul de recepție care va muta întreaga secvență.

Fragmentul de program va arăta ca în Fig. 6.20.
Lanțul LD superior este pentru umplerea tabelului de control al funcției și a tabelului de transmisie.

În al doilea lanț, funcția este apelată direct. Variabila %MSG2.D returnează un boolean „1” atunci când funcția EXCH2 este procesată și rezultatul este primit. Utilizarea acestuia previne „inundarea” rețelei cu un număr excesiv de cadre, deoarece până nu există un răspuns la cererea anterioară sau până la expirarea timpului nu a trecut, o nouă solicitare nu poate fi trimisă.

Ultimul lanț este destinat scrierii rezultatului citirii în variabilele %MW0:3 (un tabel cu 3 cuvinte începând de la %MW0). Variabila %MSG2.E va fi egală cu 1 când există o eroare în apelul funcției.

6.3.4. Implementarea stratului fizic pentru MODBUS Serial

Spre deosebire de specificația originală, care era limitată la descrierea cadrului, standardul MODBUS-IDA descrie și regulile de implementare a rețelei la nivelul fizic. MODBUS over Serial Line se bazează pe utilizarea interfețelor seriale RS-485, RS-422 și RS-232.

A fost definită o topologie pentru RS-485 - aceasta este o magistrală care oferă trei moduri de conectare a dispozitivelor (Fig. 6.21):

- Direct la cablul trunchiului, fără ramuri;

- Printr-o cutie de conectare pasiva si un cablu de ramificatie (Derivare);

- Printr-o cutie activă și un cablu de ramură specific.

Interfețele dintre cabluri și elementele de rețea au următoarele denumiri (vezi Fig. 6.21): ITr - interfață cu cablul de coloană vertebrală; IDv - interfață între dispozitiv și cutia pasivă; AUI - interfață între dispozitiv și caseta activă; LT - terminatoare de linie.
Ratele de biți sunt definite ca 9600 bps și 19200 bps (implicit). Alte viteze sunt optionale.Este utilizată metoda de codificare NRZ.

Când se utilizează RS-485, standardul definește regulile pentru conectarea dispozitivelor folosind o schemă cu 2 și 4 fire, precum și regulile pentru compatibilitatea interfețelor cu 2 și 4 fire pe o singură linie. Mai jos luăm în considerare doar o conexiune cu 2 fire, al cărei suport este obligatoriu.

În esență, o conexiune cu 2 fire este de fapt o conexiune cu 3 fire, deoarece în plus față de liniile A-( D0 ) și B+( D1 ) linia comună C( Uzual ), care este obligatoriu (Fig. 6.22).

Numărul total de dispozitive este limitat: 32 de dispozitive pe un segment RS-485 fără repetoare (este permisă utilizarea repetoarelor). Lungimea maximă a cablului depinde de viteza, tipul cablului, numărul de sarcini și configurația rețelei (2 fire sau 4 fire). Pentru 9600 de biți și cablu AWG26, lungimea maximă este limitată la 1000 m. Cablul de transfer trebuie să fie mai scurt de 20 m Dacă se utilizează cutii multiport cu n porturi, atunci fiecare cablu este limitat la 40/n m în lungime.

Cablul de semnal comun (comun) trebuie să fie conectat la ecran într-un punct al magistralei, de obicei lângă nodul Master sau cutia sa de ramificație.

Pentru a suprima reflexia undei, terminatoarele de linie (LT) sunt instalate la capetele liniei dintre D1 și D0. Terminatoarele pot fi instalate numai pe cablul principal.Următoarele pot fi folosite ca terminatori:

- Rezistor cu o valoare nominală de 150 Ohmi și o putere de 0,5 W;

- Condensator conectat în serie (1 nF, 10 V minim) și rezistor de 120 ohmi (0,25 W) folosind polarizarea liniei

Standardul MODBUS Serial definește reguli pentru implementarea polarizării de protecție (polarizare), care prevăd conectarea unei surse de alimentare de 5 V între D1 și D0 prin rezistențe PullUp și PullDown pentru a menține un „1” logic pe linie atunci când nu există transmisie.Valoarea rezistenței este selectată de la 450 Ohm la 650 Ohm în funcție de numărul de dispozitive (650 Ohm pentru un număr mare). Schimbarea defensivă se efectuează doar într-un punct de pe linie, de obicei pe partea de conducere. Numărul maxim de dispozitive cu polarizare implementată este redus cu 4 comparativ cu un sistem fără polarizare. Polarizarea este opțională. Cu toate acestea, comunicațiile pe dispozitive pot eșua dacă nu există semnal logic. Dacă acesta este cazul, atunci polarizarea trebuie implementată independent sau trebuie să folosească circuite existente, dacă sunt furnizate de dispozitive.

Standardul definește și interfața mecanică, adică tipuri de conectori, mufe și corespondența semnalelor pe contacte. Ca terminal mecanic, puteți utiliza un bloc de borne, RJ-45 ecranat (Fig. 6.23) sau conector SUB-D9 ecranat (Fig. 6.24).

Tabelul 6.3 arată alocarea contactelor pentru conectorii pentru o conexiune cu 2 fire prin RS-485 și Tabelul 6.4 pentru RS-232

Tabelul 6.3

Scopul contactelor conectorului la conectarea prin RS-485

numere de contact

cerințele de disponibilitate

Circuitul IDv

lanțul ITr

numele RS-485

un comentariu

(vezi secțiunea 3)

RJ45

SUB-D9

opțional

P.M.C.

controlul modului com port

Neapărat

D1

B/B"

tensiune V1, V1>V0 pentru log. "1"

Neapărat

D0

A/A"

tensiune V0, V0>V1 pentru log. "0"

preferabil

Alimentare 5…24 VDC

Neapărat

Uzual

Uzual

C/C"

Putere și masă de semnal

Tabelul 6.4

Scopul contactelor conectorului la conectarea prin RS-232

DCE (modem)

circuit

DTE

numere de contact

cerințele de disponibilitate

Nume

un comentariu

(vezi secțiunea 3)

sursă

RS-232

cerințele de disponibilitate

numere

contacte

RJ45

SUB-D9

RJ45

SUB-D9

Neapărat

TxD

Date transmise

<< DTE

Neapărat

Neapărat

RxD

Date primite

DCE >>

Neapărat

opțional

CTS

Ștergeți pentru a trimite

DCE >>

opțional

opțional

RTS

Solicitare de trimis

<< DTE

opțional

Neapărat

Uzual

Semnal comun

Neapărat

Ca cabluri pentru un tip de conexiune cu 2 fire, standardul definește o pereche răsucită dublu ecranată de categoriile 4 (până la 600 m) sau 5 (până la 1000 m), unde o pereche conține semnale echilibrate D0 și D1, iar a doua conține semnalele comune. masă de semnal. Culori recomandate cablu: D1 galben; D0 maro; Gri comun.

Exemplul 6.6. MODBUS. Schema de conectare la rețea MODBUS RTU.

Sarcină . Desenați o diagramă a conexiunilor de rețea pentru o implementare cu 2 fire a magistralei MODBUS RTU cu următoarele noduri:

- PLC1: CPU VIPA 115SER 6BL32 (Master) prin portul serial încorporat al modulului procesorului;

- PLC2: TSX Twido TWDLMDA40DTK (slave) prin modulul de comunicare TWD NOZ 485T

- PLC3: TSX Twido TWDLMDA40DTK (slave) prin modulul de comunicare TWD NOZ 485T

Soluţie . Figura 6.25 prezintă o diagramă a conexiunilor de rețea pentru sarcina dată. Specificația facilităților de rețea este dată în Tabelul 6.5.

După cum se poate observa din Fig. 6.25, PLC1 este conectat la magistrală printr-o cutie pasivă, sau mai degrabă printr-un bloc terminal, care este practic echivalent. Acest lucru se datorează faptului că conexiunile la PLC se realizează folosind un conector SUB-D cu 9 pini, care necesită dezvoltarea unui cablu propriu, a cărui diagramă de conectare (joncțiune) este afișată la conector și la blocul de borne. sub diagrama principală.

Astfel, firele cablului KM2 trebuie lipite la mufa KK1.Alocarea pinilor prizei SER nu coincide cu cea standard. Pinii 8 și 3 (A (D0) și B (D1, respectiv)) merg într-o pereche, apoi se conectează la XT1:1 și XT1:2; 5 și 6 (M5V (-5V) și P5V (+5 V, respectiv)) merg la o altă pereche răsucită a cablului KM2. Este necesară o alimentare de 5V pentru a implementa polarizarea de protecție (asimetrie) în conformitate cu standardul. in afara de astaM5Veste o masă de semnal (Comun).

Cablul KM2 este conectat la XT1 conform diagramei prezentate în Fig. 6.25. Ecranul cablului este conectat la masa de semnal în conformitate cu cerințele standardului. Trebuie reamintit că PLC-ul VIPA din acest sistem este Master, prin urmare, conexiunile offset de protecție și scut la pământ trebuie implementate în acest loc. Polarizarea de gardă este produsă folosind o putere de 5 V, care este preluată de la portul SER și două rezistențe.

Tabelul 6.5.

Specificații de rețea

Desemnare

Nume

Referinţă

Kolic

Notă

PLC1

PLC VIPA 100

CPU VIPA 115SER 6BL32

1 BUC.

VIPA

PLC2, PLC3

PLC Twido

TWDLMDA40DTK

2 buc.

Schneider Electric

MK1, MK2

modul de comunicare pentru implementarea interfeței RS-485, conexiune cu șurub

TWD NOZ 485T

2 buc.

Schneider Electric

KK1

Conector tată SUB-D cu 9 pini

1 BUC.

XT1

Bloc terminal cu 4 pini

1 BUC.

TL1,TL2

terminatoare de linie

2 buc

sunt fabricate cu pos. 7 și 8

Rezistor 120 Ohm (0,25 W)

2 buc.

incluse la punctul 6

Condensator 1 nF (>10 V)

2 buc.

ca parte a poz. 6

Ru, Rd

Rezistor 500 Ohm (0,25 W)

2 buc

KM1

AWG26

300 m

KM2

cablu cu pereche răsucită dublu ecranat, categoria 5 AWG26

2 m

KM3

cablu cu pereche răsucită dublu ecranat, categoria 5 AWG26

300 m

PLC2 și PLC3 sunt conectate la magistrală folosind un modul de comunicație cu un bloc terminal. Acest lucru vă permite să implementați o conexiune fără ramuri. Cu toate acestea, blocul nu oferă un punct de conectare pentru ecran, astfel încât cablul este ecranat separat.

Terminatoarele de linie sunt implementate prin conectarea rezistențelor și condensatoarelor în serie, deoarece pe magistrală este aplicată o polarizare de protecție.

În prezent, MODBUS Serial este utilizat atât la nivel de controler, cât și la nivel de senzor (pentru periferice distribuite). Utilizarea sa este problematică atunci când pe autobuz sunt mai multe dispozitiveSCADA/ HMI, care într-o arhitectură client-server trebuie să fie Clienti, deoarece pe MODBUS RTU/ASCII doar Masterul poate fi Client. Dar chiar și într-o astfel de situație, este posibil să se organizeze livrarea datelor către toate nodurile care au nevoie, dacă acceptă acest mod.

Pe baza celor de mai sus, puteți alege magistrala serial MODBUS dacă:

- toate dispozitivele Server acceptă MODBUS RTU / ASCII în modul Slave;

- este necesar un singur dispozitiv Client, care trebuie să inițieze schimburi pe magistrală, suportând MODBUS RTU/ASCII ca Master;

- viteza de recuperare a datelor- satisface condițiile problemei;
nu este nevoie de

Unul dintre avantajele Modbus este absența necesității unor controlere de interfață speciale (Profibus și CAN necesită cipuri personalizate pentru implementarea lor), simplitatea implementării software și eleganța principiilor de funcționare. Toate acestea reduc costul stăpânirii standardului atât de către integratorii de sistem, cât și de către dezvoltatorii de echipamente de controler. Gradul ridicat de deschidere al protocolului este asigurat și de textele standard complet gratuite, care pot fi descărcate de pe site-ul www.modbus.org.

În Rusia, Modbus concurează doar cu Profibus în ceea ce privește prevalența. Popularitatea protocolului se datorează în prezent, în primul rând, compatibilității cu un număr mare de echipamente care au protocolul Modbus. În plus, Modbus are o fiabilitate ridicată a transmisiei de date datorită utilizării unei metode fiabile de control al erorilor. Modbus vă permite să unificați comenzile de schimb prin standardizarea numerelor de registru (adrese) și a funcțiilor lor de citire-scriere.

Principalul dezavantaj al Modbus este conectarea în rețea master/slave, care nu permite slavilor să transmită date pe măsură ce acestea devin disponibile și, prin urmare, necesită interogare intensivă a slavilor de către master.

Varietățile de Modbus sunt protocoalele Modbus Plus [Modicon] - un protocol multi-master cu transmisie de token de inel și Modbus TCP[Modbus], conceput pentru utilizare în rețele Ethernet și Internet.

Protocolul Modbus are două moduri de transmisie: RTU (Remote Terminal Unit) și ASCII. Standardul prevede că modul RTU în protocolul Modbus trebuie să fie prezent, iar modul ASCII este opțional. Utilizatorul poate selecta oricare dintre ele, dar toate modulele incluse în rețeaua Modbus trebuie să aibă același mod de transmisie.

Vom lua în considerare doar protocolul Modbus RTU, deoarece Modbus ASCII nu este practic utilizat în Rusia. Rețineți că Modbus ASCII nu trebuie confundat cu protocolul proprietar DCON, care este utilizat în modulele Advantech și ICP DAS și nu respectă standardul Modbus.

Standardul Modbus prevede utilizarea unei interfețe fizice RS-485, RS-422 sau RS-232. Cea mai comună pentru organizarea unei rețele industriale este interfața RS-485 cu 2 fire. Pentru conexiuni punct la punct, se poate folosi interfața RS-232 sau RS-422.

Standardul Modbus include obligatoriu cerințe, recomandatȘi opțional(opțional). Există trei grade de conformitate cu standardul: „pe deplin conform” - când protocolul îndeplinește toate cerințele obligatorii și toate recomandate, „conform condiționat” - când protocolul îndeplinește doar cerințele obligatorii și nu le îndeplinește pe cele recomandate și „nu nu se conformează”.

Modelul OSI al protocolului Modbus conține trei straturi: fizic, canal și aplicație.

În mod implicit, în modul RTU, bitul de paritate este setat la 1 dacă numărul de binari dintr-un octet este impar și 0 dacă este par. O astfel de paritate se numește paritate pară și se numește metoda de control control de paritate.

Start bit

Bit de paritate

Orez. 2.26. Secvență de biți în modul RTU; LSB – cifra cea mai puțin semnificativă. Dacă nu există un bit de paritate, în locul său este scris un al doilea bit de oprire.

Cu un număr par de binari într-un octet bit de paritate poate fi egal cu 1. În acest caz, se spune că paritatea este impară (paritate impară).

Este posibil să nu existe deloc verificarea parității. În acest caz, un al doilea bit de oprire trebuie utilizat în locul bitului de paritate. Pentru a asigura compatibilitatea maximă cu alte produse, se recomandă utilizarea opțiunii de înlocuire a bitului de paritate cu un al doilea bit de oprire.

Dispozitivele slave pot accepta oricare dintre opțiuni: chiar, paritate impară sau lipsa acestuia.

Structura mesajului Modbus RTU

Mesajele Modbus RTU sunt transmise sub formă de cadre, fiecare dintre ele având un început și un sfârșit cunoscut. Un semn al începutului unui cadru este o pauză (tăcere) care durează cel puțin 3,5 caractere hexazecimale (14 biți). Cadrul trebuie transmis continuu. Dacă în timpul transmiterii cadrului este detectată o pauză de mai mult de 1,5 caractere hexazecimale (6 biți), cadrul se consideră că conține o eroare și trebuie respins de modulul de recepție. Aceste valori de pauză trebuie respectate cu strictețe la viteze sub 19200 bps, dar la viteze mai mari se recomandă utilizarea unor valori fixe de pauză de 1,75 ms și, respectiv, 750 µs.

Controlul erorilor

În modul RTU există două niveluri de control al erorilor de mesaje:

    control de paritate pentru fiecare octet (opțional);

    controlul cadrului în ansamblu folosind metoda CRC.

Metoda CRC este utilizată independent de verificarea parității. Valoarea CRC este setată în master înainte de transmitere. Când se primește un mesaj, se calculează CRC pentru întregul mesaj și se compară cu valoarea specificată în câmpul CRC al cadrului. Dacă ambele valori se potrivesc, se consideră că mesajul nu conține nicio eroare.

Biții de pornire, oprire și paritate nu participă la calculul CRC.

2.8.3. Strat de aplicație

Stratul de aplicație Modbus RTU versiunea 1.1a este descrisă în [Modbus]. Permite comunicarea între dispozitivele master/slave. Stratul de aplicație este independent de fizic și de canal, în special, poate utiliza Ethernet TCP/IP (Modbus TCP/IP), Modbus Plus (rețea multi-master cu trecere de token), RS-232, RS-422, RS -485, fibră optică, canale radio și alte medii fizice pentru transmiterea semnalelor.

Stratul de aplicație Modbus se bazează pe solicitări folosind coduri de funcții. Codul funcției îi spune sclavului ce operație ar trebui să efectueze.

Când se utilizează un protocol de nivel de aplicație cu diferite protocoale de nivel de transport și legătură, blocul principal al mesajului Modbus, inclusiv codul funcției și datele, rămâne neschimbat (acest bloc se numește PDU- "Protocol Data Unit" - "protocol data element"). Câmpuri suplimentare pot fi adăugate la PDU atunci când sunt utilizate în diverse rețele industriale și apoi se numește " ADU" - "Unitate de date aplicație" - "element de date aplicație".

Coduri de funcții

Standardul Modbus oferă trei categorii de coduri de funcție: standard, definite de utilizator și rezervate.

Codurile de funcție sunt numere cuprinse între 1 și 127. Codurile din intervalul de la 65 la 72 și de la 100 la 110 sunt funcții definite de utilizator, iar cele din intervalul de la 128 la 255 sunt rezervate pentru trimiterea codurilor de eroare în mesajul de răspuns. Codul „0” nu este folosit.

Codurile de eroare sunt folosite de către slave pentru a determina ce acțiune să întreprindă pentru a le gestiona. Semnificația codurilor și semnificația lor sunt descrise în standardul Modbus RTU [Modbus].

Înregistrați desemnarea

Adresă de registru HEX

Ce se citește sau se scrie

Înregistrați codul funcției de citire

Înregistrați Scrieți codul funcției

Notă

Disc. iesire 0

Disc. ieșire 1

Disc. intrare 0

Disc. intrare 1

Disc. intrare 2

Disc. intrare 3

Disc. intrare 4

Disc. intrare 5

Disc. intrare 6

Disc. intrarea 7

Disc. intrare 8

Disc. intrarea 9

Disc. intrarea 10

Disc. intrarea 11

Disc. intrarea 12

Disc. intrarea 13

Disc. intrarea 14

Disc. intrarea 15

Numele modulului

Versiunea programului

Adresa modulului

0001h-00 F7h (interval de valori permis)

Viteza UART

(Interval acceptabil de valori)

Protocol

0000h–ASCII,

Valoarea de ieșire după pornirea sursei de alimentare a modulului Power On Value0

0000h-0003 h (gamă de valori)

) pentru utilizare în controlerele sale logice programabile. Specificația protocolului a fost publicată pentru prima dată în 1979. Era un standard deschis care descria formatul mesajelor și modul în care acestea erau transmise printr-o rețea formată din diverse dispozitive electronice.

Inițial, controlerele MODICON foloseau interfața serială RS-232. Ulterior, a început să fie utilizată interfața RS-485, deoarece oferă o fiabilitate mai mare, permite utilizarea unor linii de comunicații mai lungi și conectarea mai multor dispozitive la o singură linie.

Mulți producători de echipamente electronice au susținut standardul și au apărut pe piață sute de produse care îl folosesc. În prezent, dezvoltarea Modbus este realizată de organizația non-profit Modbus-IDA, creată de producători și utilizatori de dispozitive electronice.

Introducere

Modbus se referă la protocoalele de nivel de aplicație ale modelului de rețea OSI. Controlerele de pe magistrala Modbus comunică folosind un model client-server bazat pe tranzacții de cerere și răspuns.

De obicei, în rețea există un singur client, așa-numitul client „principal”. maestru) și mai multe servere - „sclave” ( sclavi) dispozitive. Dispozitivul principal inițiază tranzacții (transmite cereri). Dispozitivele slave transmit datele solicitate de dispozitivul master sau efectuează acțiunile solicitate. Master-ul se poate adresa slave-ului individual sau poate iniția un mesaj transmis tuturor slave-ului. Dispozitivul slave generează un mesaj și îl returnează ca răspuns la o solicitare adresată în mod specific acestuia. Când se primește o cerere de difuzare, nu este generat niciun mesaj de răspuns.

Specificația Modbus descrie structura cererilor și răspunsurilor. Baza lor este un pachet de protocol elementar, așa-numitul PDU (Protocol Data Unit). Structura PDU este independentă de tipul liniei de comunicație și include un cod de funcție și un câmp de date. Codul funcției este codificat ca un câmp de un octet și poate lua valori în intervalul 1...127. Intervalul de valori 128...255 este rezervat codurilor de eroare. Câmpul de date poate fi de lungime variabilă. Dimensiunea pachetului PDU este limitată la 253 de octeți.

PDU Modbus
numărul funcției date
1 octet N< 253 (байт)

Pentru a transmite un pachet prin legături fizice, PDU-ul este plasat în interiorul unui alt pachet care conține câmpuri suplimentare. Acest pachet se numește ADU (Application Data Unit). Formatul ADU depinde de tipul de linie de comunicație.

Există trei implementări principale ale protocolului Modbus, două pentru transmiterea datelor prin linii de comunicații seriale, ambele EIA/TIA-232-E de cupru (RS-232), EIA-422, EIA/TIA-485-A (RS-485) , și optică și radio:

  • Modbus ASCII,

și pentru transmisia de date prin rețele Ethernet prin TCP/IP:

  • Modbus TCP.

Structura generală a unui ADU este următoarea (în funcție de implementare, unele câmpuri pot lipsi):

  • adresa sclavului- adresa dispozitivului slave căruia i se adresează cererea. Dispozitivele slave răspund numai la solicitările trimise acestora. Răspunsul începe, de asemenea, cu adresa dispozitivului slave care răspunde, care poate varia de la 1 la 247. Adresa 0 este folosită pentru transmisia transmisă, fiecare dispozitiv o recunoaște, adresele din intervalul 248...255 sunt rezervate;
  • numărul funcției este următorul câmp de un octet al cadrului. Îi spune sclavului ce date sau acțiuni dorește comandantul să efectueze;
  • date- câmpul conține informațiile necesare dispozitivului slave pentru a îndeplini funcția specificată de master sau conține date transmise de dispozitivul slave ca răspuns la o solicitare din partea masterului. Lungimea și formatul câmpului depind de numărul funcției;
  • bloc de detectare a erorilor- checksum pentru a verifica absența erorilor în cadru.

Dimensiunea maximă ADU pentru rețelele seriale RS232/RS485 este de 256 de octeți, pentru rețelele TCP - 260 de octeți.

Pentru Modbus TCP ADU arată astfel:

  • ID-ul de tranzacție- doi octeți, de obicei zerouri
  • ID protocol- doi octeți, zerouri
  • lungimea pachetului- doi octeți, înalt apoi scăzut, lungimea următoarei părți a pachetului după acest câmp
  • adresa sclavului- adresa dispozitivului slave căruia i se adresează cererea. De obicei, ignorat dacă conexiunea este la un anumit dispozitiv. Poate fi folosit dacă conexiunea este stabilită cu un bridge care ne duce, de exemplu, la o rețea RS485.

Nu există un câmp de sumă de control în Modbus TCP.

Categorii de coduri de funcție

Specificația actuală a protocolului definește trei categorii de coduri de funcție:

Comenzi standard Descrierea lor trebuie publicată și aprobată de Modbus-IDA. Această categorie include atât coduri deja definite, cât și coduri gratuite în prezent. Comenzi personalizate Două intervale de cod (65 la 72 și 100 la 110) pentru care utilizatorul poate implementa o funcție personalizată. Cu toate acestea, nu există nicio garanție că un alt dispozitiv nu va folosi același cod pentru a îndeplini o funcție diferită. Rezervat Această categorie include coduri de funcție care nu sunt standard, dar sunt deja utilizate în dispozitivele fabricate de diverse companii. Acestea sunt codurile 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 și 127.

Model de date

Una dintre utilizările tipice ale protocolului este citirea și scrierea datelor în registrele controlerului. Specificația protocolului definește patru tabele de date:

Elementele din fiecare tabel sunt accesate folosind o adresă de 16 biți, prima celulă corespunzând adresei 0. Astfel, fiecare tabel poate conține până la 65536 de elemente. Specificația nu definește ce elemente de tabel ar trebui să reprezinte fizic și la ce adrese de dispozitive interne ar trebui să fie accesibile. De exemplu, este posibil să se organizeze tabele suprapuse. În acest caz, instrucțiunile care lucrează cu date discrete și cu registre de 16 biți vor accesa de fapt aceleași date.

Trebuie remarcat faptul că există o anumită confuzie asociată cu metoda de abordare a datelor. Modbus a fost dezvoltat inițial pentru controlerele Modicon. În aceste controlere, a fost folosită numerotare specială pentru fiecare dintre tabele. De exemplu, primul registru de intrare corespundea cu numărul celulei 30001, iar primul registru de reținere corespundea 40001. Astfel, registrul de reținere cu adresa 107 din comanda Modbus corespundea registrului controlerului nr. 40108. Deși o astfel de potrivire a adreselor nu mai face parte din standard, unele pachete software pot „corecta” automat adresele introduse de utilizator, de exemplu scăzând 40001 din adresa registrului de deținere.

Caracteristici standard ale protocolului Modbus

PDU-uri de solicitare și răspuns pentru funcții standard
număr
funcții
cere raspuns
1 (0x01) A 1 A 0 Î 1 Q 0
N D (N octeți)
2 (0x02) A 1 A 0 Î 1 Q 0
N D (N octeți)
3 (0x03) A 1 A 0 Î 1 Q 0
N D (N octeți)
4 (0x04) A 1 A 0 Î 1 Q 0
N D (N octeți)
5 (0x05) A 1 A 0 D 1 D0
A 1 A 0 D 1 D0
6 (0x06) A 1 A 0 D 1 D0
A 1 A 0 D 1 D0
15 (0x0F) A 1 A 0 Î 1 Q 0 N D (N octeți)
A 1 A 0 Î 1 Q 0
16 (0x10) A 1 A 0 Î 1 Q 0 N D (N octeți)
A 1 A 0 Î 1 Q 0
  • A 1Și A 0- adresa elementului,
  • Î 1Și Q 0- cantitatea de elemente,
  • N- numărul de octeți de date
  • D- date

Citirea datelor

Pentru a citi valorile din tabelele de date enumerate mai sus, utilizați funcții cu codurile 1-4 (valori hexazecimale 0x01-0x04):

  • 1 (0x01)- citirea valorilor din mai multe registre de steag (Citiți starea bobinei)
  • 2 (0x02)- citirea valorilor din mai multe registre discrete (Citiți intrări discrete)
  • 3 (0x03)- citirea valorilor din mai multe registre de stocare (Citiți registrele de deținere)
  • 4 (0x04)- citirea valorilor din mai multe registre de intrare (Citiți registrele de intrare)

Solicitarea constă în adresa primului element de tabel a cărui valoare urmează să fie citită și numărul de elemente de citit. Adresa și cantitatea de date sunt specificate ca numere de 16 biți, cel mai semnificativ octet al fiecăruia fiind transmis primul.

Răspunsul conține datele solicitate. Numărul de octeți de date depinde de numărul de elemente solicitate. Înainte de date, se transmite un octet, a cărui valoare este egală cu numărul de octeți de date.

Valorile registrelor de deținere și ale registrelor de intrare sunt transferate începând de la adresa specificată, doi octeți per registru, cel mai semnificativ octet al fiecărui registru este transferat mai întâi:

octet 1 octetul 2 octetul 3 octetul 4 ... octetul N-1 octetul N
R A,1 R A,0 RA+1,1 RA+1,0 ... RA+Q-1,1 RA+Q-1,0

Valorile steagurilor și intrărilor discrete sunt transmise sub formă de pachete: un bit per flag. Unul înseamnă pornit, zero înseamnă oprit. Valorile steagurilor solicitate umplu mai întâi primul octet, începând cu bitul cel mai puțin semnificativ, apoi următorii octeți, tot de la bitul cel mai puțin semnificativ până la cel mai semnificativ. Bitul cel mai puțin semnificativ al primului octet de date conține valoarea flag-ului specificat în câmpul „adresă”. Dacă numărul de steaguri solicitate nu este un multiplu de opt, atunci valorile biților suplimentari sunt umplute cu zerouri:

octet 1 ... octetul N
F A+7 F A+6 F A+5 F A+4 F A+3 F A+2 F A+1 F A ... 0 ... 0 F A+Q-1 F A+Q-2 ...

Scrieți o singură valoare

  • 5 (0x05)- înregistrarea valorii unui steag (Force Single Coil)
  • 6 (0x06)- scrierea unei valori într-un registru de stocare (Registrul unic presetat)

Comanda constă din adresa elementului (2 octeți) și valoarea de setat (2 octeți).

Pentru un registru de reținere, valoarea este pur și simplu un cuvânt de 16 biți.

Pentru steaguri, valoarea 0xFF00 înseamnă activat, 0x0000 înseamnă dezactivat, alte valori nu sunt valide.

Dacă comanda are succes, slave returnează o copie a cererii.

Înregistrarea mai multor valori

  • 15 (0x0F)- scrierea valorilor în mai multe registre de steag (Forțați bobine multiple)
  • 16 (0x10)- scrierea valorilor în mai multe registre de stocare (Presetați mai multe registre)

Comanda constă din adresa elementului, numărul de elemente care trebuie schimbate, numărul de octeți de valori setate transmise și valorile setate însele. Datele sunt împachetate în același mod ca în comenzile de citire a datelor.

Răspunsul constă din adresa de pornire și numărul de elemente modificate.

Mai jos este un exemplu de comandă master și răspuns slave (pentru Modbus RTU).

Monitorizarea erorilor în protocolul Modbus RTU

În timpul schimbului de date pot apărea două tipuri de erori:

  • erori asociate cu distorsiunile în timpul transmiterii datelor;
  • erori logice.

Erorile de tip 1 sunt detectate folosind cadre de caractere, paritate și suma de verificare ciclică CRC-16-IBM (folosind numărul polinom = 0xA001).

cadru RTU

În modul RTU, mesajul trebuie să înceapă și să se termine cu un interval de tăcere - un timp de transmisie de cel puțin 3,5 caractere la o anumită viteză a rețelei. Primul câmp transmite apoi adresa dispozitivului.

Ultimul caracter transmis este urmat și de un interval de tăcere de cel puțin 3,5 caractere. Un mesaj nou poate începe după acest interval.

Cadrul de mesaj este transmis continuu. Dacă un interval de tăcere de 1,5 durată are loc în timpul transmisiei unui cadru, dispozitivul de recepție TREBUIE să ignore cadrul ca fiind incomplet.

Astfel, un mesaj nou ar trebui să înceapă nu mai devreme de 3,5 intervale, deoarece în acest caz este setată o eroare.

Puțin despre intervale (vorbim de Serial Modbus RTU): la o viteză de 9600 și 11 biți pe cadru (bit de pornire + 8 biți de date + bit de paritate + bit de oprire): 3,5 * 11 / 9600 = 0,00401041(6), acestea. mai mult de 4 ms; 1,5 * 11 / 9600 = 0,00171875, adică mai mult de 1 ms. Pentru viteze mai mari de 19200 baud, este permisă utilizarea intervalelor de 1,75 și, respectiv, 0,75 ms.

Erori logice

Pentru al doilea tip de mesaje de eroare, protocolul Modbus RTU prevede că dispozitivele pot trimite răspunsuri care indică o situație de eroare. Un indiciu că răspunsul conține un mesaj de eroare este că cel mai semnificativ bit al codului de comandă este setat. Un exemplu de cadru când o eroare este detectată de un dispozitiv slave ca răspuns la o solicitare este dat în (Tabelul 2-1).

1. Dacă Slave primește o cerere validă și o poate procesa în mod normal, atunci returnează un răspuns normal.

2. Dacă Slave nu acceptă nicio valoare, nu este trimis niciun răspuns. Maestrul diagnostichează eroarea prin timeout.

3. Dacă Slave acceptă cererea, dar întâmpină o eroare (paritate, LRC sau CRC), nu este trimis niciun răspuns. Maestrul diagnostichează eroarea prin timeout.

4. Dacă Slave primește o cerere, dar nu o poate procesa (accesând un registru inexistent etc.), este trimis un răspuns care conține date de eroare.

Tabelul 2-1. Cadru de răspuns (Slave→Master) când apare o eroare modbus RTU
Direcția de transmisie adresa sclavului numărul funcției date (sau cod de eroare) CRC

Modbus este un protocol de comunicare serială deschis. Dezvoltat în 1979 pentru a fi utilizat cu dispozitive de control logic programabil (PLC), este acum utilizat pe scară largă pentru a conecta multe tipuri de dispozitive electronice industriale conectate la diferite tipuri de rețele.

Cel mai utilizat protocol în automatizarea industrială (cu excepția întreprinderilor locale). Modbus este foarte popular. Acesta este un dispozitiv destul de simplu și ușor de utilizat, cu comunicație serială standard. Într-o rețea Modbus, fiecare dispozitiv privește rețeaua ca pe o colecție de bobine (biți) și registre. Maestrul citește și scrie aceste bobine și registre folosind un set de instrucțiuni foarte simplu și concis. Comunicarea se mișcă doar într-o direcție la un moment dat.

Implementarea efectivă a protocolului Modbus este foarte scurtă. Deși există douăzeci de comenzi de bază, doar câteva dintre ele sunt implementate efectiv. Cele mai comune comenzi sunt bobine de citire, bobine de scriere, registru de citire, set de registre. Un set mic de comenzi este un alt motiv pentru popularitatea protocolului.

Modbus - protocol avansat

Un convertor de protocol este utilizat pe scară largă din mai multe motive:

  • Modbus este un protocol open source. Aceasta înseamnă că poate fi inclus într-o gamă largă de tipuri de dispozitive de la orice furnizor de hardware.
  • Utilizează o structură simplă a mesajelor, ceea ce îl face mai puțin complex de implementat. Implementarea poate dura doar câteva zile. Acesta este un avantaj competitiv clar în comparație cu alte protocoale, care poate dura luni de învățare și implementare.
  • Suporta conexiuni seriale sau Ethernet.
  • Folosit cu două tipuri de conexiuni seriale: RS-232 și RS-485. Unele versiuni ale protocolului Modbus tcp pot fi trimise și prin Ethernet sau TCP/IP. Aceste mesaje Modbus sunt ambalate ca pachete de cuvinte pe un singur bit sau pe 16 biți.

Modbus nu face parte din stratul fizic al rețelei. Comunicarea este transmisă peste straturi fizice, permițându-i să fie utilizată în multe tipuri diferite de rețele. Această proprietate a stratului non-fizic face din Modbus un protocol de aplicație.

Protocolul de comunicare Modbus este o modalitate obișnuită de a colecta date din diverse surse pentru revizuire operațională, arhivare și depanare dintr-o locație centrală, la distanță. Este utilizat pe scară largă și este o tehnologie destul de simplă. În funcție de aplicație, un protocol mai nou poate avea mai multe beneficii.

De obicei, un PC este configurat să ruleze programe precum Wonderware, Intellition sau LabVIEW într-un singur loc pentru a colecta date de la diferite procese din cadrul fabricii. O altă aplicație este concepută pentru a configura controlere de proces la distanță (PLC, Allen-Bradley, Siemens, PLCDirect și altele). Pentru a răspunde la diferite niveluri sau moduri care sunt transmise de la dispozitiv.

Două opțiuni de protocol

Există două opțiuni de protocol care rulează prin conexiuni seriale. Unul dintre ele este protocolul Modbus RTU. Descrierea acestei opțiuni: este mai compactă, folosește comunicarea binară. În acest format, transmisia de date este întotdeauna însoțită de o sumă de verificare a redundanței ciclice, care este utilizată pentru a detecta problemele de transmisie.

A doua opțiune este Modbus ASCII. Această versiune este mai detaliată, folosind codificarea ASCII hexazecimală a datelor care pot fi citite de către operatori. Modbus ASCII este un protocol mai puțin sigur. Deoarece este mai puțin eficient decât Modbus RTU, operatorii ar trebui să utilizeze doar ASCII pentru a transfera date către dispozitive care nu acceptă formatul RTU. ASCII poate fi de asemenea util dacă mesajul RTU nu poate fi aplicat corect.

Protocol Modbus pentru manechini

Modbus este un protocol de comunicație serială utilizat pentru a transfera informații prin linii seriale între dispozitive electronice. Cel care solicită informațiile se numește Master, iar informațiile despre furnizarea dispozitivelor se numesc Slaves. Într-o rețea standard Modbus există un Master și până la 247 de slave, fiecare dintre ele având o adresă slave unică de la 1 la 247. Masterul poate scrie informații și către slave.

Pentru ce este folosit?

Modbus este un protocol deschis. Aceasta înseamnă că producătorii îl pot integra gratuit în echipamentele lor. A devenit un protocol de comunicare standard în industrie și este acum cel mai comun mijloc de conectare a dispozitivelor electronice industriale. Este utilizat pe scară largă de mulți producători din multe industrii.

Modbus este de obicei folosit pentru a transmite semnale de la instrumente și dispozitive de control înapoi către un controler gazdă sau un sistem de achiziție de date, cum ar fi un sistem care măsoară temperatura și umiditatea și raportează rezultatele unui computer. Modbus este adesea folosit pentru a conecta un computer de control la o unitate terminală la distanță (RTU) în sistemele de control de supraveghere și achiziție de date (SCADA). Există versiuni ale protocolului Modbus pentru linii seriale (RTU și ASCII) și pentru Ethernet (TCP).

Cum functioneaza?

Modbus este transmis prin linii seriale între dispozitive. Cea mai simplă configurare ar fi un singur cablu serial care conectează porturile seriale pe două dispozitive: Master și Slave.

Datele sunt trimise ca o serie de unu și zero numite biți. Fiecare bit este transmis ca tensiune, zerourile sunt tensiuni pozitive și cele sunt tensiuni negative. Biții sunt trimise foarte repede. Rata de transmisie tipică este de 9600 baud (biți pe secundă).

Protocol Master/Sclav

Când se descrie protocolul Modbus RTU, comunicarea se realizează între un echipament principal centralizat, 247 de dispozitive electronice conectate într-o singură rețea. Designul este de obicei numit protocol master/slave, deoarece sistemul Master solicită informații de la dispozitivele conectate, care sunt numite „sclave”. Sclavii trimit informații către master doar ca răspuns la aceste solicitări, nu funcționează autonom. Masterul poate scrie informații și pe dispozitivele slave, dar dispozitivele slave nu pot scrie informații pe dispozitivul master.

Când un dispozitiv slave transmite un mesaj Modbus, acesta începe să genereze un mesaj cu un identificator de adresă unic. Acesta este un număr de la 1 la 247 care permite tehnicianului să determine ce dispozitiv specific îndeplinește informațiile solicitate.

Comunicații și dispozitive

Fiecărui dispozitiv proiectat să comunice folosind Modbus i se atribuie o adresă unică. Pe rețelele seriale, numai nodul desemnat ca master poate iniția o comandă. În Ethernet, orice dispozitiv poate trimite o comandă Modbus, deși de obicei doar un singur master face acest lucru. Comanda conține adresa dispozitivului pentru care este destinată (de la 1 la 247). Toate comenzile includ informații despre suma de control pentru a permite destinatarului să detecteze erorile de transmisie. Comenzile Modbus de bază îi spun RTU să modifice o valoare într-unul dintre registrele sale, să controleze sau să citească un port I/O și să comandă dispozitivului să trimită înapoi una sau mai multe valori conținute în registrele sale.

Există multe modemuri și gateway-uri care acceptă Modbus, deoarece este un protocol foarte simplu și este adesea copiat. Unele dintre ele au fost special concepute pentru el. Diverse implementări utilizează comunicații cu fir, fără fir, cum ar fi banda ISM și chiar serviciul de mesaje scurte (SMS), precum și serviciul general de pachete radio (GPRS). Problemele tipice cu care trebuie să se confrunte designerii includ probleme de latență ridicată și de timp.

Prezentare generală a tipurilor de registre Modbus

Tipurile de registre la care fac referire dispozitive includ:

Bobina (ieșire discretă); . intrare discretă; . registru de intrare; . deținând înregistrarea.

Coduri de funcții

  • Codurile de funcții comune sunt de la 1 la 127, cu excepția codurilor personalizate verificate de comunitatea Modbus, sunt documentate public și sunt garantate a fi unice.
  • Codurile funcției utilizator - sunt în două intervale de la 65 la 72, de la 100 la 110.
  • Coduri de caracteristică rezervate - utilizate de unele companii pentru produse vechi, care nu sunt disponibile pentru uz general.

Avantaje

Câteva beneficii ale utilizării protocolului Modbus:

  • Dacă driverul este deja instalat și utilizatorul este familiarizat cu prizele Ethernet și TCP/IP, driverul poate rula și comunica cu computerul în câteva ore. Costurile de dezvoltare sunt considerate scăzute. Echipament minim necesar. Driverul este compatibil cu orice sistem de operare.
  • Nu este nevoie de chipset-uri „exotice”, astfel încât sistemul poate folosi carduri standard PC Ethernet pentru a comunica cu dispozitivul nou implementat. Pe măsură ce costul Ethernet scade, costurile hardware sunt reduse. Utilizatorii nu sunt blocați într-un singur furnizor de servicii pentru asistență, dar pot profita de evoluțiile actuale.
  • Specificația poate fi descărcată gratuit și nu sunt necesare taxe de licență suplimentare pentru utilizarea protocoalelor Modbus.
  • Interoperabilitate între dispozitive de la diferiți producători și compatibilitate cu o bază instalată de dispozitive compatibile.

Convertoarele de protocol Modbus sunt scumpe. Prețul gateway-urilor industriale este de 1000 USD.

Restricții

Din moment ce Modbus a fost dezvoltat la sfârșitul anilor 1970 pentru a comunica cu tipuri de date limitate la cele care erau înțelese de PLC-urile la acea vreme. Bloburile nu sunt acceptate.

Nu există o modalitate standard pentru un nod de a găsi o descriere a unui obiect de date, de exemplu pentru a determina dacă o valoare a registrului reprezintă o valoare a temperaturii între 30 și 175 de grade.

Deoarece Modbus este un protocol master/slave, nu există nicio modalitate ca un dispozitiv să „raporteze o excepție” (altul decât Ethernet TCP/IP, numit open-mbus). Nodul principal trebuie să primească în mod regulat date de la dispozitivele sale secundare și, de asemenea, să caute modificări ale datelor. Acest lucru consumă lățime de bandă, crescând timpul de conectare la rețea în aplicațiile în care lățimea de bandă poate fi costisitoare, cum ar fi legăturile cu rată scăzută de date.

Modbus se limitează la adresarea a 254 de dispozitive pe o singură legătură de date, ceea ce limitează numărul de dispozitive care pot fi conectate la o stație master (Ethernet TCP/IP este o excepție). Transmisiile trebuie să fie continue, ceea ce limitează tipurile de dispozitive de comunicație la distanță la cele care pot stoca datele pentru a evita golurile în transmisie. Protocolul Modbus în sine nu oferă protecție împotriva comenzilor neautorizate sau a interceptării datelor. Este important să înțelegeți că în procesul de transmitere a informațiilor apar erori logice, precum și cele asociate cu distorsiunile în timpul schimbului.

Am analizat structura generală a protocolului ModBus. Astăzi ne vom uita la o variantă a acestui protocol - ModBus TCP, care este utilizat pentru implementarea ModBus în rețelele Ethernet.

ModBus TCP funcționează întotdeauna deasupra stivei TCP/IP, așa că nu poate fi considerat un protocol ModBus cu drepturi depline în forma sa clasică.

Principala diferență pe care TCP/IP o impune ModBus atunci când este utilizat împreună este conexiunea directă la o anumită adresă. Protocolul TCP/IP se bazează pe principiul client-server. Pentru a face schimb de date, clientul deschide o sesiune de comunicare cu serverul, indicând adresa acestuia.

Trecând la terminologia protocolului ModBus, dispozitivul master (master) dintr-o rețea TCP devine client (din moment ce clientul este inițiatorul schimbului de date), iar dispozitivul slave (slave) devine server.

Astfel, pentru a transmite o cerere către un dispozitiv slave dintr-o rețea TCP, masterul trebuie mai întâi să deschidă o sesiune de comunicare cu acesta. Mai mult, deschiderea unei sesiuni este implementată nu la nivel de protocol ModBus, ci la nivel TCP/IP. Prin urmare, dispozitivul master nu poate transmite cereri către diferite dispozitive folosind ModBus, în același mod cum se întâmplă în ModBus RTU sau ASCII.

Din același motiv, nu există mesaje difuzate în ModBus TCP (la toate dispozitivele slave simultan).

Cu toate acestea, dispozitivul Master se poate conecta la nodul necesar (slave) folosind protocolul TCP/IP și apoi comunica cu acesta folosind limbajul ModBus.

În figură, locul de muncă al dispecerului aflat sub controlul sistemului SCADA este un server de colectare a datelor și în același timp un master în rețeaua ModBus TCP. Se conectează secvenţial la fiecare telecomandă, deschizând o sesiune de comunicare în reţeaua TCP/IP şi schimbând pachete ModBus cu aceasta.

Desigur, un astfel de schimb durează mai mult decât în ​​cazul ModBus RTU, pentru că se petrece timp suplimentar pentru deschiderea și închiderea sesiunii TCP/IP. Cu toate acestea, acest lucru face posibilă conectarea dispozitivelor situate la o distanță considerabilă folosind pereche răsucită sau chiar WiFi.

În plus, protocolul ModBus TCP poate fi utilizat în rețelele cu gateway, unde gateway-ul este un dispozitiv inteligent și direcționează mesajele către restul dispozitivelor din rețea ModBus.

Cu această configurație, clientul de rețea TCP (cunoscut și ca master de rețea ModBus) se conectează la gateway (server) și comunică numai cu acesta. Gateway-ul transmite mesajul în interiorul magistralei ModBus (RTU sau ASCII) către dispozitivul a cărui adresă este specificată în pachetul ModBus.

Structura pachetului ModBus TCP

În primul rând, să ne amintim structura pachetului ModBus clasic (RTU sau ASCII):

Este format din patru blocuri: adresa slave, numărul funcției, blocul de date și blocul de paritate.

Și așa arată structura pachetului ModBus TCP:

După cum puteți vedea, în pachetul ModBus TCP, în comparație cu ModBus RTU, au fost adăugate blocuri de schimb și identificatori de protocol și nu există nici un bloc de autentificare a pachetului. Acesta din urmă se explică prin faptul că controlul integrității pachetelor este asigurat de protocolul TCP/IP, deci nu este nevoie de implementarea lui ModBus.

Să ne uităm la ce înseamnă fiecare dintre blocurile pachetului ModBus TCP:

  • schimb id- cel mai adesea două zerouri. Se aplică numai dacă masterul trimite mai multe solicitări la rând către slave fără a aștepta un răspuns. În acest caz, id-ul vă permite să înțelegeți care dintre solicitări corespunde cărui răspuns.
  • ID protocol— întotdeauna zerouri, nu se aplică. Terenul este lăsat ca rezervă pentru utilizări viitoare.
  • lungimea pachetului— lungimea totală a blocurilor „adresă”, „număr de funcție” și „date”. Lungimea pachetului este transmisă în doi octeți, cel mai semnificativ fiind primul.
  • adresa sclavului- un analog al aceluiași bloc în structura pachetului ModBus RTU, dar de obicei nu este utilizat, deoarece , după cum sa menționat deja, în ModBus TCP masterul deschide deja o sesiune de schimb cu un singur slave (care, desigur, are și o adresă IP în rețeaua TCP/IP). Acest câmp este utilizat numai în versiunea de rețea ModBus TCP cu gateway. Apoi gateway-ul în sine redirecționează pachetul la adresa specificată.
  • câmpuri codul funcțieiȘi date sunt similare cu câmpurile corespunzătoare din pachetul ModBus clasic.