Implementácia protokolu MODBUS/uBUS: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
Riadok 133: Riadok 133:
  
  
==Použitá literatúra==
+
== Odkazy a literatúra ==
 +
<references/>
  
 
[http://support.dce.felk.cvut.cz/mediawiki/images/3/38/Dp_2009_safranek_milan.pdf http://support.dce.felk.cvut.cz/mediawiki/images/3/38/Dp_2009_safranek_milan.pdf]
 
[http://support.dce.felk.cvut.cz/mediawiki/images/3/38/Dp_2009_safranek_milan.pdf http://support.dce.felk.cvut.cz/mediawiki/images/3/38/Dp_2009_safranek_milan.pdf]
  
 
[http://home.zcu.cz/~ronesova/bastl/files/modbus.pdf http://home.zcu.cz/~ronesova/bastl/files/modbus.pdf]
 
[http://home.zcu.cz/~ronesova/bastl/files/modbus.pdf http://home.zcu.cz/~ronesova/bastl/files/modbus.pdf]

Verzia zo dňa a času 21:56, 1. jún 2010


Imbox draft.png
Toto je projekt, na ktorom sa ešte stále pracuje!!

Aj keď sú v tomto dokumente použiteľné informácie, ešte nie je dokončený. Svoje návrhy môžete vyjadriť v diskusii o tejto stránke.

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.

Súbor:01 ISO OSI model pre sériový MODBUS.jpg
ISO/OSI model pre sériový MODBUS
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


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

Súbor:06 ISO OSI model pre MODBUS TCP IP.jpg
ISO/OSI model pre MODBUS TCP/IP


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.

Súbor:08 Príklad požiadavky MODBUS TCP IP.jpg
Príklad požiadavky MODBUS TCP/IP


Súbor:09 Príklad kladnej odpovede MODBUS TCP IP.jpg
Príklad kladnej odpovede MODBUS TCP/IP


Súbor:10 Príklad zápornej odpovede MODBUS TCP IP.jpg
Príklad zápornej odpovede MODBUS TCP/IP


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