MODBUS je protokol pro přenášení zpráv pracující na aplikační hladině OSI modelu a poskytuje komunikaci na principu klient / server (master / slave) mezi zařízeními komunikujícími na různých typech sběrnic a sítích. Struktura standard byla vyvinuta firmou firmou Modicon v roce 1979 a postupně se z něho stal průmyslový standard. MODBUS je protokol typu žádost / odpověï ( request / reply ) a poskytuje přenos služeb specifikované tzv. kódem fukce (function code). Protože je MODBUS plně otevřená architektura, umožňuje komunikaci po mnoha různých typech architektur sítí.
V soušasné době jsou implementována MODBUS komunikace po sítích :
- TCP/IP Ethernet
- Asynchronní sériový přenos ( RS - 232C, RS - 422, RS - 485, vlákno, radiový přenos )
- MODBUS PLUS vysokorychlostní síť
Struktura a rozsah současné verze protokolu MODBUS
MODBUS na úrovni aplikační vrstvy OSI modelu poskytuje inicializaci a řízení pro velké množství průmyslových zařízení jako jsou například PLC/PAC (Programmable Logic Controler / Programmable Automation Controler), HMI (Human Machne Interface), Motion controlers, I/O zařízení atd. Při propojování různých typů sítí, po kterých MODBUS poskytuje komunikaci, je nutné použít brány (Gateway) na každém rozhranní dvou sítí (viz obrázek).
Příklad možné struktury sítě využívající MODBUS nad různými komunikačními rozhraními
MODBUS - Aplikační protokol
MODBUS protokol je definovaný jednoduchým PDU (Protocol Data Unit) na úrovni aplikační vrstvy OSI modelu a je tedy nezávislý na komunikaci spodních vrstev OSI modelu. Mapování MODBUS protokolu na specifickou sběrnici nebo síť pak může přidat další data do tzv. ADU (Application Data Unit). Zatímco PDU je stejný pro komunkaci na všech typech sítí, ADU již se může lišit v závislosti na typu sítě.
MODBUS rámec
MODBUS ADU je sestavena klientem, který iniciuje datovou komunikaci. Kód funkce ( Function code) určuje serveru druh akce, kterou má s daty vykonat. V některých případech (pro některé funkce) nemusí být předávna žádná data. Kód funkce má délku 1 bajtu, tedy rozsah kódu 1..255. Existují i Subfukční kódy, které se přidávají k funkčním kódům pro určení více násobných akcí. Délka celého ADU je limitována maximální délkou dat pro přenos na fyzické síti. Například 256 bajtů pro komunikaci přes RS-485 nebo 260 bajtů pro TCP MODBUS ADU při komunikaci po síti Ethernet.
Komunikace probíhá na základě žádosti (request) od Klienta na Server, při které se v PDU přenáší již zmíněný kód funkce a potřebná data. Jestliže v průběhu komunikace nenastala chyba, tak Server po provedené akci vyšle odpověï (response)zpět Klientu, která obsahuje původní kód funkce a data výsledku akce.
Příklad bezchybné transakce
Pokud nastala chyba na úrovni Serveru, tak je odpověï obsahuje místo kódu funkce tzv. kód vyjímky (Exception code) pro identifikaci chyby.
Obecně MODBUS protokol definuje tři typy PDU :
- MODBUS Request PDU - mb_req_pdu - definuje funkční kód i data v žádosti o akci
- MODBUS Response PDU - mb_rsp_pdu - definuje funkční kód akce a výsledná data v odpovědi
- MODBUS Exception Response PDU - mb_excep_rsp_pdu - definuje kód vyjímky a data vyjímky v odpovědi o chybě
- 16 - bits: 0x1234 se rozdělí na: 0x12 a 0x34
- 32 - bits: 0x12345678 se rozdělí na: 0x12, 0x34, 0x56, 0x78
- každý element v oblasti datového modelu je číslován od 1 do n
- každý PDU může adresovat až 65535 elementů
- mapování mezi MODBUS datovým modelem a zařízením je plně v kompetenci zařízení
- Veřejné kódy funkcí (Public Function Codes) - kódy definované standardem a organizacemi
- Uživatelsky definované kódy funkcí (User-defined Function Codes) - ty může zvolit a implementovat uživatel
- unicast mód - Master inicializuje komunikaci pouze s jednou Slave jednotkou (každá Slave má unikátní adresu 1..247)
- broadcast mód - Master vyšle žádost všem jednotkám Slave najednou ( všechny Slave musí akceptovat adresu 0 určenou pro broadcast )
- RTU ( Remote Terminal Unit ) mód - každý 8 - bitový bajt ve zprávě obsahuje 2 hexadecimální znaky
- ASCII mód - každý 8 - bitový bajt je vyslán jako 2 znaky ASCII
- MODBUS Klient a Server napojené na síť TCP/IP
- Propojovací zařízení jako jsou mosty (bridges), brány (gateways), směrovače (routers) pro propojení sítě TCP/IP s sítí tvořenou sériovou linkou a protokolem MODBUS po sériové lince
- Identifikátor transakce - identifikace žádostí a odpovědí transakce, využívá se pro párování transakcí
- Identifikátor protokolu - pro hodnotu 0 = MODBUS, využívá se pro multiplexování v síti
- Délka - číslo následujícího bajtu
- Identifikátor jednotky - identifikuje vzdálený Slave napojený na sériovou linku, využívá se pro vnitřní směrování mezi sítí TCP/IP a MODBUS sériovou linkou.
- HDLC(High Data Link Control) protokol - definuje začátek a konec rámce, určuje kontrolní součet, broadcast adresu
- MAC (Medium Access Control) protokol - řídící paket pro token - definuje zdrojovou a cílovou adresu, čítání počtu bajtů ve zprávě, udává funkční kód, který zařízení na cílové adrese udává požadovanou operaci k provedení
- LCC (Logical Link Control) - řídící paket pro token - řídí směrování a platnost paketu, identifikuje cestu přenosu atd.
Kódování dat
Využívá se tzv. Big-Endian reprezentace adresy a dat. Ta umožňuje přenášet čísla o větším počtu bitů něž odpovídá vysílanému jednomu bajtu. Pak první vyslaný bajt je tzv. MSB (Most Significant Byte - nejvýznamější bajt).
Příklad dělení čísel podle Big-Endian reprezentace:
Datový model
Datový model protokolu může být rozdělen na sérii oblastí, kde každá má určité vlastnosti. Následující tabulka uvádí druhy definovaných oblastí.
Primární oblast | Typ objektu | Typ přístupu | Popis |
Input Discrete | jeden bit | pouze pro čtení | data dodaná IO zařízeními |
Coils | jeden bit | čtení i zápis | data mohou být měněna aplikačním programem |
Input Registers | 16-bitové slovo | pouze pro čtení | data dodaná IO zařízeními |
Holding Registers | 16-bitové slovo | pouze pro čtení | data mohou být měněna aplikačním programem |
Rozlišování mezi vstupy a výstupy a mezi bitově adresovanými a slovem adresovanými položkami nezahrnuje chování aplikací. Všechny manipulovaná data však musí být v aplikační paměti komunikujícího zařízení. Každou primární oblast lze rozdělit až na 65536 položek, s nimiž se pracuje podle dodaného funkčního kódu. Na absolutních adresách v paměti zařízení nezáleží, protože se pracuje pouze s relativními odkazy. Organizovat data v aplikační paměti komunikujícího zařízení lze v rámci oddělených bloků nebo jednoho bloku.
MODBUS Data model s oddělenými bloky a jeho adresování
Adresovací model dat
MODBUS protokol definuje přesná adresovací pravidla v PDU:
Kódy funkcí
Kódy funkcí, které udávají typ akce k provedení dotazovanou stanicí, lze rozdělit na dvě skupiny:
Veřejné kódy funkcí obsahují čísla 1 až 65 a 111 až 127 a mimo speciálních funkcí udávají i akce čtení stavů jednotlivých vstupů vstupů, nastavení výstupů, čtení stavu zařízení atd. Počet využívaných fukcí závisí na potřebách komunikujícího zařízení a i síti, po které se komunikuje. Přesný popis jednotlivých funkcí i jejich čísla lze získat na oficiálních stránkách MODBUS protokolu www.modbus.org.
MODBUS přes sériovou linku
Pro komunikaci po sériové sběrnici existuje protokol MODBUS Serial Line Protocol, který definuje 2. vrstvu OSI modelu (Linková vrstva). Na 1. vrstvě ( Fyzické vrstvě ) se využívá standardu rozhranní RS-232 nebo RS-485, resp. EIA/TIA-232 nebo EIA/TIA-485. To ukazuje i následující obrázek.
Rozvržení jednotlivých protokolů komunikace v OSI modelu pro MODBUS přes sériovou linku
Linková vrstva - MODBUS Serial Line Protocol
MODBUS Serial Line protokol poskytuje komunikaci typu Mater/Slave. Vždy na linku může být připojen jen jeden Master (řídící jednotka) a až 247 Slave (účastnictských jednotek). Samotná komunikace jen vždy inicializována jednotkou Master, tzn. že Slave jednotky nikdy nevysílají data bez předchozí žádosti jednotky Master a Slave jednotky nemohou navzájem spolu komunikovat bez účasti Masteru.
Master může využít dvou typů žádostí k Slave :
Struktura MODBUS rámce pro komunikaci po sériové lince je shodný s obecným schématem MODBUS rámce ADU. Jako Error Check se využívá metody CRC nebo LRC. Adresa udává komunikující Slave jednotku a přenáší se v obou směrech komunikace, tedy ve směru od Master k Slave i zpět od Slave k Master, aby Master vždy věděl, která jednotka právě odpovídá.
Linková vrstva popisuje mimo komunikace Master/Slave i tzv. přenosový mód (Transmissionn mode) :
RTU mód
Na následujícím obrázku je formát RTU módu s paritou. Každá zpráva obsahuje 11 bitů z toho je 8 bitů datových. Komunikace může probíhat s paritou i bez parity. V druhém případě je pak paritní bit nahrazen dalším stop bitem. V tomto módu se využívá metody kontroly chybovosti CRC (Cyclical Redundancy Checking)
Bitová reprezentace RTU módu
Výhodou tohoto řešení je lepší rozložení density znaků a tím větší datová propustnost při stejném boud rate v porovnání s ASCII módem. Každá zpráva všeak musí být vysílána v kontinuálnm režimu.
ASCII mód
Na následujícím obrázku je formát ASCII módu s paritu. Každá zprávě zde obashuje 8 datových bitů. Opět je možný i přenos bez parity. Pak je opět paritní bit nahrazen stop bitem. V tomto módu se pak využívá metody kontroly chybovosti LRC (Longitudinal Redundancy Checking).
Bitová reprezentace ASCII módu
Výhodou tohoto módu je možnost použít až sekundového časového intervalu mezi vysláním jednotlivých znaků aniž by došlo k chybě přenosu.
MODBUS přes TCP/IP
Komunikační systém MODBUS přes TCP/IP zahrnuje dva rozdílné typy zařízení:
Následující obrázek ukazuje možnou hierarchii a architekturu takového komunikačního systému
MODBUS TCP/IP architektura komunikace
Při této komunikaci se MODBUS uplatňuje pouze na úrovni aplikační vrstvy.
MODBUS on TCP
Základem komunikace protokolu MODBUS TCP/IP je ADU, která proti obecné definici obsahuje MBAP Header (MODBUS Application Protocol Header) místo bloku Additional address. MBAP označuje v TCP/IP protokolu přenos protokolu MODBUS.
MBAP Header obsahuje:
MODBUS rámec (frame), tedy ADU, je dále zahrnut do TCP rámce dle obrázku. Všechny MODBUS TCP/IP ADU komunikují přes TCP přidělený port 502. Na nižšcíh hladinách se již s rámci pracuje dle jednotlivých protokolů pro komunikaci v síti Ethernet, tedy nazávisle na MODBUS.
Princip zahrnutí rámce MODBUS do rámce TCP
MODBUS PLUS (MODBUS +)
Protokol pro linkovou vrstvu OSI modelu označovaný jako MODBUS PLUS původně vyvinula firma Schneider Automation pro výměnu informací mezi firemními produkty. Jedná se o otevřený protokol, který definuje komunikaci typu peer-to-peer s výměnu tokenu. Jde tedy o strukturu sítě Token Ring s fyzickým přístupem založeným na přenosové rychlosti 1Mb/s.
Každá síť podporuje až 64 adresovatelných uzlů (zařízení ) . Pří délce sítě 450m jich může být až 32. Délku sítě lze prodloužit pomocí opakovače (repeater) až na 1800m. Minimální délka propojovacího kabelu mezi dvěma uzly je 3m. Jako fyzického média se využívá stíněného krouceného páru. Síť může být strukturována pomocí mostů (bridges). Zařízení se sériovým rozhranním se mohou připojit prostřednictvím Bridge Multiplexerů. Na následujícím obrázku je příklad sítě tvořené mosty a opakovači.
Příklad řešení sítě MODBUS PLUS
Každé řídící zařízení, které je připojeno k síti, má adresu v rozsahu 1 až 64, která je nezávislá na fyzické lokalizaci jednotky v síti a je jedinečná. Pro větší počet připojených zařízení je nutné dvě podsítě navzájem oddělit mostem. Při komunikaci přímá dané zařízení token od předchozího zařízení a odesílá ho následujícímu. Aplikační program tak může získat přístup k registrům všech komunikujících zařízení. Předávání tokenu začíná u zařízení s nejnižší adresou a postupně s předává zařízením s adresou nejbližší vyšší. Když je obslouženo zařízení s nejvyšší adresou, token opět přechází na zařízení s adresou nejnižší. Každé zařízení po získání tokenu může vyslat zprávy každému v síti definováním své a cílové adresy v rámci.
Formát zprávy přenášené po síti obsahuje 3 hladiny protokolů:
Definice a vzájemné vnořování jednotlivých rámců LLC, MAC a HDLC
V rámci LCC se již přenáší daný MODBUS rámec, který odpovídá standardnímu PDU. Z rámce ADU se vyjme informace o cílové adrese, která se použije na úrovni MAC rámce. Původní kontrolní součet v MODBUS ADU se nevyužívá, protože toto zajštění kontroly přenosu zahrnuje HDLC rámec.
Závěr
MODBUS je plně otevřený protokol, což umožňuje ho aplikovat pro komunikaci na různých sítích a sběrnicích. Tím je velmi perspektivní i do budoucna, protože i přes vývoj nových sítí lze stále využívat MODBUS na úrovni aplikační vrstvy a jen vytvářet nová přizpůsobení k přenosu na dané síti na nižších vrstvách OSI modelu jako například MODBUS on TCP nebo MODBUS Serial Line Protocol. Takové parametry jako jsou rychlost komunikace apod. jsou tedy dány typem využívané sítě. Celý protokol obsahuje velké množství pametrů a funkcí, v praxi však každé komunikující zařízení využívá vždy jen část protokolu dle potřeby přenosu a zpracování dat.
Literatura
[1] www.modbus.org - oficiální stránky standardu
[2] http://www.intellicom.se
[3] http://ethernet.industrial-networking.com/articles/i07modbus.asp
[4] AEG Schneider Automation, Inc.: Modicon Modbus Plus Network Planning and Installation Guide, 1996
[5] Teco a.s.: Komunikace s PLC TECOMAT protokolem MODBUS
Antonín Vojáček
vojaceka1@ seznam.cz