A vizsga projektmunkája élesben: egy Modbus TCP-s bővítőmodul beillesztése — és annak megtanulása, hogyan oldunk fel egy kétértelmű gyártói dokumentációt méréssel.

Ez a fejezet a vizsga „modulbővítés” projektmunkájának teljes kidolgozása. Egy Modbus TCP-s, 8 digitális bemenettel és 8 digitális kimenettel rendelkező modult illesztünk a CC100-hoz.

De van egy második, ennél is fontosabb tanulsága. A modul gyártói dokumentációja egy ponton kétértelmű — és a fejezet megmutatja, hogyan lehet egy ilyen helyzetet méréssel feloldani. Ez a készség többet ér, mint bármelyik konkrét regisztercím.

21.1 A modul bemutatása

A gyártó belső azonosítója Modbus_POE_ETH_IO_8CH; a termék megnevezése Industrial 8-Ch Ethernet Digital Input/Output Module. Érdemes mindkettőt tudni, mert a beszerzésnél a kereskedők hol az egyiket, hol a másikat használják.

Jellemző Érték
I/O „8DI / 8DO isolated digital input/output”2
Bemenet „5 ~ 36 V, dry contact/wet contact (NPN or PNP type), built-in bidirectional optocoupler”2
Kimenet „8DO, 5 ~ 40 V, open-drain output, output load 500 mA/channel (MAX)”2
Kimenet (termékoldal) „Darlington transistor with optocoupler isolation”, „up to 500 mA sink current”5
Tápellátás „DC 7~36 V”; PoE Ethernet-porton, DC-jacken vagy sorkapcson2
PoE „IEEE 802.3af” szabvány szerint2 5
Ethernet „Dual Ethernet interfaces”5
Protokoll „Modbus RTU protocol or Modbus TCP protocol”2 5
Védelem „power isolation, optocoupler isolation, resettable fuse, and TVS”5
Kivitel „Rail-mount case design” — DIN-sínre szerelhető5
A bővített rendszer felépítése PC 192.168.1.10 switch vagy közvetlen kábel CC100 192.168.1.17 Modbus TCP kliens Waveshare 8DI/8DO 192.168.1.x — mérendő Modbus TCP szerver, port 502 8 DI / 4 DO, 2 AI / 2 AO +8 DI / +8 DO (sinking!) Tápellátás a modulnak DC 7–36 V sorkapcson vagy DC-jacken, vagy PoE (IEEE 802.3af)
21.1. ábra. A bővített rendszer: PC, CC100 mint Modbus TCP kliens, és a modul mint szerver.

21.2 A legfontosabb bekötési tudnivaló: sinking és sourcing

Ez a fejezet első komoly buktatója, és a legdrágább, ha elrontod.

A modul kimenetét a két gyártói forrás „open-drain”-nek,2 illetve „Darlington transistor … up to 500 mA sink current”-nek5 nevezi. A két megnevezés nem ellentmondás: mindkettő áramelvezető (sinking, „low-side”) kimenetet jelent — a modul a terhelés negatív oldalát kapcsolja a földre.

A CC100 kimenete viszont „high-side switching”, azaz sourcing: a +24 V-ot kapcsolja (7. fejezet).

Ugyanaz a lámpa, két különböző bekötés CC100 — sourcing (high-side) a kimenet a +24 V-ot kapcsolja +24 V 0 V DO L terhelés A terhelés a kimenet és a 0 V között van. Waveshare — sinking (low-side) a kimenet a 0 V-ot kapcsolja +24 V 0 V L terhelés DO A terhelés a +24 V és a kimenet között van. A két eszköz kimenetére NEM ugyanúgy kötjük be a terhelést Ha felcseréled, a terhelés vagy nem működik, vagy állandóan bekapcsolva marad.
21.2. ábra. Ugyanaz a lámpa, két különböző bekötés. A terhelés a CC100-nál a kimenet és a 0 V, a modulnál a +24 V és a kimenet között van.
⚠️ A két eszközre nem ugyanúgy kötsz be
CC100 (sourcing) Waveshare (sinking)
Mit kapcsol a kimenet? a +24 V-ot a 0 V-ot
Hova kötöd a terhelést? a kimenet és a 0 V közé a +24 V és a kimenet közé

Ha felcseréled: a terhelés vagy egyáltalán nem működik, vagy — ami rosszabb — állandóan bekapcsolva marad, mert a tápvonalon keresztül záródik a kör.

Ellenőrizd a bekötést, mielőtt feszültséget adsz rá.

💡 A bemenet viszont rugalmasabb

A modul bemenete NPN és PNP érzékelőt is fogad, mert kétirányú optocsatolós bemeneti fokozata van.2 A CC100 ezzel szemben csak PNP-t fogad (3. és 7. fejezet).

Vagyis vegyes érzékelőparknál a modul bemenete alkalmasabb. Ez jó érv arra, hogy melyik jelet hova kössük.

21.3 Hálózati beállítás

Paraméter Amit a forrás mond
Modbus TCP port „a készülék portja automatikusan 502-re változik”3
Soros sebesség „a soros port beállítása alapértelmezés szerint 115200, és nem módosítható”3
Konfigurálás 1. módja VirCom szoftver: „több konfigurálható paraméter, az IP-cím előzetes ismerete nélkül”3
Konfigurálás 2. módja böngésző: a soros portszerver IP-címének beírásával, „például http://192.168.1.200”3
DHCP a termékoldal szerint a modul támogatja a dinamikus IP-cím megszerzését DHCP-vel5

A gyártó saját figyelmeztetése:3

„Az első konfiguráláskor ajánlott csak az IP-címet módosítani, a többi paramétert alapértelmezetten hagyni; a soros portparaméterek módosítása kommunikációs hibát okoz.”

⚠️ A gyári IP-címet a könyv nem írja le

A 192.168.1.200 a gyártói dokumentációban példaként szerepel, nem gyári alapértékként. A gyári IP-címet és a Modbus unit ID-t a felhasznált források nem mondják ki.

Ezért a könyv nem ad meg konkrét címet, hanem az eljárást írja elő: keresd meg a modult a VirCom eszközzel — ez épp arra való, hogy az IP-cím előzetes ismerete nélkül működjön —, és a ténylegesen talált címet jegyezd fel.

Egy találgatásból leírt cím rosszabb, mint a semmi: órákat lehet elpazarolni egy nem létező cím keresgélésével.

A hálózati beállítás lépései:

  1. Kösd a modult tápra (7–36 V vagy PoE) és Ethernetre.
  2. Indítsd el a VirCom eszközt, és keresd meg a modult.
  3. Jegyezd fel a talált IP-címet és a unit ID-t.
  4. Állítsd át az IP-címet a CC100-éval egyező alhálózatba (192.168.1.x, ütközésmentes címre).
  5. Ellenőrizd ping-gel, majd nyisd meg a modul weblapját böngészőből.

21.4 A regisztertérkép

A gyártói fejlesztői protokoll szerint:4

Digitális kimenetek:

Cím Jelentés Funkciókódok
0x0000–0x0007 az 1–8. kimenet egyedi vezérlése 01, 05, 0F
0x00FF az összes kimenet egyidejű vezérlése ugyanezek

Parancsértékek:4 kimenet BE = 0xFF00; KI = 0x0000; átváltás (toggle) = 0x5500.

💡 Két szabványos érték és egy gyártóspecifikus

A 0xFF00 / 0x0000 értékpár pontosan az, amit a Modbus-specifikáció a Write Single Coil (05) funkciókódnál használ (20. fejezet). A 0x5500 (toggle) viszont gyártóspecifikus kiterjesztés — más eszközön nem biztos, hogy működik.

Ha hordozható kódot írsz, ne építs rá.

Digitális bemenetek:4 0x10000–0x10007, a 02-es funkciókóddal.

Vezérlő- és konfigurációs regiszterek:4

Cím Jelentés Funkciókódok
0x41000–0x41007 „Relay control mode for channel 1~8”, érték 0x0000–0x0003 03, 06, 10
0x44000 eszközcím (device address) tárolása ugyanezek
0x48000 „Software version — decimálissá alakítva, a tizedespontot két hellyel balra tolva” ugyanezek

21.5 A kétértelműség — és hogyan oldjuk fel

Itt jön a fejezet módszertani magja.

⚠️ A probléma

A gyártói táblázatban a bemenetek 0x10000-től, a regiszterek 0x41000-től szerepelnek. Ez öt hexadecimális jegy — a Modbus PDU viszont csak 16 bites címet ismer, azaz 0-tól 65535-ig (20. fejezet).

Öt hexa jegy nem fér el 16 biten. Tehát ez a jelölés nem közvetlen PDU-cím.

A kézenfekvő értelmezés: a vezető jegy a Modbus-tábla azonosítója, a maradék négy jegy a táblán belüli offset. Ez összhangban van a hagyományos, „4xxxx”-jellegű ipari jelöléssel, amelyet a 20. fejezetben már láttunk.

⚠️ De ezt a gyártó nem mondja ki

A felhasznált források sehol nem magyarázzák meg a jelölést. A fenti értelmezés logikus, de nem igazolt.

Ezért ez a könyv nem közli tényként. Helyette megmutatja, hogyan lehet méréssel eldönteni — és ez a fejezet legértékesebb része.

Hogyan oldunk fel egy kétértelmű dokumentációt? A probléma A gyártói táblázatban a bemenetek 0x10000-től, a regiszterek 0x41000-től szerepelnek. Ez öt hexa jegy — a Modbus PDU viszont csak 16 bites címet ismer (0–65535). 1. Feltételezés A vezető jegy a táblát jelöli, a maradék négy az offset. (logikus, de nincs kimondva) 2. Mérés 02-es funkciókód, offset 0, 8 bit olvasása — majd a bemenetek egyenkénti bekapcsolása 3. Következtetés Melyik bit mozdult meg? Ha a DI1 a 0. bitet mozgatja, a feltételezés helyes — és most már bizonyított. Gyártói jelölésFeltételezett tábla PDU-offsetFunkciókód 0x0000–0x0007 Coils0–701 / 05 / 0F 0x1|0000–0007 Discrete Inputs0–702 0x4|1000–1007 Holding Registers4096–410303 / 06 / 10
21.3. ábra. A kétértelműség feloldásának három lépése: feltételezés → mérés → következtetés.

A mérés menete

1. Fogalmazd meg a feltételezést. „A 0x10000 a Discrete Inputs tábla 0. elemét jelenti, tehát a 02-es funkciókóddal a 0-s offsetről olvasható.”

2. Tervezd meg a mérést. Olvass ki a modulból 8 bitet a 02-es funkciókóddal, a 0-s offsettől. Kösd be egy érzékelőt vagy egy egyszerű kapcsolót az 1. bemenetre.

3. Mérj. Kapcsold be az 1. bemenetet, és nézd meg, melyik bit változott meg a kiolvasott 8 bitben.

4. Vond le a következtetést.

Eredmény Mit jelent?
a 0. bit mozdult meg a feltételezés helyes: 0x10000 = Discrete Inputs, offset 0
a 7. bit mozdult meg a csatornák fordított sorrendben vannak leképezve
egyik bit sem mozdult rossz funkciókód, rossz offset, vagy rossz unit ID
hibaválasz érkezett a cím a tartományon kívül van, vagy a funkciókód nem támogatott

5. Ismételd meg a többi csatornára is, és a kimenetekre az 05-ös kóddal.

6. Írd le a mért, igazolt címtáblázatot — ez lesz a saját dokumentációd, és ez az, amire a programot építed.

💡 Ez a készség a fejezet valódi tartalma

A mérnöki munkában rendszeresen találkozol hiányos vagy kétértelmű dokumentációval. Az a különbség egy jó és egy rossz szakember között, hogy a jó nem találgat, hanem kísérletet tervez:

  1. mit feltételezek,
  2. milyen méréssel dönthető el,
  3. mi lesz az eredmény, ha igazam van, és mi, ha nincs,
  4. és a mérés után leírja az eredményt.

Ez a négy lépés bármilyen ismeretlen eszközre alkalmazható.

⚠️ Mérés előtt: biztonság

A mérés során kimeneteket fogsz kapcsolni. Győződj meg róla, hogy a kimenetekre nincs valódi beavatkozó kötve — a méréshez elég egy LED vagy egy multiméter.

Ha mégis valódi terhelés van rajta, alkalmazd a 24. fejezet elvét: először a biztonságos állapot.

21.6 A CODESYS-oldali konfiguráció

A 20. fejezetből tudod, mit kell beállítani a kliensoldalon:1

Beállítás Jelentés
Response Timeout (ms) ameddig a kliens a szerver válaszára vár
Auto-reconnect a megszakadt kapcsolat automatikus helyreállítása

A távoli eszköz és a csatornák konfigurálása — ahol megadod a modul IP-címét, a unit ID-t, és csatornánként a funkciókódot, az offsetet, a hosszt, valamint azt, hogy ciklikusan vagy éllel kiváltva fusson — a felhasznált gyártói súgólapokon nem szerepelt.

⚠️ Ezt a részt a saját CODESYS-verziódban kell dokumentálnod

A könyv itt nem ad menüutakat, mert nincs rájuk igazolt forrás. Amit ad: mit kell beállítanod és miért — a konkrét helyeket a saját környezetedben találod meg, és a projektmunkádba képernyőképekkel vedd fel őket.

Ez egyébként pontosan az, amit az értékelés „Paraméterek beállítása” (10%) szempontja kér.

[ Képernyőkép-helyőrző: Képernyőkép: a Modbus TCP master és a felvett Waveshare-eszköz az eszközfában, a csatornakonfigurációval. ]
21.4. ábra. A modul felvétele a CODESYS eszközfájába.
[ Képernyőkép-helyőrző: Képernyőkép: a Modbus-csatornák beállítása — funkciókód, offset, hossz, kiváltás, ciklusidő. ]
21.5. ábra. Csatornakonfiguráció.

21.7 I/O-leképezés és a fixált címek

Ha a csatornák megvannak, a következő lépés a változókhoz kötés — ugyanaz az I/O Mapping lap, amelyet a 23. fejezet tárgyal.

⚠️ A modulbővítés klasszikus csapdája

A kézzel átírt I/O-cím fix szimbólumot kap, és „megakadályozza az automatikus frissítést, ha az eszköz felépítése megváltozik”.6

Bővítéskor pontosan ez történik: az eszköz felépítése megváltozik. Ha korábban valaki kézzel írt át címet, azok nem követik a változást, és a jelek elcsúsznak.

A bővítés előtt nézd át az I/O-térképet, és keresd a fix szimbólummal jelölt sorokat.

És a 25. fejezetből a másik fontos következmény:

⚠️ A modulbővítés nem oldható meg online change-dzsel

Az eszközfa vagy az eszközparaméterek módosítása után teljes letöltés kell.7 Vagyis a gépet le kell állítani.

Ezt a beavatkozás megtervezésekor kell tudni: az üzemnek előre kell számolnia a leállással.

21.8 A bővítés teljes lépéssora

Ez a 25. fejezet kilenclépéses modulcsere-folyamatának alkalmazása erre a konkrét feladatra.

# Lépés Mire figyelj?
1 Archívum és forráskód-feltöltés a bővítés előtti állapotról ez a visszatérési pont (25. fejezet)
2 A modul DIN-sínre szerelése, tápellátás (7–36 V vagy PoE) a PoE-hoz IEEE 802.3af képes switch kell
3 Ethernet csatlakoztatás: a CC100 második portjára vagy közös switchre a modulnak két Ethernet-interfésze van5
4 IP-cím megkeresése és beállítása VirCom-mal csak az IP-t módosítsd, a többit hagyd3
5 Mérés: a regisztercímek gyakorlati igazolása 21.5. alfejezet
6 Bekötés: DI-k (NPN vagy PNP), DO-k sinking módon 21.2. alfejezet — ez a legkritikusabb
7 CODESYS: Modbus TCP master, a távoli eszköz és a csatornák felvétele 21.6. alfejezet
8 I/O-leképezés változókra; a fix címek ellenőrzése 21.7. alfejezet
9 Fordítás, teljes letöltés, próbaüzem nem online change!
10 Új archívum, forráskód-feltöltés, verziószám növelése 25. fejezet
11 Dokumentálás: bekötési rajz, regisztertáblázat, fotók, jegyzőkönyv a projektmunka 10%-a

21.9 Mit tanít ez a gyakorlat?

A vizsga „modulbővítés” projektmunkája ezzel az egy feladattal négy dolgot mér:

Amit tanulsz Hol jelenik meg?
Modbus TCP kliens-konfiguráció 20. és 21.6.
Sinking és sourcing kimenetek különbsége valós hardveren 21.2.
Hálózati címzés és alhálózat 9. és 21.3.
Regisztercímzés és funkciókódok gyakorlati használata 20. és 21.4–21.5.

És egy ötödiket, amit a vizsgakövetelmény nem nevesít, de a szakma igen: hogyan dolgozz hiányos dokumentációval.

Összefoglalás

  • A modul 8 DI / 8 DO, leválasztott, Modbus RTU és TCP protokollal, PoE-képes, DIN-sínre szerelhető.
  • A kimenet sinking (open-drain), a CC100-é sourcing (high-side) — a terhelést másképp kell bekötni. Ez a fejezet legkritikusabb tudnivalója.
  • A bemenet NPN-t és PNP-t is fogad (kétirányú optocsatoló), szemben a CC100 csak PNP-s bemenetével.
  • A Modbus TCP port 502; a soros sebesség 115200, nem módosítható. Első konfiguráláskor csak az IP-címet módosítsd.
  • A gyári IP-címet és unit ID-t a könyv nem adja meg, mert a források nem mondják ki: VirCom-mal keresd meg, és a ténylegesen talált értéket jegyezd fel.
  • A regisztertérkép: kimenetek 0x0000–0x0007 (+ 0x00FF az összesre), bemenetek 0x10000–0x10007, vezérlőregiszterek 0x41000-től.
  • A parancsértékek 0xFF00 (be) és 0x0000 (ki) szabványosak; a 0x5500 (toggle) gyártóspecifikus.
  • A címzési jelölés kétértelmű — a könyv nem találgat, hanem méréssel oldja fel: feltételezés → mérés → következtetés → dokumentálás.
  • A fixált I/O-címek bővítéskor elcsúsztathatják a jeleket.
  • A modulbővítés nem oldható meg online change-dzsel: teljes letöltés kell.

Gyakorlatok

🛠️ 21.1. feladat — Keresd meg és állítsd be a modult

Kösd be a modult tápra és Ethernetre. Keresd meg a VirCom eszközzel, és jegyezd fel: a talált IP-címet, a unit ID-t, és minden egyéb paramétert, amit lát. Állítsd át az IP-címet a CC100-éval egyező alhálózatba. Ellenőrizd ping-gel, majd nyisd meg a modul weblapját. Ne módosíts más paramétert.

🛠️ 21.2. feladat — Oldd fel a címzést méréssel

Végezd el a 21.5. alfejezet mérését mind a 8 bemenetre. Készíts táblázatot: fizikai csatorna → melyik bit mozdult meg → PDU-offset. Utána ugyanezt a kimenetekre az 05-ös funkciókóddal (LED-del vagy multiméterrel, valódi terhelés nélkül).

A végén írd le a mért címtáblázatot, és hasonlítsd össze a 21.3. ábra feltételezett táblázatával. Egyezik? Ha nem, mi az eltérés?

🛠️ 21.3. feladat — Bekötés kétféleképpen

Köss be ugyanazt a 24 V-os jelzőlámpát egyszer a CC100 egyik kimenetére, egyszer a modul egyik kimenetére. Rajzold le mindkét bekötést. Írd le, mi történne, ha felcserélnéd a két bekötési módot — és ha van rá biztonságos lehetőséged (kisfeszültségű LED, áramkorlátozás), próbáld is ki.

🛠️ 21.4. feladat — Vegyes érzékelőpark

Van két érzékelőd: egy PNP és egy NPN kimenetű. Melyiket hova kötöd — a CC100-ra vagy a modulra —, és miért? Kösd be mindkettőt a helyére, és ellenőrizd a jeleket. Mi történik, ha az NPN-t a CC100-ra próbálod kötni?

🛠️ 21.5. feladat — Teljes bővítés dokumentálva

Végezd el a 21.8. alfejezet teljes lépéssorát egy valódi feladatra: bővítsd ki a 9. fejezetben készített programodat úgy, hogy a modul egyik bemenete is beleszóljon a vezérlésbe, és az egyik kimenete is jelezzen valamit. Dokumentáld a 25. fejezet szerint: archívum előtte és utána, bekötési rajz, regisztertáblázat, fotók, próbaüzemi jegyzőkönyv.

Ez a gyakorlat lényegében a vizsga projektmunkája — érdemes komolyan venni.

Ellenőrző kérdések

  1. Hány és milyen I/O-val rendelkezik a modul, és milyen protokollokat támogat?
  2. Mit jelent, hogy a modul kimenete „open-drain” és „sink current”?
  3. Miben tér el a modul kimenetének bekötése a CC100-étól?
  4. Mi történik, ha felcseréled a két bekötési módot?
  5. Milyen érzékelőtípusokat fogad a modul bemenete, és miért?
  6. Melyik Modbus-porton dolgozik a modul, és mi a soros sebessége?
  7. Mit ajánl a gyártó az első konfiguráláskor, és miért?
  8. Miért nem ad meg a könyv gyári IP-címet?
  9. Milyen parancsértékkel kapcsolható be és ki egy kimenet? Melyik ezek közül nem szabványos?
  10. Mi a probléma a 0x10000 és 0x41000 jelöléssel?
  11. Írd le a mérés négy lépését, amellyel a címzés feloldható!
  12. Mit jelent, ha a mérés során a 7. bit mozdul meg az 1. bemenet bekapcsolásakor?
  13. Miért veszélyesek a fixált I/O-címek bővítéskor?
  14. Miért nem oldható meg a modulbővítés online change-dzsel?

Tudáspróba

Válaszd ki az egyetlen helyes választ!

1. A modul kimenete: a) sinking (low-side, open-drain) b) sourcing (high-side) c) relés d) analóg

2. A CC100 kimenete: a) sinking b) sourcing (high-side switching) c) open-drain d) relés

3. A modul bemenete ezt fogadja: a) csak PNP b) csak NPN c) NPN-t és PNP-t is d) csak feszültségjelet

4. A modul Modbus TCP portja: a) 102 b) 502 c) 2404 d) 8080

5. A soros sebesség a modulon: a) 9600, módosítható b) 19200, módosítható c) nincs soros port d) 115200, nem módosítható

6. A kimenet bekapcsolásának parancsértéke: a) 0x0001 b) 0xFF00 c) 0x5500 d) 0x00FF

7. A 0x5500 parancsérték: a) gyártóspecifikus toggle (átváltás); b) szabványos Modbus-érték; c) a kimenet kikapcsolása; d) érvénytelen.

8. A bemenetek olvasásához használt funkciókód: a) 01 b) 02 c) 03 d) 05

9. A 0x10000-es jelölés problémája: a) túl kicsi szám; b) nem hexadecimális; c) öt hexa jegy nem fér el a 16 bites PDU-címtérben; d) nincs vele probléma.

10. A modulbővítés után: a) elég egy online change; b) csak a szimulációt kell frissíteni; c) nem kell letölteni; d) teljes letöltés kell.

A megoldókulcs a B függelékben található.

A fejezet forrásai


  1. CODESYS Online Help: Tab „Modbus TCP Client – General” (V4.6.0.0). CODESYS GmbH. (2026-07-29) ↩

  2. Waveshare Documentation Platform: Modbus_POE_ETH_IO_8CH – Overview. Waveshare. (2026-07-29) ↩↩↩↩↩↩↩↩

  3. Waveshare Documentation Platform: Modbus_POE_ETH_IO_8CH – Module Parameter Configuration. Waveshare. (2026-07-29) ↩↩↩↩↩↩

  4. Waveshare Documentation Platform: Modbus_POE_ETH_IO_8CH – Development Protocol (regisztertérkép). Waveshare. (2026-07-29) ↩↩↩↩

  5. Waveshare termékoldal: Industrial 8-Ch Ethernet Digital Input/Output Module. Waveshare. (2026-07-29, ellenőrizve: 2026-07-31) A gyári IP-címet, a unit ID-t és a címzési jelölés magyarázatát a termékoldal sem közli. ↩↩↩↩↩↩↩↩↩

  6. CODESYS Online Help: Configuring Devices and I/O Mapping (V3.5.22.0). CODESYS GmbH. (2026-07-29) ↩

  7. CODESYS Online Help: Command: Online Change (V3.5.22.0). CODESYS GmbH. (2026-07-31) ↩

Mennyire volt hasznos ez a fejezet?

Még nincs értékelés.