A 20. fejezet („Modbus TCP és Modbus RTU") gyakorlatainak részletes megoldásai és a tudáspróba megoldókulcsa. Előbb dolgozd ki magad, csak utána ellenőrizz!
Gyakorlatok — megoldások
20.1. feladat — Számold ki a korlátot
Megoldás
A válasz PDU felépítése: funkciókód (1 bájt) + bájtszámláló (1 bájt) + adat.
- Rendelkezésre álló hely az adatnak: 253 − 1 − 1 = 251 bájt
- Egy regiszter 2 bájt: 251 / 2 = 125,5
- Egész regiszter fér el: 125
Tehát egyetlen 03-as válaszban legfeljebb 125 tartóregiszter olvasható ki.
Az adatlapok gyakran ennél kevesebbet engednek. Lehetséges okok: a gyártó kisebb belső puffert használ; az eszköz lassú, és a hosszú válasz időtúllépést okozna; vagy a regisztertartomány maga rövidebb. A gyakorlat szabálya: az eszköz korlátja az irányadó, nem az elméleti maximum.
20.2. feladat — Fordítsd le a címeket
Megoldás
| Adat | Funkciókód | PDU-cím | Írható? |
|---|---|---|---|
| hőmérséklet — 3. bemeneti regiszter | 04 (bemeneti regiszterek olvasása) | 2 | nem — a bemeneti regiszter csak olvasható |
| kapcsolási küszöb — 12. tartóregiszter | olvasás: 03; írás: 06 (egy regiszter) vagy 16 (több regiszter) | 11 | igen |
Az indoklás a címzési szabály: a protokoll a táblákat 0-tól címzi, a dokumentációk viszont gyakran 1-től sorszámoznak. A „3. regiszter” tehát a 2-es PDU-címen található — ez az egyes eltolódás (20.3).
⚠ Gyakori hiba: a 4x/3x előtagos, hagyományos jelölést PDU-címként használni. A 40013
nem egy 40013-as című regiszter, hanem a 12-es PDU-című tartóregiszter.
20.3. feladat — Időzítés számokkal
Megoldás
Egy karakter 11 bit (1 start + 8 adat + 1 paritás + 1 stop).
9600 bit/s:
- 1 karakter: 11 / 9600 = 0,001 146 s ≈ 1,146 ms
- t1,5 = 1,5 × 1,146 = 1,72 ms
- t3,5 = 3,5 × 1,146 = 4,01 ms
115 200 bit/s:
- 1 karakter: 11 / 115 200 = 0,000 095 5 s ≈ 0,0955 ms
- t1,5 = 0,143 ms
- t3,5 = 0,334 ms
Miért nehezebb nagy sebességen? Mert az időablakok arányosan rövidülnek: a t1,5 115 200 baudon már 0,14 ezredmásodperc. Ekkora szünetet egy pufferelő USB-átalakító, egy megterhelt operációs rendszer vagy egy nem valós idejű illesztő véletlenül is okozhat — és ilyenkor a vevő úgy látja, hogy az üzenet hiányos (20.7).
20.4. feladat — Tervezz meg egy buszt
Mintamegoldás
A busz vázlata:
CC100 (RS-485, master) │ A/B érpár + közös föld (GND), sodrott, árnyékolt ├── [150 Ω] ← lezárás a törzsvonal ELSŐ végén (a masternél) ├── mérő 1 (cím 1) ├── mérő 2 (cím 2) ├── mérő 3 (cím 3) ├── mérő 4 (cím 4) ├── mérő 5 (cím 5) └── mérő 6 (cím 6) ── [150 Ω] ← lezárás a törzsvonal MÁSIK végén
Soros paraméterek (mindegyik eszközön azonosan): 19 200 bit/s (a Modbus alapértelmezése), 8 adatbit, páros paritás, 1 stopbit. Ha az eszközök nem tudnak páros paritást, akkor a szabvány szerinti pótmegoldás 2 stopbit — de a lényeg, hogy mind a négy beállítás egyezzen.
A két leggyakoribb hibapont a rajzon:
- a lezáróellenállás hiánya vagy rossz helye (nem a törzsvonal két végén, hanem valamelyik középső eszköznél);
- a közös föld elhagyása — a két jelvezeték önmagában nem elég, a vevőknek közös referenciára van szükségük.
⚠ Gyakori hiba: 120 Ω-os lezárás alkalmazása „mert az RS-485-nél az a szokásos”. A Modbus-specifikáció 150 Ω / 0,5 W értéket ír elő (20.8).
20.5. feladat — Készíts hibakeresési döntési fát
Mintamegoldás — a döntési fa csomópontjai
| Döntés | Mivel ellenőrzöd? | Ha nem |
|---|---|---|
| Van fizikai kapcsolat? | LED-ek a porton, kábel, switch | kábel/port csere |
Válaszol a ping? |
ping <IP> a PC-ről |
IP-cím, alhálózati maszk, VLAN ellenőrzése |
| Nyitva az 502-es port? | portvizsgáló, vagy a szerver naplója | tűzfal, szolgáltatás indítása |
| Jó a unit ID? | az eszköz dokumentációja / webfelülete | unit ID javítása |
| Jó a funkciókód a táblához? | a regisztertérkép: bit vagy szó, írható vagy sem | funkciókód javítása |
| Jó a cím? | 0-tól vagy 1-től induló számozás — próba egy szomszédos címmel | offset javítása (egyes eltolódás) |
| Időben válaszol? | a master válaszidő-túllépése, a napló | timeout növelése, terhelés csökkentése |
A folyamatábrát az 5. fejezet jelöléseivel kell megrajzolni: rombuszok a döntéseknek, téglalapok a beavatkozásoknak, és minden ág záruljon vissza (5.3).
Tudáspróba — megoldókulcs
| # | Válasz | Indoklás | Szakasz |
|---|---|---|---|
| 1 | a | A Coils tábla bitalapú és írható (a Discrete Inputs csak olvasható). | 20.2 |
| 2 | b | A PDU-ban a címzés 0-tól 65 535-ig megy — az elemek számozása viszont 1-től. | 20.3 |
| 3 | c | A 03-as funkciókód olvas tartóregisztert (a 04 az input regisztert). | 20.4 |
| 4 | b | A PDU legnagyobb mérete 253 bájt; a 256 a soros ADU, a 260 a TCP ADU. | 20.5 |
| 5 | c | Egy Modbus RTU-buszon legfeljebb 247 slave lehet (1…247 címtartomány). | 20.6 |
| 6 | d | A keretek között 3,5 karakteridőnyi csend kell (a kereten belül max. 1,5). | 20.7 |
| 7 | b | A Modbus TCP regisztrált portszáma 502. | 20.9 |
| 8 | c | Az MBAP-fejléc 7 bájt. | 20.9 |
| 9 | b | A specifikáció 150 Ω / 0,5 W lezárást ír elő a törzsvonal két végére — a széles körben emlegetett 120 Ω általános RS-485 gyakorlat, nem a Modbus-előírás. | 20.8 |
| 10 | a | A CODESYS-szerveren a holding regiszterek a %IW területen vannak (a mestertől érkező adat = bemenet). |
20.12 |