Bevezetés
Aki már találkozott az iparban olyan alkalmazással, ahol két eszköz között adatok átadását kellett megvalósítani, az nagy valószínűséggel találkozott már a Modbus adatkommunikációs protokollal. Ez egy rendkívül elterjedt, mára már ingyenesen használható master-slave kommunikációs protokoll, amit még a Modicon vállalat tett közzé 1979- ben. Mivel több, mint 40 éves, értelemszerűen vannak már gyorsabb és megbízhatóbb lehetőségek ipari kommunikációs csatornák kiépítésére, viszont a hardver költségei (mind gyártói és felhasználói oldalon) és elterjedtsége miatt továbbra is versenyképes.
Modbus közelről, bájtvadászat
A technológia fejlődésével és az igények növekedésével a kezdetben csupán soros kommunikációra épülő protokollnak (Modbus RTU, Modbus ASCII…) megjelent az Ethernet hálózaton használható variánsa is (Modbus TCP/IP, Modbus UDP/IP…). Ezek a változások elsősorban a fizikai és adatkapcsolati rétegre vonatkoztak, azonban a Modbus lényegi tartalma szinte minden esetben megegyezik.
Eleinte a RS232, RS422 és RS485 szabványoknak megfelelően lettek implementálva, azonban manapság már szinte csak az RS485 RTU változat van használatban. Ebben az esetben egy Modbus master eszköz által küldött utasítás így néz ki:
1. ábra – Modbus RTU adatkeret
- Slave ID
Ennek a mezőnek az értéke határozza meg, hogy az RS485 buszon található eszközök közül melyik slave eszközre vonatkozik a kiadott utasítás.
Ez a mező 1-247 értéket vehet fel, azaz ha a slave eszközök beállításai engedik, akkor akár 247 eszköz lekérdezése is megvalósítható egy master eszközzel (természetesen a fizikai réteg korlátozottságai mellett).
- Funkció kód
Ez a mező tartalmazza azt az azonosító kódot, aminek értelmezése után a slave eszköz tudni fogja, hogy mit kell tennie az adatokat tartalmazó mezővel, illetve az utasításra adott válaszát hogyan építse fel
Számos funkció létezik, azonban nem minden funkciót támogatnak általában a használt eszközök. Az alábbi utasítások támogatottsága a leggyakoribb:
Utasítás neve | Utasítás kódja |
Read Coils | FC1 |
Read Discrete Inputs | FC2 |
Read Multiple Holding Registers | FC3 |
Read Input Registers | FC4 |
Write Single Coil | FC5 |
Write Single Holding Register | FC6 |
Write Multiple Coils | FC15 |
Write Multiple Holding Registers | FC16 |
- Adatok
Ide kerül minden olyan adat, ami az utasítás végrehajtásához szükséges a slave eszköz számára. Ha a master küldte a kérést, akkor írni kívánt adatokat tartalmazhat, ha a slave válaszol egy korábbi kérésre akkor pedig kiolvasott adatokat tartalmazhat. Ezekből következik, hogy ennek a mezőnek a mérete nem állandó, hanem a kiválasztott funkció határozza meg.
- CRC ellenőrző összeg
Ez a mező egy olyan 16 bites összeget tartalmaz, amit az eddigi adatcsomag alapján a master és a slave eszköz ugyanolyan módon képes kiszámolni. Ebből a közös számolási képességből következik az ellenőrző jellege: ha bármelyik mező sérült az adatátvitel során, akkor az összegek közötti különbség nagy valószínűséggel ezt jelezni fogja.
A fent leírtak Modbus ASCII esetén a dedikált mezők mérete és ábrázolása változik meg. Erre példa: RTU esetén ha FC15 utasítást tartalmaz az üzenet, akkor 1 bájt területen 16#0E (2#00001110) érték fog szerepelni, ASCII esetén pedig 2 bájt területen fog 16#3135 (azaz „15”) megjelenni. A két módszer között ezen felül még több kisebb-nagyobb különbség is van.
Modbus TCP/IP vagy UDP/IP esetén a Modbus adatcsomagokat feldolgozó alkalmazás számára általában csak a funkció kódra és az adatmezőre van szükség. A slave eszközök beazonosítása IP cím alapján történik így a slave ID legtöbbször általánosan elfogadott értéke 1. A bemutatott CRC mezőre sincs szükség, mert a hálózati réteg már tartalmaz hibakezelést.
Modbus még közelebbről, bitvadászat
Ugyan Modbus TCP/IP kommunikáció esetén már nem szokott szükség lenni az egyes adatcsomagok ilyen alapos vizsgálatára, Modbus RTU és ASCII esetén ez szinte kötelező. Ennek az az egyszerű oka, hogy az RS485 szabvány felhasználása mellett lehetőség van általában a legkisebb adatcsomagok tulajdonságainak módosítására. Ez RTU és ASCII protokoll esetén ugyan azokat a beállításokat jelentik, ugyanis soros kommunikáció esetén az eszközök egyszerre csak 1 bájt elküldésére alkalmasak. Ha egy Modbus RTU csomag például FC4 utasítás felhasználása mellett 6 bájt hosszú, az 6 darab üzenetet jelent a buszon fizikailag. Így néz ki egy adatkeret vázlatosan a buszon:
2. ábra – Soros kommunikáció adatkeret
- Adatvonal
A tényleges fizikai közeg, amin a kommunikáció folyik. RS485 esetén ez egy D+/D- (A/B) csavart vezeték pár. Fontos, hogy csavart érpáron folyjék a kommunikáció, hiszen ennek a differenciális megoldásnak pontosan az a lényege, hogy a két vezetéken ugyan olyan mértékben jelenjen meg egy esetleges zavarjel. Ha hosszabb szakaszon meg van bontva ez a csavarás, akkor előfordulhat csomagvesztés, illetve hibás adatok átadása is.
- Órajel
A soros kommunikáció egyik alappillére az eszközök által egységesen használt adatátviteli sebesség, ami a képen látható órajellel egyenesen arányos. Amennyiben két eszköz két különböző adatátviteli sebességgel próbálnak kommunikálni, úgy nem lesz lehetőségük egymás üzeneteinek feldolgozására.
- Start bit
Ez az 1 bitnyi jel hordozza azt az információt, hogy adatátadás kezdődik.
- Adat
Ez a mező tartalmazza az átadni kívánt adatot. A mérete leggyakrabban 8 bit (1 bájt), azonban bizonyos esetekben lehetőség van 7 bit hosszúságú adatmező használatára is.
- Paritás bit
Ez a bit egy kisebb hibaellenőrzési funkciót lát el. Működési elve, hogy az adatcsomagban lévő 1 értékek mennyiségének megfelelően változtatja az értékét. Típusa lehet páros, páratlan, vagy akár ki is lehet kapcsolni. 1-1 bitnyi tévesztés detektálására tökéletesen alkalmas, viszont sajnos ha több bit értéke sérül meg a csomagban, kisebb eséllyel fogja detektálni a hibát. Értelmezése a fogadó oldalon történik meg a CRC kódhoz hasonlóan: ha újbóli számítás során különböző a paritás bit értéke a csomagban kapottól, akkor az üzenet egész biztosan hibás.
- Stop bit
Ez a bit jelzi az adatcsomag végét. Hosszúsága eltérő lehet, például egyes eszközöknél van lehetőség 1 illetve 2 stop bit kiválasztására is.
Az eddig leírt RS485 üzenet jól láthatóan kizárólag akkor értelmezhetőek a fogadó fél részére, ha mindkét kommunikációs fél ugyan olyan beállításokkal rendelkezik. Ezek a beállítások a következők néhány gyakori alapértelmezett értékkel:
Adatátviteli sebesség (Baud rate) | 9600, 19200, 115200… |
Adat bitek száma (Data bits) | 8, ritkán 7 |
Stop bitek száma (Stop bits) | 1, néha 2 |
Paritás (Parity bit) | Páros, páratlan vagy nincs |
Használt protokoll | RTU vagy ASCII |
Modbus távolabbról, hálózati topológia
A lehetséges hálózati topológiákat lényegében nem a Modbus, hanem az alkalmazott protokoll által használt fizikai réteg határozza meg. Ez Modbus TCP/IP és Modbus UDP/IP esetén Ethernet alapú hálózatot jelent switchekkel, routerekkel és akár internet hozzáféréssel, Modbus RTU és Modbus ASCII esetén pedig csavart érpárt, kisebb leágazásokat és lezáró ellenállásokat jelent.
Az Ethernet alapú változatok esetén a master-slave kommunikáció kliens-szerver formában értelmeződik újra. A kettő között a legnagyobb különbség, hogy a slave eszközön futó szerver akár több master eszköz kliensének a kiszolgálására is alkalmas lehet, míg eredetileg ez a hagyományos RS485 alapú kommunikációval nem volt lehetséges (vagy csak nagyon körülményesen sok kompromisszum megkötésével). Az Ethernet alapú Modbus kommunikáció dedikált portja TCP és UDP protokoll esetén is 502. Ha a kommunikáció több útválasztón keresztül történik, akkor mindenképp biztosítani kell az 502- es port elérhetőségét. Erre számos módszer van a port továbbítástól kezdve a VPN kapcsolatok kiépítéséig. Egy jól felépített topológia esetén a kliensnek el kell tudnia érnie a szervert Modbus használata nélkül is (például ICMP protokollal, pingeléssel). Ha a két eszköz közötti vonal nem rendelkezik elfogadható adatvesztéssel, akkor érdemes ellenőrizni a csatlakozók minőségét, Ethernet kábelhosszokat, átjáró konfigurációkat. Ez után a Modbus port ellenőrzéséhez már közvetlenül használható a telepíteni kívánt alkalmazás. Ha az elérhetőségi vizsgálat után nem tapasztalható hálózati zavar, viszont a kliens alkalmazás nem éri el a szervert (timeout hibára fut), akkor biztos, hogy a használni kívánt porttal van valami probléma a hálózaton. Ha IP és port szinten is elérhető az eszköz, akkor legtöbb esetben a topológiai hibák kizárhatóak.
RS485 alapú kommunikáció esetén a topológia kialakítása már kissé bonyolultabb feladat, ugyanis egy Ethernet végpont nagyobb valószínűséggel érhető el egy eszköz közelében, mint egy szabad felhasználású több eres (esetleg árnyékolt) kábel. Az első és legfontosabb feladat a kábel nyomvonalának megtervezése. Rendkívül fontos, hogy az eszközök hogyan csatlakoznak a kommunikációs buszhoz:
3. ábra – RS485 topológiai ajánlás
A megfelelő nyomvonal megtervezését a kábel kiválasztása követi. Lehetőleg olyan kábelt kell alkalmazni, aminek a belsejében az adatvonalat alkotó két ér csavarva van. Ugyan tesztkörnyezetben működhet a rendszer rövid vezetékek mellett önálló vezetékekkel, viszont nagyobb távolságok esetén ez megkerülhetetlen. Erre a feladatra gyakran szoktak használni árnyékolt Ethernet kábeleket is, hiszen ezek 4 darab csavart érpárral rendelkeznek. Fontos szempont az is, hogy bizonyos esetekben nem elegendő a hálózat 2 vezetékes kiépítése, hanem szükség lehet akár 4+1-re is. Ezek sorra: D+, D-, Tápfeszültség, GND és Shield (árnyékolt kábel esetén). Amennyiben a megfelelő nyomvonalon elhelyezésre került a megfelelő kábel csupán a D+/D- vezetékek bekötésének helyességére, és a lezáró ellenállások használatára kell odafigyelni. A lezáró ellenállások használata sokat javíthat egy adatvonal csatornájának minőségén. Általában az lezáró elem értéke 120 Ohm, amiből egyet a busz első eleménél, egyet pedig az utolsónál szokás a D+ és D- vezetékek közé kötni. Ezeknek az ellenállásoknak a használata erősen javasolt minden alkalmazásban! Mára már több olyan eszköz is létezik, ami képes szoftveresen ezt az ellenállást az adatvezetékek közé kapcsolni, így ezzel kiváltható a külső ellenállás használata. Ha minden a szabványban leírt megkötést betartva kerül kiépítésre a hálózat, akkor az első és utolsó eszköz között akár 1,2 km távolság is lehetséges. Ez a távolság minden egyes szabványtól való eltérést követően és a helyszíni adottságok függvényében különböző mértékkel csökken egészen 0- ig. Amennyiben minden ajánlás megtartása mellett sem sikerült két eszköz között feléleszteni a kommunikációt, érdemes például első lépésben baud rate csökkentéssel, azaz kisebb kommunikációs terheléssel ellenőrizni a közeget. Amennyiben minimális igénybevételű adatcsomagok (például néhány karakter) átadása sem lehetséges, úgy biztosan javítani kell a csatorna minőségén a fent leírt ajánlások szigorításával (mint például kábelhossz csökkentéssel, és árnyékolt kábel használatával).
Modbus használata WAGO PLC- vel a következő cikkben…