MODBUS je komunikační protokol na úrovni aplikační vrstvy ISO/OSI modelu, umožňující komunikaci typu klient-server mezi zařízeními na různých typech sítí a sběrnic. Vytvořen v roce 1979 firmou MODICON.

V současné době je podporována celá řada komunikačních médií např. sériové linky typu RS-232, RS-422 a RS-485, optické a rádiové sítě nebo síť Ethernet s využitím protokolu TCP/IP. Komunikace probíhá metodou požadavek-odpověď a požadovaná funkce je specifikována pomocí kódu funkce jež je součástí požadavku.

1. Obecný popis

1.1 Popis protokoluProtokol 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).


Základní tvar MODBUS zprávy

Kód funkce udává serveru jaký druh operace 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é klientem slouží serveru k uskutečnění operace určené kódem funkce. Obsahem může být například adresa a počet vstupů, které má server přečíst nebo hodnota registrů, které má server 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.

Pokud při provádění požadované operace nedojde k chybě (Obr. 2.2), odpoví server zprávou, která v poli Kód funkce obsahuje kód provedené (požadované) funkce jako indikaci úspěšného vykonání požadavku. V datové části odpovědi předá server klientovi požadovaná data (pokud jsou nějaká).


MODBUS transakce s bezchybným provedením požadavku

Pokud při vykonávání požadované operace dojde k chybě (Obr. 2.3), je v poli Kód funkce vrácen kód požadované funkce s nastaveným nejvyšším bitem indikujícím neúspěch (exception response). V datové části je vrácen chybový kód (exception code) upřesňující důvod neúspěchu. Při provádění požadavku došlo k chybě, odeslána negativní odpověď


MODBUS transakce s chybou při provádění požadavku

Pozn.: Z důvodu možné ztráty požadavku nebo odpovědi, je žádoucí implementovat na straně klienta časový limit pro přijetí odpovědi, aby klient nečekal donekonečna na odpověď, která nemusí přijít.

Maximální velikost PDU je zděděna z první implementace MODBUSu na sériové lince RS-485, kde byla maximální velikost ADU 256B. Tomu odpovídá maximální velikost PDU 253B.

Max. velikost PDU na sériové lince = 256 – adresa serveru (1B) – kontrolní součet CRC (2B) = 253B

Odtud:
  • Velikost ADU na RS-485 = 253B PDU + adresa(1B) + CRC (2B) = 256B
  • Velikost ADU na TCP/IP = 253B PDU + MBAP = 260B


Protokol MODBUS definuje 3 základní typy zpráv (PDU):
  • Požadavek (Request PDU)
    • 1B Kód funkce
    • nB Datová proměnných…

  • Odpověď (Response PDU)
    • 1B Kód funkce (kopie z požadavku)
    • m B Datová část odpovědi – přečtené vstupy, stav zařízení

  • Záporná odpověď (Exception Response PDU)
    • 1B Kód funkce + 80h (indikace neúspěchu)
    • 1B Chybový kód (identifikace chyby)


2.2 Kódování dat
MODBUS používá tzv. „Big-endian“ reprezentaci dat. To znamená, že při posílání datových položek delších než 1 byte je jako první posílán nejvyšší byte a jako poslední nejnižší byte.
Např.: 16-bitová položka s hodnotou 1234h - nejprve je poslán byte 12h, poté byte 34h

2.3 Datový model
Datový model MODBUSu je založen na sadě tabulek, s charakteristickým významem. Definovány jsou čtyři základní tabulky:
TabulkaTyp položkyPřístupPopisAdresa (ODICON)
Diskrétní vstupy(Discrete Inputs)1-bitPouze čteníData poskytovaná I/O systémem10000÷19999
Cívky(Coils)1-bitČtení/zápisData modifikovatelná aplikačním programem0÷9999
Vstupní registry(Input Registers)16-bitové slovoPouze čteníData poskytovaná I/O systémem30000÷39999
Uchovávací registry(Holding Registers)16-bitové slovoČtení/zápisData modifikovatelná aplikačním programem40000÷49999

Mapování tabulek do adresního prostoru je závislé na konkrétním zařízení. Každá z tabulek může mít vlastní adresní prostor nebo se mohou částečně či úplně překrývat. Každá z tabulek může mít dle protokolu až 65536 položek. Z důvodu zpětné kompatibility bývá ale adresní prostor rozdělen na bloky o velikosti 10000 položek tak jak je uvedeno ve sloupci Adresa tabulky 2.1. Přístupná je každá položka jednotlivě nebo lze přistupovat ke skupině položek najednou. Velikost skupiny položek je omezena maximální velikostí datové části zprávy.
Na obrázcích jsou znázorněny dva možné způsoby organizace dat v zařízení. Obrázek 2.4 znázorňuje zařízení, u nějž není žádný vztah mezi položkami jednotlivých tabulek a každá tabulky má tedy svůj oddělený prostor v aplikační paměti zařízení. Do jednotlivých tabulek lze přistupovat prostřednictvím příslušné funkce MODBUSu.


Datový model MODBUS se čtyřmi oddělenými bloky


Další obrázek znázorňuje zařízení, které má pouze jeden datový blok. K položkám lze přistupovat prostřednictvím různých funkcí MODBUSu v závislosti na tom, co je pro aplikaci v daném okamžiku výhodné.


Datový model MODBUS s jediným blokem


2.4 Adresovací model
Protokol MODBUS přesně definuje adresovací pravidla ve zprávách (PDU):
V MODBUS zprávách (PDU) jsou datové položky adresovány od 0 do 65535Dále je definováno adresování v rámci datového modelu složeného ze 4 datových bloků (tabulek):

V MODBUS datovém modelu jsou položky v datových blocích číslovány od 1 do n
Mapování položek MODBUS datového modelu do aplikace v serveru je zcela v režii výrobce.
Na obrázku je znázorněn příklad adresování od požadavku klienta až po aplikaci v serveru. Z obrázku je zřejmé, že datová položka X v datovém modelu je v PDU adresována jako položka X-1.

2.5 Definice MODBUS transakce
Stavový diagram na obrázku 2.7 popisuje obecný postup zpracování MODBUS požadavku na straně serveru.


Příklad adresování dle MODBUS standardu


Jakmile server zpracuje požadavek (ať úspěšně či neúspěšně), sestaví odpověď a odešle ji klientovi. V závislosti na výsledku zpracování požadavku je vytvořena jedna ze dvou možných odpovědí:
  • Pozitivní odpověď (Response):
    • kód funkce v odpovědi = kód funkce v požadavku

  • Negativní odpověď (Exception Response) (blíže viz. odstavec 5):
    • kód funkce v odpovědi = kód funkce v požadavku + 80h
    • je vrácen kód chyby udávající důvod neúspěchu


3. Kategorie kódů funkcí
MODBUS protokol definuje tři skupiny kódů funkcí:
  • Veřejné kódy funkcí
    • jasně definované
    • je garantována unikátnost
    • schvalovány společností MODBUS-IDA.org
    • veřejně zdokumentované
    • je k nim dostupný test shody
    • zahrnují veřejné přiřazené kódy funkcí i nepřiřazené kódy rezervované pro budoucí použití

  • Uživatelsky definované kódy funkcí
    • dva rozsahy uživatelsky definovaných kódů funkcí: 65 ÷ 72 a 100 ÷ 110
    • umožňují uživateli implementovat funkci, která není definována touto specifikací
    • není garantována unikátnost kódů
    • lze je po projednání přesunout do veřejných kódů

  • Rezervované kódy funkcí
    • kódy funkcí, které jsou v současnosti používány některými firmami a které nejsou dostupné pro veřejné použití



Obecný postup zpracování MODBUS požadavku na straně serveru


3.1 Definice funkčních kódů
Kódy funkcí
KódPodfunkcehex
Přístup k datůmBitový přístupFyzické diskrétní vstupyČti diskrétní vstupy0202
Interní bity nebo fyzické cívkyČti cívky0101
Zapiš jednu cívku0505
Zapiš více cívek150F
16-bitový přístupFyzické vstupní registryČti vstupní registr0404
Interní registrynebo fyzické výstupní registryČti uchovávací registry0303
Zapiš jeden registr0606
Zapiš více registrů1610
Čti/zapiš více registrů2317
Zapiš registr s maskováním2216
Čti FIFO frontu2418
Přístup k záznamům v souborechČti záznam ze souboru20614
Zapiš záznam do souboru21615
DiagnostikaČti stav0707
Diagnostika0800-18, 2008
Čti čítač kom. událostí110B
Čti záznam kom. událostí120C
Sděl identifikaci1711
Čti identifikaci zařízení43142B
Zapouzdřený přenos4313, 142B
OstatníCANOpen základní odkaz43132B

Ing. Andrea Ronešová