Modbus RTU, Modbus TCP és RS-485: működés, bekötés és hibakeresés
A frekvenciaváltó nem veszi a fordulatszám-alapjelet, az energiamérő nulla értéket ad, a PLC időtúllépést jelez — a Modbus-hibák mögött ritkán áll bonyolult ok. Ez a cikk elmagyarázza, hogyan működik a Modbus RTU és a Modbus TCP, hogyan kell helyesen bekötni egy RS-485 buszt, és tünet szerint végigvezet a hibakeresésen.
- 01Mi a Modbus, és hol találkozik vele?
- 02Modbus RTU, ASCII és TCP: mi a különbség?
- 03Adatmodell, funkciókódok és hibakódok (exception)
- 04Az RS-485 busz: felfűzés, lezárás, előfeszítés
- 05Soros beállítások: cím, sebesség, paritás, időzítés
- 06Hibakeresés lépésről lépésre: tünet, ok, ellenőrzés
- 07Tipikus terepi hibák
- 08Mérőeszközök, és mikor maga az eszköz a hibás?
- 09Gyakori kérdések
A Modbus nyílt, egyszerű ipari kommunikációs protokoll, amelyet a Modicon fejlesztett ki 1979-ben a PLC-ihez: egy master (az újabb szabványszövegekben kliens) kérdez, a slave-ek (szerverek) válaszolnak, az adatot pedig számozott bitekben és 16 bites regiszterekben cserélik. Soros vonalon (jellemzően RS-485) Modbus RTU-ként, Ethernet-hálózaton Modbus TCP-ként fut, és ma is az egyik leggyakoribb közös nyelv a frekvenciaváltók, energiamérők, hőmérséklet-szabályzók, PLC-k és HMI-k között. A terepi hibák többsége nem a protokollban, hanem a bekötésben és a beállításban keresendő — ezért a cikk a fizikai rétegtől halad a hibakódok felé.
Mi a Modbus, és hol találkozik vele?
A Modbus azért terjedt el ennyire, mert nyílt és licencdíj nélkül használható (ma a független Modbus Organization gondozza), a protokoll pedig annyira egyszerű, hogy szinte minden gyártó beépíti. Egy tipikus gépben vagy épületgépészeti rendszerben Modbuson kommunikál:
- frekvenciaváltók és lágyindítók — indítás/leállítás, fordulatszám-alapjel, áram, hibakód kiolvasása;
- energia- és teljesítménymérők — feszültség, áram, teljesítmény, fogyasztás;
- hőmérséklet- és folyamatszabályzók, távadók, szelep- és szivattyúvezérlők;
- PLC-k, HMI-k és átjárók (gateway-ek), amelyek a soros Modbus-eszközöket Ethernet-hálózatra, SCADA-ba vagy felhőbe kötik.
A működés kérdés–válasz alapú: soros vonalon egyetlen master van, amely sorban megszólítja a slave-eket, és mindig csak a megszólított eszköz válaszol. A slave magától soha nem küld adatot. Ez egyszerűvé teszi a hibakeresést is: ha nincs válasz, vagy a kérés nem jutott el, vagy a slave nem tudott (vagy nem akart) válaszolni.
Az OT-hálózat szegmentálásáról és védelméről a NIS2 és az ipari vezérlés cikkben írtunk.
Modbus RTU, ASCII és TCP: mi a különbség?
Ugyanaz az alkalmazási réteg (funkciókódok, adatmodell) háromféle „csomagolásban” fut:
- Modbus RTU — bináris kódolás soros vonalon (RS-485, ritkábban RS-232). A keret: slave-cím (1 bájt) + funkciókód (1 bájt) + adat + CRC-16 ellenőrzőösszeg (2 bájt). A kereteket legalább 3,5 karakteridőnyi szünet választja el; ez 9600 bit/s-on kb. 4 ms, 19 200 bit/s-on kb. 2 ms, 19 200 bit/s fölött a specifikáció fix 1,75 ms-ot javasol. Kompakt és gyors — terepen ez a leggyakoribb.
- Modbus ASCII — minden bájt két hexadecimális ASCII-karakterként utazik, a keret kettősponttal kezdődik és CR LF-fel zárul, az ellenőrzés LRC. Lassabb, ma már ritkán használják, főleg régi eszközöknél vagy modemes kapcsolatnál.
- Modbus TCP — Ethernet-hálózaton, TCP-kapcsolaton, alapértelmezetten az 502-es porton. A soros címet és a CRC-t egy 7 bájtos MBAP-fejléc váltja (tranzakció-azonosító, protokoll-azonosító, hossz, Unit ID); az adatintegritásról a TCP/IP gondoskodik, ezért külön CRC nincs. Egy szervert — az eszköz által engedett kapcsolatszámig — több kliens is lekérdezhet egyszerre.
A Modbus TCP-ben az Unit ID mező átjárón keresztül a mögötte lévő soros slave címét jelöli; közvetlen TCP-eszköznél sok gyártó figyelmen kívül hagyja, mások 1-et vagy 255-öt várnak. Gyakori csapda a „Modbus RTU over TCP” is: ez RTU-keretet (CRC-vel, MBAP nélkül) küld TCP-n — ha az egyik oldal ezt, a másik szabványos Modbus TCP-t vár, a kommunikáció egyszerűen nem jön létre.
Adatmodell, funkciókódok és hibakódok (exception)
A Modbus négy adattípust ismer. Az eszköz kézikönyvének regisztertáblázata megmondja, melyik adat hol található, és melyik funkciókóddal érhető el:
| Adattípus | Hagyományos jelölés | Méret, hozzáférés | Funkciókódok |
|---|---|---|---|
| Coil (kimeneti bit) | 0x — 00001… | 1 bit, írható/olvasható | 01 olvasás, 05 egy írása, 15 több írása |
| Discrete input (bemeneti bit) | 1x — 10001… | 1 bit, csak olvasható | 02 olvasás |
| Input register | 3x — 30001… | 16 bit, csak olvasható | 04 olvasás |
| Holding register | 4x — 40001… | 16 bit, írható/olvasható | 03 olvasás, 06 egy írása, 16 több írása |
Egy kérésben legfeljebb 125 regiszter olvasható (03, 04), 123 írható (16), illetve 2000 bit olvasható (01, 02); sok eszköz ennél kisebb blokkot enged. Ha a slave érti a kérést, de nem tudja teljesíteni, exception választ küld: a funkciókód legfelső bitje 1 lesz (03 helyett 0x83), utána jön a hibakód:
- 01 – Illegal Function: az eszköz nem ismeri ezt a funkciókódot (például 04-gyel kérdezi, de csak 03-at támogat).
- 02 – Illegal Data Address: a kért cím vagy címtartomány nem létezik — leggyakrabban egy-eltolás, vagy a blokk egy nem létező regiszterbe lóg át.
- 03 – Illegal Data Value: érvénytelen érték vagy darabszám (például 125-nél több regiszter, tartományon kívüli írt érték).
- 04 – Slave (Server) Device Failure: az eszköz belső hibája miatt nem tudta végrehajtani a kérést — az eszköz saját diagnosztikáját kell megnézni.
- 06 – Device Busy, illetve átjárón keresztül 0A – Gateway Path Unavailable és 0B – Gateway Target Device Failed to Respond: az átjáró nem éri el, vagy nem kap választ a soros oldali slave-től.
Ha a kommunikáció működik, de az érték értelmetlen: a 32 bites adat (lebegőpontos szám, nagy számláló) két regiszteren ül, és a szósorrendet a gyártók eltérően kezelik — próbálja felcserélni a két regisztert. Gyakori még a skálázás (például 0,1 Hz vagy 0,01 A egység) és az előjeles/előjel nélküli értelmezés eltérése.
Az RS-485 busz: felfűzés, lezárás, előfeszítés
Az RS-485 differenciális, kétvezetékes, félduplex átvitel: ugyanazon az érpáron felváltva ad a master és a slave. A jel a két vezeték (A és B) közötti feszültségkülönbség, ezért jól tűri a zavart — ha a busz felépítése szabályos.
- Felfűzés (daisy-chain), nem csillag: a busz egyetlen vonal, amely eszközről eszközre megy. Csillagpont és hosszú leágazás (stub) jelvisszaverődést okoz; a leágazás legyen minél rövidebb (a Modbus soros specifikáció felső határként 20 m-t említ, gyakorlatban néhány méter alatt érdemes tartani).
- Lezárás csak a két végén: a busz két legtávolabbi pontján egy-egy, jellemzően 120 Ω-os lezáró ellenállás kell A és B közé. Közbenső eszközön a beépített lezárást ki kell kapcsolni.
- Előfeszítés (bias, fail-safe): amikor senki nem ad, a vonalat egy ellenálláspár határozott nyugalmi állapotban tartja, különben a vevők zajt értelmeznek adatként. Jellemzően egy helyen, a masternél (vagy ahogy az eszközök kézikönyve előírja) kell bekapcsolni — sok helyen bekapcsolva túlterheli a buszt.
- Közös referencia (Common / GND): a két jelvezető mellett harmadik vezető köti össze az eszközök referenciapontját; a Modbus soros specifikáció ezt kétvezetékes buszon is előírja. Nélküle a földpotenciál-különbség kiléphet az RS-485 vevők közös módusú tartományából (−7…+12 V).
- Kábel: árnyékolt, csavart érpáras kábel, jellemzően 100–120 Ω hullámimpedanciával. 19 200 bit/s-ig jellemzően 1000–1200 m buszhossz érhető el; motorkábeltől, különösen frekvenciaváltó kimeneti kábelétől távol vezesse.
- Eszközszám: az RS-485 szabvány szegmensenként 32 egységterhelést (unit load) enged, ismétlő (repeater) nélkül tehát jellemzően 32 eszköz fér a buszra; 1/4 vagy 1/8 egységterhelésű transzceiverekkel több is.
Ugyanerre a fizikai rétegre épül a Profibus DP is, ezért a lezárási és kábelezési szabályok sok ponton azonosak — lásd a Profibus DP hibakeresés cikket.
Soros beállítások: cím, sebesség, paritás, időzítés
Egy RS-485 buszon minden eszköznek ugyanazzal a sebességgel és keretformátummal kell kommunikálnia, és minden slave-nek egyedi címe kell, hogy legyen:
- Slave-cím: 1–247. A 0 a broadcast (minden slave végrehajtja, de egyik sem válaszol), a 248–255 foglalt. Az új eszközök gyári címe sokszor 1 — bővítéskor ebből lesz a címütközés.
- Sebesség (baud rate): a specifikáció a 9600 és a 19 200 bit/s támogatását írja elő, alapértelmezésként a 19 200-at; terepen ez a kettő a leggyakoribb, de sok eszköz gyári beállítása 9600.
- Keretformátum: RTU-nál 8 adatbit; a specifikáció szerinti alapértelmezés páros paritás és 1 stopbit (8E1), paritás nélkül 2 stopbit (8N2). A gyakorlatban sok eszköz gyárilag 8N1-re van állítva — nem a „helyes” érték számít, hanem hogy minden eszközön egyezzen.
- Válaszidő-túllépés (timeout): mennyit vár a master a válaszra. Jellemzően 100 ms és 1 s között kell beállítani az eszközök kézikönyve szerint; túl rövid értéknél a lassabban válaszoló slave „időnként kiesik”.
- Lekérdezési ciklus: a túl sűrű lekérdezés, vagy a keretek közötti szünet hiánya terhelheti a lassabb slave-eket. Frekvenciaváltóknál fordított a veszély: ha a master túl ritkán kérdez, a hajtás kommunikációs felügyelete (watchdog) hibával leállíthatja a motort.
Hibakeresés lépésről lépésre: tünet, ok, ellenőrzés
Mindig alulról felfelé haladjon: előbb a vezeték és a fizikai réteg, aztán a soros beállítások, végül a címzés és a regiszterek. Ha lehet, kösse le a buszt, és egyetlen eszközzel, laptopról próbálja ki — így elválik egymástól a master, a busz és az eszköz hibája.
| Tünet | Valószínű ok | Mit ellenőrizzen? |
|---|---|---|
| Egyik slave sem válaszol (csak timeout) | Felcserélt A/B, eltérő baud rate vagy paritás, rossz port vagy 2/4 vezetékes mód, hiányzó közös referencia | Soros beállítások mindkét oldalon; A/B próbacsere; a master TX és a slave RX LED-je villog-e |
| Egy slave nem válaszol, a többi igen | Rossz vagy ütköző cím, a protokoll nincs engedélyezve, laza bekötés annál az eszköznél, sérült interfész | Cím és soros paraméterek az eszközön; az eszköz önállóan, laptopról; bekötés és sorkapocs |
| Válasz jön, de CRC- vagy keretezési hibás | Paritás/stopbit eltérés, hiányzó vagy fölösleges lezárás, csillag-topológia, zaj, címütközés | Lezárás ellenállásmérése; árnyékolás és kábelvezetés; két eszköz azonos címe |
| Exception 01 / 02 / 03 | Nem támogatott funkciókód, egy-eltolás vagy nem létező cím, túl nagy blokk vagy érvénytelen érték | Funkciókód a kézikönyv szerint (03 vagy 04); cím ±1; kisebb blokkméret |
| Exception 04 | Az eszköz belső hibája | Az eszköz saját hibakódja, diagnosztikája; újraindítás után ismétlődik-e |
| Időnkénti kiesés, motorindításkor gyakoribb | Túl rövid timeout, túl sűrű lekérdezés, EMC-zavar, határeset lezárás vagy előfeszítés, laza csatlakozó | Timeout növelése; összefüggés a hajtások indításával; kábelvezetés, árnyékolás, csatlakozók |
| Kommunikál, de az érték hibás | Egy-eltolás, szósorrend, skálázás, előjel | Összevetés az eszköz kijelzőjével; regiszterpár csere; skálatényező |
| Laptoppal megy, a PLC-vel nem | A konverter adta az előfeszítést vagy lezárást; a PLC-port beállítása (2W/4W, timeout) eltér | Előfeszítés a masternél; a PLC soros moduljának paraméterezése |
- Lezárás mérése: minden eszköz kikapcsolt állapotában mérje meg az ellenállást A és B között. Két 120 Ω-os lezárásnál jellemzően 60 Ω körüli értéket kap; kb. 120 Ω egy hiányzó, 40 Ω körüli érték egy fölösleges lezárásra utal.
- Nyugalmi feszültség: bekapcsolt, de forgalom nélküli buszon a két vezeték között legalább kb. 200 mV különbség kell (jellemzően néhány száz mV) — ha nincs, hiányzik az előfeszítés, vagy egy eszköz lehúzza a buszt.
- Felezéses módszer: ha az egész busz leáll, kösse le a busz felét, és nézze, melyik szakaszon marad a hiba — így gyorsan megtalálja a buszt terhelő eszközt vagy kábelszakaszt.
PROFINET-, Profibus- és Modbus-rendszerekre közös ellenőrzőlistát a PLC nem kommunikál cikkben talál.
Tipikus terepi hibák
A helyszíni Modbus-hibák nagy része ugyanabból a tíz hibából adódik:
- Felcserélt A/B — főleg vegyes gyártójú eszközöknél, a következetlen jelölés miatt.
- Címütközés — két eszköz azonos címmel (sokszor a gyári 1-es címmel) egyszerre válaszol, a keret eltorzul.
- Eltérő paritás vagy stopbit — az egyik eszköz 8E1, a másik 8N1; a sebesség stimmel, mégsem jön érvényes válasz.
- Hiányzó lezárás, vagy lezárás a busz közepén — bekapcsolva felejtett beépített lezárás egy közbenső eszközön.
- Csillag-topológia és hosszú leágazások — „kényelmes” elosztódobozos bekötés a felfűzés helyett.
- Árnyékolás és földelés — bekötetlen árnyékolás, vagy árnyékolás mint közös vezető; távoli, eltérő földpotenciálú pontok között kiegyenlítő áram folyhat rajta. Az árnyékolás bekötésénél kövesse a gyártói szerelési útmutatót; a közös (Common) vezetőt a Modbus soros specifikáció szerint lehetőleg egyetlen ponton, jellemzően a masternél kell a védőföldre kötni.
- Hiányzó közös referenciavezető — az asztalon működik, a csarnokban nem.
- Motorkábellel közös kábeltálca — a frekvenciaváltó kimenete erős zavarforrás; a jelkábelt különítse el, a kereszteződés legyen merőleges.
- Túl rövid timeout — a slave válaszolna, de a master addigra feladta.
- Túl sűrű lekérdezés vagy túl nagy blokk — a lassabb eszköz nem győzi, vagy 03-as hibakóddal utasítja el a kérést.
Mérőeszközök, és mikor maga az eszköz a hibás?
- USB–RS-485 konverter és Modbus master (poll) szoftver: laptopról közvetlenül lekérdezheti az eszközt, és kizárhatja a PLC-t vagy az átjárót. Lehetőleg galvanikusan leválasztott, automatikus adásirány-váltású konvertert használjon.
- Csak hallgató soros monitor: egy második konverterrel, adás nélkül figyelheti a buszon zajló forgalmat — ügyeljen, hogy ez ne adjon a buszhoz újabb lezárást vagy előfeszítést.
- Multiméter: lezárás ellenállása kikapcsolt állapotban, nyugalmi különbségi feszültség, A és B feszültsége a közös referenciához képest.
- Oszcilloszkóp: különbségi méréssel (két csatorna A−B matematikai módban, vagy differenciális mérőfej) látszik a jelamplitúdó, a visszaverődés, a zaj és az, hogy a zavar a motorok indításával együtt jelentkezik-e. A hálózati földelésű oszcilloszkóp földcsipeszét ne kösse A-ra vagy B-re.
- Modbus TCP-nél: elérhetőség (ping), az 502-es port, és a forgalom rögzítése Modbus-dekóderes hálózati forgalomelemzővel.
Mikor az eszköz a hibás? Ha a busz bekötése, lezárása és beállítása rendben van, egy eszköz mégsem válaszol — vagy a csatlakoztatásakor az egész busz leáll —, jó eséllyel az eszköz RS-485 interfésze sérült. Ennek tipikus oka túlfeszültség: villám okozta tranziens hosszú vagy épületek közötti kábelen, hegesztési áram, kiegyenlítetlen földpotenciál, vagy téves bekötés (például 24 V az A/B kapcsokon). Előfordul, hogy a sérült transzceiver az egész buszt lehúzza; ilyenkor az A–Common és B–Common ellenállása kikapcsolt állapotban eltér egy ép, azonos típusú eszközétől. Frekvenciaváltóknál és energiamérőknél ez jellemző hiba.
- Frekvenciaváltó, lágyindító soros portja vagy kommunikációs kártyája: frekvenciaváltó javítás
- PLC CPU soros portja, kommunikációs modulja (CP/CM): PLC javítás
- HMI soros (RS-485/RS-422) interfésze: HMI javítás
Ezeket az interfészeket komponens-szinten javítjuk, a javított eszközt bekapcsolt állapotban, funkcionálisan ellenőrizzük. Hosszú vagy épületek közötti buszon érdemes leválasztott ismétlőt és túlfeszültség-védelmet is tervezni, hogy a hiba ne ismétlődjön.
Ha nem hibát keres, hanem új Modbus-eszközöket kötne PLC-hez, SCADA-hoz, vagy RTU–TCP átjárón keresztül adatgyűjtő rendszerbe, azt az automatizálási projektjeink keretében tervezzük és helyezzük üzembe. Hogy a Modbus-adat hogyan jut tovább gyári szintre, arról a MQTT vagy OPC UA cikk szól.
Gyakori kérdések
Mi a különbség a Modbus RTU és a Modbus TCP között?
A Modbus RTU soros vonalon (jellemzően RS-485) fut bináris keretekkel, slave-címmel és CRC-16 ellenőrzőösszeggel, egyetlen masterrel. A Modbus TCP Ethernet-hálózaton, az 502-es TCP-porton fut; a cím és a CRC helyett 7 bájtos MBAP-fejlécet használ, és egy eszközt több kliens is lekérdezhet. A funkciókódok és az adatmodell mindkettőben azonos.
Miért nem válaszol a Modbus slave?
A leggyakoribb okok: felcserélt A/B vezeték, eltérő baud rate vagy paritás, rossz slave-cím vagy címütközés, hiányzó lezárás vagy közös referencia, túl rövid timeout, illetve az, hogy az eszközön nincs a Modbus RTU protokoll kiválasztva. CRC-hibás vagy nem neki címzett kérésre a slave nem válaszol, ezért a master csak időtúllépést lát. Ha mindezt kizárta, az eszköz RS-485 interfésze lehet sérült.
Kell lezáró ellenállás az RS-485 buszra?
Igen: a busz két legtávolabbi végén egy-egy, jellemzően 120 Ω-os lezáró ellenállás kell az A és B vezeték közé, a közbenső eszközökön viszont nem. Rövid buszon, alacsony sebességen lezárás nélkül is működhet, de a hiányzó vagy fölösleges lezárás a CRC-hibák és az időnkénti kiesések egyik leggyakoribb oka. Kikapcsolt eszközöknél A és B között jellemzően 60 Ω körüli értéket kell mérni.
Hány eszköz lehet egy RS-485 buszon?
Az RS-485 szabvány szegmensenként 32 egységterhelést enged, így ismétlő nélkül jellemzően 32 eszköz (a masterrel együtt) köthető egy szegmensre. Kisebb terhelésű transzceiverekkel vagy ismétlőkkel több is lehet, a Modbus címtartománya pedig legfeljebb 247 slave-et enged. A gyakorlatban a lekérdezési ciklusidő is korlátoz.
Mit jelent a 02-es Modbus hibakód (exception)?
A 02 az „Illegal Data Address”: a slave nem ismeri a kért címet, vagy a kért blokk egy nem létező regiszterbe lóg át. Leggyakrabban egy-eltolás okozza (40001 vagy 0 vagy 1), ezért először próbálja eggyel kisebb vagy nagyobb címmel, illetve kisebb blokkmérettel.
Mit jelent a 40001-es regisztercím?
A 40001 a holding register-tartomány első elemének hagyományos jelölése: a 4-es előtag a típust jelzi, a vezetéken viszont a 0-s cím megy 03-as funkciókóddal. A master szoftverek eltérően értelmezik, ezért a cím gyakran eggyel elcsúszik — ilyenkor a szomszédos regiszter értékét kapja, vagy 02-es hibakódot.
Beköthető az RS-485 busz csillagpontosan?
Nem ajánlott. Az RS-485 buszt eszközről eszközre felfűzve (daisy-chain) kell vezetni, rövid leágazásokkal; a csillagpont és a hosszú leágazás jelvisszaverődést és időnkénti kommunikációs hibát okoz. Ha a helyszín csillag elrendezést kíván, arra RS-485 elosztó-ismétlő (hub) vagy Ethernetes megoldás való.
Javítható a frekvenciaváltó vagy az energiamérő Modbus (RS-485) portja?
Sok esetben igen. A túlfeszültség vagy téves bekötés után sérült RS-485 meghajtó áramkör, a kommunikációs kártya és a csatlakozó komponens-szinten javítható; az eszközt bevizsgálás után, funkcionálisan ellenőrizve adjuk vissza. Érdemes a kiváltó okot (földpotenciál, túlfeszültség-védelem hiánya) is megszüntetni.