Modbus RTU vs TCP: Vše, co potřebujete vědět

Jak Modbus funguje, čím se liší RTU, ASCII a TCP a co je potřeba k dálkovému odečtu Modbus měřidel
Dvě Modbus měřidla mohou používat stejný protokol, a přesto vyžadovat úplně odlišnou konfiguraci. Jedno zpřístupňuje hodnotu v holding registrech, druhé ve vstupních registrech. Jedno ukládá 32bitovou hodnotu do dvou registrů, druhé používá opačné pořadí slov. Modbus standardizuje komunikaci, ale ne význam a uspořádání dat jednotlivých měřidel.
Právě v tom spočívá podstata práce s Modbusem. Protokol je jednoduchý, otevřeně zdokumentovaný a podporuje ho široká škála měřidel, senzorů a řídicích systémů. Porozumění tomu, jak Modbus funguje, čím se liší jeho varianty a kde integrace nejčastěji selhává, může připojení zařízení výrazně usnadnit.
Klíčové poznatky
- Modbus je protokol typu dotaz a odpověď, ve kterém jedno zařízení žádá o data a druhé odpovídá. Stejná aplikační vrstva běží po sériových linkách jako Modbus RTU nebo ASCII a v sítích TCP/IP jako Modbus TCP.
- Modbus pracuje se čtyřmi typy datových oblastí: coils, discrete inputs, input registers a holding registers. Funkční kódy určují, která oblast se čte nebo zapisuje.
- Modbus RTU posílá binární rámce s kontrolou CRC po sériové lince, nejčastěji RS-485. Modbus TCP přenáší stejná data Modbus přes TCP spojení na portu 502, se 7bajtovou hlavičkou MBAP a bez CRC z RTU.
- V sériových sítích Modbus má každý slave adresu od 1 do 247 a adresa 0 je vyhrazena pro broadcastové příkazy. Podporované broadcastové operace se zpracují bez jednotlivých odpovědí.
- Modbus standardizuje komunikaci, ale ne to, jak výrobci přiřazují naměřené hodnoty k registrům. Většina problémů s integrací proto nevzniká v protokolu samotném, ale v mapách registrů, datových formátech a nastavení sériové linky.
- Měřidla a senzory s Modbus RTU na RS-485 lze připojit do sítě LoRaWAN nebo NB-IoT pomocí převodníku, bez výměny zařízení.
Co je Modbus
Modbus vyvinula v roce 1979 společnost Modicon, dnes součást Schneider Electric, pro své programovatelné automaty (PLC). Jeho specifikace publikuje Modbus Organization. Jádrem Modbusu je jednoduchá zpráva: funkční kód, který říká, co se má udělat, a za ním data, která jsou k tomu potřeba. Základní struktura zprávy zůstává stejná bez ohledu na způsob přenosu.
Mezi variantami Modbusu se liší rámec kolem této zprávy a síť, která ji přenáší. Modbus RTU a Modbus ASCII běží po sériových linkách. Modbus TCP běží v sítích TCP/IP, typicky v Ethernetu. Zařízení, které podporuje jednu variantu, automaticky nerozumí druhé, přestože data uvnitř zprávy mají stejnou strukturu.
Master a slave, klient a server
Komunikace Modbus vždy probíhá formou dotazu a odpovědi. Na sériové lince zahajuje každou transakci jeden master a zařízení typu slave odpovídají jen tehdy, když jsou adresována. Slave nikdy neposílá data z vlastní iniciativy.
Modbus TCP popisuje stejné role jako klient a server. Klient posílá dotaz, server odpovídá. Princip zůstává stejný, ale protože TCP/IP je síť, a ne jedna sdílená linka, může se serverem komunikovat více klientů a role se vážou na síťová spojení, nikoli na pozici na sběrnici.
Registry a funkční kódy
Modbus pracuje se čtyřmi typy datových oblastí:
- Coils: jednobitové hodnoty, které lze číst i zapisovat, typicky výstupy nebo spínače
- Discrete inputs (diskrétní vstupy): jednobitové hodnoty, které lze pouze číst, typicky stavové signály
- Input registers (vstupní registry): 16bitové hodnoty, které lze pouze číst, typicky naměřené hodnoty
- Holding registers: 16bitové hodnoty, které lze číst i zapisovat, typicky nastavení a parametry, u mnoha měřidel ale také naměřená data
Funkční kódy říkají zařízení, ke které datové oblasti má přistoupit a jak. Základní funkční kódy umožňují číst jednotlivé datové oblasti a zapisovat do těch, které zápis podporují:
- 01 Read Coils
- 02 Read Discrete Inputs
- 03 Read Holding Registers
- 04 Read Input Registers
- 05 Write Single Coil
- 06 Write Single Register
- 15 (0x0F) Write Multiple Coils
- 16 (0x10) Write Multiple Registers
Jeden dotaz s funkčním kódem 03 nebo 04 může přečíst až 125 po sobě jdoucích 16bitových registrů. Pokud dotaz nelze provést, zařízení vrátí chybovou odpověď (exception response). Kód výjimky udává důvod, například nepřípustnou hodnotu dat nebo poruchu samotného zařízení.
Jeden 16bitový registr má omezenou kapacitu. Hodnoty jako souhrnná energie nebo měření s plovoucí desetinnou čárkou obvykle zabírají dva nebo více po sobě jdoucích registrů a pořadí, ve kterém zařízení ukládá bajty a slova, určuje výrobce, nikoli protokol.
Jak do sebe jednotlivé části zapadají, ukazuje jednoduchý příklad. Měřidlo může mít souhrnnou energii zdokumentovanou jako holding registr 40001. Klient Modbus ji typicky přečte funkčním kódem 03 od počáteční adresy 0. Pokud hodnota zabírá dva registry, musí klient přečíst oba a interpretovat jejich pořadí a datový typ podle mapy registrů výrobce.
Zápis 40001 je dokumentační konvence a jednotlivá zařízení nebo softwarové nástroje mohou registry číslovat jinak.
RTU, ASCII a TCP
Všechny tři varianty přenášejí stejnou zprávu Modbus v různých rámcích.
Modbus RTU přenáší data v kompaktní binární podobě. Rámec obsahuje adresu zařízení slave, funkční kód, data a 2bajtovou kontrolu CRC-16. Nemá žádný počáteční ani koncový znak, rámce od sebe oddělují intervaly bez komunikace odpovídající nejméně době přenosu 3,5 znaku. Při rychlostech nad 19 200 Bd specifikace doporučuje pevné časové hodnoty místo intervalů odvozených od délky znaku. RTU je nejrozšířenější sériová varianta.
Modbus ASCII přenáší každý bajt jako dva čitelné hexadecimální znaky. Rámec začíná dvojtečkou a končí znaky CR a LF, chyby se odhalují 1bajtovou kontrolou LRC. Formát se při hledání chyb lépe čte, stejná data ale zaberou zhruba dvakrát více znaků než v RTU.
Modbus TCP přenáší aplikační data Modbus přes TCP spojení a ke každé zprávě přidává 7bajtovou hlavičku MBAP. Hlavička obsahuje identifikátor transakce, identifikátor protokolu, pole délky a unit identifier. Modbus TCP neobsahuje CRC z Modbus RTU a místo toho spoléhá na mechanismy detekce chyb podkladových síťových protokolů. Modbus TCP používá port 502, registrovaný u IANA pro provoz Modbus. Unit identifier se používá hlavně tehdy, když má dotaz dorazit k zařízení za bránou na sériové lince.
Modbus RTU ani standardní Modbus TCP neposkytují autentizaci ani šifrování. Dotazy může posílat jakékoli zařízení s přístupem ke sběrnici nebo síti. Specifikace Modbus Security definuje variantu Modbus TCP založenou na TLS, která používá port 802. Musí ji podporovat obě komunikující zařízení.
RS-485 jako fyzická vrstva
Modbus RTU a ASCII definují, jak se zprávy rámcují, ne jak se přenášejí elektrické signály. Fyzickou vrstvou je v praxi obvykle RS-485, diferenciální sériové rozhraní, které umožňuje více zařízením sdílet jeden pár vodičů.
Jeden segment RS-485 podporuje až 32 jednotkových zátěží (unit loads). Počet připojených zařízení proto závisí na jejich elektrické zátěži, nejen na adresách Modbus. Sběrnice je na obou koncích zakončená, typicky odpory 120 Ω, a rezistory předpětí (bias) udržují linku v definovaném stavu, když žádné zařízení nevysílá.
Na správném zapojení přitom záleží více, než by se mohlo zdát. Chybějící zakončení, chybějící předpětí nebo hvězdicová topologie místo liniové mohou způsobovat občasné chyby komunikace, které vypadají jako problém protokolu. Více o RS-485 a jeho místě vedle M-Bus v článku M-Bus, wM-Bus a RS-485: Přehled technologií.
Adresace a časté chyby
Na sériové lince má každý slave adresu od 1 do 247. Adresa 0 slouží pro broadcast: používá se pro podporované příkazy, typicky zápisy, a zařízení je provedou bez jednotlivých odpovědí. Dvě zařízení se stejnou adresou na jedné sběrnici odpoví současně a navzájem si odpovědi poškodí.
Většina problémů s integrací Modbus spadá do několika opakujících se kategorií:
- Nastavení sériové linky: přenosová rychlost, parita a stop bity se musí přesně shodovat u všech zařízení na sběrnici. RTU ve výchozím nastavení používá 11 bitů na znak
- Číslování registrů: dokumentace často používá zápis jako 40001 pro první holding registr, zatímco protokol sám adresuje registry od nuly, takže dotaz snadno skončí o jeden registr vedle
- Datový formát: pořadí bajtů, pořadí slov, měřítko a posuny se u výrobců liší, takže i správně přečtený registr může dát špatnou hodnotu
- Špatná datová oblast: čtení vstupních registrů místo holding registrů, nebo naopak, vrátí chybovou odpověď nebo nesouvisející data
- Zapojení: chybějící zakončení nebo předpětí, prohozené datové vodiče nebo jiná než liniová topologie
Zvláštní komplikací při integraci Modbusu je skutečnost, že protokol sice standardizuje komunikaci, ale neurčuje, jak mají jednotliví výrobci přiřazovat naměřené hodnoty k registrům. Modbus nemá žádné automatické vyhledávání zařízení (auto-discovery) a každé zařízení má vlastní mapu registrů. Obecné skenování nepřečte nic užitečného, dokud není známa mapa registrů každého zařízení.
Modbus u průmyslových měřidel a měřidel energie
Modbus je běžný u elektroměrů, měřidel tepla, průtokoměrů a průmyslových senzorů, zejména v instalacích, které už používají PLC nebo systémy řízení budov. Měřidla typicky zpřístupňují souhrnnou energii, okamžitý výkon, napětí, proudy, průtoky nebo teploty v holding nebo vstupních registrech podle mapy registrů uvedené v dokumentaci výrobce.
Pro dálkový odečet to znamená, že každý typ Modbus měřidla potřebuje vlastní konfiguraci. Dvě měřidla různých výrobců mohou měřit stejnou veličinu, ale ukládat ji do různých registrů, formátů a jednotek.
Přemostění Modbusu do LoRaWAN a NB-IoT
Zařízení s Modbus RTU na RS-485 se obvykle odečítají lokálně pomocí PLC, řídicí jednotky nebo dataloggeru. Pro dálkový odečet bez kabeláže do centrálního systému může na sběrnici RS-485 fungovat jako master převodník, který přečte definované registry a pošle hodnoty bezdrátovou sítí. Rozdíl mezi převodníkem, bridgem a gateway vysvětluje článek o převodníku, sběrnici, bridge a gateway.
Převodníky ACRIOS pro Modbus do LoRaWAN a Modbus do NB-IoT pracují na sériové straně: podporují Modbus RTU a Modbus ASCII po RS-485, nikoli Modbus TCP. Přenosovou rychlost lze nastavit od 300 do 115 200 Bd a jeden převodník dokáže odečítat až 96 zařízení na jedné lince.
Protože Modbus nemá auto-discovery, definuje se mapa registrů každého zařízení v knihovně zařízení přes skriptovací rozhraní Lua, včetně pořadí bajtů a posunů. Výstupní data tak mají jednotnou strukturu. Konfiguraci včetně knihovny zařízení a intervalů odečtu lze měnit na dálku. Verze s pomocným napájením mohou připojený senzor RS-485 napájet napětím 5 až 24 V DC.
Volba sítě se řídí místem instalace. Převodníky LoRaWAN posílají standardní pakety třídy A na jakýkoli kompatibilní síťový server a vyžadují přístup k privátní bráně LoRaWAN nebo pokrytí veřejnou sítí LoRaWAN. Převodníky NB-IoT pracují se SIM kartou operátora a data posílají bez brány. Technická dokumentace a integrační manuály jsou k dispozici na ACRIOS wiki.
Která varianta Modbusu se hodí kam
Modbus RTU zůstává typickou volbou tam, kde jsou měřidla a senzory připojeny ke sběrnici RS-485 ve strojovně, rozvodně nebo rozvodné skříni. Modbus TCP se hodí tam, kde jsou zařízení už připojená do IP sítě a integrovaná do systémů SCADA nebo řízení budov. Modbus ASCII se objevuje hlavně u starších zařízení.
Zvolená varianta Modbusu určuje způsob technického připojení pro dálkový odečet. Sériová zařízení Modbus lze přemostit do LoRaWAN nebo NB-IoT přímo na sběrnici RS-485. Pro úspěšnou integraci je však zásadní znát mapu registrů každého zařízení ještě před zahájením odečtů.
Slovníček užitých pojmů
- Coil: jednobitová hodnota Modbus, kterou lze číst i zapisovat
- CRC (cyclic redundancy check): 2bajtová kontrola chyb na konci každého rámce Modbus RTU
- Discrete input (diskrétní vstup): jednobitová hodnota Modbus, kterou lze pouze číst
- Funkční kód: část zprávy Modbus, která určuje, jakou akci má zařízení provést, například čtení holding registrů
- Holding register: 16bitová hodnota Modbus, kterou lze číst i zapisovat
- Input register (vstupní registr): 16bitová hodnota Modbus, kterou lze pouze číst
- LRC (longitudinal redundancy check): 1bajtová kontrola chyb používaná v rámcích Modbus ASCII
- MBAP hlavička: 7bajtová hlavička Modbus Application Protocol, přidávaná ke každé zprávě Modbus TCP
- RS-485: diferenciální sériové rozhraní, které umožňuje více zařízením komunikovat po jednom sdíleném páru vodičů
- Unit identifier: pole v hlavičce MBAP, které slouží hlavně k adresování zařízení za bránou na sériové lince
FAQs
Modbus měřidla a senzory na RS-485 mohou posílat data na dálku, jakmile jsou definované jejich mapy registrů. ACRIOS posoudí zařízení v místě instalace a připraví konfiguraci převodníku pro LoRaWAN nebo NB-IoT.


























































