Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Željezo
  • Primjer opisa Modbus rtu protokola. Opis Modbus protokola

Primjer opisa Modbus rtu protokola. Opis Modbus protokola

U ovom ću članku pokušati objasniti kako protokol funkcionira. Modbus, koje podatke može pohraniti, u kojem obliku se može pohraniti, kako se može čitati. Ovaj članak će vam dati ideju o tome što je to Modbus protokol i kako se može primijeniti.

Adresiranje podataka u Modbusuprotokol

Za pohranu informacija u podređene uređaje ( podređeni uređaj) koriste se 4 tablice (ili polja). Svaka tablica pohranjuje informacije za slične varijable u registrima. Svaki registar ima svoju veličinu i adresu. Registri također mogu biti samo za čitanje ili za čitanje i pisanje. Pogledajmo ove 4 vrste podataka koji se mogu pohraniti u registre:

ZAVOJNICE

Ovo su digitalni izlazi ( Digitalni izlazi). Svaki svitak se može pisati ili čitati. Njegova veličina je 1 bit (tj. 0 ili 1). Povijesno gledano, ti su registri povezani sa stvarnim digitalnim izlazima na senzorima ili terminalnim uređajima. Digitalni izlazi se koriste za upravljanje, na primjer, LED diodama, relejima ili motorima. Oni. Upisivanjem 1 u takav registar možemo upaliti LED, a upisom 0 možemo je ugasiti (ovo je uvjetno, zapravo 0 je može upaliti, a 1 isključiti).

Čitajući ovaj registar, možemo saznati status izlaza (tj. je li uključen ili isključen). Rezultat očitanja je također 1 bit, tj. 1 ili 0.

KONTAKTI

Ovo su digitalni ulazi ( Digitalni ulazi). Digitalni ulaz se može samo čitati, tj. čitanjem ovog registra saznajemo stanje stvarnog digitalnog ulaza na senzoru ili uređaju. Digitalni ulazi se koriste za praćenje statusa - npr. je li lampica upaljena ili isključena, je li tekućina dosegla željenu razinu ili ne, je li relej uključen ili ne itd.

ANALOGNI ULAZNI REGISTRI

Pod ovim obično mislimo na analogne ulaze ( Analogni ulazi). Analogni ulazi se mogu samo čitati, tj. ne mogu se pisati, već se može čitati samo trenutno stanje poreznog unosa. Obično se analogni ulazi koriste na senzorima za mjerenje određenih vrijednosti: ulazne struje ili ulaznog napona. Zatim se dobivena vrijednost može pretvoriti u neku realnu vrijednost, primjerice u temperaturu, vlažnost zraka, tlak ili nešto treće. U tu svrhu koriste se posebne formule koje dolaze uz senzor. Ali češće senzor odmah vraća stvarnu vrijednost. Na primjer, senzor koji mjeri temperaturu može vratiti izmjerenu vrijednost kao Celzijeve stupnjeve pomnožene s 10. To jest. 253 znači 25,3°C. Ova se tehnika često koristi kada trebate vratiti frakcijske vrijednosti kroz cjelobrojni registar.

ANALOGNI IZLAZNI HOLDING REGISTRI

Pod ovim obično mislimo na analogne izlaze ( Analogni izlazi), ali također često samo registre koji pohranjuju neke vrijednosti koje se mogu pisati i čitati. Oni. ti se registri mogu čitati i pisati. Najčešće se koristi za snimanje DAC uređaji (Digital to Analog Converter) ili jednostavno kao registri koji pohranjuju neke vrijednosti. DACčesto se koriste za upravljanje nečim, na primjer: svjetlinom LED-a, ili glasnoćom sirene, ili brzinom vrtnje motora.

Ovi registri su 16-bitni, tj. svaki registar može pohraniti samo 2 bajta.

Ovo su četiri vrste registara podržanih u standardu Modbus. I koristeći samo njih, morate izgraditi sustav. Ako gledate sa stajališta finalnog uređaja (slave device), onda je najlogičnije koristiti registre za sljedeće potrebe:

Zavojnice– za kontrolu uređaja putem digitalnih izlaznih portova ili Booleovih zastavica kao što su uključeno/isključeno, otvoreno/zatvoreno itd.

Kontakti– za pohranu vrijednosti Booleovih zastavica ili za prikaz informacija s digitalnih ulaza.

Unosi– za vrijednosti koje je potrebno samo očitati na glavnoj strani, a koje se mogu predstaviti kao 16-bitni cijeli brojevi. Na primjer, ADC ulazi ili bilo koje vrijednosti koje generira sustav koje treba očitati (na primjer, broj pokrenutih procesa ili unutarnja temperatura uređaja može se očitati kroz neki ulazni registar)

Držanje– ovi se registri mogu koristiti za pohranu konfiguracije uređaja, za kontrolu DAC uređaji za pohranu nekih servisnih informacija. U principu, ti se registri mogu koristiti za sve što mašta programera sustava dopusti.

Osim toga, svaki registar u sklopu Modbus može imati jedinstvenu adresu, koja je određena tipom registra. Pogledajte tablicu u nastavku:

Ime Vrsta pristupa Adrese Dostupni registri
Zavojnice Čitanje/Pisanje 1 – 9999 9999
Kontakti Čitanje 10001 – 19999 9999
Unosi Čitanje 30001 – 39999 9999
Holdings Čitanje/Pisanje 40001 – 49999 9999

Kao što možete vidjeti iz tablice, svaki tip registra može sadržavati maksimalno 9999 registara. Ali svi počinju s nekim pomakom: 0, 10000, 30000, 40000.

Zapravo, unutar naredbi protokola Modbus, ne koristi se puna adresa, već samo njen pomak u odnosu na osnovnu adresu. Oni. za sve tipove registara, prava adresa unutar instrukcije bit će 0 -9998. A naredba određuje koja se osnovna adresa može koristiti.

Najlakše je zamisliti da uređaj pohranjuje 4 niza elemenata od po 9999 elemenata. Indeks unutar niza je adresa navedena unutar naredbe. A naredba određuje koji niz koristiti.

Ako pažljivo pogledate tablicu, možete vidjeti da ako želite, možete koristiti više adresa za Držanje upisnici: 40001 – 105537, t.j. ukupno 65535 registara. Isto za Kontakti: 10001 – 29999, tj. ukupno 19999. To su takozvani prošireni registri. Nisu podržani standardom Modbus uređaja. Stoga, ako želite da vaš uređaj može raditi sa standardnim klijentima, tada ne morate koristiti proširene registre.

Ali ako ste sigurni da će vaš uređaj raditi s vašim masterom, koji zna raditi s proširenim registrima, ili sigurno znate da master uređaj koji će se koristiti za vaš proizvod zna za proširene registre, onda ih koristite.

Gore smo shvatili kako se registri adresiraju unutar uređaja. Sada da vidimo kako su adresirani sami uređaji.

Modbus adresiranjeuređaja

Za adresiranje uređaja koristi se poseban identifikator koji se naziva ID roba. Ovo je jednobajtna vrijednost koja definira jedinstvenu adresu uređaja u cijeloj mreži. Modbus. Prema standardu Modbus to može biti broj od 1 do 247. tj. Ukupno na mreži može postojati 247 krajnjih uređaja (podređenih uređaja) s jedinstvenim adresama.

Kada master pošalje naredbu mreži, prvi bajt je ID roba. To omogućuje uređajima da nakon prvog bajta odrede trebaju li obraditi naredbu ili je ignorirati. Ovo vrijedi za Modbus RTU. Za Modbus TCP korišteni protokol ID jedinice značenje. Iako ako pogledate, to je samo drugo ime ID roba. ID jedinice– ovo je također jednobajtna adresa uređaja, od 1 do 247.

Ovo uvelike ograničava broj uređaja koji mogu biti na mreži u isto vrijeme. Stoga postoji opcija kada se 2 bajta koriste za adresiranje uređaja. U ovom slučaju, broj uređaja se povećava na 65535. To je više nego dovoljno. Ali postoji jedan uvjet. Glavni i krajnji uređaj moraju koristiti 2 bajta za adresiranje. Oni. moraju biti konfigurirani za korištenje iste sheme adresiranja uređaja: 1 ili 2 bajta. Također, svi uređaji na mreži moraju koristiti istu shemu adresiranja - 1 ili 2 bajta. U mreži ne mogu postojati uređaji s različitim shemama adresiranja.

Modbus funkcije

Da bi zatražio podatke ili ih upisao, master mora označiti funkciju koju želi obavljati na krajnjem uređaju. Sve dostupne značajke kao standard Modbus Protokol je naveden u nastavku:

Kod funkcije Vrsta akcije Opis
01 (01 hex) Čitanje Čita vrijednost registra zavojnice
02 (02 hex) Čitanje Čita vrijednost registra kontakata
03 (03 hex) Čitanje Čita vrijednost registra posjeda
04 (04 hex) Čitanje Čita vrijednost ulaznog registra
05 (05 hex) Napiši jedan registar Zapisuje vrijednost u registar zavojnice
06 (06 hex) Napiši jedan registar Zapisuje vrijednost u registar posjeda
15 (0F hex) Zapisivanje više registara Zapisuje vrijednost u više registara zavojnice
16 (10 hex) Zapisivanje više registara Zapisuje vrijednost u nekoliko registara držanja

O svakoj funkciji će biti riječi kasnije, detaljno i s primjerima.

CRC16 načina da izbjegnete pogreške

Svaki tim u Modbus RTU Protokol završava s dva bajta koji sadrže CRC16 vrijednost svih bajtova naredbi. Dodavanje CRC16 omogućuje vam da pronađete oštećene zahtjeve i zanemarite ih. Budući da se svaki bajt u naredbi koristi za izračunavanje kontrolne sume, čak i promjena jednog bita u bilo kojem bajtu uzrokovat će odstupanje u poslanoj kontrolnoj sumi i onoj izračunatoj iz primljenih bajtova. Ovo je prilično pouzdan način zaštite prenesenih podataka od oštećenja (što znači, pronaći oštećene podatke). Klijent, kao i master, moraju provjeriti CRC16 primljene naredbe s CRC16 generiranim iz primljenih bajtova. Ako se kontrolni zbrojevi ne podudaraju, tada primljeni zahtjev sadrži oštećene bajtove, što iskrivljuje značenje poslane naredbe. Ovu naredbu treba zanemariti.

Treba napomenuti da se CRC16 ne koristi u Modbus TCP protokol. Budući da TCP paketi već imaju ugrađen vlastiti kontrolni zbroj i provjerava se integritet podataka, nema potrebe izračunavati CRC16.

Druga sorta Modbus protokol, Modbus ASCII, korišteno LRC(Longitudinal Redundancy Check) umjesto CRC16. LRC je puno jednostavniji od CRC16 i rezultat je 1 bajt. LRC je manje pouzdan za otkrivanje grešaka u oštećenju podataka, ali povijesno jest Modbus ASCII koristi upravo ovu metodu.

O tome kako izračunati CRC16 za Modbus RTU protokol i LRC za Modbus ASCII protokol, napisat ću posebno.

Vrste podataka koji se pohranjuju u registre.

Razgovarajmo o tome koji se podaci mogu pohraniti u registre. Najjednostavniji slučaj je Zavojnica I Kontakt registri. Ovi registri mogu pohraniti 1 bit informacija - 0 ili 1. Kada glavni čita ove registre, kao rezultat prima 0 ili 1. Za upisivanje registara koriste se posebne konstante:

0xFF00– znači logično 1

0x0000– znači logična 0

Ako se naredba koristi za pisanje više registara, tada će svaki registar biti zapisan korištenjem 1 bita: 0 ili 1.

Svi ostali registri su 16-bitni podaci (2 bajta)

I tu je ono najzanimljivije.

Tumačenje podataka mora biti navedeno u opisu Modbus registri (tzv Modbus karta dokument). U ovom dokumentu morate točno navesti koji registar pohranjuje koje registre podataka i koje vrijednosti su za njega prihvatljive.

Počnimo s jednostavnim slučajevima.

Ako čitamo 1 Ulazni ili Držanje registar, tada dobivamo 16 bita podataka. Na primjer, ovo bi mogla biti vrijednost 0x8D05– dva bajta 0x8D I 0x05.

U najjednostavnijem slučaju, to može biti cijeli broj bez predznaka: 36101

Ali to može biti cijeli broj s predznakom: -29435

Još jedan primjer. Pročitali smo značenje 0x4D4F

To može biti cijeli broj bez predznaka, cijeli broj s predznakom ili 2 ASCII znaka:

0x4D = M

0x4F = O

Sada je slučaj zanimljiviji. Kombiniranjem više registara zajedno, možemo pohraniti tipove podataka veće od 16 bita.

Na primjer, očitali smo 2 registra i dobili sljedeće podatke: 0xAE53 0x544D

To bi mogao biti:

32-bitni cijeli broj bez predznaka

0xAE53 0x544D = 2924696653

32-bitni cijeli broj s predznakom

0xAE53 0x544D = -1370270643

32-bitni float – broj s pomičnim zarezom

0xAE53 0x544D = -4.80507e-11

Ili pohranite 4 znaka u ASCII kodiranju

0xAE53 0x544D = 0xAE 0x53 0x54 0x4D= ®STM

Ako nastavimo, kombiniranjem više registara možemo pohraniti 64-bitne vrijednosti, 128-bitne vrijednosti, nizove i u osnovi bilo koju vrstu podataka.

Ali, kombinirajući registre, imamo sljedeće pitanje:

Redoslijed bajtova i riječi

Nažalost, protokol Modbus ne definira kako bi bajtovi trebali biti pohranjeni unutar registra. Oni. Različiti uređaji različitih proizvođača mogu pohranjivati ​​bajtove nasumičnim redoslijedom.

Na primjer, čitajući registar, dobili smo vrijednost 0xA543

Ovisno o redoslijedu kojim su bajtovi pohranjeni u izvornom registru, to mogu biti dvije potpuno različite vrijednosti:

Ako se koristi Big Endian formatu (prvo visoki bajt), tada ćemo imati vrijednost 42307

Ali ako se koristi Little Endian format (prvo niži bajt), tada ćemo imati vrijednost 17317

Još je zanimljivije kada iz dva registra formiramo 32-bitnu vrijednost.

Postoje 4 moguće kombinacije bajtova, na primjer, 32-bitni broj 4014323619 (0xEF45B7A3) može se prenijeti sljedećim sekvencama od 4 bajta:

0xEF45 0xB7A3

0x45EF 0x A3B7

0xB7A3 0xEF45

0xA3B7 0x45EF

Zapravo nije važno koji je redoslijed bajtova/riječi implementiran na krajnjem uređaju. Glavna stvar je da master mora znati ovaj redoslijed i moći formirati točne vrijednosti iz primljenih bajtova. Znajući točan format podataka na konačnom uređaju, čarobnjak će uvijek ispravno formirati vrijednosti registra. I upravo zbog toga postoji nešto poput Modbus karta (Modbus kartica).

ModbusKarta

Modbus karta je dokumentacija koja u potpunosti opisuje sve moguće Modbus registri na uređaju, njihove adrese, namjena, dostupne vrijednosti, zadane vrijednosti, način pristupa.

Neki uređaji dolaze s fiksnim opisima registara. Oni. popis registara, njihove adrese, pohranjeni podaci itd. je strogo specificiran od strane proizvođača i opisan u dokumentaciji.

A postoji i prilagođena konfiguracija. Oni. Ne postoje fiksne adrese za registre na uređaju. Korisnik može konfigurirati Modbus karta onako kako mu treba (npr. povezivanjem nekih registara u kontinuirani niz adresa kako bi ih jednom naredbom pročitao).

Fiksni primjer Modbus karta, koje ima smisla koristiti za vaše uređaje, može izgledati kao u tablici u nastavku.

Adresa Opis Pristup Zadana vrijednost Dostupne vrijednosti
40001 kod proizvoda Čitanje 1 1
40002 Registar naredbi, za pisanje naredbi Snimiti 0 – resetiranje uređaja
1 – Otključajte uSD karticu za snimanje
2 – Blokirajte uSD karticu za snimanje
3 – Spremite konfiguraciju na uSD karticu
40003 Vrijeme rada, u sekundama
Manja riječ
Čitanje 0 0 .. 0xFFFF
40004 Vrijeme rada, u sekundama
Visoka riječ
Čitanje 0 0 .. 0xFFFF
40005 Sistemska greška Čitanje/Pisanje 0 Vidi dodatak za šifre grešaka.
Napišite 0 za resetiranje pogreške i isključite LED ERROR

Što Modbus ne može

Modbus To je vrlo jednostavan protokol, tako da ne podržava sve što bi vam moglo trebati.

Modbus ne podržava poruke (događaje). Oni. krajnji uređaj ne može poslati poruku glavnom uređaju. Samo master može ispitivati ​​krajnji uređaj.

Modbus ne podržava čitanje povijesnih podataka (akumuliranih tijekom određenog vremenskog razdoblja). Iako se ovo ograničenje može lako prevladati stvaranjem registara naredbi, registara adresa i registara preopterećenja. O tome će biti riječi u nekom budućem članku.

Standard Modbus ne može pohraniti složene strukturirane podatke (barem nije tako lako implementirati).

Osim, Modbus ne podržava autentifikaciju ili enkripciju. Odnosno, sva se komunikacija odvija u nezaštićenom načinu rada. Iako, uz određenu želju, možete implementirati neki privid identifikacije Modbus TCP u većini slučajeva to je nemoguće učiniti. Postoje neke opcije za zaštitu podataka od neovlaštenog pristupa i izmjene, ali nisu baš pouzdane (iako se mogu koristiti). Opisat ću ih u budućim člancima.

I čini se da su to sve očiti nedostaci ovog protokola. Inače je vrlo jednostavan i odličan je za jednostavne sustave nadzora koji trebaju pratiti neke sistemske metrike i omogućiti im pristup čitanjem registara.

U sljedećem ćemo članku pogledati sve glavne funkcije koje podržava protokol Modbus.

Vrijeme je da razmotrimo drugu varijantu protokola ModbusModbus ASCII. Ova verzija protokola koristi samo ASCII znakove za prijenos podataka, koji kodiraju heksadecimalni prikaz binarnih podataka. Malo nejasno i zbunjujuće? To je u redu, dobrodošli u rez i pogledajmo s čime imamo posla.

Separator paketa

Prva razlika u protokolu Modbus ASCII iz Modbus RTU– ima separator između paketa. Ako u Modbus RTU svi paketi su dolazili jedan za drugim (praktički bi trebalo postojati malo kašnjenje na liniji između paketa, oko 2-5ms), a zatim u Modbus ASCII Svaki novi paket mora započeti posebnim znakom za razdvajanje.

Prema standardu Modbus RTU potrebno je kašnjenje od 3,5 simbola između paketa (vrijeme potrebno za prijenos 3,5 simbola preko komunikacijske linije ovisi o brzini prijenosa). Ova se odgoda koristi za otkrivanje novog zahtjeva od glavnog. Oni. ova odgoda označava početak novog zahtjeva. Ali kad su počeli koristiti modeme, prestao je raditi. Nemoguće je održavati potrebno vrijeme na modemu. Stoga smo odlučili koristiti novu verziju protokola - Modbus ASCII. Ova opcija eliminira mnoge neugodnosti pri radu s modemom: postoji poseban znak za razdvajanje paketa i koriste se samo vidljivi ASCII znakovi.

Dakle, takav znak za početak paketa je znak dvotočke sa heksadecimalnim kodom 0x3A. A kraj svakog paketa označen je znakovima za novi redak i povratak na novi red - 0x0D 0x0A. Dakle, ovisnost o kašnjenjima između bajtova potpuno je uklonjena iz protokola. Oni. ako modem odgađa bajt, to neće uzrokovati pogrešnu komunikaciju na strani klijenta. I čekat će da paket završi bajtove 0x0D 0x0A. A ako naiđe na znak za razdvajanje 0x3A– će resetirati međuspremnik i ponovno početi formirati paket. Osim toga, nema potrebe za izbjegavanjem posebnih znakova modema, budući da podaci ne koriste znakove iz početnog odjeljka ASCII tablice.

Prikaz bajtova podataka

U Modbus ASCII U protokolu je svaki bajt podataka predstavljen kao 2 bajta. Svaki bajt predstavlja ASCII znak u heksadecimalnom zapisu. Radi lakšeg razumijevanja navedimo primjer:

Malo objašnjenje za tablicu.

Na primjer, trebamo prenijeti bajt podataka koji pohranjuje znak # . Ovaj znak ima heksadecimalni kod u ASCII tablici 0x23. U protokolu Modbus RTU samo prosljeđujemo bajt s vrijednošću 0x23.

Ako želimo prenijeti isti znak kroz protokol Modbus ASCII, već trebamo prenijeti 2 bajta. U prvom koraku dobivamo heksadecimalni kod znaka, 0x23. U drugom koraku ovu vrijednost kodiramo pomoću dva ASCII znaka − 2 I 3 . I u trećoj fazi prenosimo dva bajta podataka, prvi je heksadecimalna vrijednost znaka 2 , drugi bajt je heksadecimalna vrijednost znaka 3 .

Dakle, raspon vrijednosti za podatkovni bajt u protokolu je Modbus RTU0 .. 0xFF

Raspon vrijednosti za podatkovni bajt u protokolu Modbus ASCII– samo znakovi potrebni za prikaz heksadecimalnih znamenki, tj. 0 – 9, A, B, C, D, E, F(sve velikim slovima).

Kontrolni zbroj za Modbus ASCII

U protokolu Modbus RTU Koristi se dvobajtni kontrolni zbroj koji pomaže u otkrivanju neispravnih zahtjeva. U protokolu Modbus ASCII postoji i kontrolni zbroj - LRC (Longitudinal Redundancy Check).

Kalkulacija LRC puno lakše nego računati CRC. Izračunati LRC trebate učiniti sljedeće:

  • Zbrojite sve bajtove u poruci Modbus ASCII, prije nego što se pretvore u ASCII znakove. Početna dvotočka i znakovi na kraju nisu uključeni u izračune CR/LF.
  • Obrišite sve bitove veće od 8 (tj. ostavite niži bajt)
  • Neka dobiveni bajt bude negativan LRC bajt

Dakle, ako zatim zbrojite sve bajtove podatkovnog paketa i bajt LRC dobit ćemo kao rezultat 0. Ovo je najbrža provjera ispravnosti paketa podataka.

Ispod je primjer izračuna LRC za konkretan zahtjev Modbus ASCII.

Na primjer, uzmimo zahtjev za čitanje registara #40108 - #40110 s uređaja s adresom 17

Zahtjev: 11 03 00 6B 00 03
Podaci (decimalni) Podaci (HEX) Podaci (binarni)
17 11 0001 0001
3 03 0000 0011
0 00 0000 0000
107 6B 0110 1011
0 00 0000 0000
3 03 0000 0011

Sada izračunajmo zbroj svih bajtova

Ovo je negativan broj ( -130 ili 0x7E) i postoji LRC zahtjev.

Ovaj kontrolni zbroj dodaje se zahtjevu u obliku 2 ASCII znaka − 7 I E.

Oni. na kraju zahtjeva trebate dodati 2 bajta s vrijednošću 37 I 45 .

Primjeri Modbus RTU i Modbus ASCII zahtjeva

Da biste bolje razumjeli kako sve to funkcionira, pogledajte nekoliko jednostavnih primjera.

Uzmimo naš zahtjev za čitanje registara #40108 - #40110 s uređaja s adresom 17

Zahtjev: 11 03 00 6B 00 03

Ovaj Modbus RTU zahtjev bez zadnja dva bajta CRC. Sada transformirajmo ovaj upit iz Modbus RTU V Modbus ASCII. Da biste to učinili, dodajte znak dvotočke na početak zahtjeva, znak za pomicanje retka i znak za povratak na početak reda na kraj zahtjeva i predstavite svaki bajt kao ASCII znakove koji odgovaraju heksadecimalnom prikazu svakog bajta zahtjeva. Kao rezultat toga, dobit ćemo takav zahtjev (u obliku ASCII znakova ili jednostavno kao tekstualni niz). Također dodajemo na kraju zahtjeva LRC.

: 1 1 0 3 0 0 6 B 0 0 0 3 7 E CR LF

Sada samo trebate poslati ovaj zahtjev portu koristeći ASCII kodove znakova. U binarnom obliku, zahtjev će izgledati ovako:

3A 3131 3033 3030 3642 3030 3033 3745 0D 0A
Indeks bajta HEX vrijednost ASCII Opis
0 3A : Simbol početka
1-2 31 31 11 Adresa uređaja
3-4 30 33 03 Kod naredbe
5-8 30 30 36 42 00 6B Adresa registra HOLDING s kojega se počinje čitati. U ovom slučaju, 0x006B = 107. Ali ovo nije adresa, već pomak od adrese 40001. To je stvarna adresa = 107+ 40001 = 40108.
9-12 30 30 30 33 00 03 Broj registara koji se čitaju. 0x0003 = 3. Odnosno Morate pročitati registre 40108–40110.
13 – 14 37 45 7E LRC zahtjev
15 CR 0D Znak povratka redaka
16 LF 0A Znak novog retka

Pa, vrijeme je da razmislimo o protokolu Modbus TCP drugačije od protokola Modbus RTU. Budući da nema mnogo razlika, članak neće biti predug.
Dakle, u prethodnom članku o funkcijama Modbus RTU možete saznati što su funkcije i njihov binarni format. Sada je vrijedno reći što je to Modbus TCP kako se koristi i po čemu se razlikuje od standarda Modbus RTU.

ModbusRTUputem TCP-aspoj

Najlakši način razmjene Modbus poruke putem mreže - lako se prenose Modbus RTU pakete preko TCP utičnice (veze). U ovom slučaju, format paketa je isti kao za Modbus RTU protokol. U principu, ovo može biti kraj ove vrste protokola.

ModbusTCP

Za razmjenu Modbsu poruke preko mreže odlučio koristiti modificirani protokol. Uzeli smo standardnu Modbus RTU i malo ga promijenio. Prvo smo uklonili zadnja 2 bajta iz njega CRC16. Budući da svaki TCP/IP paket sadrži vlastiti kontrolni zbroj, odlučili smo da ga nema potrebe ponovno provjeravati. Osim toga, prvi bajt je uklonjen ID roba. U principu, kao što će se kasnije vidjeti, nije uklonjen, već jednostavno preimenovan. Ovo su bajtovi, bez ID roba I CRC16 nazvao PDU – Protocol Data Unit.

Na primjer, uzmimo zahtjev Modbus RTU, koji glasi nekoliko DRŽANJE registrira s uređaja #17 (Slave ID = 17)

11 03 006B 0003 7687

Sada uklanjamo prva i zadnja 2 bajta. Dobivamo PDU!

03 006B 0003

Čini se da je sve jasno s ovim. Sada da dobijete cijeli paket Modbus TCP trebamo dodati ispred MBAP zaglavlje - zaglavlje Modbus aplikacije. Oni. moramo dodati neko zaglavlje. Ovo zaglavlje uključuje ID transakcije, ID protokola, Duljina I ID jedinice.

ID transakcije– 2 bajta koje postavlja klijent za jedinstvenu identifikaciju svakog zahtjeva. Oni. to je jednostavno broj od 0 do 65535 koji je jedinstven za svaki zahtjev.

ID protokola– 2 bajta koji određuju verziju protokola. U trenutnoj implementaciji uvijek bi trebao biti jednak 0x00 0x00

Duljina– 2 bajta koji određuju duljinu paketa (isključujući bajtove ID protokola, ID transakcije I Duljina)

ID jedinice– jedinstvena adresa uređaja koji se ispituje ovom naredbom. Identično ID roba.

Mala digresija u vezi adresiranja. Ovo se može činiti nepotrebnim, budući da se TCP veza može uspostaviti samo na određenu IP adresu i priključak. Oni. već imamo određenu adresu poslužitelja, tako da dodjela ID jedinice nije sasvim jasno.

No zapravo je prilično uobičajeno da postoji neki poslužitelj koji jednostavno usmjerava Modbus RTU zahtjeve prema drugim uređajima koji su na njega povezani preko raznih kanala (lokalna mreža, serijski port, CAN sučelje). Stoga klijent može koristiti Modbus TCP poslužitelj kao pristupnik ( Gateway) za komunikaciju s uređajima koji stoje iza njega.

Primjer Modbus TCP poslužitelja koji se koristi kao pristupnik za preusmjeravanje zahtjeva na Modbus RTU uređaje

Evo primjera iz života. Postoji određeni uređaj temeljen na Linuxu. Ovaj uređaj strši Modbus TCP poslužitelj. Svaki se klijent može spojiti na javnu IP adresu na portu 502 i pokrenuti Modbus TCP spoj. Senzori su povezani s ovim Linux uređajem pomoću RS485 serijskog priključka. Postoji mnogo senzora, vrlo su jednostavni i ne mogu se spojiti na internet, imaju samo RS485 port i razumiju samo Modbus RTU. Zato klijenti šalju Modbus TCP zahtjevi od ID jedinice senzori uključeni Modbus TCP poslužitelj. Poslužitelj dekodira Modbus TCP zahtjev i pretvara ga u Modbus RTU i šalje na RS485 port. Nakon što senzor reagira na njega, pretvara se Modbus RTU odgovoriti u Modbus TCP odgovara i šalje ga natrag na Modbus TCP klijentu koji je zahtjev pokrenuo. Stoga, sa samo jednom javnom IP adresom, možete online ispitivati ​​stotine senzora koji se čak ne mogu spojiti na Internet ili lokalnu mrežu.

A sada vizualni dijagram kako se razlikuje Modbus RTU zahtjev od Modbus TCP zahtjev.

Pogledajmo primjer bajtova za dva zahtjeva:

Modbus RTU: 11 03 006B 0003 7687 Modbus TCP: 0001 0000 0006 11 03 006B 0003

Primjer odgovora:

Modbus TCP: 0001 0000 0009 11 03 06 AE41 5652 4340 Modbus RTU: 11 03 06 AE41 5652 4340 49AD

Kao što vidite, pretvorite zahtjeve između Modbus RTU I Modbus TCP jako jednostavno. Iako je provedba Modbus RTU TCP se može činiti kao najlakši način za usmjeravanje zahtjeva, ali zapravo Modbus TCP postoji nekoliko pozitivnih točaka:

  • Ne treba kalkulirati CRC16
  • Moguće je identificirati par odgovor/zahtjev pomoću ID transakcije
  • Možete jednostavno dodati vlastite verzije protokola promjenom konstante ID protokola

Modbus je otvoreni serijski komunikacijski protokol. Razvijen 1979. godine za korištenje s uređajima programibilnog logičkog kontrolera (PLC), sada se naširoko koristi za povezivanje mnogih vrsta industrijskih elektroničkih uređaja povezanih s različitim vrstama mreža.

Protokol koji se najčešće koristi u industrijskoj automatizaciji (s izuzetkom lokalnih poduzeća). Modbus je vrlo popularan. Ovo je prilično jednostavan i lak za korištenje uređaj sa standardnom serijskom komunikacijom. U Modbus mreži svaki uređaj promatra mrežu kao skup zavojnica (bitova) i registara. Majstor čita i zapisuje ove zavojnice i registre pomoću vrlo jednostavnog i sažetog skupa uputa. Komunikacija se odvija samo u jednom smjeru.

Stvarna implementacija Modbus protokola je vrlo kratka. Iako postoji dvadesetak osnovnih naredbi, samo je nekoliko njih stvarno implementirano. Najčešće naredbe su read coils, write coils, read register, set registers. Mali skup naredbi još je jedan razlog popularnosti protokola.

Modbus - napredni protokol

Pretvarač protokola naširoko se koristi iz više razloga:

  • Modbus je protokol otvorenog koda. To znači da se može uključiti u širok raspon tipova uređaja bilo kojeg dobavljača hardvera.
  • Koristi jednostavnu strukturu poruke, što ga čini manje složenim za implementaciju. Za implementaciju može biti potrebno samo nekoliko dana. Ovo je jasna konkurentska prednost u usporedbi s drugim protokolima za čije učenje i implementaciju mogu potrajati mjeseci.
  • Podržava serijske ili Ethernet veze.
  • Koristi se s dvije vrste serijskih veza: RS-232 i RS-485. Neke verzije Modbus tcp protokola također se mogu slati preko Etherneta ili TCP/IP-a. Ove Modbus poruke pakirane su kao jednobitni ili 16-bitni paketi riječi.

Modbus nije dio fizičkog sloja u mreži. Komunikacija se prenosi preko fizičkih slojeva, što joj omogućuje korištenje u mnogim različitim vrstama mreža. Ovo svojstvo nefizičkog sloja čini Modbus aplikacijskim protokolom.

Komunikacijski protokol Modbus uobičajen je način prikupljanja podataka iz različitih izvora za operativni pregled, arhiviranje i rješavanje problema sa središnje, udaljene lokacije. Ima široku primjenu i prilično je jednostavna tehnologija. Ovisno o primjeni, noviji protokol može imati više prednosti.

Obično je računalo konfigurirano za pokretanje programa kao što su Wonderware, Intellution ili LabVIEW na jednom mjestu za prikupljanje podataka iz različitih procesa u cijeloj tvornici. Druga aplikacija namijenjena je konfiguraciji daljinskih procesnih kontrolera (PLC, Allen-Bradley, Siemens, PLCDirect i drugi). Za odgovor na različite razine ili načine koji se prenose s uređaja.

Dvije mogućnosti protokola

Postoje dvije opcije protokola koje se pokreću preko serijskih veza. Jedan od njih je Modbus RTU protokol. Opis ove opcije: kompaktnija je, koristi binarnu komunikaciju. U ovom formatu, prijenos podataka uvijek prati ciklički kontrolni zbroj redundantnosti, koji se koristi za otkrivanje problema u prijenosu.

Druga opcija je Modbus ASCII. Ova verzija je detaljnija, koristi heksadecimalno ASCII kodiranje podataka koje operateri mogu čitati. Modbus ASCII je manje siguran protokol. Budući da je manje učinkovit od Modbus RTU, operateri bi trebali koristiti samo ASCII za prijenos podataka na uređaje koji ne podržavaju RTU format. ASCII također može biti koristan ako se RTU poruka ne može ispravno primijeniti.

Modbus protokol za lutke

Modbus je serijski komunikacijski protokol koji se koristi za prijenos informacija putem serijskih linija između elektroničkih uređaja. Onaj koji traži informacije naziva se Master, a informacije o opskrbi uređaja nazivaju se Slaves. U standardnoj Modbus mreži postoji jedan glavni i do 247 podređenih, svaki s jedinstvenom podređenom adresom od 1 do 247. Glavni također može pisati informacije u podređene.

Čemu služi?

Modbus je otvoreni protokol. To znači da ga proizvođači mogu besplatno ugraditi u svoju opremu. Postao je standardni komunikacijski protokol u industriji i sada je najčešći način povezivanja industrijskih elektroničkih uređaja. Naširoko ga koriste mnogi proizvođači u mnogim industrijama.

Modbus se obično koristi za prijenos signala od instrumenata i kontrolnih uređaja natrag do glavnog kontrolera ili sustava za prikupljanje podataka, kao što je sustav koji mjeri temperaturu i vlažnost i prijavljuje rezultate računalu. Modbus se često koristi za povezivanje upravljačkog računala s udaljenom terminalnom jedinicom (RTU) u sustavima nadzornog upravljanja i prikupljanja podataka (SCADA). Postoje verzije Modbus protokola za serijske linije (RTU i ASCII) i za Ethernet (TCP).

Kako radi?

Modbus se prenosi preko serijskih linija između uređaja. Najjednostavnije postavljanje bio bi jedan serijski kabel koji povezuje serijske priključke na dva uređaja: Master i Slave.

Podaci se šalju kao niz jedinica i nula koji se nazivaju bitovi. Svaki bit se prenosi kao napon, nule su pozitivni naponi, a jedinice negativni naponi. Bitovi se šalju vrlo brzo. Tipična brzina prijenosa je 9600 bauda (bitova u sekundi).

Master/Slave protokol

Kod opisa Modbus RTU protokola, komunikacija se odvija između centralizirane glavne opreme, 247 povezanih elektroničkih uređaja u jednoj mreži. Dizajn se obično naziva glavni/podređeni protokol jer glavni sustav zahtijeva informacije od povezanih uređaja koji se nazivaju "podređeni". Podređeni uređaji šalju informacije samo kao odgovor na te zahtjeve; Glavni također može pisati informacije na podređene uređaje, ali podređeni uređaji ne mogu pisati informacije u glavni uređaj.

Kada podređeni uređaj odašilje Modbus poruku, počinje generirati poruku s jedinstvenim identifikatorom adrese. Ovo je broj od 1 do 247 koji omogućuje tehničaru da odredi koji određeni uređaj zadovoljava tražene informacije.

Komunikacije i uređaji

Svakom uređaju dizajniranom za komunikaciju korištenjem Modbusa dodijeljena je jedinstvena adresa. Na serijskim mrežama samo čvor određen kao glavni može pokrenuti naredbu. U Ethernetu bilo koji uređaj može poslati Modbus naredbu, iako to obično čini samo jedan master. Naredba sadrži adresu uređaja za koji je namijenjena (od 1 do 247). Sve naredbe uključuju informacije o kontrolnom zbroju kako bi primatelj mogao otkriti pogreške u prijenosu. Osnovne Modbus naredbe govore RTU-u da promijeni vrijednost u jednom od svojih registara, kontrolira ili očita I/O port i naredi uređaju da pošalje natrag jednu ili više vrijednosti sadržanih u njegovim registrima.

Postoje mnogi modemi i pristupnici koji podržavaju Modbus jer je to vrlo jednostavan protokol i često se kopira. Neki od njih bili su posebno dizajnirani za njega. Razne implementacije koriste žičanu, bežičnu komunikaciju kao što je ISM pojas, pa čak i uslugu kratkih poruka (SMS), kao i opću paketnu radio uslugu (GPRS). Tipični problemi s kojima se dizajneri moraju nositi uključuju velike latencije i probleme s vremenom.

Pregled vrsta registara Modbus

Vrste registara na koje se pozivaju uređaji uključuju:

Zavojnica (diskretni izlaz); . diskretni ulaz; . ulazni registar; . držanje registracije.

Funkcijski kodovi

  • Uobičajeni funkcijski kodovi su od 1 do 127, s izuzetkom prilagođenih kodova koje je verificirala Modbus zajednica, javno su dokumentirani i zajamčeno su jedinstveni.
  • Kodovi korisničkih funkcija - nalaze se u dva raspona od 65 do 72, od 100 do 110.
  • Rezervirani kodovi značajki - koriste ih neke tvrtke za naslijeđene proizvode, nisu dostupni za opću upotrebu.

Prednosti

Neke prednosti korištenja Modbus protokola:

  • Ako je upravljački program već instaliran i korisnik je upoznat s Ethernet i TCP/IP utičnicama, upravljački program može biti pokrenut i komunicirati s računalom za nekoliko sati. Troškovi razvoja smatraju se niskima. Potrebna minimalna oprema. Upravljački program je kompatibilan s bilo kojim operativnim sustavom.
  • Nema potrebe za "egzotičnim" skupovima čipova, tako da sustav može koristiti standardne PC Ethernet kartice za komunikaciju s novo implementiranim uređajem. Kako cijena Etherneta pada, troškovi hardvera se smanjuju. Korisnici nisu vezani uz jednog pružatelja usluga radi podrške, već mogu iskoristiti trenutni razvoj događaja.
  • Specifikacija je besplatna za preuzimanje i nema dodatnih naknada za licencu koje su potrebne za korištenje Modbus protokola.
  • Interoperabilnost između uređaja različitih proizvođača i kompatibilnost s instaliranom bazom kompatibilnih uređaja.

Pretvarači Modbus protokola su skupi. Cijena industrijskih pristupnika je 1000 dolara.

Ograničenja

Budući da je Modbus razvijen kasnih 1970-ih za komunikaciju s tipovima podataka ograničenim na one koje su tada razumjeli PLC-ovi. Blobovi nisu podržani.

Ne postoji standardni način za čvor da pronađe opis podatkovnog objekta, na primjer da odredi da li vrijednost registra predstavlja vrijednost temperature između 30 i 175 stupnjeva.

Budući da je Modbus master/slave protokol, ne postoji način da uređaj "prijavi iznimku" (osim Ethernet TCP/IP, koji se zove open-mbus). Glavni čvor mora redovito primati podatke od svojih podređenih uređaja i također tražiti promjene u podacima. To troši propusnost, povećavajući vrijeme mrežne veze u aplikacijama gdje propusnost može biti skupa, kao što su veze niske brzine prijenosa podataka.

Modbus je ograničen na adresiranje 254 uređaja na jednoj podatkovnoj vezi, što ograničava broj uređaja koji se mogu spojiti na glavnu stanicu (Ethernet TCP/IP je iznimka). Prijenosi moraju biti kontinuirani, što ograničava vrste daljinskih komunikacijskih uređaja na one koji mogu čuvati podatke u međuspremniku kako bi se izbjegle praznine u prijenosu. Sam Modbus protokol ne pruža zaštitu od neovlaštenih naredbi ili presretanja podataka. Važno je razumjeti da u procesu prijenosa informacija nastaju logičke pogreške, kao i one povezane s distorzijama tijekom razmjene.

U lekciji 48 pokazao sam primjer nestandardnog protokola za razmjenu podataka putem UART sučelja. Kao i uvijek, sve nestandardno omogućuje vam optimiziranje izvršenja zadatka, a sve univerzalno pojednostavljuje razvoj zadatka.

Postoji jednostavan, univerzalni ModBus komunikacijski protokol u kojem je redundancija podataka i funkcija svedena na minimum. Ovo je vjerojatno najčešći protokol za organiziranje malih distribuiranih sustava. U sljedećim lekcijama implementirat ću razmjenu podataka između uređaja koji koriste ovaj protokol.

Opći opis protokola.

ModBus je otvoreni protokol za razmjenu podataka u malim lokalnim mrežama. U pravilu se koristi za prijenos podataka preko RS-232, RS-485, RS-422 sučelja, u TCP/IP, UDP mrežama. Zbog svoje jednostavnosti i svestranosti, ModBus je postao široko rasprostranjen i postao de facto standard u malim distribuiranim računalnim sustavima. Gotovo svi moderni kontroleri podržavaju ModBus mreže.

U ModBus mreži, kontroleri su obično povezani pomoću topologije "Common Bus". Interakcija regulatora odvija se u skladu s modelom master-slave (master-slave).

U mreži postoji glavni uređaj - master. I također nekoliko podređenih uređaja - robova. Razmjenu može pokrenuti samo glavni uređaj.

Transakcija (slijed operacija tijekom razmjene podataka) sastoji se od zahtjeva i odgovora.

Glavni uređaj može uputiti zahtjev bilo kojem podređenom kontroleru ili pokrenuti emitiranu poruku svim podređenim uređajima istovremeno.

Podređeni uređaj, nakon što je odredio svoju adresu u zahtjevu, generira odgovor.

Zahtjev glavnog uređaja mora sadržavati kod funkcije, tj. Što uraditi. Također, ovisno o funkciji, zahtjev može sadržavati podatke.

Postoje 3 varijante ModBus protokola.

  • ModBus ASCII – tekstualni protokol. Koristi samo ASCII znakove. Svaki bajt se prenosi kao dva heksadecimalna znaka.
  • ModBus RTU je numerički protokol. Podaci se prenose u binarnom obliku. Bajt koji se prenosi mrežom je broj protokola.
  • ModBus TCP je protokol za prijenos podataka u TCP/IP mrežama.

Usporedio sam numeričke i tekstualne protokole još u . Što se tiče performansi i brzine razmjene, numerički protokoli svakako imaju prednost. U nadolazećim lekcijama koristit ćemo ModBus RTU. Sljedeće informacije u ovoj lekciji posvećene su ovoj opciji.

ModBus RTU protokol.

Uređaji (kontroleri) su povezani u mrežu korištenjem “Common Bus” topologije. ModBus standard omogućuje do 247 kontrolera da rade zajedno.

Svaki kontroler zapravo sadrži podatke koje uređaji razmjenjuju.

ModBus standard definira 4 vrste podataka.

Tip podataka Veličina Valjane operacije
Registar zastava (zavojnice) 1 bit Pišite i čitajte
Diskretni ulazi 1 bit Čitanje
Holding Registrs 16 bita Pišite i čitajte
Ulazni registri 16 bita Čitanje

Ovo funkcionalno razdvajanje podataka je izbrisano i praktički se ne koristi. Svi podaci se na kraju čitaju iz memorije kontrolera i nije toliko bitno odakle su u nju dospjeli s ulaza ili iz ulaznih registara.

U praksi se koriste samo ti matični registri. Podacima se pristupa preko 16-bitne adrese. Eventualno:

  • podaci u svakom kontroleru su tablica 16-bitnih registara;
  • tablica podataka može imati do 65536 elemenata;
  • numeriranje elemenata počinje od 0.

Glavni uređaj inicira transakciju - razmjenu podataka. Transakcija može biti pojedinačna (zahtjev-odgovor) ili emitirana (svi podređeni uređaji se adresiraju istovremeno). Transakcija se sastoji od jednog okvira zahtjeva i jednog okvira odgovora. U transakciji emitiranja koristi se samo okvir zahtjeva.

Podaci okvira prenose se kao kontinuirani tok. Pauza između prijenosa podataka ne smije premašiti vrijeme prijenosa od 1,5 znaka. Znak novog okvira je odsutnost razmjene u mreži (tišina) tijekom vremena potrebnog za prijenos 3,5 znaka. Ako je tijekom tog vremena mrežna linija bila u neaktivnom stanju, tada slave uređaji percipiraju prve primljene podatke kao početak okvira.

Općenito, okvir zahtjeva ima sljedeći format.


Adresa (8 bita).

Okvir počinje adresnim poljem koje se sastoji od 8 bitova. Sadrži adresu podređenog uređaja kojemu je poruka od glavnog uređaja namijenjena. Svaki slave uređaj mora imati jedinstvenu adresu od 1 do 247. I samo adresabilni slave uređaj mora odgovoriti na zahtjev mastera. Odgovor govori masteru koji slave komunicira.

Adresa 0 koristi se u načinu emitiranja. Svi podređeni uređaji obavljaju funkciju navedenu u zahtjevu, ali ne šalju potvrdu.

Funkcija (8 bita).

Funkcijsko polje govori adresiranom podređenom uređaju koju operaciju treba izvesti.

Najvažniji bit funkcijskog bajta postavljen je na 1 u podređenom odgovoru kako bi se obavijestio glavni da je operacija dovršena greškom. Ako je operacija uspješna, najvažniji bit je 0.

  • Standardne naredbe. Kodovi definirani standardom ModBus protokola.
  • Prilagođene naredbe. Kodovima 65...72 i 100...110 korisnik može dodijeliti proizvoljnu funkciju.
  • Rezervirane ekipe. To su kodovi koji izvorno nisu definirani standardom, ali se već koriste u uređajima različitih proizvođača.

Velika većina ModBus kontrolera koristi samo 3 funkcije.

Format odgovora ovisi o funkciji. U mnogim slučajevima normalni odgovor ponavlja zahtjev u cijelosti ili djelomično.

Podaci (N * 8 bita).

Podatkovno polje sadrži podatke potrebne podređenom upravljaču za obavljanje određene funkcije ili polje sadrži podatke koje prenosi podređeni uređaj na zahtjev nadređenog. Duljina i format podatkovnog polja ovisi o kodu funkcije. Nekim porukama možda nedostaju podaci.

Svaki podatak ima 16 bita (2 bajta). Podaci se prvi prenose u bajtu najvećeg značaja. Na primjer, sekvencijalni prijenos registara s adresama 0 i 1 trebao bi se dogoditi na sljedeći način:

  • visoki bajt registra 0 ->
  • niski bajt registra 0 ->
  • visoki bajt registra 1 ->
  • niski bajt registra 1 ->.

Kod prijenosa 4-bajtnog broja, na primjer, s pomičnim zarezom, slijed je isti. Broj je podijeljen u dva 16-bitna registra i u svakom od njih prvi se prenosi najvažniji bajt (1-> 0-> 3-> 2->).

Kontrolni zbroj (16 bita).

Polje kontrole integriteta podataka poruke. Omogućuje vam provjeru okvira za pogreške. Riječ je o pogreškama koje se pojavljuju tijekom prijenosa podataka.

Pokušat ću dati opći pregled kontrolnog koda. Bolje je preskočiti ovaj paragraf. Glava bi ti mogla puknuti. Kad se dotaknem ove teme uvijek me zaboli glava. U sljedećem tutorialu predstavit ću praktičnu implementaciju izračuna ModBus kontrolnog koda.

Ciklički redundantni kod (CRC) koristi se kao kontrolni zbroj. Svi bitovi prijenosnog okvira skupljaju se u ogroman binarni broj. Podijeljen je kodom generirajućeg polinoma. Ostatak podjele je kontrolni kod.

Koristi se polinomska aritmetika po modulu 2. To znači da su sve radnje pri izračunavanju CRC aritmetičke operacije bez prijenosa. Oduzimanje i zbrajanje odvijaju se bit-wise, bez uzimanja u obzir prijenosa, zbog čega te operacije daju isti rezultat i mogu se zamijeniti operacijom "isključivo ili". Pri dijeljenju, umjesto oduzimanja djelitelja od dividende, također se koristi operacija "isključivo ili". Ovo je opći princip za izračunavanje CRC-a. U praksi se izračuni izvode pomoću učinkovitijih algoritama.

Kontrolni zbroj završava okvir prijenosa. Nakon što primi okvir, podređeni uređaj, koristeći isti algoritam, izračunava kontrolni zbroj za primljene podatke i uspoređuje ga s poslanim kontrolnim kodom na kraju okvira. Kao rezultat toga, potvrđuje se integritet podataka okvira.

ModBus RTU standard koristi standardni CRC-16 ciklički kod s generirajućim polinomom X 16 +X 15 +X 2 +1. Ovo je 16-bitni kod, binarni koeficijenti su 1 1000 0000 0000 0101 (8005h u heksadecimalnom).

Poruka se tretira kao jedan sekvencijalni binarni broj u kojem se prvi prenosi najvažniji bit. Taj se broj množi s X 16 (pomaknut ulijevo za 16 mjesta) i dijeli s X 16 +X 15 +X 2 +1 (1 1000 0000 0000 0101). 16-bitni ostatak (predinicijaliziran sa svim jedinicama) je kontrolni kod poruke.

Rješavanje logičkih pogrešaka.

Uz pogreške povezane s oštećenjem podataka tijekom prijenosa, mogu postojati logičke pogreške kada je zahtjev primljen bez pogrešaka, ali se ne može izvršiti. Obično su takve pogreške povezane s nevažećim adresama, podacima, kodovima itd. Većina ModBus kontrolera podržava sljedeće vrste grešaka.

Kod pogreške Ime Opis
01 NEZAKONITA FUNKCIJA Funkcijski kod nije podržan u upravljaču
02 NEZAKONITA ADRESA PODATAKA Nevažeća adresa podataka
03 NEDOPUŠTENA VRIJEDNOST PODATAKA Nevažeće vrijednosti podataka
04 KVAR PODREĐENOG UREĐAJA Došlo je do pogreške tijekom izvođenja operacije

Ako se pojavi pogreška u odgovoru, najvažniji bit se postavlja u polje funkcijskog koda, a zatim se prenosi kod greške umjesto uobičajenih podataka.

Detaljno ispitivanje funkcija.

Funkcija 03 – očitavanje registara posjeda.

Koristi se za čitanje vrijednosti više registara čuvanja. Zahtjev prenosi adresu prvog elementa tablice registara čija se vrijednost mora pročitati i broj registara koji se čitaju. Za adresu i količinu koriste se 16-bitni brojevi. Prvi se prenosi najvažniji bajt.

Traženi podaci sadržani su u odgovoru. Prije bloka podataka prenosi se bajt koji sadrži broj pročitanih podataka u bajtovima.

Format zahtjeva za funkciju čitanja registara pohrane.

Broj bajta Broj bajta u parametru Parametar
0 0 Adresa kontrolera 01 01
1 0 Funkcija 03 03
2 1 Početna adresa registara 0008 00
3 0 08
4 1 Broj registara 0002 00
5 0 02
6 1 Kontrolna svota 45C9 45
7 0 C9

Odgovor (slave adresa, kod funkcije, broj pročitanih bajtova, vrijednosti registra).

Broj bajta Broj bajta u parametru Parametar Primjer čitanja registara s adresama 8 i 9
0 0 Adresa kontrolera 01 01
1 0 Funkcija 03 03
2 0 Broj pročitanih bajtova 04 04
3 1 Vrijednost registra 8 12A5 12
4 0 A5
5 1 Vrijednost registra 9 E020 E0
6 0 20
7 1 Kontrolna svota A770 A7
8 0 70

Funkcija 06 – upis u jedan registar posjeda.

Koristi se za upisivanje u jedan registar. Zahtjev prosljeđuje adresu registra i vrijednost za nju. Ako je uspješan, slave kontroler odgovara kopijom zahtjeva.

Format zahtjeva za funkciju pisanja jednog registra za pohranu.

Broj bajta Broj bajta u parametru Parametar
0 0 Adresa kontrolera 01 01
1 0 Funkcija 06 06
2 1 Adresa registracije 0009 00
3 0 09
4 1 Registarska vrijednost 12A5 12
5 0 A5
6 1 Kontrolna svota 9513 95
7 0 13

Odgovori (ponovljava zahtjev).

Broj bajta Broj bajta u parametru Parametar Primjer upisivanja vrijednosti 12A5 u registar 9
0 0 Adresa kontrolera 01 01
1 0 Funkcija 06 06
2 1 Adresa registracije 0009 00
3 0 09
4 1 Registarska vrijednost 12A5 12
5 0 A5
6 1 Kontrolna svota 9513 95
7 0 13

Funkcija 16 – upisivanje vrijednosti u registre za pohranu.

Koristi se za upisivanje u nekoliko registara smještenih jedan za drugim u tablici.

Zahtjev prenosi adresu prvog registra, broj registara i vrijednosti za njih.

Odgovor vraća početnu adresu i broj izmijenjenih registara.

Format zahtjeva za funkciju upisa u registar pohrane.

Broj bajta Broj bajta u parametru Parametar
0 0 Adresa kontrolera 01 01
1 0 Funkcija 10 10
2 1 Početna adresa registara 0008 00
3 0 08
4 1 Broj registara 0002 00
5 0 02
6 0 Brojač bajtova 04 04
7 1 Vrijednost registra 8 12A5 12
8 0 A5
9 1 Vrijednost registra 9 E020 E0
10 0 20
11 1 Kontrolna svota AF4A A.F.
12 0 4A

Odgovor (slave adresa, kod funkcije, početna adresa i broj registara).

Broj bajta Broj bajta u parametru Parametar Primjer pisanja registara s adresama 8 i 9
0 0 Adresa kontrolera 01 01
1 0 Funkcija 10 10
2 1 Početna adresa registara 0008 00
3 0 08
4 1 Broj registara 0002 00
5 0 02
6 1 Kontrolna svota C00A C0
7 0 0A

ModBus i specijalizirani protokoli.

Sada možete usporediti ModBus protokol sa specijaliziranim protokolom iz .

Broj bajta Format broja Svrha
0 … 3 plutati Temperatura
4 … 7 plutati napon
8 bajt Stanje gumba
9 bajt rezerva
10, 11 int Kontrolni zbroj (zbroj bajtova 0 ... 9 ^ 0xa1e3)

U usporedbi s namjenskim protokolom:

  • ModBus je sporiji i ima niže performanse. Da bi se dobila ista količina informacija, preko mreže se prenosi mnogo više podataka.
  • Njegova implementacija je teža. Zahtijeva više mikrokontrolera i mrežnih resursa.

Ali prednosti su u mnogim slučajevima značajnije.

  • Zbog složenijeg kontrolnog zbroja i redundantnih informacija, mrežne greške se pouzdanije utvrđuju i pouzdanost podataka je veća.
  • Mreža se lako širi. Vrlo je jednostavno dodati nove uređaje.
  • ModBus je standardni protokol. Podržavaju ga mnogi kontroleri različitih proizvođača.

Možda je glavni razlog korištenja nestandardnih protokola nedovoljni računalni resursi sustava.

Istina, postoji još jedan razlog za korištenje nestandardnog protokola. Uključujući, zahvaljujući čemu je naša tvrtka pobijedila na velikom natječaju. Nitko osim programera neće se moći povezati s uređajima sa specijaliziranim protokolom i njima upravljati. Oni. Kvaliteta je potpuno suprotna standardnim protokolima. Na snazi ​​je filozofski zakon jedinstva suprotnosti.

U sljedećoj lekciji ćemo implementirati komunikaciju između Arduino ploče i računala koristeći ModBus protokol.

Kategorija: . Možete ga označiti.

Najbolji članci na temu