Modbus network linking a controller with distributed field devices

Modbus: Az eredeti ipari terepibusz-protokoll

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

A terepibusz ipari hálózatokban használt kommunikációs protokoll, amely a terepi eszközöket ipari vezérlőkhöz csatlakoztatja. A terepibusz csökkenti a vezérlők és eszközök közötti szükséges kábelezés mennyiségét, mivel több eszköz ugyanahhoz a két vezetékhez csatlakozhat.

Számos népszerű terepibusz-technológia létezik, köztük a Modbus, a Profibus, a Foundation Fieldbus, a ControlNet, a DeviceNet és sok más.

1979-ben a Modicon új protokollt vezetett be, amely az OSI-modell alkalmazási rétegét használta ki, kifejezetten a PLC-ihez. Ezt a protokollt Modbusnak nevezték el, és ez lett az automatizálás történetének első széles körben használt terepi busza.

 

Terepibuszon keresztül terepi eszközökhöz csatlakoztatott PLC

1. ábra. Terepi eszközökhöz csatlakoztatott PLC 

 

Bevezetés a Modbusba

A Modbust a terepi eszközök ipari vezérlőkhöz való csatlakoztatására tervezték. Feltalálásakor a legtöbb eszköz feszültség- vagy áramértékekkel reprezentálta és kommunikálta az állapotát. A Modbus hatékonyan képes kezelni az érzékelők és beavatkozók magas/alacsony állapotát tükröző diszkrét biteket, valamint az analóg folyamatértékeknek megfelelő egész számokat tároló regisztereket.

A terepibusz-technológiákra való lassú áttérés következtében a Modbus az egyik legegyszerűbb protokoll lett, amelyhez az évek során új verziókat is hozzáadtak.

A Modbust eredetileg soros kommunikációs kapcsolaton, azaz RS-232/RS-485-ön keresztül valósították meg. Ezek a változatok ma is gyakran használatosak Modbus RTU és ASCII néven. A protokollt később TCP/IP és Ethernet használatára is adaptálták. Ezt általában Modbus TCP-nek nevezik, és ez a Modbus leggyakoribb megvalósítása a modern telepítésekben.

 

Kommunikációs modell

A Modbus kommunikációhoz mester/szolga modellt használ (Modbus TCP esetén kliens/szerver modellt). A Modbus-mester kérést küld egy Modbus-szolgának, amely végrehajtja a műveleteket, majd választ küld a mesternek. Ebben a helyzetben a mester gyakran PLC, míg a terepi eszközök szolgaként működnek. 

A Modbusban az üzenetkeret egy alkalmazási adategységből (ADU) és egy protokoll-adategységből (PDU) áll. Az ADU a használt Modbus típusától függően eltérő, míg a PDU független a kommunikációs módszertől.

A PDU általában egy funkciókódból és némi adatból áll. Ezt az ADU egy címmel és hibavizsgálati kóddal egészíti ki. A Modbus TCP az ADU-ban MBAP (Modbus alkalmazási protokoll) fejlécet használ.

 

2. ábra. Modbus ADU és PDU Modbus ASCII/RTU (felül), illetve Modbus TCP (alul) esetén. A kép a Modbus.org alapján készült

 

Ahhoz, hogy a PDU független maradjon az alapul szolgáló kommunikációs rétegtől, meg kell felelnie az eredeti soros specifikáció méretkorlátainak. Ez az RS-485-ön továbbított ADU esetében 256 bájt volt. Ezért figyelembe kell vennünk az ADU-t: 1 cím bájtot és 2 hibakereső bájtot, ami azt jelenti, hogy a PDU teljes mérete legfeljebb 253 bájt lehet. Ne feledje, hogy az ADU-ban szereplő cím valójában a Modbus-hálózaton lévő slave eszköz azonosítója.

A PDU adatrésze a funkciókódhoz tartozó mezőket, valamint a ténylegesen továbbított adatokat tartalmazza. Ezeket a mezőket a cikk későbbi részében részletesen tárgyaljuk.

 

Adatábrázolás

A klasszikus Modbusnak két átviteli módja van: ASCII és RTU.

ASCII módban az adatokat 0–9 és A–F közötti ASCII-karakterekként küldik, míg RTU módban az adatok 8 bites bináris formában jelennek meg. Az adatokat és a címeket big-endian kódolással kódolják, ezért a legjelentősebb bájt kerül elsőként továbbításra.

A Modbus-adatoknak négy elsődleges típusa van:

  • Diszkrét bemenetek
  • Tekercsek (kimenetek)
  • Bemeneti regiszterek
  • Tartóregiszterek

A diszkrét bemenetek egyetlen adatbitet jelentenek, és csak olvashatók. A tekercsek szintén egyetlen bitet jelentenek, de olvashatók és írhatók is. A bemeneti regiszterek 16 bites csak olvasható adatokat jelentenek, míg a tartóregiszterek 16 bites írható-olvasható adatokat tartalmaznak.

 

3. ábra. Forrás: Modbus-protokoll specifikációja

 

Mindegyik típus esetén legfeljebb 2^16 (65536) adatelem helyezhető el az eszköz memóriájában. Az egyes adattípusok eléréséhez külön funkciókódok tartoznak, és gyakran minden típus saját dedikált memóriablokkal rendelkezik.

Egy adatelem címzéséhez a master egyszerűen a 0–65535 közötti tartományt használja. Az 1. adatelem a 0x0000 címen található. A 2. adatelem címe 0x0001. A 65536. adatelem a 0xFFFF címen található. Ne feledje, hogy az eszközöknek nem kötelező mind a 65536 adatelemmel rendelkezniük; a legtöbb Modbust használó távoli I/O-terminál valójában jóval a maximális határérték alatt marad.

 

Modbus-tranzakciók

Most, hogy megértettük, hogyan történik az adatok ábrázolása a Modbusban, részletesen megvizsgálhatjuk a tranzakciókat. Ezt a PDU szemszögéből tesszük, mivel a PDU kommunikációs rétegtől független.

A Modbus-tranzakciók hexadecimális karakteres utasításokat használnak, ahol egyetlen 8 bites bájt 0x00 formátumú, és minden karakter esetén a 0–F tartományt használja. Egy 16 bites regiszter így két bájtnak felel meg, 0x0000 formátumban ábrázolva. 

A Modbus-specifikáció a PDU-k három típusát határozza meg:

  • Modbus-kérés
  • Modbus-válasz
  • Modbus kivételválasz

A master a funkciókód használatával kezdeményezi a kérést, a slave pedig válaszként küldi el a választ. Sikeres válasz esetén a slave visszaküldi a master által küldött funkciókódot. Kivételválasz esetén ugyanazt a funkciókódot küldi vissza, de az MSB-t (legnagyobb helyiértékű bitet) magasra állítja annak jelzésére, hogy valami hiba történt. 

A Modbus-specifikáció számos funkciókódot határoz meg. A 0x01 funkciókód a Read Coils funkciót jelöli.

A 4. ábra egy coilok olvasására irányuló kérés és válasz lehetséges formáját mutatja. A Modbus-master 0x01 funkciókóddal (Read Coils) küld kérést az első adatelemtől (0x0000 cím) kezdve, és mindössze egy coilt olvas. A Read Coils funkcióval egyszerre akár 2000 (0x7D0) coil is olvasható. 

 

4. ábra. Coilok olvasására irányuló tranzakció

 

Siker esetén a slave ugyanazzal a funkciókóddal, valamint a válaszban szereplő coilok számával válaszol. A coilok állapotát n bájt tartalmazza, amelyek mindegyik bitje azt jelzi, hogy az adott coil BE (1) vagy KI (0) van-e kapcsolva.

Ebben az esetben a 0x0000 címen található coil BE van kapcsolva. Ha a kérés nem járt volna sikerrel, a kivételválasz a magasra állított MSB-vel rendelkező funkciókódot (0x81), valamint egy, a hiba okát megmagyarázó kivételkódot tartalmazott volna. A 0x02 kivételkód azt jelenti, hogy érvénytelen adatcímet használtak, vagyis ennek a slave-nek a memóriájában nincs coil a 0x0000 címen. 

A következő példa egy egyetlen regiszter írására irányuló tranzakciót szemléltet (0x06 funkciókód). Ebben az esetben a master 0xA0A0 adatot kér a 0x00FF címen történő írásra. A slave válasza egyszerűen a kérés visszhangja.

Az itt látható példabeli kivételválasz a magasra állított MSB-vel rendelkező funkciókódot, valamint a 0x04 kivételkódot mutatja. Ez a kód azt jelenti, hogy helyreállíthatatlan hiba történt, miközben a slave megpróbálta végrehajtani a kérést. 

 

5. ábra. Egyetlen regiszter írására irányuló tranzakció 

 

Minden Modbus-funkciókód a fent bemutatott két példához hasonló mintát követ.

A 6. ábra a gyakori funkciókódok listáját mutatja a kivételválaszokhoz tartozó kivételkódokkal együtt. További információért tekintse meg a Modbus-specifikációt. 

 

6. ábra. Funkciókódok és kivételkódok

 

Összegzés

A Modbus lehetővé teszi, hogy a PLC-k különféle távoli egységekkel kommunikáljanak, többek között I/O-bankokkal, terminálegységekkel és egyéb vezérlőkkel. Ehhez szabványos módszert használ a diszkrét és egész szám típusú információk olvasására és írására, így szinte minden olyan esetet lefed, amely digitális adatok átvitelével jár.

A Modbus ma ipari szabványnak számít, és mindeddig a legelterjedtebb jogdíjmentes ipari protokoll, annak ellenére, hogy megelőzi a legtöbb modern vezérlőrendszer megjelenését. Világszerte megtalálható üzemekben és gyárakban, és hosszú fennállása ellenére várhatóan még sok éven át releváns ipari protokoll marad.

 

Eredeti cikk, megjelent 2019-ben

Modbus: Az eredeti ipari terepibusz-protokoll

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...

A terepibusz ipari hálózatokban használt kommunikációs protokoll, amely a terepi eszközöket ipari vezérlőkhöz csatlakoztatja. A terepibusz csökkenti a vezérlők és eszközök közötti szükséges kábelezés mennyiségét, mivel több eszköz ugyanahhoz a két vezetékhez csatlakozhat.

Számos népszerű terepibusz-technológia létezik, köztük a Modbus, a Profibus, a Foundation Fieldbus, a ControlNet, a DeviceNet és sok más.

1979-ben a Modicon új protokollt vezetett be, amely az OSI-modell alkalmazási rétegét használta ki, kifejezetten a PLC-ihez. Ezt a protokollt Modbusnak nevezték el, és ez lett az automatizálás történetének első széles körben használt terepi busza.

 

Terepibuszon keresztül terepi eszközökhöz csatlakoztatott PLC

1. ábra. Terepi eszközökhöz csatlakoztatott PLC 

 

Bevezetés a Modbusba

A Modbust a terepi eszközök ipari vezérlőkhöz való csatlakoztatására tervezték. Feltalálásakor a legtöbb eszköz feszültség- vagy áramértékekkel reprezentálta és kommunikálta az állapotát. A Modbus hatékonyan képes kezelni az érzékelők és beavatkozók magas/alacsony állapotát tükröző diszkrét biteket, valamint az analóg folyamatértékeknek megfelelő egész számokat tároló regisztereket.

A terepibusz-technológiákra való lassú áttérés következtében a Modbus az egyik legegyszerűbb protokoll lett, amelyhez az évek során új verziókat is hozzáadtak.

A Modbust eredetileg soros kommunikációs kapcsolaton, azaz RS-232/RS-485-ön keresztül valósították meg. Ezek a változatok ma is gyakran használatosak Modbus RTU és ASCII néven. A protokollt később TCP/IP és Ethernet használatára is adaptálták. Ezt általában Modbus TCP-nek nevezik, és ez a Modbus leggyakoribb megvalósítása a modern telepítésekben.

 

Kommunikációs modell

A Modbus kommunikációhoz mester/szolga modellt használ (Modbus TCP esetén kliens/szerver modellt). A Modbus-mester kérést küld egy Modbus-szolgának, amely végrehajtja a műveleteket, majd választ küld a mesternek. Ebben a helyzetben a mester gyakran PLC, míg a terepi eszközök szolgaként működnek. 

A Modbusban az üzenetkeret egy alkalmazási adategységből (ADU) és egy protokoll-adategységből (PDU) áll. Az ADU a használt Modbus típusától függően eltérő, míg a PDU független a kommunikációs módszertől.

A PDU általában egy funkciókódból és némi adatból áll. Ezt az ADU egy címmel és hibavizsgálati kóddal egészíti ki. A Modbus TCP az ADU-ban MBAP (Modbus alkalmazási protokoll) fejlécet használ.

 

2. ábra. Modbus ADU és PDU Modbus ASCII/RTU (felül), illetve Modbus TCP (alul) esetén. A kép a Modbus.org alapján készült

 

Ahhoz, hogy a PDU független maradjon az alapul szolgáló kommunikációs rétegtől, meg kell felelnie az eredeti soros specifikáció méretkorlátainak. Ez az RS-485-ön továbbított ADU esetében 256 bájt volt. Ezért figyelembe kell vennünk az ADU-t: 1 cím bájtot és 2 hibakereső bájtot, ami azt jelenti, hogy a PDU teljes mérete legfeljebb 253 bájt lehet. Ne feledje, hogy az ADU-ban szereplő cím valójában a Modbus-hálózaton lévő slave eszköz azonosítója.

A PDU adatrésze a funkciókódhoz tartozó mezőket, valamint a ténylegesen továbbított adatokat tartalmazza. Ezeket a mezőket a cikk későbbi részében részletesen tárgyaljuk.

 

Adatábrázolás

A klasszikus Modbusnak két átviteli módja van: ASCII és RTU.

ASCII módban az adatokat 0–9 és A–F közötti ASCII-karakterekként küldik, míg RTU módban az adatok 8 bites bináris formában jelennek meg. Az adatokat és a címeket big-endian kódolással kódolják, ezért a legjelentősebb bájt kerül elsőként továbbításra.

A Modbus-adatoknak négy elsődleges típusa van:

  • Diszkrét bemenetek
  • Tekercsek (kimenetek)
  • Bemeneti regiszterek
  • Tartóregiszterek

A diszkrét bemenetek egyetlen adatbitet jelentenek, és csak olvashatók. A tekercsek szintén egyetlen bitet jelentenek, de olvashatók és írhatók is. A bemeneti regiszterek 16 bites csak olvasható adatokat jelentenek, míg a tartóregiszterek 16 bites írható-olvasható adatokat tartalmaznak.

 

3. ábra. Forrás: Modbus-protokoll specifikációja

 

Mindegyik típus esetén legfeljebb 2^16 (65536) adatelem helyezhető el az eszköz memóriájában. Az egyes adattípusok eléréséhez külön funkciókódok tartoznak, és gyakran minden típus saját dedikált memóriablokkal rendelkezik.

Egy adatelem címzéséhez a master egyszerűen a 0–65535 közötti tartományt használja. Az 1. adatelem a 0x0000 címen található. A 2. adatelem címe 0x0001. A 65536. adatelem a 0xFFFF címen található. Ne feledje, hogy az eszközöknek nem kötelező mind a 65536 adatelemmel rendelkezniük; a legtöbb Modbust használó távoli I/O-terminál valójában jóval a maximális határérték alatt marad.

 

Modbus-tranzakciók

Most, hogy megértettük, hogyan történik az adatok ábrázolása a Modbusban, részletesen megvizsgálhatjuk a tranzakciókat. Ezt a PDU szemszögéből tesszük, mivel a PDU kommunikációs rétegtől független.

A Modbus-tranzakciók hexadecimális karakteres utasításokat használnak, ahol egyetlen 8 bites bájt 0x00 formátumú, és minden karakter esetén a 0–F tartományt használja. Egy 16 bites regiszter így két bájtnak felel meg, 0x0000 formátumban ábrázolva. 

A Modbus-specifikáció a PDU-k három típusát határozza meg:

  • Modbus-kérés
  • Modbus-válasz
  • Modbus kivételválasz

A master a funkciókód használatával kezdeményezi a kérést, a slave pedig válaszként küldi el a választ. Sikeres válasz esetén a slave visszaküldi a master által küldött funkciókódot. Kivételválasz esetén ugyanazt a funkciókódot küldi vissza, de az MSB-t (legnagyobb helyiértékű bitet) magasra állítja annak jelzésére, hogy valami hiba történt. 

A Modbus-specifikáció számos funkciókódot határoz meg. A 0x01 funkciókód a Read Coils funkciót jelöli.

A 4. ábra egy coilok olvasására irányuló kérés és válasz lehetséges formáját mutatja. A Modbus-master 0x01 funkciókóddal (Read Coils) küld kérést az első adatelemtől (0x0000 cím) kezdve, és mindössze egy coilt olvas. A Read Coils funkcióval egyszerre akár 2000 (0x7D0) coil is olvasható. 

 

4. ábra. Coilok olvasására irányuló tranzakció

 

Siker esetén a slave ugyanazzal a funkciókóddal, valamint a válaszban szereplő coilok számával válaszol. A coilok állapotát n bájt tartalmazza, amelyek mindegyik bitje azt jelzi, hogy az adott coil BE (1) vagy KI (0) van-e kapcsolva.

Ebben az esetben a 0x0000 címen található coil BE van kapcsolva. Ha a kérés nem járt volna sikerrel, a kivételválasz a magasra állított MSB-vel rendelkező funkciókódot (0x81), valamint egy, a hiba okát megmagyarázó kivételkódot tartalmazott volna. A 0x02 kivételkód azt jelenti, hogy érvénytelen adatcímet használtak, vagyis ennek a slave-nek a memóriájában nincs coil a 0x0000 címen. 

A következő példa egy egyetlen regiszter írására irányuló tranzakciót szemléltet (0x06 funkciókód). Ebben az esetben a master 0xA0A0 adatot kér a 0x00FF címen történő írásra. A slave válasza egyszerűen a kérés visszhangja.

Az itt látható példabeli kivételválasz a magasra állított MSB-vel rendelkező funkciókódot, valamint a 0x04 kivételkódot mutatja. Ez a kód azt jelenti, hogy helyreállíthatatlan hiba történt, miközben a slave megpróbálta végrehajtani a kérést. 

 

5. ábra. Egyetlen regiszter írására irányuló tranzakció 

 

Minden Modbus-funkciókód a fent bemutatott két példához hasonló mintát követ.

A 6. ábra a gyakori funkciókódok listáját mutatja a kivételválaszokhoz tartozó kivételkódokkal együtt. További információért tekintse meg a Modbus-specifikációt. 

 

6. ábra. Funkciókódok és kivételkódok

 

Összegzés

A Modbus lehetővé teszi, hogy a PLC-k különféle távoli egységekkel kommunikáljanak, többek között I/O-bankokkal, terminálegységekkel és egyéb vezérlőkkel. Ehhez szabványos módszert használ a diszkrét és egész szám típusú információk olvasására és írására, így szinte minden olyan esetet lefed, amely digitális adatok átvitelével jár.

A Modbus ma ipari szabványnak számít, és mindeddig a legelterjedtebb jogdíjmentes ipari protokoll, annak ellenére, hogy megelőzi a legtöbb modern vezérlőrendszer megjelenését. Világszerte megtalálható üzemekben és gyárakban, és hosszú fennállása ellenére várhatóan még sok éven át releváns ipari protokoll marad.

 

Eredeti cikk, megjelent 2019-ben

Hozzászólás írása

Felhívjuk a figyelmedet, hogy a hozzászólásokat jóvá kell hagyni a közzétételük előtt.