Jste zde

MODBUS

MODBUS je otevřený protokol pro vzájemnou komunikaci různých zařízení (PLC, dotykové displeje, I/O rozhranní apod), který umožňuje přenášet data po různých sítích a sběrnicích (RS-232, RS-485, Ethernet TCP/IP, MODBUS+ atd.). Komunikace funguje na principu předávání datových zpráv mezi klientem a serverem resp. masterem a slavem. Bližší popis standardu i komunikací po jednotlivých typech sítí je v následujícím článku.

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ě

    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:

    • 16 - bits: 0x1234 se rozdělí na: 0x12 a 0x34
    • 32 - bits: 0x12345678 se rozdělí na: 0x12, 0x34, 0x56, 0x78

    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

    Tabulka rozdělení oblastí datového modelu

    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:

    • 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í

    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í (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

    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 :

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

    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 ( 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

    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í:

    • 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

    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:

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

    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ů:

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

    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

Hodnocení článku: