Modbus network linking a controller with distributed field devices

Modbus: Původní průmyslový protokol fieldbus

Modbus remains widely deployed because its data model is simple, not because every implementation is simple. This guide explains frames, register mapping, ti...

Průmyslová sběrnice je komunikační protokol používaný v průmyslových sítích k připojení polních zařízení k průmyslovým řídicím systémům. Průmyslová sběrnice snižuje množství kabeláže potřebné mezi řídicími systémy a zařízeními, protože k témuž páru vodičů lze připojit více zařízení.

Existuje řada oblíbených technologií průmyslových sběrnic, například Modbus, Profibus, Foundation Fieldbus, ControlNet, DeviceNet a mnoho dalších.

V roce 1979 představila společnost Modicon nový protokol využívající aplikační vrstvu modelu OSI, který byl určen speciálně pro její PLC. Tento protokol dostal název Modbus a stal se první široce používanou průmyslovou sběrnicí v historii automatizace.

 

PLC připojené k polním zařízením prostřednictvím průmyslové sběrnice

Obrázek 1. PLC připojené k polním zařízením 

 

Úvod do protokolu Modbus

Modbus byl navržen pro připojení polních zařízení k průmyslovým řídicím systémům. V době jeho vzniku většina zařízení používala k přenosu svého stavu napěťové nebo proudové reprezentace. Modbus dokáže efektivně zpracovávat diskrétní bity odrážející stavy snímačů a akčních členů high/low i registry obsahující celočíselné hodnoty odpovídající analogovým procesním veličinám.

Pomalý přechod k technologiím průmyslových sběrnic vedl k tomu, že se Modbus stal jedním z nejjednodušších protokolů, a v průběhu let byly přidány jeho nové verze.

Původně byl Modbus implementován přes sériové komunikační spojení, tedy RS-232/RS-485. Tyto varianty se stále běžně používají pod názvy Modbus RTU a ASCII. Později byl protokol upraven pro použití přes TCP/IP a Ethernet. Tato varianta se běžně označuje jako Modbus TCP a jde o nejčastější implementaci Modbusu v moderních instalacích.

 

Komunikační model

Modbus používá pro komunikaci model master/slave (v Modbus TCP klient/server). Master Modbusu odesílá požadavek slave jednotce Modbusu, která provede požadované akce a odpoví masteru. V tomto scénáři je masterem často PLC a polní zařízení fungují jako slave jednotky. 

Rámec zprávy v protokolu Modbus se skládá z aplikační datové jednotky (ADU) a protokolové datové jednotky (PDU). ADU se liší v závislosti na typu použitého protokolu Modbus, zatímco PDU je nezávislá na způsobu komunikace.

PDU se obvykle skládá z kódu funkce a určitých dat. V ADU jsou tyto údaje zapouzdřeny spolu s adresou a kódem pro kontrolu chyb. Modbus TCP používá v ADU hlavičku MBAP (Modbus Application Protocol).

 

Obrázek 2. ADU a PDU protokolu Modbus pro Modbus ASCII/RTU (nahoře) a Modbus TCP (dole). Obrázek upraven podle Modbus.org

 

Aby PDU zůstala nezávislá na podkladové komunikační vrstvě, musí splňovat omezení velikosti původní sériové specifikace. Velikost ADU přes RS-485 byla 256 bajtů. Musíme tedy zohlednit ADU – 1 adresový bajt a 2 bajty pro kontrolu chyb – což znamená, že PDU je omezena na celkem 253 bajtů. Upozorňujeme, že adresa v ADU je ve skutečnosti ID podřízeného zařízení v síti Modbus.

Datová část PDU bude obsahovat pole specifická pro funkční kód spolu se skutečně přenášenými daty. Tato pole budou podrobněji popsána dále v článku.

 

Reprezentace dat

Klasický Modbus má dva přenosové režimy: ASCII a RTU.

V režimu ASCII jsou data odesílána jako znaky ASCII 0–9 a A–F, zatímco v režimu RTU jsou data reprezentována 8bitově binárně. Data a adresy jsou kódovány v pořadí big-endian, takže nejvýznamnější bajt se přenáší jako první.

Data Modbus se dělí na čtyři hlavní typy:

  • Diskrétní vstupy
  • Cívky (výstupy)
  • Vstupní registry
  • Záchytné registry

Diskrétní vstupy představují jediný bit dat a jsou určeny pouze pro čtení. Cívky také představují jediný bit, ale lze je číst i zapisovat. Vstupní registry představují 16bitová data pouze pro čtení, zatímco záchytné registry obsahují 16bitová data pro čtení i zápis.

 

Obrázek 3. Převzato ze specifikace protokolu Modbus

 

Pro každý typ lze v paměti zařízení umístit maximálně 2^16 (65536) datových položek. Pro přístup k jednotlivým datovým typům existují specifické funkční kódy, přičemž každý typ má často vlastní vyhrazený blok paměti.

Pro adresování datové položky jednoduše použije master rozsah 0–65535. Datová položka 1 se nachází na adrese 0x0000. Datová položka 2 je na adrese 0x0001. Datová položka 65536 se nachází na adrese 0xFFFF. Mějte na paměti, že zařízení nemusí mít všech 65536 datových položek; většina vzdálených I/O terminálů používajících Modbus bude mít ve skutečnosti výrazně méně než tento maximální počet.

 

Transakce Modbus

Nyní, když rozumíme tomu, jak jsou data v Modbusu reprezentována, můžeme transakce podrobně prozkoumat. Budeme na ně nahlížet z perspektivy PDU, protože PDU není závislá na komunikační vrstvě.

Transakce Modbus používají instrukce v hexadecimálním zápisu, kde jeden 8bitový bajt má formát 0x00 a rozsah každého znaku je 0–F. 16bitový registr se tedy rovná dvěma bajtům reprezentovaným ve formátu 0x0000. 

Specifikace Modbus definuje tři typy PDU:

  • Požadavek Modbus
  • Odpověď Modbus
  • Výjimková odpověď Modbus

Nadřízené zařízení zahájí požadavek pomocí kódu funkce, zatímco podřízené zařízení odešle odpověď na tento požadavek. Úspěšná odpověď opakuje kód funkce, který jí nadřízené zařízení odeslalo. Odpověď s výjimkou obsahuje stejný kód funkce, ale s nastaveným nejvyšším bitem, který signalizuje, že došlo k chybě. 

Specifikace Modbus definuje řadu kódů funkcí. Kód funkce 0x01 označuje funkci čtení cívek.

Obrázek 4 ukazuje příklad toho, jak může vypadat požadavek a odpověď na čtení cívek. Nadřízené zařízení Modbus odešle požadavek s kódem funkce 0x01 (čtení cívek), který začíná u první datové položky (adresa 0x0000) a čte pouze jedinou cívku. Funkci čtení cívek lze použít ke čtení až 2000 (0x7D0) cívek najednou. 

 

Obrázek 4. Transakce čtení cívek

 

V případě úspěchu podřízené zařízení odpoví stejným kódem funkce a uvede počet cívek, na které odpovídá. Stav cívek bude mít n bajtů, přičemž každý bit určuje, zda je příslušná cívka ve stavu ZAPNUTO (1), nebo VYPNUTO (0).

V tomto případě je cívka na adrese 0x0000 ve stavu ZAPNUTO. Pokud by požadavek nebyl úspěšný, odpověď s výjimkou by obsahovala kód funkce s nastaveným nejvyšším bitem (0x81) spolu s kódem výjimky vysvětlujícím, co se pokazilo. Kód výjimky 0x02 znamená, že byla použita neplatná adresa dat, tj. v paměti tohoto podřízeného zařízení se nenachází cívka na adrese 0x0000. 

Následující příklad znázorňuje transakci zápisu jediného registru (kód funkce 0x06). V tomto případě nadřízené zařízení požaduje zápis dat 0xA0A0 na adresu 0x00FF. Odpověď podřízeného zařízení je jednoduše kopií požadavku.

Příklad odpovědi s výjimkou zde zobrazuje kód funkce s nastaveným nejvyšším bitem spolu s kódem výjimky 0x04. Tento kód znamená, že při pokusu podřízeného zařízení provést požadavek došlo k neobnovitelné chybě. 

 

Obrázek 5. Transakce zápisu jediného registru 

 

Všechny kódy funkcí Modbus se řídí podobným vzorem jako dva výše uvedené příklady.

Obrázek 6 zobrazuje seznam běžných kódů funkcí spolu s kódy výjimek pro odpovědi s výjimkou. Další informace naleznete ve specifikaci Modbus. 

 

Obrázek 6. Kódy funkcí a kódy výjimek

 

Závěr

Modbus umožňuje PLC komunikovat se všemi druhy vzdálených jednotek, včetně bloků I/O, terminálových jednotek a dalších řídicích jednotek, protože využívá standardní metodu čtení a zápisu diskrétních i celočíselných informací, která pokrývá téměř každý scénář zahrnující přenos digitálních dat.

Modbus je dnes průmyslovým standardem a dosud představuje nejrozšířenější průmyslový protokol bez licenčních poplatků, přestože předchází většině moderních řídicích systémů. Setkáme se s ním v provozech a továrnách po celém světě a navzdory své dlouhé životnosti jistě zůstane relevantním průmyslovým protokolem ještě po mnoho let.

 

Původní článek publikovaný v roce 2019

Modbus: Původní průmyslový protokol fieldbus

Modbus remains widely deployed because its data model is simple, not because every implementation is simple. This guide explains frames, register mapping, timing, diagnostics, and the design limits...

Průmyslová sběrnice je komunikační protokol používaný v průmyslových sítích k připojení polních zařízení k průmyslovým řídicím systémům. Průmyslová sběrnice snižuje množství kabeláže potřebné mezi řídicími systémy a zařízeními, protože k témuž páru vodičů lze připojit více zařízení.

Existuje řada oblíbených technologií průmyslových sběrnic, například Modbus, Profibus, Foundation Fieldbus, ControlNet, DeviceNet a mnoho dalších.

V roce 1979 představila společnost Modicon nový protokol využívající aplikační vrstvu modelu OSI, který byl určen speciálně pro její PLC. Tento protokol dostal název Modbus a stal se první široce používanou průmyslovou sběrnicí v historii automatizace.

 

PLC připojené k polním zařízením prostřednictvím průmyslové sběrnice

Obrázek 1. PLC připojené k polním zařízením 

 

Úvod do protokolu Modbus

Modbus byl navržen pro připojení polních zařízení k průmyslovým řídicím systémům. V době jeho vzniku většina zařízení používala k přenosu svého stavu napěťové nebo proudové reprezentace. Modbus dokáže efektivně zpracovávat diskrétní bity odrážející stavy snímačů a akčních členů high/low i registry obsahující celočíselné hodnoty odpovídající analogovým procesním veličinám.

Pomalý přechod k technologiím průmyslových sběrnic vedl k tomu, že se Modbus stal jedním z nejjednodušších protokolů, a v průběhu let byly přidány jeho nové verze.

Původně byl Modbus implementován přes sériové komunikační spojení, tedy RS-232/RS-485. Tyto varianty se stále běžně používají pod názvy Modbus RTU a ASCII. Později byl protokol upraven pro použití přes TCP/IP a Ethernet. Tato varianta se běžně označuje jako Modbus TCP a jde o nejčastější implementaci Modbusu v moderních instalacích.

 

Komunikační model

Modbus používá pro komunikaci model master/slave (v Modbus TCP klient/server). Master Modbusu odesílá požadavek slave jednotce Modbusu, která provede požadované akce a odpoví masteru. V tomto scénáři je masterem často PLC a polní zařízení fungují jako slave jednotky. 

Rámec zprávy v protokolu Modbus se skládá z aplikační datové jednotky (ADU) a protokolové datové jednotky (PDU). ADU se liší v závislosti na typu použitého protokolu Modbus, zatímco PDU je nezávislá na způsobu komunikace.

PDU se obvykle skládá z kódu funkce a určitých dat. V ADU jsou tyto údaje zapouzdřeny spolu s adresou a kódem pro kontrolu chyb. Modbus TCP používá v ADU hlavičku MBAP (Modbus Application Protocol).

 

Obrázek 2. ADU a PDU protokolu Modbus pro Modbus ASCII/RTU (nahoře) a Modbus TCP (dole). Obrázek upraven podle Modbus.org

 

Aby PDU zůstala nezávislá na podkladové komunikační vrstvě, musí splňovat omezení velikosti původní sériové specifikace. Velikost ADU přes RS-485 byla 256 bajtů. Musíme tedy zohlednit ADU – 1 adresový bajt a 2 bajty pro kontrolu chyb – což znamená, že PDU je omezena na celkem 253 bajtů. Upozorňujeme, že adresa v ADU je ve skutečnosti ID podřízeného zařízení v síti Modbus.

Datová část PDU bude obsahovat pole specifická pro funkční kód spolu se skutečně přenášenými daty. Tato pole budou podrobněji popsána dále v článku.

 

Reprezentace dat

Klasický Modbus má dva přenosové režimy: ASCII a RTU.

V režimu ASCII jsou data odesílána jako znaky ASCII 0–9 a A–F, zatímco v režimu RTU jsou data reprezentována 8bitově binárně. Data a adresy jsou kódovány v pořadí big-endian, takže nejvýznamnější bajt se přenáší jako první.

Data Modbus se dělí na čtyři hlavní typy:

  • Diskrétní vstupy
  • Cívky (výstupy)
  • Vstupní registry
  • Záchytné registry

Diskrétní vstupy představují jediný bit dat a jsou určeny pouze pro čtení. Cívky také představují jediný bit, ale lze je číst i zapisovat. Vstupní registry představují 16bitová data pouze pro čtení, zatímco záchytné registry obsahují 16bitová data pro čtení i zápis.

 

Obrázek 3. Převzato ze specifikace protokolu Modbus

 

Pro každý typ lze v paměti zařízení umístit maximálně 2^16 (65536) datových položek. Pro přístup k jednotlivým datovým typům existují specifické funkční kódy, přičemž každý typ má často vlastní vyhrazený blok paměti.

Pro adresování datové položky jednoduše použije master rozsah 0–65535. Datová položka 1 se nachází na adrese 0x0000. Datová položka 2 je na adrese 0x0001. Datová položka 65536 se nachází na adrese 0xFFFF. Mějte na paměti, že zařízení nemusí mít všech 65536 datových položek; většina vzdálených I/O terminálů používajících Modbus bude mít ve skutečnosti výrazně méně než tento maximální počet.

 

Transakce Modbus

Nyní, když rozumíme tomu, jak jsou data v Modbusu reprezentována, můžeme transakce podrobně prozkoumat. Budeme na ně nahlížet z perspektivy PDU, protože PDU není závislá na komunikační vrstvě.

Transakce Modbus používají instrukce v hexadecimálním zápisu, kde jeden 8bitový bajt má formát 0x00 a rozsah každého znaku je 0–F. 16bitový registr se tedy rovná dvěma bajtům reprezentovaným ve formátu 0x0000. 

Specifikace Modbus definuje tři typy PDU:

  • Požadavek Modbus
  • Odpověď Modbus
  • Výjimková odpověď Modbus

Nadřízené zařízení zahájí požadavek pomocí kódu funkce, zatímco podřízené zařízení odešle odpověď na tento požadavek. Úspěšná odpověď opakuje kód funkce, který jí nadřízené zařízení odeslalo. Odpověď s výjimkou obsahuje stejný kód funkce, ale s nastaveným nejvyšším bitem, který signalizuje, že došlo k chybě. 

Specifikace Modbus definuje řadu kódů funkcí. Kód funkce 0x01 označuje funkci čtení cívek.

Obrázek 4 ukazuje příklad toho, jak může vypadat požadavek a odpověď na čtení cívek. Nadřízené zařízení Modbus odešle požadavek s kódem funkce 0x01 (čtení cívek), který začíná u první datové položky (adresa 0x0000) a čte pouze jedinou cívku. Funkci čtení cívek lze použít ke čtení až 2000 (0x7D0) cívek najednou. 

 

Obrázek 4. Transakce čtení cívek

 

V případě úspěchu podřízené zařízení odpoví stejným kódem funkce a uvede počet cívek, na které odpovídá. Stav cívek bude mít n bajtů, přičemž každý bit určuje, zda je příslušná cívka ve stavu ZAPNUTO (1), nebo VYPNUTO (0).

V tomto případě je cívka na adrese 0x0000 ve stavu ZAPNUTO. Pokud by požadavek nebyl úspěšný, odpověď s výjimkou by obsahovala kód funkce s nastaveným nejvyšším bitem (0x81) spolu s kódem výjimky vysvětlujícím, co se pokazilo. Kód výjimky 0x02 znamená, že byla použita neplatná adresa dat, tj. v paměti tohoto podřízeného zařízení se nenachází cívka na adrese 0x0000. 

Následující příklad znázorňuje transakci zápisu jediného registru (kód funkce 0x06). V tomto případě nadřízené zařízení požaduje zápis dat 0xA0A0 na adresu 0x00FF. Odpověď podřízeného zařízení je jednoduše kopií požadavku.

Příklad odpovědi s výjimkou zde zobrazuje kód funkce s nastaveným nejvyšším bitem spolu s kódem výjimky 0x04. Tento kód znamená, že při pokusu podřízeného zařízení provést požadavek došlo k neobnovitelné chybě. 

 

Obrázek 5. Transakce zápisu jediného registru 

 

Všechny kódy funkcí Modbus se řídí podobným vzorem jako dva výše uvedené příklady.

Obrázek 6 zobrazuje seznam běžných kódů funkcí spolu s kódy výjimek pro odpovědi s výjimkou. Další informace naleznete ve specifikaci Modbus. 

 

Obrázek 6. Kódy funkcí a kódy výjimek

 

Závěr

Modbus umožňuje PLC komunikovat se všemi druhy vzdálených jednotek, včetně bloků I/O, terminálových jednotek a dalších řídicích jednotek, protože využívá standardní metodu čtení a zápisu diskrétních i celočíselných informací, která pokrývá téměř každý scénář zahrnující přenos digitálních dat.

Modbus je dnes průmyslovým standardem a dosud představuje nejrozšířenější průmyslový protokol bez licenčních poplatků, přestože předchází většině moderních řídicích systémů. Setkáme se s ním v provozech a továrnách po celém světě a navzdory své dlouhé životnosti jistě zůstane relevantním průmyslovým protokolem ještě po mnoho let.

 

Původní článek publikovaný v roce 2019

Napište komentář

Upozorňujeme, že komentáře musí být před zveřejněním schváleny.