Implementácia protokolu MODBUS/uBUS
Predmet |
|
---|---|
Konfigurovateľné mikroprocesorové systémy | |
Tématická časť: | |
Sériová asynchrónna komunikácia - UART |
MODBUS[1] je otvorený protokol pre vzájomnú komunikáciu rôznych zariadení, ktorý umožňuje prenášať dáta po rôznych sieťach a zberniciach. Komunikácia funguje na princípre predávania dátových správ medzi klientom a serverom (master a slave). V súčasnosti protokol MODBUS podporuje celý rad prenosových médií, RS-232, RS-422, RS-485, optické vlákno, rádiový prenos a ethernet.
Existujú tri základné implementácie protokolu MODBUS. Štandardný MODBUS pre asynchrónny sériový prenos, novší ethernetový MODBUS TCP/IP a vysokorýchlostný MODBUS+. Protokol MODBUS tiež definuje dva vysielacie režimy pre sériovú linku – MODBUS RTU a MODBUS ASCII. Režim určuje formát prenášaných dát. Každé zariadenie musí podporovať režim RTU, ale režim ASCII je nepovinný. Podmienkou je, aby všetky zariadenia na jednej zbernici pracovali v rovnakom režime.
MODBUS na sériovej linke
MODBUS Serial Line protokol je protokol typu Master-Slave a je definovaný na úrovni 2 ISO/OSI modelu. Na fyzickej úrovni 0 ISO/OSI modelu môžu byť použité rôzne sériové rozhrania, napr. RS-232 alebo RS-485 a ich varianty.
Aplikačná vrstva | MODBUS aplikačný protokol (Klient - Server) |
Prezentačná vrstva | |
Relačná vrstva | |
Transportná vrstva | |
Sieťová vrstva | |
Linková vrstva | MODBUS sériový protokol (Master - Slave) |
Fyzická vrstva | RS-232, RS-485 |
![]() |
MODBUS - Zapojenie pre komunikáciu cez RS485 |
Jedná sa o Master/Slave protokol. V jednom okamihu môže byť na zbernici iba jeden Master a 1 až 247 Slave-ov. Komunikáciu vždy zahajuje Master, Slave nesmie vysielať dáta bez poverenia Master-a.
Master posiela požiadavky Slave-om v dvoch režimoch:
- Unicast režim – Master adresuje požiadavku jednej konkrétnej Slave jednotke a tá pošle odpoveď
- Broadcast režim – Master posiela požiadavku všetkým jednotkám, žiadna jednotka neodpovie
![]() |
MODBUS - Unicast mode |
![]() |
MODBUS - Broadcast mode |
Adresný priestor zahŕňa 256 rôznych adries
0 | 1 až 247 | 248 až 255 |
Broadcast adresa | Individuálna adresa Slave jednotky | rezervované |
Master nemá žiadnu špecifickú adresu, iba Slave jednotky musia mať adresu a tá musí byť v celej MODBUS sieti jedinečná.
Master vysiela požiadavku tak, že prvý byte obsahuje adresu Slave zariadenia, ktoré má odpovedať. Druhý byte hovorí, akú funkciu má Slave vykonať. Nasleduje dátová časť, kde je uložená počiatočná adresa v Slave zariadení, od ktorej chceme dáta čítať a počet prenášaných dát. Správa je zakončená kontrolným súčtom. Slave vysiela na žiadosť Master-a po zbernici správu, v ktorej prvý byte obsahuje adresu Slave zariadenia, druhý byte obsahuje kód vykonanej funkcie, nasleduje prenos dát a správa je opäť zakončená kontrolným súčtom.
![]() |
Stavový diagram pre MODBUS Master |
![]() |
Stavový diagram pre MODBUS Slave |
Na obrázku je znázornený základný formát MODBUS aplikačnej správy na sériovej linke. Správa okrem štandardnej MODBUS PDU (Protocol Data Unit) obsahuje pole „Adresa jednotky“. Toto pole obsahuje adresu Slave jednotky. Pole „Kontrolný súčet“ slúži k detekcii chýb a obsahuje CRC alebo LRC kód v závislosti na vysielacom režime.
MODBUS RTU
V režime RTU obsahuje každý 8-bitový byte správy dva 4-bytové hexadecimálne znaky. Vysielanie správy musí byť súvislé, medzery medzi znakmi nesmú byť dlhšie ako 1,5 znaku. Začiatok a koniec správy je identifikovaný podľa pomlčky na zbernici dlhšej ako 3,5 znaku. K detekcii chýb slúži 16-bitové CRC pole s generujúcim polynómom x16 + x15 + x2 + 1
Formát bytu (11 bitov):
1 štart bit
8 dátových bitov
1 bit parita
1 stop bit
Každá jednotka musí podporovať párnu paritu. Pokiaľ nie je použitá parita, je nahradená druhým stop bitom.
MODBUS ASCII
V režime ASCII je každý 8-bitový byte posielaný ako dvojica ASCII znakov. Oproti režimu RTU je teda pomalší, ale umožňuje vysielať znaky s medzerami až 1s. Začiatok a koniec správy je totiž určený odlišne od RTU módu. Začiatok správy je indikovaný znakom „:“ a koniec správy dvojicou riadiacich znakov RC, LF.
Formát bytu (10 bitov):
1 štart bit
7 dátových bitov
1 bit parita
1 stop bit
Každá jednotka musí podporovať párnu paritu. Pokiaľ nie je použitá parita, je nahradená druhým stop bitom.
MODBUS TCP/IP
MODBUS TCP/IP vychádza zo sériového MODBUS RTU. Bol navrhnutý pre modernejšie prenosové médium, ethernetovské siete. Má vyššiu komunikačnú rýchlosť. V ISO/OSI modele obsadí 6 vrstiev. Tvar správy v MODBUS TCP/IP je podobný základnému tvaru MODBUS správy pre sériovú linku, ale namiesto adresy obsahuje sedembytovú hlavičku (MBAP Header – MODBUS Application Protocol Header).
Aplikačná vrstva | Aplikačná vrstva MODBUS |
Prezentačná vrstva | |
Relačná vrstva | MODBUS na TCP |
Transportná vrstva | TCP |
Sieťová vrstva | IP |
Linková vrstva | Ethernet II / 802.3 |
Fyzická vrstva | Ethernet |
Hlavička obsahuje identifikátor transakcie (2 byty), identifikátor protokolu (2byty), veľkosť poľa (2 byty) a identifikátor jednotky (1 byte). Identifikátor transakcie je využívaný pre párovanie transakcií (identifikácia požiadavky a odpovede). MODBUS server túto hodnotu iba skopíruje z požiadavky do odpovede. Veľkosť poľa definuje dĺžku nasledujúcej správy (vrátane veľkosti identifikátora jednotky). Identifikátor protokolu a identifikátor jednotky sú využívaní v zložitejších sieťach, v ktorých sa komunikuje cez mosty, routery alebo brány. Identifikátor protokolu je pre MODBUS nastavený na hodnotu 0. Identifikátor jednotky definuje adresu jednotky v inej časti siete. Obidva predošlé identifikátory server tiež skopíruje z požiadavky do odpovede. Funkčné kódy aj chybové kódy sú pre MODBUS TCP/IP zhodné s kódmi sériového MODBUSU.
Popis | Veľkosť v bytoch | Hodnota | |
Hlavička MBAP | Identifikátor transakcie | 2 | 0x0115 |
Hlavička MBAP | Identifikátor protokolu | 2 | 0x0000 |
Hlavička MBAP | Veľkosť poľa | 2 | 0x0006 |
Hlavička MBAP | Identifikátor jednotky | 1 | 0xFF |
MODBUS požiadavka | Kód funkcie | 1 | 0x03 |
MODBUS požiadavka | Počiatočná adresa | 2 | 0x0002 |
MODBUS požiadavka | Počet registrov | 2 | 0x0003 |
Popis | Veľkosť v bytoch | Hodnota | |
Hlavička MBAP | Identifikátor transakcie | 2 | 0x0115 |
Hlavička MBAP | Identifikátor protokolu | 2 | 0x0000 |
Hlavička MBAP | Veľkosť poľa | 2 | 0x0008 |
Hlavička MBAP | Identifikátor jednotky | 1 | 0xFF |
MODBUS požiadavka | Kód funkcie | 1 | 0x03 |
MODBUS požiadavka | Dátový register 1 | 2 | 0x00B2 |
MODBUS požiadavka | Dátový register 2 | 2 | 0x0A03 |
MODBUS požiadavka | Dátový register 3 | 2 | 0x01C3 |
Popis | Veľkosť v bytoch | Hodnota | |
Hlavička MBAP | Identifikátor transakcie | 2 | 0x0115 |
Hlavička MBAP | Identifikátor protokolu | 2 | 0x0000 |
Hlavička MBAP | Veľkosť poľa | 2 | 0x0003 |
Hlavička MBAP | Identifikátor jednotky | 1 | 0xFF |
MODBUS odpoveď | Kód funkcie | 1 | 0x83 |
MODBUS odpoveď | Chybový kód | 1 | 0x02 |
Port 502 je pri TCP rezervovaný pre komunikáciu MODBUSu. Na tomto porte server počúva.
Odkazy a literatúra
http://support.dce.felk.cvut.cz/mediawiki/images/3/38/Dp_2009_safranek_milan.pdf