Modbus RTU: Technický prehľad protokolu, štruktúry dát a príkladov komunikácie
1. Architektúra a komunikačné rozhrania
Modbus je postavený na architektúre master–slave (resp. client–server). Jeden master riadi komunikáciu a môže komunikovať s až 247 slave zariadeniami.
Protokol môže fungovať na viacerých fyzických vrstvách:
-
RS-485 – najčastejšie používané rozhranie pre Modbus RTU
-
RS-422
-
RS-232
-
Ethernet (Modbus TCP) – varianta využívajúca TCP/IP
V rámci Modbus RTU sú telegramy prenášané v binárnej forme ako séria bajtov.
2. Štruktúra Modbus RTU správy
Typická Modbus RTU správa pozostáva z nasledujúcich častí:
| Pole | Popis |
|---|---|
| Slave ID | Adresa zariadenia (0 – 247) |
| Function Code | Určuje typ operácie (čítanie, zápis…) |
| Data | Parametre požiadavky alebo odpovede |
| CRC16 | 16-bitová kontrolná suma |
PDU – Protocol Data Unit
Ak z rámca odstránime Slave ID a CRC, ostáva tzv. PDU, ktorá sa používa aj v Modbus TCP.
3. Register map a adresovanie
Modbus rozdeľuje dáta do štyroch tabuľiek, každá s vlastným rozsahom a offsetom:
| Rozsah | Offset | Typ | Prístup |
|---|---|---|---|
| 00001–09999 | 1 | DO – Discrete Outputs (Coils) | Read/Write |
| 10001–19999 | 10001 | DI – Discrete Inputs | Read |
| 30001–39999 | 30001 | AI – Analog Inputs | Read |
| 40001–49999 | 40001 | AO – Holding Registers | Read/Write |
Fyzická adresa sa počíta ako:
Register_adresa = Register_číslo – Offset
Príklad:
AO register 40108 → adresa 40108 − 40001 = 107 = 0x006B
4. Príklad Modbus RTU požiadavky (funkcia 03 – Read Holding Registers)
Požiadavka číta hodnoty registrov 40108 až 40110 zo zariadenia s adresou 17:
Význam bajtov:
-
11 – Slave ID (17)
-
03 – Funkčný kód
-
00 6B – Začiatok adresy registra (107)
-
00 03 – Počet registrov
-
76 87 – CRC
Odpoveď:
Výsledné 16-bitové hodnoty registrov:
| Register | HEX | Hodnota (decimál) |
|---|---|---|
| 40108 | AE41 | 44609 |
| 40109 | 5652 | 22098 |
| 40110 | 4340 | 17216 |
Pri kombinácii dvoch registrov je možné interpretovať ich aj ako:
-
32-bitové číslo
-
IEEE 754 float
-
ASCII text
Interpretácia závisí od aplikácie a zariadenia.
5. Funkčné kódy Modbus RTU
Najpoužívanejšie funkcie:
| Kód | Operácia | Typ dát | Prístup |
|---|---|---|---|
| 01 | Read Coils (DO) | diskrétne | Read |
| 02 | Read Discrete Inputs (DI) | diskrétne | Read |
| 03 | Read Holding Registers (AO) | 16-bit | Read |
| 04 | Read Input Registers (AI) | 16-bit | Read |
| 05 | Write Single Coil | diskrétne | Write |
| 06 | Write Single Register | 16-bit | Write |
| 0F | Write Multiple Coils | diskrétne | Write |
| 10 | Write Multiple Registers | 16-bit | Write |
Modbus je striktne deterministický – odpoveď je definovaná na úrovni bitov.
6. Príklady použitia vybraných funkcií
6.1 Čítanie digitálnych výstupov – FC 01
Zápis požiadavky aj odpovede je bitovo orientovaný.
Bity sa prenášajú od najmenej významného (LSB).
Typický príklad zahŕňa čítanie viacerých výstupov naraz, pričom odpoveď skupinuje 8 výstupov do jedného bajtu.
6.2 Zápis digitálneho výstupu – FC 05
Pri zápise DO sa používajú iba dve hodnoty:
-
FF 00 → zapnúť výstup
-
00 00 → vypnúť výstup
Slave vracia presný echo rámec.
6.3 Zápis analógového výstupu – FC 06
Zapisuje jeden 16-bitový register (napr. hodnota DAC).
6.4 Zápis viacerých registrov – FC 10
Umožňuje naraz ukladať viac 16-bitových hodnôt – napr. pri zápise 32-bitových parametrov.
7. Chybové odpovede a výnimky
Ak slave nevie požiadavku spracovať, odošle exception response, kde:
-
funkčný kód má nastavený najvyšší bit (napr. 03 → 83)
-
ďalší bajt je chybový kód
| Kód | Význam |
|---|---|
| 01 | Funkcia podporovaná, ale nevykonateľná |
| 02 | Neplatná alebo neexistujúca adresa |
| 03 | Neplatná hodnota v dátach |
| 04 | Porucha pri spracovaní na slave |
| 05 | Slave je zaneprázdnený (potrebuje čas) |
| 06 | Slave spracováva predchádzajúci príkaz |
| 07 | Chyba programovej funkcie |
| 08 | Paritná chyba v pamäti |
8. Prečo sa Modbus RTU stále používa
Hoci vznikol v roku 1979, jeho výhody sú dodnes aktuálne:
-
jednoduchá implementácia
-
nízka dátová réžia
-
veľmi spoľahlivý na priemyselnom RS-485
-
otvorený bez licenčných poplatkov
-
široká podpora v PLC, snímačoch, pohonoch a HMI
Modbus sa stal základným jazykom priemyselnej automatizácie.
Záver
Modbus RTU je robustný a konzistentný protokol s jasne definovanou štruktúrou. Jeho práca s 16-bitovými registrami, pevne určené funkčné kódy a deterministické spracovanie z neho robia nástroj, ktorý sa výborne hodí do prostredí, kde je spoľahlivosť dôležitejšia než veľká prenosová rýchlosť.

