Implementácia protokolu MODBUS/uBUS

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání


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.

ISO/OSI model pre sériový MODBUS
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-rs485.png
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-unicats.png
MODBUS - Unicast mode
Modbus-broadcast.png
MODBUS - Broadcast mode

Adresný priestor zahŕňa 256 rôznych adries

Adresný priestor
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.

Modbus-master.png
Stavový diagram pre MODBUS Master
Modbus-slave.png
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.

Základný tvar MODBUS správy na sériovej linke

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

RTU rámec správy

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.

ASCII rámec správy

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).

ISO/OSI model pre MODBUS TCP/IP
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
MODBUS správa na TCP/IP

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.

Príklad požiadavky MODBUS TCP/IP
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


Príklad kladnej odpovede MODBUS TCP/IP
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


Príklad zápornej odpovede MODBUS TCP/IP
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.


Spôsob naviazania spojenia pri MODBUS TCP/IP

Odkazy a literatúra

http://support.dce.felk.cvut.cz/mediawiki/images/3/38/Dp_2009_safranek_milan.pdf

http://home.zcu.cz/~ronesova/bastl/files/modbus.pdf