cz
en

Routování protokolu Modbus - 2. část

V první části jsme se seznámili s různými způsoby, jak přenášet sériová data po síti Ethernet, a ukázali si základní zapojení a konfiguraci routeru Modbus RTU / Modbus TCP. Nyní se podíváme na několik méně obvyklých topologií.

Routování Modbus TCP serveru na sériovou linku (Serial Master)

Občas se stane, že bychom potřebovali opačné zapojení: máme Modbus TCP server, například řídicí jednotku vzduchotechniky (typicky VTS s regulátorem Carel vybaveným expanzním modulem TCP/IP) nebo síťový analyzátor (např. Siemens Sentron), a potřebujeme z ní číst data do sériového klienta – tím je třeba PLC, které umí pouze Modbus RTU. Řešily se tak i případy, kdy nebylo možné mezi Modbus serverem a PLC vést ethernetový kabel, ať už kvůli vzdálenosti přesahující 100 m, nebo pro komplikovanou situaci na stavbě. Některé routery umění i toto zapojení „vzhůru nohama“, jehož topologii vidíme na obrázku vpravo.

Obr. 7:  Topologie pro routování Modbus – 1.
Obr. 7:  Topologie pro routování Modbus – 1.

V tomto případě je potřeba si uvědomit jednu důležitou věc: Součástí Modbus TCP dotazu je i IP adresa cílového zařízení – serveru. Modbus RTU klient ale nemá prostředky, jak ji specifikovat: protokol Modbus RTU s ničím takovým nepočítá, o existenci síťového prostředí vůbec netuší. Tuto informaci tedy musíme dodat routeru, a to tak, že v něm nastavíme routovací tabulku. U routeru Domat R035 se tabulka konfiguruje přes webové rozhraní. Začneme tím, že převodník nastavíme do módu Industrial Automation a jako aktuální protokol zvolíme Serial Master:

Obr. 8: Nastavení převodníku jako Serial Master
Obr. 8: Nastavení převodníku jako Serial Master

V menu konfigurace sériového portu se objeví položka Slave destinations (Packet Routing).

Obr. 9: Převodník R035, menu s routovací tabulkou
Obr. 9: Převodník R035, menu s routovací tabulkou

Kliknutím na číslo ve sloupci Index se dostaneme na nastavení konkrétního routovacího pravidla.

Obr. 10: Nastavení routovacího pravidla v R035
Obr. 10: Nastavení routovacího pravidla v R035

V tomto případě se na IP adresu 192.168.1.67 budou posílat všechny dotazy („Send requests using any protocol address...“), které převodník na sériovém portu přijme. Protocol address zde znamená linkovou adresu sériového zařízení, tedy „klasickou“ Modbusovou adresu v rozsahu 1 až 255. Pokud máme topologii s jediným Modbus TCP serverem (jako na obrázku topologie 1 vpravo), toto nastavení by mělo stačit. Jak u Modbus TCP dotazu pracovat s linkovými adresami? Standardem je, že v Modbus TCP dotazech se adresa nastavuje na hodnotu 1. Samotný Modbus TCP server by modbusové linkové adresy neměl vůbec řešit, má reagovat na všechny adresy stejně a v odpovědi vždy vrátit adresu z dotazu. (Výjimečně se můžeme setkat s tím, že Modbus TCP server používá linkové adresy jako určitou ochranu proti zápisu - například u fotovoltaických střídačů Solaron musí mít telegram pro nastavení limitace výkonu linkovou adresu 0, byť pro čtení téže hodnoty i hodnot ostatních se používá standardní adresa 1.)

Routování Modbus RTU - Modbus TCP - Modbus RTU

Pokud navíc „za IP adresou“ není Modbus IP server, nýbrž router a celá sběrnice Modbus RTU zařízení, které již linkové adresy pro komunikaci potřebují, situace se začíná komplikovat. V praxi se této topologii raději snažíme vyhnout, někdy nám ale podobné zapojení může doslova vytrhnout trn z paty.

Obr. 11: Topologie pro routování Modbus – 2.
Obr. 11: Topologie pro routování Modbus – 2.

Na obrázku topologie 2 vlevo je jednodušší případ, kdy nám stačí vytvořit jednu routovací tabulku, vlastně stejnou jako v případě topologie 1 vpravo. Router konfigurovaný jako Serial Master se řídí pravidlem „Send requests using any protocol address to the following destination“ a posílá dotazy s veškerými linkovými adresami na router s konfigurací Serial Slave. Ten je směruje na sériovou linku a odpovědi od sériových zařízení posílá po síti jako Modbus TCP telegramy zpět na router s konfigurací Serial Master.

U routování na více sériových linek, jako je tomu na topologii 2 vpravo, již musíme v routeru Serial Master vytvořit více tabulek, které budou směrovat telegramy na router A nebo router B podle toho, jaké linkové adresy mají zařízení za jednotlivými routery. Připomeňme si, že sériový klient (zde PLC nahoře) neumí oslovit více než 255 zařízení, což je maximální logický počet adres na jedné sériové lince. (Pro linkovou adresu, jak můžeme vidět na výpisech telegramů Wireshark v předchozí části článku, je v protokolu vyhrazen jeden byte, tedy číslo v rozsahu 0...255.) Plyne z toho, že celkový počet sériových zařízení za Serial Slave routery na všech linkách dohromady nesmí překročit 255, byť každá ze sériových linek by sama o sobě byla schopna 255 zařízení obsloužit.

Jak ale adresovat sériová zařízení na jednotlivých linkách? Jako příklad si vezměme dvě sběrnice, z nichž každá obsahuje třicet Modbus RTU zařízení.

Obr. 12:  Adresování na sériových linkách při routování sériové linky přes Ethernet na více sériových linek
Obr. 12:  Adresování na sériových linkách při routování sériové linky přes Ethernet na více sériových linek

Na obrázku vlevo jsou linky správně adresovány tak, aby nedošlo ke kolizi adres, v celém „logickém sériovém systému“ jsou linkové adresy unikátní. V routeru Serial Master musíme vytvořit dvě tabulky, z nichž každá přeposílá telegramy na ten router Serial Slave, za nímž je zařízení s příslušnou linkovou adresou. Příklad tabulky v routeru Serial Master je zde:

Obr. 13: Routovací tabulka, která směřuje dotazy na linkové adresy 31 až 60 na IP adresu 192.168.1.12
Obr. 13: Routovací tabulka, která směřuje dotazy na linkové adresy 31 až 60 na IP adresu 192.168.1.12

V routeru Serial Slave s IP adresou 192.168.1.12 pak musíme určit, že na sériovou linku se posílají pouze dotazy na linkové adresy 31 až 60. Kdybychom totiž nechali přeposílat celý rozsah adres, 0 až 255, router by na dotazy na adresy, které na jeho sériové lince neexistují, vracel chybová hlášení! Ta by pak (na aplikační úrovni) kolidovala s platnými odpověďmi druhého routeru. Správné nastavení v Serial Slave vidíme na následujícím obrázku.

Obr. 14: Nastavení routeru Serial Slave pro linkové adresy 31 až 60
Obr. 14: Nastavení routeru Serial Slave pro linkové adresy 31 až 60

Adresování s duplicitními rozsahy linkových adres je možné pouze tehdy, když master komunikuje protokolem Modbus TCP, což jsme si ukázali v části „Routování Modbus RTU na Modbus TCP“.

Modbus TCP a více klientů

Na rozdíl od sériové (Modbus RTU) linky, na níž smí být vždy jen jeden master, v případě Modbus TCP sítě teoreticky není problém, aby se na jeden server připojilo více klientů a každý z nich na Modbus TCP server nezávisle četl a zapisoval data. Záleží jen na tom, kolik klientů (neboli Modbus TCP spojení) je Modbus TCP server najednou udržet. Jednodušší převodníky zvládnou pouze jedno Modbus TCP spojení, výkonnější pak 3 až 4 klientská připojení najednou. Konkrétní možnosti zjistíme u dodavatele zařízení.

Dotazy do routeru přicházejí od klientů zdánlivě „paralelně“, ve skutečnosti na Ethernetu ale také jeden za druhým. Jsou řazeny do fronty, zasílány na sériovou linku a postupně odbavovány.

Topologie pak vypadá například takto:

Obr. 15: Více Modbus TCP klientů nad jedním Modbus TCP serverem
Obr. 15: Více Modbus TCP klientů nad jedním Modbus TCP serverem

Výhodou naroutování Modbusu RTU na Modbus TCP tedy je i možnost použít více klientů, tedy vyčítání dat z jedné sériové sběrnice do dvou či více různých systémů. To na samotné sériové lince není možné – při připojení více masterů by na lince došlo ke kolizím, které Modbus RTU není schopen řešit. V praxi by se kolize projevily jako výpadky komunikace (timeouty) na všech masterech.

Závěrem

Bylo by možné konstruovat další zapojení, jako například více Modbus TCP serverů pod jedním Modbus RTU klientem, kombinace Modbus TCP serverů a routerů Serial Slave pod více Modbus RTU a TCP klienty atd. Webové stránky převodníku Domat R035 umožňují další nastavení, nahrazování linkových adres v příchozím dotazu předdefinovanou pevnou adresou a podobně. Pokud ale neřešíme nějakou výjimečnou situaci nebo doplnění již existujícího systému, snažme se složitějším topologiím vyhnout. Čím méně konfigurovatelných zařízení v systému je, tím je jednodušší servis a údržba. Při přečíslování sítě, což zase není tak výjimečná událost, je nezbytné celý systém zrevidovat a přenastavit.

Při složitějších nastaveních je více než vhodné celou konfiguraci převodníku R035 zazálohovat pomocí menu Backup / Restore. Soubor se zálohou pomůže k rychlé obnově při případné výměně převodníku nebo poslouží jako rychlá pomůcka pro konfiguraci dalších převodníků, které mají mít stejnou funkci.

U topologie s převodníkem v módu Serial Master je nutné upozornit na to, že u sériového zařízení ve funkci master bude zřejmě nutné zkontrolovat a případně zvětšit timeout - maximální dobu čekání na odpověď. Při routování a přenosu modbusových paketů po síti dochází ke zpoždění, které by master mohl vyhodnotit jako chybu komunikace. Při provozu v místní síti by měl stačit timeout okolo 300 ms, v případě problémů je třeba začít zkoumat komunikaci port monitorem nebo programem Wireshark.

Nezapomínejme, že sběrnice Ethernet je řádově propustnější, než sériová linka. Mezi dotazy Modbus TCP klienta by tedy měly být příslušné mezery (řekněme stovky ms) na to, aby sériová linka stačila data zpracovat. To platí zejména tehdy, přistupuje-li na jeden Modbus TCP server více klientů zároveň.

Dalším rizikem může být snížená síťová bezpečnost. Modbus TCP nemá žádné zabezpečení, ochranu heslem atd., je to prostě jen tabulka vystavená na IP adrese a číst a zapisovat do ní může obecně jakýkoli klient. Proto musíme při routování dávat pozor na to, v jakých sítích se pohybujeme. Pokud jde o uzavřenou technologickou síť, obvykle problémy nebývají. Při přenosu přes firemní síť nebo dokonce Internet je ale nutné oddělit část, kde se modbusová zařízení nacházejí, pomocí virtuální privátní sítě, nebo zajistit ochranu proti neoprávněnému čtení a zápisu jiným způsobem.