Modbus je otevřený protokol pro vzájemnou komunikaci různých zařízení (PLC, dotykové displeje, I/O rozhraní apod.), který umožňuje přenášet data po různých sítích a sběrnicích. Komunikace funguje na principu předávání datových zpráv mezi klientem a serverem (master a slave).

Popis protokolu

editovat

Na sběrnici je jedno „master“ zařízení (v případě verze Modbus TCP jich může být více) posílající dotazy, ostatní zařízení jsou „slave“. „Slave“ zařízení odpovídá na dotazy, které jsou mu adresovány. V pozici mastera je tedy řídící prvek (např. PLC nebo průmyslové PC), v roli slave zařízení jsou ovládané nebo sledované prvky (např. čidla, měřící přístroje, PLC, prvky výrobních linek atp.).

Struktura rámce

editovat

Protokol Modbus definuje strukturu zprávy na úrovni protokolu (PDU – Protocol Data Unit) nezávisle na typu komunikační vrstvy. V závislosti na typu sítě, na které je protokol použit, je PDU rozšířena o další části a tvoří tak zprávu na aplikační úrovni (ADU – Application Data Unit).

Kód funkce udává, jaký druh operace slave (též server – podřízený) má provést. Rozsah kódů je 1 až 255, přičemž kódy 128 až 255 jsou vyhrazeny pro oznámení záporné odpovědi (chyby). Některé kódy funkcí obsahují i kód podfunkce upřesňující blíže požadovanou operaci. Obsah datové části zprávy poslané masterem slouží klientovi k uskutečnění operace určené kódem funkce. Obsahem může být například adresa a počet vstupů, které má klient přečíst nebo hodnota registrů, které má klient zapsat. U některých funkcí nejsou pro provedení operace zapotřebí další data a v tom případě může datová část ve zprávě úplně chybět. Zabezpečení je CRC pro RTU Mode a LRC (kontrolní součet) pro ASCII Mode.

Přenosová media, verze protokolu

editovat

Modbus po sériové lince

editovat

Modbus preferuje sériovou komunikační sběrnici standardu RS485, preferovaný režim sériové linky je 19200 baudů, 8 datových bitů a sudá parita.

Protokol Modbus definuje dva sériové vysílací režimy, Modbus RTU a Modbus ASCII. Režim určuje, v jakém formátu jsou data vysílána. Každá jednotka musí podporovat režim RTU, režim ASCII je nepovinný. Všechny jednotky na jedné sběrnici musejí pracovat ve stejném vysílacím režimu.

  • MODBUS RTU – V režimu RTU se 8bitový byte vysílá jako jeden znak, integrita zpráv je zajištěna pomocí kontrolního součtu typu CRC a pomocí paritního bitu. Vysílání zprávy musí být souvislé, mezery mezi znaky nesmějí být delší než 1,5 znaku. Začátek a konec zprávy je identifikován podle pomlky na sběrnici delší než 3,5 znaku. Časování a definice protokolu zajišťuje rychlou komunikaci a spolehlivou komunikaci po sběrnici RS485, aniž by byly kladeny přehnané nároky na připojená zařízení. Díky svým dobrým vlastnostem a otevřenosti patří MODBUS RTU k nejrozšířenějším komunikačním standardům pro průmyslovou automatizaci.
  • MODBUS ASCII – V režimu ASCII je každý 8bitový byte posílán jako dvojice ASCII znaků. Oproti režimu RTU je tedy pomalejší, ale umožňuje vysílat znaky s mezerami až 1 s. Začátek a konec zprávy je totiž určen odlišně od RTU módu. Začátek zprávy je indikován znakem „:“ a konec zprávy dvojicí řídicích znaků CR, LF. Tato verze protokolu je tak „lidsky čitelnější“, ale proti RTU verzi je málo využívaná.

Adresace

editovat
  • adresa 0 – broadcast – zpráva je určena všem zařízením, ale žádné na ní neodpovídá
  • adresy 1 až 247 – unicast – po přijetí a zpracování požadavku vyšle slave odpověď
  • adresy 248 až 255 jsou v rezervě

Typ přenášených dat

editovat
Označení Význam
Discrete Input Jeden bit určený pouze ke čtení. Např. binární vstup.
Coil Jeden bit, který lze číst i zapisovat. Např. cívka relé, lze ji ovládat i zjišťovat její stav.
Input Register 16bitový registr určený pouze ke čtení. Např. analogový vstup.
Holding Register 16bitový registr, který lze číst i zapisovat. Např. čítač, lze jej nastavit i číst jeho hodnotu.

Kódy základních funkcí

editovat
Kód Název funkce Popis
01 Read Coils Čtení jednoho nebo více bitů
02 Read Discrete Inputs Čtení jednoho nebo více bitů
03 Read Holding Registers Čtení jednoho nebo více 16bitových registrů
04 Read Input Registers Čtení jednoho nebo více 16bitových registrů
05 Write Single Coil Zápis jednoho bitu
06 Write Single Register Zápis jednoho 16bitového registru
15 Write Multiple Coils Zápis více bitů
16 Write Multiple Registers Zápis více 16bitových registrů

V praxi někdy splývají pojmy Coils a Discrete Inputs (respektive Holding Registers a Input Registers), záleží pouze na výrobci zařízení, jak interpretuje tyto pojmy, respektive jak namapuje modbusové adresy registrů na své vlastní adresy (registrů/vstupů/výstupů…). V některých případech lze v případě čtení zaměnit funkce 01 a 02 (respektive 03 a 04).

Externí odkazy

editovat