Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Iron
  • Primjer opisa Modbus rtu protokola. Opis Modbus protokola

Primjer opisa Modbus rtu protokola. Opis Modbus protokola

U ovom članku pokušat ću 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 čemu se radi Modbus protokol i kako se može primijeniti.

Adresiranje podataka u Modbusprotokol

Za pohranjivanje informacija u podređene uređaje ( slave uređaj) Koriste se 4 tabele (ili niza). Svaka tabela 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 čitanje-upisivanje. Pogledajmo ove 4 vrste podataka koji se mogu pohraniti u registre:

COILS

Ovo su digitalni izlazi ( Digitalni izlazi). Svaki kalem se može pisati ili čitati. Njegova veličina je 1 bit (tj. 0 ili 1). Istorijski gledano, ovi registri su povezani sa stvarnim digitalnim izlazima na senzorima ili terminalnim uređajima. Digitalni izlazi se koriste za upravljanje, na primjer, LED dioda, releja ili motora. One. Upisivanjem 1 u takav registar možemo uključiti LED, a upisivanjem 0 možemo ga isključiti (ovo je uslovno, zapravo, 0 ga može uključiti, a 1 ga isključiti).

Čitanjem ovog registra možemo saznati status izlaza (tj. da li je uključen ili isključen). Rezultat čitanja je također 1 bit, tj. 1 ili 0.

KONTAKTI

Ovo su digitalni ulazi ( Digitalni ulazi). Digitalni ulaz se može samo očitati, odnosno čitanjem ovog registra saznajemo stanje stvarnog digitalnog ulaza na senzoru ili uređaju. Digitalni ulazi se koriste za praćenje statusa - na primjer, da li je svjetlo uključeno ili isključeno, da li je tekućina dostigla željeni nivo ili ne, da li je relej uključen ili ne, itd.

REGISTRI ANALOGNIH ULAZA

Pod ovim obično mislimo na analogne ulaze ( Analogni ulazi). Analogni ulazi se mogu samo čitati, tj. ne mogu se upisivati, već se može čitati samo trenutno stanje poreznog unosa. Tipično, analogni ulazi se koriste na senzorima za mjerenje određenih vrijednosti: ulazne struje ili ulaznog napona. Zatim se dobijena vrijednost može pretvoriti u neku stvarnu vrijednost, na primjer u temperaturu, vlažnost zraka, pritisak ili nešto drugo. U tu svrhu koriste se posebne formule koje dolaze sa senzorom. Ali češće senzor odmah vraća stvarnu vrijednost. Na primjer, senzor koji mjeri temperaturu može vratiti izmjerenu vrijednost kao stepene Celzijusa pomnožene sa 10. To jest. 253 znači 25,3°C. Ova tehnika se često koristi kada treba da vratite razlomke kroz celobrojni registar.

REGISTRI DRŽAVANJA ANALOGNIH IZLAZA

Pod ovim obično mislimo na analogne izlaze ( Analogni izlazi), ali često i samo registri koji pohranjuju neke vrijednosti koje se mogu i pisati i čitati. One. ovi registri se mogu čitati i pisati. Najčešće se koristi za snimanje DAC uređaja (Digitalno-analogni pretvarač) ili jednostavno kao registri koji pohranjuju neke vrijednosti. DAC se često koriste za kontrolu nečega, na primjer: svjetline LED diode, ili jačine sirene, ili brzine rotacije motora.

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

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

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

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

Inputs– za vrijednosti koje je potrebno pročitati samo na glavnoj strani i koje se mogu predstaviti kao 16-bitni cijeli brojevi. Na primjer, ADC ulazi, ili bilo koje vrijednosti koje generira sistem koje treba pročitati (na primjer, broj pokrenutih procesa ili unutrašnja temperatura uređaja može se pročitati kroz neki ulazni registar)

Holding– ovi registri se mogu koristiti za pohranjivanje konfiguracije uređaja, za kontrolu DAC uređaja za pohranjivanje nekih servisnih informacija. U principu, ovi registri se mogu koristiti za sve što dopušta mašta programera sistema.

Osim toga, svaki registar u kolu Modbus može imati jedinstvenu adresu, koja je određena tipom registra. Pogledajte tabelu ispod:

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

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

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

Najlakši način da zamislite je da uređaj pohranjuje 4 niza elemenata od po 9999 elemenata. Indeks unutar niza je adresa koja je navedena unutar naredbe. A naredba određuje koji niz će se koristiti.

Ako pažljivo pogledate tabelu, možete vidjeti da ako želite, možete koristiti više adresa za Holding registri: 40001 – 105537, tj. 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, onda 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 glavni uređaj koji će se koristiti za vaš proizvod zna za proširene registre, onda ih koristite.

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

Modbus adresiranjeuređaja

Za adresiranje uređaja koristi se poseban identifikator koji se zove Slave ID. Ovo je jednobajtna vrijednost koja definira jedinstvenu adresu uređaja u cijeloj mreži. Modbus. Po standardu Modbus može biti broj od 1 do 247. tj. Ukupno, na mreži može biti 247 krajnjih uređaja (slave uređaja) sa jedinstvenim adresama.

Kada master pošalje naredbu mreži, prvi bajt je Slave ID. Ovo omogućava uređajima da nakon prvog bajta odrede da li treba da obrađuju naredbu ili da je ignorišu. Ovo je tačno za Modbus RTU. Za Modbus TCP korišteni protokol ID jedinice značenje. Mada ako pogledate, to je samo drugo ime Slave ID. 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. Ovo je više nego dovoljno. Ali postoji jedan uslov. Glavni i krajnji uređaj moraju koristiti 2 bajta za adresiranje. One. moraju biti konfigurirani da koriste istu šemu adresiranja uređaja: 1 ili 2 bajta. Također, svi uređaji u mreži moraju koristiti istu šemu adresiranja - 1 ili 2 bajta. Na mreži ne mogu postojati uređaji s različitim šemama adresiranja.

Modbus funkcije

Da bi zatražio podatke ili ih napisao, master mora naznačiti funkciju koju želi izvršiti na krajnjem uređaju. Sve dostupne funkcije kao standard Modbus Protokol je dat u nastavku:

Funkcijski kod 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 Holding registra
04 (04 hex) Čitanje Čita vrijednost ulaznog registra
05 (05 hex) Napišite jedan registar Upisuje vrijednost u registar zavojnice
06 (06 hex) Napišite jedan registar Upisuje vrijednost u registar Holding
15 (0F hex) Pisanje više registara Zapisuje vrijednost u više registara zavojnice
16 (10 hex) Pisanje više registara Upisuje vrijednost u nekoliko Holding registara

O svakoj funkciji će se govoriti kasnije, detaljno i sa primjerima.

CRC16 načina da izbjegnete greške

Svaki tim je ušao Modbus RTU Protokol završava sa dva bajta koji sadrže CRC16 vrijednost svih komandnih bajtova. Dodavanje CRC16 vam omogućava da pronađete oštećene zahtjeve i ignorišete ih. Budući da se svaki bajt u naredbi koristi za izračunavanje kontrolne sume, čak i promjena jednog bita u bilo kojem bajtu će uzrokovati neslaganje 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 sa CRC16 generiranim iz primljenih bajtova. Ako se kontrolni sumi ne podudaraju, tada primljeni zahtjev sadrži oštećene bajtove, što iskrivljuje značenje poslane komande. Ovu naredbu treba zanemariti.

Treba napomenuti da se CRC16 ne koristi u Modbus TCP protokol. Budući da TCP paketi već imaju ugrađenu svoju kontrolnu sumu i provjeravaju se za integritet podataka, nema potrebe za izračunavanjem CRC16.

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

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

Vrste podataka koji se pohranjuju u registrima.

Hajde da razgovaramo o tome koji podaci se mogu pohraniti u registre. Najjednostavniji slučaj je Coil I Kontakt registri. Ovi registri mogu pohraniti 1 bit informacija - 0 ili 1. Kada master čita ove registre, kao rezultat prima 0 ili 1. Za pisanje registara koriste se posebne konstante:

0xFF00– znači logičan 1

0x0000– znači logička 0

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

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

A evo najzanimljivije stvari.

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

Počnimo s jednostavnim slučajevima.

Ako čitamo 1 Input ili Holding registar, tada dobijamo 16 bitova podataka. Na primjer, ovo može biti vrijednost 0x8D05– dva bajta 0x8D I 0x05.

U najjednostavnijem slučaju, ovo bi mogla biti neoznačena cjelobrojna vrijednost: 36101

Ali to može biti predpisani cijeli broj: -29435

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

To može biti ili nepotpisani cijeli broj, potpisani cijeli broj ili 2 ASCII znaka:

0x4D = M

0x4F = O

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

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

To može 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, kombinovanjem više registara možemo pohraniti 64-bitne vrijednosti, 128-bitne vrijednosti, nizove i u osnovi bilo koju vrstu podataka.

Ali, kombinujući registre, imamo sledeće pitanje:

Redoslijed bajtova i riječi

Nažalost protokol Modbus ne definira kako bi bajtovi trebali biti pohranjeni u registru. One. 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 po kojem 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 Mali Endian formatu (prvo mali bajt), tada ćemo imati vrijednost 17317

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

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

0xEF45 0xB7A3

0x45EF 0x A3B7

0xB7A3 0xEF45

0xA3B7 0x45EF

Nije bitno kakav je redoslijed bajtova/riječi implementiran na krajnjem uređaju. Glavna stvar je da master mora znati ovaj redoslijed i biti u stanju formirati ispravne vrijednosti ​​​od primljenih bajtova. Poznavajući tačan format podataka na konačnom uređaju, čarobnjak će uvijek ispravno formirati vrijednosti registra. I upravo zbog toga postoji nešto kao Modbus karta (Modbus kartica).

ModbusMapa

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 sa fiksnim opisima registra. One. spisak registara, njihove adrese, pohranjeni podaci itd. je strogo specificiran od strane proizvođača i opisan u dokumentaciji.

I postoji prilagođena konfiguracija. One. Na uređaju nema fiksnih adresa za registre. Korisnik može konfigurirati Modbus karta onako kako mu je potrebno (na primjer, povezivanjem nekih registara u neprekidan niz adresa kako bi ih pročitao jednom komandom).

Fiksni primjer Modbus karta, koji ima smisla koristiti za svoje uređaje, može izgledati kao u tabeli ispod.

Adresa Opis Pristup Zadana vrijednost Dostupne vrijednosti
40001 šifra proizvoda Čitanje 1 1
40002 Registar komandi, za pisanje komandi Zapis 0 – resetovanje uređaja
1 – Otključajte uSD karticu za snimanje
2 – Blokirajte uSD karticu za snimanje
3 – Sačuvajte konfiguraciju na uSD karticu
40003 Vrijeme rada, u sekundama
Manja reč
Čitanje 0 0 .. 0xFFFF
40004 Vrijeme rada, u sekundama
Visoka reč
Čitanje 0 0 .. 0xFFFF
40005 Sistemska greska Read/Write 0 Pogledajte dodatak za kodove grešaka.
Upišite 0 da poništite grešku i isključite LED LED ERROR

Šta Modbus ne može

Modbus To je vrlo jednostavan protokol, tako da ne podržava sve što vam može zatrebati.

Modbus ne podržava poruke (događaje). One. krajnji uređaj ne može poslati poruku masteru. Samo master može anketirati krajnji uređaj.

Modbus ne podržava čitanje istorijskih podataka (akumuliranih tokom određenog vremenskog perioda). Iako se ovo ograničenje može lako prevazići kreiranjem komandnih registara, adresnih registara i registara preopterećenja. O tome će biti riječi u narednom članku.

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

osim toga, Modbus ne podržava autentifikaciju ili enkripciju. Odnosno, sva komunikacija se odvija u nezaštićenom načinu. 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 modifikacije, ali nisu baš pouzdane (iako se mogu koristiti). Opisaću ih u budućim člancima.

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

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

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

Razdjelnik paketa

Prva razlika u protokolu Modbus ASCII od Modbus RTU– ima separator između paketa. Ako u Modbus RTU svi paketi su dolazili jedan za drugim (praktično, trebalo bi da dođe do malog kašnjenja na liniji između paketa, oko 2-5ms), zatim u Modbus ASCII Svaki novi paket mora početi sa posebnim znakom za razdvajanje.

Po standardu Modbus RTU potrebno je kašnjenje od 3,5 simbola između paketa (vrijeme koje je potrebno za prijenos 3,5 simbola preko komunikacijske linije ovisi o brzini prijenosa). Ovo kašnjenje se koristi za otkrivanje novog zahtjeva od mastera. One. ovo kašnjenje označava početak novog zahtjeva. Ali kada su počeli da koriste modeme, prestao je da radi. Nemoguće je održati potrebno vrijeme na modemu. Stoga smo odlučili koristiti novu verziju protokola - Modbus ASCII. Ova opcija eliminiše mnoge neprijatnosti pri radu sa modemom: postoji poseban znak za razdvajanje paketa i koriste se samo vidljivi ASCII znakovi.

Dakle, takav znak za početak paketa je znak dvotačke sa heksadecimalnim kodom 0x3A. I kraj svakog paketa je označen znakovima za novi red i povratni znak - 0x0D 0x0A. Stoga je ovisnost o kašnjenjima između bajtova u potpunosti uklonjena iz protokola. One. ako modem odgodi bajt, to neće uzrokovati pogrešnu komunikaciju na strani klijenta. I čekaće da paket završi bajtove 0x0D 0x0A. I ako naiđe na znak za razdvajanje 0x3A– će resetirati bafer i ponovo početi formirati paket. Osim toga, nema potrebe za izbjegavanjem posebnih znakova modema, jer podaci ne koriste znakove iz početnog dijela ASCII tablice.

Predstavljanje bajtova podataka

IN Modbus ASCII U protokolu, svaki bajt podataka je predstavljen kao 2 bajta. Svaki bajt predstavlja ASCII znak u heksadecimalnom zapisu. Da bismo lakše razumjeli, dajemo primjer:

Malo objašnjenje za tabelu.

Na primjer, trebamo prenijeti bajt podataka koji pohranjuje znak # . Ovaj znak ima heksadecimalni kod u ASCII tabeli 0x23. U protokolu Modbus RTU mi samo prosledimo bajt sa vrednošću 0x23.

Ako želimo da prenesemo isti karakter kroz protokol Modbus ASCII, već moramo prenijeti 2 bajta. U prvom koraku dobijamo heksadecimalni kod karaktera, 0x23. U drugom koraku kodiramo ovu vrijednost koristeći 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 bajt podataka u protokolu je Modbus RTU0 .. 0xFF

Raspon vrijednosti za bajt podataka u protokolu Modbus ASCII– samo znakovi potrebni za prikaz heksadecimalnih cifara, tj. 0 – 9, A, B, C, D, E, F(sva velika slova).

Kontrolna suma za Modbus ASCII

U protokolu Modbus RTU Koristi se 2-bajtna kontrolna suma, koja pomaže u otkrivanju oštećenih zahtjeva. U protokolu Modbus ASCII Tu je i kontrolna suma - LRC (Longitudinal Redundancy Check).

Kalkulacija LRC mnogo lakše nego izračunati CRC. Da izračunam LRC potrebno je da uradite sledeće:

  • Dodajte zajedno sve bajtove u poruci Modbus ASCII, prije nego što se konvertuju u ASCII znakove. Početna dvotočka i završni znakovi nisu uključeni u proračune CR/LF.
  • Obrišite sve bitove veće od 8 (tj. ostavite niži bajt)
  • Učinite rezultirajući bajt negativnim da biste dobili LRC bajt

Dakle, ako zatim saberete sve bajtove paketa podataka i bajt LRC kao rezultat ćemo dobiti 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 sa uređaja sa 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 zbir svih bajtova

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

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

One. na kraju zahtjeva trebate dodati 2 bajta sa 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 sa uređaja sa adresom 17

Zahtjev: 11 03 00 6B 00 03

Ovo 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 pomak u red i znak za povratak na kraj zahtjeva i predstavite svaki bajt kao ASCII znakove koji odgovaraju heksadecimalnom prikazu svakog bajta zahtjeva. Kao rezultat toga, dobić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 na port koristeći ASCII znakovne kodove. U binarnom obliku, zahtjev će izgledati ovako:

3A 3131 3033 3030 3642 3030 3033 3745 0D 0A
Byte index HEX vrijednost ASCII Opis
0 3A : Simbol početka
1-2 31 31 11 Adresa uređaja
3-4 30 33 03 Komandni kod
5-8 30 30 36 42 00 6B Adresa registra HOLDING za početak čitanja. U ovom slučaju, 0x006B = 107. Ali ovo nije adresa, već pomak od adrese 40001. To je prava adresa = 107+ 40001 = 40108.
9-12 30 30 30 33 00 03 Broj registara za čitanje. 0x0003 = 3. To jest Morate pročitati registre 40108–40110.
13 – 14 37 45 7E LRC zahtjev
15 CR 0D Carriage return karakter
16 LF 0A Znak novog reda

Pa, vrijeme je da razmislimo koji je protokol Modbus TCP razlikuje od protokola Modbus RTU. Pošto nema mnogo razlika, članak neće biti dug.
Dakle, u prethodnom članku o funkcijama Modbus RTU možete saznati koje su funkcije i njihov binarni format. Sada vredi reći šta je to Modbus TCP kako se koristi i po čemu se razlikuje od standarda Modbus RTU.

ModbusRTUpreko TCP-aspoj

Najlakši način za razmjenu Modbus poruke putem mreže - lako se prenose Modbus RTU pakete preko TCP utičnice (veza). 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čili su koristiti modificirani protokol. Uzeli smo standardni Modbus RTU i malo ga promenio. Prvo, posljednja 2 bajta su uklonjena iz njega CRC16. Pošto svaki TCP/IP paket sadrži svoj kontrolni zbroj, odlučili smo da nema potrebe da ga ponovo provjeravamo. Osim toga, prvi bajt je uklonjen Slave ID. U principu, kao što će se kasnije vidjeti, nije uklonjena, već jednostavno preimenovana. Ovo su bajtovi bez Slave ID I CRC16 pozvao PDU – Jedinica podataka protokola.

Na primjer, uzmimo zahtjev Modbus RTU, koji glasi nekoliko HOLDING registri sa uređaja #17 (Slave ID = 17)

11 03 006B 0003 7687

Sada uklanjamo prva i zadnja 2 bajta. Dobijamo PDU!

03 006B 0003

Čini se da je sve jasno sa ovim. Sada da dobijete kompletan paket Modbus TCP moramo dodati ispred MBAP zaglavlje - Modbus zaglavlje aplikacije. One. moramo dodati neko zaglavlje. Ovo zaglavlje uključuje ID transakcije, ID protokola, Dužina I ID jedinice.

ID transakcije– 2 bajta koje postavlja klijent za jedinstvenu identifikaciju svakog zahtjeva. One. 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 treba biti jednako 0x00 0x00

Dužina– 2 bajta koji definiraju dužinu paketa (bez bajtova ID protokola, ID transakcije I Dužina)

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

Mala digresija u vezi adresiranja. Ovo može izgledati nepotrebno, budući da se TCP veza može uspostaviti samo na određenu IP adresu i port. One. već imamo određenu adresu servera, tako da je dodjela ID jedinice nije sasvim jasno.

Ali u stvari, prilično je uobičajeno da postoji neki server koji jednostavno rutira Modbus RTU zahtjeve prema drugim uređajima koji su na njega povezani različitim kanalima (lokalna mreža, serijski port, CAN interfejs). Stoga klijent može koristiti Modbus TCP server kao gateway ( Gateway) za komunikaciju sa uređajima iza njega.

Primjer Modbus TCP servera, koji se koristi kao gateway za preusmjeravanje zahtjeva na Modbus RTU uređaje

Evo primjera iz života. Postoji određeni uređaj baziran na Linuxu. Ovaj uređaj strši Modbus TCP server. Svaki klijent se može povezati na javnu IP adresu na portu 502 i pokrenuti Modbus TCP spoj. Senzori su povezani na ovaj Linux uređaj pomoću RS485 serijskog porta. Postoji mnogo senzora, vrlo su jednostavni i ne mogu se povezati na internet, imaju samo RS485 port i samo razumiju Modbus RTU. Zato klijenti šalju Modbus TCP zahtjevi od ID jedinice senzori uključeni Modbus TCP Server. Server dekodira Modbus TCP zahtjev i pretvara ga u Modbus RTU i šalje na RS485 port. Nakon što senzor odgovori na njega, on se pretvara Modbus RTU odgovori Modbus TCP odgovori i šalje ga nazad na Modbus TCP klijentu koji je inicirao zahtjev. Dakle, sa samo jednom javnom IP adresom, možete ispitati stotine senzora na mreži koji ne mogu biti povezani ni na internet ili lokalnu mrežu.

A sada vizuelni dijagram po čemu 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, pretvarajte zahtjeve između Modbus RTU I Modbus TCP veoma jednostavno. Iako implementacija Modbus RTU TCP može izgledati kao najlakši način za rutiranje zahtjeva, ali u stvari Modbus TCP postoji nekoliko pozitivnih tačaka:

  • Nema potrebe za kalkulacijom 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. za upotrebu sa programibilnim logičkim kontrolerom (PLC) uređajima, sada se široko koristi za povezivanje mnogih vrsta industrijskih elektronskih uređaja povezanih na različite vrste mreža.

Najrasprostranjeniji protokol u industrijskoj automatizaciji (sa izuzetkom lokalnih preduzeća). Modbus je veoma popularan. Ovo je prilično jednostavan i lak za korištenje uređaj sa standardnom serijskom komunikacijom. U Modbus mreži, svaki uređaj gleda na mrežu kao na skup zavojnica (bitova) i registara. Majstor čita i upisuje ove zavojnice i registruje koristeći vrlo jednostavan i koncizan skup uputstava. Komunikacija se kreće samo u jednom smjeru.

Stvarna implementacija Modbus protokola je vrlo kratka. Iako postoji dvadeset osnovnih naredbi, samo nekoliko njih je stvarno implementirano. Najčešće komande su čitanje zavojnica, pisanje zavojnica, čitanje registra, postavljanje registara. Mali skup naredbi je još jedan razlog za popularnost protokola.

Modbus - napredni protokol

Konvertor protokola se široko 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 od bilo kojeg dobavljača hardvera.
  • Koristi jednostavnu strukturu poruke, čineći je manje složenom za implementaciju. Može potrajati samo nekoliko dana za implementaciju. Ovo je jasna konkurentska prednost u odnosu na druge protokole čije učenje i implementaciju mogu potrajati mjesecima.
  • Podržava serijske ili Ethernet veze.
  • Koristi se sa dva tipa serijskih veza: RS-232 i RS-485. Neke verzije Modbus tcp protokola se također mogu poslati preko Etherneta ili TCP/IP. Ove Modbus poruke su pakirane 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ćava da se koristi u mnogim različitim vrstama mreža. Ovo svojstvo nefizičkog sloja čini Modbus aplikacijskim protokolom.

Modbus komunikacioni protokol je uobičajen način prikupljanja podataka iz različitih izvora za operativni pregled, arhiviranje i rješavanje problema sa centralne, udaljene lokacije. Široko se koristi i prilično je jednostavna tehnologija. Ovisno o aplikaciji, noviji protokol može imati više prednosti.

Obično je računar konfigurisan da pokreće programe kao što su Wonderware, Intellution ili LabVIEW na jednom mestu za prikupljanje podataka iz različitih procesa u celoj fabrici. Druga aplikacija je dizajnirana za konfigurisanje daljinskih procesnih kontrolera (PLC, Allen-Bradley, Siemens, PLCDirect i drugi). Da odgovori na različite nivoe ili modove koji se prenose sa uređaja.

Dvije opcije protokola

Postoje dvije opcije protokola koje rade preko serijskih veza. Jedan od njih je Modbus RTU protokol. Opis ove opcije: kompaktniji je, koristi binarnu komunikaciju. U ovom formatu, prijenos podataka je uvijek praćen kontrolnim sumom ciklične redundancije, koji se koristi za otkrivanje problema u prijenosu.

Druga opcija je Modbus ASCII. Ova verzija je opširnija, koristeći heksadecimalno ASCII kodiranje podataka koje mogu čitati operatori. Modbus ASCII je manje siguran protokol. Budući da je manje efikasan od Modbus RTU-a, 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 preko serijskih linija između elektroničkih uređaja. Onaj koji traži informacije naziva se Master, a informacija o snabdijevanju uređaja naziva se Slaves. U standardnoj Modbus mreži postoji jedan Master i do 247 Slave-ova, svaki sa jedinstvenom slave adresom od 1 do 247. Master takođe može pisati informacije slave-ovima.

Za šta se koristi?

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šće sredstvo za povezivanje industrijskih elektroničkih uređaja. Široko ga koriste mnogi proizvođači u mnogim industrijama.

Modbus se obično koristi za prenos signala sa instrumenata i kontrolnih uređaja nazad do glavnog kontrolera ili sistema za prikupljanje podataka, kao što je sistem koji meri temperaturu i vlažnost i izveštava o rezultatima računaru. Modbus se često koristi za povezivanje kontrolnog računara sa udaljenom terminalnom jedinicom (RTU) u sistemima za nadzor i prikupljanje 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 podešavanje bi bilo jedan serijski kabl koji povezuje serijske portove 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 baudova (bitova u sekundi).

Master/Slave protokol

Kada se opisuje Modbus RTU protokol, komunikacija se odvija između centralizirane master opreme, 247 povezanih elektroničkih uređaja u jednu mrežu. Dizajn se obično naziva master/slave protokol jer Master sistem traži informacije od povezanih uređaja, koji se nazivaju "slave". Podređeni samo šalju informacije masteru kao odgovor na ove zahtjeve; oni ne rade autonomno. Glavni također može pisati informacije na podređene uređaje, ali slave uređaji ne mogu pisati informacije na glavni uređaj.

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

Komunikacije i uređaji

Svakom uređaju dizajniranom za komunikaciju koristeći Modbus dodjeljuje se jedinstvena adresa. Na serijskim mrežama, samo čvor određen kao glavni može pokrenuti naredbu. U Ethernetu, svaki uređaj može poslati Modbus naredbu, iako to obično radi samo jedan master. Komanda sadrži adresu uređaja za koji je namijenjena (od 1 do 247). Sve naredbe uključuju informacije o kontrolnoj sumi kako bi se omogućilo primaocu da otkrije greške u prijenosu. Osnovne Modbus komande govore RTU-u da promijeni vrijednost u jednom od svojih registara, kontroliše ili čita I/O port i naređuje uređaju da pošalje nazad jednu ili više vrijednosti sadržanih u njegovim registrima.

Postoji mnogo modema i gatewaya koji podržavaju Modbus jer je to vrlo jednostavan protokol i često se kopira. Neki od njih su posebno dizajnirani za njega. Različite implementacije koriste žičane, bežične komunikacije kao što je ISM opseg, pa čak i Short Message Service (SMS), kao i General Packet Radio Service (GPRS). Tipični problemi sa kojima se dizajneri moraju suočiti uključuju probleme sa velikim kašnjenjem i vremenom.

Pregled tipova Modbus registara

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

Zavojnica (diskretni izlaz); . diskretni ulaz; . ulazni registar; . drži registraciju.

Kodovi funkcija

  • Uobičajeni kodovi funkcija su od 1 do 127, sa izuzetkom prilagođenih kodova koje je verificirala Modbus zajednica, javno su dokumentirani i garantirano su jedinstveni.
  • Kodovi korisničkih funkcija - nalaze se u dva raspona od 65 do 72, od 100 do 110.
  • Rezervisani kodovi funkcija - koriste neke kompanije za stare proizvode, nisu dostupni za opštu upotrebu.

Prednosti

Neke prednosti korištenja Modbus protokola:

  • Ako je drajver već instaliran i korisnik je upoznat sa Ethernet i TCP/IP utičnicama, drajver može biti pokrenut i komunicirati sa računarom za nekoliko sati. Troškovi razvoja smatraju se niskim. Potrebna minimalna oprema. Drajver je kompatibilan sa bilo kojim operativnim sistemom.
  • Nema potrebe za "egzotičnim" skupovima čipova, tako da sistem može koristiti standardne PC Ethernet kartice za komunikaciju sa novo implementiranim uređajem. Kako cijena Etherneta pada, troškovi hardvera se smanjuju. Korisnici nisu vezani za jednog provajdera usluga radi podrške, ali mogu iskoristiti trenutna dešavanja.
  • Specifikacija je besplatna za preuzimanje i za korištenje Modbus protokola nisu potrebne dodatne licencne naknade.
  • Interoperabilnost između uređaja različitih proizvođača i kompatibilnost sa instaliranom bazom kompatibilnih uređaja.

Modbus pretvarači protokola su skupi. Cijena industrijskih gatewaya je 1000 dolara.

Ograničenja

Budući da je Modbus razvijen kasnih 1970-ih za komunikaciju sa tipovima podataka ograničenim na one koje su u to vrijeme razumjeli PLC-ovi. Blobs nisu podržani.

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

Budući da je Modbus protokol master/slave, ne postoji način da uređaj „prijavi izuzetak“ (osim Ethernet TCP/IP, koji se zove open-mbus). Glavni čvor mora redovno primati podatke od svojih podređenih uređaja i također tražiti promjene u podacima. Ovo troši propusni opseg, povećavajući vrijeme mrežnog povezivanja u aplikacijama gdje propusni opseg može biti skup, 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 povezati na glavnu stanicu (Ethernet TCP/IP je izuzetak). Prijenos mora biti kontinuiran, što ograničava tipove udaljenih komunikacionih uređaja na one koji mogu baferovati podatke kako bi se izbjegle praznine u prijenosu. Sam Modbus protokol ne pruža zaštitu od neovlaštenih komandi ili presretanja podataka. Važno je shvatiti da u procesu prenošenja informacija nastaju logičke greške, kao i one povezane s distorzijama tokom razmjene.

U lekciji 48, pokazao sam primjer nestandardnog protokola za razmjenu podataka preko UART sučelja. Kao i uvijek, sve što je nestandardno omogućava vam da optimizirate izvršavanje zadatka, a sve što je univerzalno pojednostavljuje razvoj zadatka.

Postoji jednostavan, univerzalni ModBus komunikacijski protokol u kojem je redundantnost podataka i funkcija svedena na minimum. Ovo je vjerovatno najčešći protokol za organiziranje malih distribuiranih sistema. U narednim lekcijama implementiraću razmjenu podataka između uređaja koristeći ovaj protokol.

Opšti opis protokola.

ModBus je otvoreni protokol za razmjenu podataka u malim lokalnim mrežama. Po pravilu se koristi za prenos podataka preko RS-232, RS-485, RS-422 interfejsa, 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čunarskim sistemima. Gotovo svi moderni kontroleri podržavaju ModBus mreže.

U ModBus mreži, kontroleri se obično povezuju koristeći topologiju “Common Bus”. Interakcija kontrolera se odvija u skladu sa master-slave modelom (master-slave).

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

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

Glavni uređaj može adresirati zahtjev na bilo koji podređeni kontroler ili istovremeno pokrenuti emitiranu poruku svim slave uređajima.

Slave uređaj, nakon što je odredio svoju adresu u zahtjevu, generiše odgovor.

Zahtjev od glavnog uređaja mora sadržavati kod funkcije, tj. šta da radim. 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 preko mreže je broj protokola.
  • ModBus TCP je protokol za prijenos podataka u TCP/IP mrežama.

Uporedio sam numeričke i tekstualne protokole još u . U pogledu performansi i brzine razmene, numerički protokoli svakako imaju prednost. U narednim lekcijama koristićemo ModBus RTU. Sljedeće informacije u ovoj lekciji posvećene su ovoj opciji.

ModBus RTU protokol.

Uređaji (kontroleri) su povezani na mrežu koristeći topologiju “Common Bus”. ModBus standard omogućava da do 247 kontrolera rade zajedno.

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

ModBus standard definira 4 tipa podataka.

Tip podataka Veličina Valid Operations
Registar zastave (kalemovi) 1 bit Pišite i čitajte
Diskretni ulazi 1 bit Čitanje
Holding Registrs 16 bit Pišite i čitajte
Ulazni registri 16 bit Čitanje

Ovo funkcionalno razdvajanje podataka je izbrisano i praktično se ne koristi. Svi podaci se u konačnici čitaju iz memorije kontrolera i nije toliko važno gdje su u njih došli sa ulaza ili iz ulaznih registara.

U praksi se koriste samo ovi Holding Registri. Podacima se pristupa preko 16-bitne adrese. na kraju:

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

Glavni uređaj pokreće transakciju - razmjenu podataka. Transakcija može biti individualna (zahtjev-odgovor) ili emitirana (svi slave uređaji se adresiraju istovremeno). Transakcija se sastoji od jednog okvira zahtjeva i jednog okvira odgovora. U broadcast transakciji se koristi samo okvir zahtjeva.

Podaci okvira se prenose kao kontinuirani tok. Pauza između prenosa podataka ne bi trebalo da prelazi vreme prenosa od 1,5 karaktera. Znak novog okvira je odsustvo razmene u mreži (tišina) tokom vremena potrebnog za prenos od 3,5 karaktera. Ako je za to vrijeme mrežna linija bila u neaktivnom stanju, tada podređeni 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 slave uređaja kojem je namijenjena poruka od mastera. 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 se koristi u načinu emitiranja. Svi slave obavljaju funkciju navedenu u zahtjevu, ali ne šalju potvrdu.

Funkcija (8 bita).

Polje funkcije govori adresiranom slave-u koju operaciju da izvede.

Najznačajniji bit funkcijskog bajta je postavljen na 1 u odgovoru slave-a kako bi se informirao master da je operacija dovršena greškom. Ako je operacija uspješna, najznačajniji bit je 0.

  • Standardne komande. Kodovi definisani standardom ModBus protokola.
  • Prilagođene komande. Kodovima 65...72 i 100...110 korisnik može dodijeliti proizvoljnu funkciju.
  • Rezervisani timovi. Riječ je o kodovima koji nisu originalno 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, normalan odgovor ponavlja zahtjev u cijelosti ili djelomično.

Podaci (N * 8 bita).

Polje podataka sadrži informacije potrebne da podređeni kontroler izvrši zadanu funkciju, ili polje sadrži podatke koje šalje slave uređaj na zahtjev mastera. Dužina i format polja podataka zavise od koda funkcije. Nekim porukama možda nedostaju podaci.

Svaki podatak ima 16 bita (2 bajta). Podaci se prvo prenose najznačajniji bajt. Na primjer, sekvencijalni prijenos registara sa adresama 0 i 1 trebao bi se dogoditi na sljedeći način:

  • visoki bajt registra 0 ->
  • niži bajt registra 0 ->
  • visoki bajt registra 1 ->
  • niži bajt registra 1 ->.

Prilikom prijenosa broja od 4 bajta, na primjer, s pomičnim zarezom, sekvenca je ista. Broj je podijeljen na dva 16-bitna registra i u svakom od njih se prvi prenosi najznačajniji bajt (1-> 0-> 3-> 2->).

Kontrolni zbir (16 bita).

Polje kontrole integriteta podataka poruke. Omogućava vam da provjerite okvire za greške. Riječ je o greškama koje se pojavljuju prilikom prijenosa podataka.

Pokušat ću dati opći pregled kontrolnog koda. Bolje je preskočiti ovaj pasus. Možda vam glava pukne. Kad se dotaknem ove teme, uvijek me zaboli glava. U sljedećem tutorijalu predstavit ću praktičnu implementaciju izračunavanja ModBus kontrolnog koda.

Ciklični redundantni kod (CRC) se koristi kao kontrolni zbroj. Svi bitovi okvira za prijenos 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 akcije pri izračunavanju CRC aritmetičke operacije bez prijenosa. Oduzimanje i sabiranje se odvijaju po bitovima, bez uzimanja u obzir prijenosa, zbog čega ove operacije daju isti rezultat i mogu se zamijeniti operacijom „isključivo ili“. Prilikom dijeljenja, 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 proračuni izvode korištenjem efikasnijih algoritama.

Kontrolni zbir završava okvir prijenosa. Nakon što je primio okvir, slave uređaj, koristeći isti algoritam, izračunava kontrolni zbroj za primljene podatke i upoređuje ga sa poslanim kontrolnim kodom na kraju okvira. Kao rezultat, potvrđuje se integritet podataka okvira.

ModBus RTU standard koristi standardni CRC-16 ciklički kod sa 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. Ovaj broj se množi sa X 16 (pomaknut ulijevo za 16 mjesta) i dijeli sa X 16 +X 15 +X 2 +1 (1 1000 0000 0000 0101). 16-bitni ostatak (pre-inicijaliziran sa svim jedinicama) je kontrolni kod poruke.

Rukovanje logičkim greškama.

Pored grešaka povezanih s oštećenjem podataka tokom prijenosa, može doći do logičkih grešaka kada se zahtjev primi bez grešaka, ali se ne može izvršiti. Obično su takve greške povezane s nevažećim adresama, podacima, kodovima itd. Većina ModBus kontrolera podržava sljedeće tipove grešaka.

Kôd greške Ime Opis
01 ILEGAL FUNCTION Kôd funkcije nije podržan u kontroleru
02 NEZAKONITA ADRESA PODATAKA Nevažeća adresa podataka
03 NEZAKONITA VRIJEDNOST PODATAKA Nevažeće vrijednosti podataka
04 KVAR SLAVE UREĐAJA Došlo je do greške prilikom izvođenja operacije

Ako dođe do greške u odgovoru, najvažniji bit se postavlja u polje koda funkcije i tada se šalje kod greške umjesto uobičajenih podataka.

Detaljno ispitivanje funkcija.

Funkcija 03 – čitanje registara zadržavanja.

Koristi se za čitanje vrijednosti višestrukih registara zadržavanja. Zahtjev prenosi adresu prvog elementa tablice registara, čija vrijednost se mora pročitati i broj registara koji se čita. 16-bitni brojevi se koriste za adresu i količinu. Najznačajniji bajt se prvi prenosi.

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 memorijskih registara.

Broj bajta Broj bajta u parametru Parametar
0 0 Adresa kontrolora 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 Čekovni zbroj 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 sa adresama 8 i 9
0 0 Adresa kontrolora 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 Čekovni zbroj A770 A7
8 0 70

Funkcija 06 – upisivanje u jedan registar zadržavanja.

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

Format zahtjeva funkcije pisanja registra za jedno zadržavanje.

Broj bajta Broj bajta u parametru Parametar
0 0 Adresa kontrolora 01 01
1 0 Funkcija 06 06
2 1 Adresa registracije 0009 00
3 0 09
4 1 Vrijednost registra 12A5 12
5 0 A5
6 1 Čekovni zbroj 9513 95
7 0 13

Odgovori (ponavlja zahtjev).

Broj bajta Broj bajta u parametru Parametar Primjer pisanja vrijednosti 12A5 u registar 9
0 0 Adresa kontrolora 01 01
1 0 Funkcija 06 06
2 1 Adresa registracije 0009 00
3 0 09
4 1 Vrijednost registra 12A5 12
5 0 A5
6 1 Čekovni zbroj 9513 95
7 0 13

Funkcija 16 – upisivanje vrijednosti u memorijske registre.

Koristi se za pisanje u nekoliko registara koji se nalaze uzastopno u tabeli.

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 pisanja registra memorije.

Broj bajta Broj bajta u parametru Parametar
0 0 Adresa kontrolora 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 Čekovni zbroj 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 sa adresama 8 i 9
0 0 Adresa kontrolora 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 Čekovni zbroj C00A C0
7 0 0A

ModBus i specijalizovani protokoli.

Sada možete uporediti ModBus protokol sa specijalizovanim protokolom iz .

Broj bajta Format broja Svrha
0 … 3 float Temperatura
4 … 7 float voltaža
8 bajt Stanje dugmeta
9 bajt Rezerva
10, 11 int Kontrolna suma (zbir bajtova 0 ... 9 ^ 0xa1e3)

U poređenju sa namenskim protokolom:

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

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

  • Zbog složenije kontrolne sume i redundantnih informacija, mrežne greške se pouzdanije određuju i pouzdanost podataka je veća.
  • Mreža se lako širi. Vrlo je lako dodati nove uređaje.
  • ModBus je standardni protokol. Mnogi kontroleri različitih proizvođača to podržavaju.

Možda je glavni razlog za korišćenje nestandardnih protokola nedovoljni računarski resursi sistema.

Istina, postoji još jedan razlog za korištenje nestandardnog protokola. Uključujući i zahvaljujući čemu je naša kompanija dobila veliki tender. Nitko drugi osim programera neće se moći povezati s uređajima sa specijaliziranim protokolom i kontrolirati ih. One. kvaliteta 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 ovu temu