https://ipc2u.cz/articles/simple-decisions/protokolu-modbus-rtu-v-kostce/
00:17 16.12.2018
Katalog Novinky +420-727 965 000 sales@ipc2u.cz
Sady
Vybrané zboží
Vybrané zboží
Vybrané zboží
Cena na vyžádání
Registrace / Autorizace
Autorizace
Uživatelské jméno:
Heslo:


Zapomněli jste heslo? Zaregistrovat se
Zapomněli jste heslo?
E-mail:
Zapomněli jste heslo?
Průmyslové počítače a řešení pro automatizaci a komunikace
Ringhofferova 115/1,  155 21 Praha 5 , Czech Republic
+49 511 807 259-0, sales@ipc2u.cz
Košík
Cena na vyžádání
Sleva -
Celkem:

Protokolu Modbus RTU v kostce (s podrobnými popisy a příklady)

Protokolu Modbus RTU v kostce (s podrobnými popisy a příklady)

Popis protokolu Modbus RTU

Komunikační protokol Modbus je založen na architektuře master-slave. K přenosu dat využívá rozhraní RS-485, RS-422, RS-232 i TCP/IP sítě Ethernet (protokol Modbus TCP).

Zpráva protokolu Modbus RTU se skládá z adresy zařízení SlaveID, kódu funkce, speciálních dat v závislosti na kódu funkce a kontrolního součtu CRC.

SlaveIDKód funkceSpeciální dataCRC

Pokud odstraníte adresu SlaveID a kontrolní součet CRC, získáte PDU, neboli datovou jednotku protokolu.

SlaveID je adresa zařízení, která může mít hodnotu z rozsahu 0 až 247, adresy od 248 do 255 jsou vyhrazené.

Data v modulu jsou uložena ve 4 tabulkách.

Dvě tabulky jsou pouze ke čtení a dvě umožňují čtení i zápis.

V každé tabulce je umístěno 9999 hodnot.

ČÍSLO REGISTRUHEXADECIMÁLNÍ ADRESA REGISTRUTYPNÁZEVTYP
1-99990000 až 270Ečtení-zápisSmyčky diskrétního výstupuDO
10001-199990000 až 270EčteníKontakty diskrétního vstupuDI
30001-399990000 až 270EčteníRegistry analogového vstupuAI
40001-499990000 až 270Ečtení-zápisHolding registry analogového výstupuAO

Zpráva protokolu Modbus používá adresu registru.

Například první registr holdingového registru AO má číslo 40001, ale jeho adresa je 0000.

Rozdíl mezi těmito dvěma hodnotami je „posun“ (offset).

Každá tabulka má vlastní posun, pro jednotlivé tabulky je: 1, 10001, 30001 a 40001.

Níže je uveden příklad požadavku protokolu Modbus RTU na získání hodnoty AI uchovávacích (holding) registrů z registrů č. 40108 až 40110 s adresou zařízení 17.

11 03 006B 0003 7687

11ADRESA ZAŘÍZENÍ SLAVEID (17 = 11 HEX)
03Kód funkce
006BAdresa prvního registru (40108-40001 = 107 = 6B hex)
0003Počet požadovaných registrů (čtení 3 registrů od 40108 do 40110)
7687Kontrolní součet CRC

Jako odpověď pro zařízení slave protokolu Modbus RTU dostaneme:

11 03 06 AE41 5652 4340 49AD

Kde:

11ADRESA ZAŘÍZENÍ (17 = 11 hex)SlaveID
03Kód funkceKód funkce
06Počet dalších bajtů (následuje 6 bajtů)Počet bajtů
AEHodnota horní části registru (AE hex)Horní část hodnoty registru (AO0)
41Dolní část registru (41 hex)Dolní část hodnoty registru (AO0)
56Hodnota horní části registru (56 hex)Horní část hodnoty registru (AO1)
52Dolní část registru (52 hex)Dolní část hodnoty registru (AO1)
43Hodnota horní části registru (43 hex)Horní část hodnoty registru (AO2)
40Dolní část registru (40 hex)Dolní část hodnoty registru (AO2)
49Kontrolní součetHorní část hodnoty CRC
ADKontrolní součetDolní část hodnoty CRC

Registr analogového výstupu AO0 má hodnotu AE 41 HEX, neboli 44609 v desítkové soustavě.

Registr analogového výstupu AO1 má hodnotu 56 52 HEX, neboli 22098 v desítkové soustavě.

Registr analogového výstupu AO2 má hodnotu 43 40 HEX, neboli 17216 v desítkové soustavě.

Hodnota AE 41 HEX představuje 16 bitů 1010 1110 0100 0001 a může nabývat i jiné hodnoty v závislosti na typu vyjádření.

Hodnota registru 40108 v kombinaci s registrem 40109 dává 32bitovou hodnotu.

Příklad vyjádření:

Typ zobrazeníRozsah hodnotPříklad v HEXV desítkové soustavě
16bitové celé číslo bez znaménka0 až 65535AE4144,609
16bitové celé číslo se znaménkem-32768 až 32767AE41-20,927
dvouznakový řetězec ASCII2 znakyAE41® A
diskrétní hodnota zapnuto/vypnuto0 a 100010001
32bitové celé číslo bez znaménka0 až 4,294,967,295AE41 56522,923,517,522
32bitové celé číslo se znaménkem-2,147,483,648 až 2,147,483,647AE41 5652-1,371,449,774
32bitové číslo s plovoucí desetinnou čárkou IEEE s jednoduchou přesností1,2·10−38 až 3,4×10+38AE41 5652-4.395978 E-11
čtyřznakový řetězec ASCII4 znakyAE41 5652® A V R

Jaké jsou příkazy protokolu Modbus RTU?

V tabulce níže jsou uvedeny kódy pro čtení z registrů a zápis do registrů protokolu Modbus RTU.

KÓD FUNKCECO FUNKCE DĚLÁTYP HODNOTYTYP PŘÍSTUPU
01 (0x01)Čtení DOČtení stavu cívkyDiskrétníČtení
02 (0x02)Čtení DIČtení stavu vstupuDiskrétníČtení
03 (0x03)Čtení AOČtení holding registrů16bitováČtení
04 (0x04)Čtení AIČtení vstupních registrů16bitováČtení
05 (0x05)Zápis jednoho DONastavení stavu jedné cívkyDiskrétníZápis
06 (0x06)Zápis jednoho AONastavení jednoho registru16bitováZápis
15 (0x0F)Zápis více DONastavení stavu více smyčekDiskrétníZápis
16 (0x10)Zápis více AONastavení více registrů16bitováZápis

Jak poslat příkaz protokolu Modbus RTU ke čtení diskrétního výstupu? Příkaz 0x01

Tento příkaz se používá ke čtení hodnot digitálních výstupů DO.

V požadavku PDU je uvedena počáteční adresa prvního registru DO a následný počet požadovaných hodnot DO. Hodnoty DO jsou v PDU adresovány počínaje nulou.

Hodnoty DO v odpovědi jsou v jednom bajtu a odpovídají hodnotě bitů.

Hodnoty bitů jsou definovány jako 1 = ZAPNUTO a 0 = VYPNUTO.

Dolní bit prvního datového bajtu obsahuje hodnotu DO, jehož adresa byla uvedena v požadavku. Zbývající hodnoty DO následují v rostoucích hodnotách až k nejvyšší hodnotě bajtu zprava doleva.

Pokud bylo požadováno méně než osm hodnot DO, zbývající bity v odpovědi budou vyplněny nulami (ve směru od dolního k hornímu bajtu). Počet bajtů – počet dalších bajtů označuje počet celých bajtů dat v odpovědi.

Příklad dotazu na DO od 20 do 56 pro adresu zařízení SlaveID 17. Adresa prvního registru bude 0013 hex = 19, protože adresy začínají od 0 (0014 hex = 20, nulový posun -1 = získáme 0013 hex = 19).

BAJTPOŽADAVEKBAJTODPOVĚĎ
(Hex)Název pole(Hex)Název pole
11Adresa zařízení11Adresa zařízení
01Kód funkce01Kód funkce
00Horní bajt adresy prvního registru05Počet následujících bajtů
13Dolní bajt adresy prvního registruCDHodnota registru DO 27-20 (1100 1101)
00Horní bajt počtu registrů6BHodnota registru DO 35-28 (0110 1011)
25Dolní bajt počtu registrůB2Hodnota registru DO 43-36 (1011 0010)
0EKontrolní součet CRC0EHodnota registru DO 51-44 (0000 1110)
84Kontrolní součet CRC1BHodnota registru DO 56-52 (0001 1011)
45Kontrolní součet CRC
E6Kontrolní součet CRC

Stavy výstupu DO 27-20 jsou uvedeny jako hodnoty CD hex, neboli v binární soustavě 1100 1101.

V registru DO 56-52 bylo požadováno 5 bitů vpravo, zbývající bity do celého bajtu jsou vyplněny nulami (0001 1011).

Kanály---DO 56DO 55DO 54DO 53DO 52
Bity00011011
Hex1B

Jak poslat příkaz protokolu Modbus RTU ke čtení digitálního vstupu? Příkaz 0x02

Tento příkaz se používá ke čtení hodnot digitálních vstupů DI.

Příklad požadavku na DI z registrů od č. 10197 do 10218 pro adresu zařízení SlaveID 17. Adresa prvního registru bude 00C4 hex = 196, protože adresy začínají od 0.

BAJTPOŽADAVEKBAJTODPOVĚĎ
(Hex)Název pole(Hex)Název pole
11Adresa zařízení11Adresa zařízení
02Kód funkce02Kód funkce
00Horní bajt adresy prvního registru03Počet následujících bajtů
C4Dolní bajt adresy prvního registruACHodnota registru DI 10204-10197 (1010 1100)
00Horní bajt počtu registrůDBHodnota registru DI 10212-10205 (1101 1011)
16Dolní bajt počtu registrů35Hodnota registru DI 10218-10213 (0011 0101)
BAKontrolní součet CRC20Kontrolní součet CRC
A9Kontrolní součet CRC18Kontrolní součet CRC

Jak poslat příkaz protokolu Modbus RTU ke čtení analogového výstupu? Příkaz 0x03

Tento příkaz se používá ke čtení hodnot analogových výstupů AO.

Příklad požadavku na AO z registrů od č. 40108 do 40110 pro adresu zařízení SlaveID 17. Adresa prvního registru bude 006B hex = 107, protože adresy začínají od 0.

BAJTPOŽADAVEKBAJTODPOVĚĎ
(Hex)Název pole(Hex)Název pole
11Adresa zařízení11Adresa zařízení
03Kód funkce03Kód funkce
00Horní bajt adresy prvního registru06Počet následujících bajtů
6BDolní bajt adresy prvního registruAEHorní část hodnoty registru č. 40108
00Horní bajt počtu registrů41Dolní část hodnoty registru č. 40108
03Dolní bajt počtu registrů56Horní část hodnoty registru č. 40109
76Kontrolní součet CRC52Dolní část hodnoty registru č. 40109
87Kontrolní součet CRC43Horní část hodnoty registru č. 40110
40Dolní část hodnoty registru č. 40110
49Kontrolní součet CRC
ADKontrolní součet CRC

Jak poslat příkaz protokolu Modbus RTU ke čtení analogového vstupu? Příkaz 0x04

Tento příkaz se používá ke čtení hodnot analogových vstupů AI.

Příklad požadavku na AI z registrů od č. 30009 pro adresu zařízení SlaveID 17. Adresa prvního registru je 0008 hex = 8, protože adresy začínají od 0.

BAJTPOŽADAVEKBAJTODPOVĚĎ
(Hex)Název pole(Hex)Název pole
11Adresa zařízení11Adresa zařízení
04Kód funkce04Kód funkce
00Horní bajt adresy prvního registru02Počet následujících bajtů
08Dolní bajt adresy prvního registru00Horní část hodnoty registru č. 30009
00Horní bajt počtu registrů0ADolní část hodnoty registru č. 30009
01Dolní bajt počtu registrůF8Kontrolní součet CRC
B2Kontrolní součet CRCF4Kontrolní součet CRC
98Kontrolní součet CRC

Jak poslat příkaz protokolu Modbus RTU k zápisu diskrétního výstupu? Příkaz 0x05

Tento příkaz se používá k zápisu jedné hodnoty digitálního výstupu DO.

Hodnota FF 00 hex nastaví výstup na ZAPNUTO.

Hodnota 00 00 hex nastaví výstup na VYPNUTO.

Všechny ostatní hodnoty jsou neplatné a nebudou ovlivněny hodnotou výstupu.

Normální odpovědí na takový požadavek je echo (zopakování požadavku v odpovědi) a vrací se po změně stavu DO.

Příklad záznamu DO s registrem č. 173 pro adresu zařízení SlaveID 17. Adresa registru bude 00AC hex = 172, protože adresy začínají od 0.

BAJTPOŽADAVEKBAJTODPOVĚĎ
(Hex)Název pole(Hex)Název pole
11Adresa zařízení11Adresa zařízení
05Kód funkce05Kód funkce
00Horní bajt adresy prvního registru00Horní bajt adresy prvního registru
ACDolní bajt adresy prvního registruACDolní bajt adresy prvního registru
FFHodnota horních bajtůFFHodnota horních bajtů
00Hodnota dolních bajtů00Hodnota dolních bajtů
4EKontrolní součet CRC4EKontrolní součet CRC
8BKontrolní součet CRC8BKontrolní součet CRC

Stav výstupu DO173 se změnil z VYPNUTO na ZAPNUTO.

Jak poslat příkaz protokolu Modbus RTU k zápisu analogového výstupu? Příkaz 0x06

Tento příkaz se používá k zápisu jedné hodnoty analogového výstupu AO.

Příklad záznamu do AO s registrem č. 40002 pro adresu zařízení SlaveID 17. Adresa prvního registru bude 0001 hex = 1, protože adresy začínají od 0.

BAJTPOŽADAVEKBAJTODPOVĚĎ
(Hex)Název pole(Hex)Název pole
11Adresa zařízení11Adresa zařízení
06Kód funkce06Kód funkce
00Horní bajt adresy prvního registru00Horní bajt adresy prvního registru
01Dolní bajt adresy prvního registru01Dolní bajt adresy prvního registru
00Hodnota horních bajtů00Hodnota horních bajtů
03Hodnota dolních bajtů03Hodnota dolních bajtů
9AKontrolní součet CRC9AKontrolní součet CRC
9BKontrolní součet CRC9BKontrolní součet CRC

Jak poslat příkaz protokolu Modbus RTU k zápisu více diskrétních pinů? Příkaz 0x0F

Tento příkaz se používá k zápisu více hodnot digitálního výstupu DO.

Příklad zápisu do několika DO s registry od č. 20 do 29 pro adresu zařízení SlaveID 17. Adresa registru bude 0013 hex = 19, protože adresy začínají od 0.

BAJTPOŽADAVEKBAJTODPOVĚĎ
(Hex)Název pole(Hex)Název pole
11Adresa zařízení11Adresa zařízení
0FKód funkce0FKód funkce
00Horní bajt adresy prvního registru00Horní bajt adresy prvního registru
13Dolní bajt adresy prvního registru13Dolní bajt adresy prvního registru
00Horní bajt počtu registrů00Horní bajt počtu zapsaných registrů
0ADolní bajt počtu registrů0ADolní bajt počtu zapsaných registrů
02Počet následujících bajtů26Kontrolní součet CRC
CDBajtová hodnota DO 27-20 (1100 1101)99Kontrolní součet CRC
01Bajtová hodnota DO 29-28 (0000 0001)
BFKontrolní součet CRC
0BKontrolní součet CRC

V odpovědi se vrátí počet zapsaných registrů.

Jak poslat příkaz protokolu Modbus RTU k zápisu více analogových výstupů? Příkaz 0x10

Tento příkaz se používá k zápisu více hodnot analogového výstupu AO.

Příklad zápisu do několika AO s registry č. 40002 a 40003 pro adresu zařízení SlaveID 17. Adresa prvního registru bude 0001 hex = 1, protože adresy začínají od 0.

BAJTPOŽADAVEKBAJTODPOVĚĎ
(Hex)Název pole(Hex)Název pole
11Adresa zařízení11Adresa zařízení
10Kód funkce10Kód funkce
00Horní bajt adresy prvního registru00Horní bajt adresy prvního registru
01Dolní bajt adresy prvního registru01Dolní bajt adresy prvního registru
00Horní bajt počtu registrů00Horní bajt počtu zapsaných registrů
02Dolní bajt počtu registrů02Dolní bajt počtu zapsaných registrů
04Počet následujících bajtů12Kontrolní součet CRC
00Horní část hodnoty 4000298Kontrolní součet CRC
0ADolní část hodnoty 40002
01Horní část hodnoty 40003
02Dolní část hodnoty 40003
C6Kontrolní součet CRC
F0Kontrolní součet CRC

Jaké jsou chyby požadavku protokolu Modbus?

Pokud zařízení obdrží požadavek, který nelze zpracovat, odpoví zařízení kódem chyby.

Odpověď bude obsahovat modifikovaný kód funkce s nejvyšším bitem 1.

Příklad:

PŮVODNÍMODIFIKOVANÝ
KÓD FUNKCE V POŽADAVKUChybový kód funkce v odpovědi
01 (01 hex) 0000 0001129 (81 hex) 1000 0001
02 (02 hex) 0000 0010130 (82 hex) 1000 0010
03 (03 hex) 0000 0011131 (83 hex) 1000 0011
04 (04 hex) 0000 0100132 (84 hex) 1000 0100
05 (05 hex) 0000 0101133 (85 hex) 1000 0101
06 (06 hex) 0000 0110134 (86 hex) 1000 0110
15 (0F hex) 0000 1111143 (8F hex) 1000 1111
16 (10 hex) 0001 0000144 (90 hex) 1001 0000

Příklad požadavku a odpovědi s chybou:

BAJTPOŽADAVEKBAJTODPOVĚĎ
(Hex)Název pole(Hex)Název pole
0AAdresa zařízení0AAdresa zařízení
01Kód funkce81Kód funkce se změněným bitem
04Horní bajt adresy prvního registru02Kód chyby
A1Dolní bajt adresy prvního registruB0Kontrolní součet CRC
00Horní bajt počtu registrů53Kontrolní součet CRC
01Dolní bajt počtu registrů
ACKontrolní součet CRC
63Kontrolní součet CRC

Vysvětlení chybových kódů

01PŘIJATÝ KÓD FUNKCE NELZE ZPRACOVAT.
02Datová adresa uvedená v požadavku není dostupná.
03Hodnota obsažená v datovém poli dotazu je neplatná.
04Vyskytla se neodstranitelná chyba při pokusu zařízení slave o provedení požadovaného úkonu.
05Zařízení slave přijalo požadavek a zpracovává ho, ale trvá to dlouhou dobu. Tato odpověď brání hostiteli vygenerovat chybu časového limitu.
06Zařízení slave je zaneprázdněno zpracováváním příkazu. Master musí zprávu zopakovat později, až bude zařízení slave volné.
07Zařízení slave nemůže vykonat programovou funkci uvedenou v požadavku. Tento kód se vrací při neúspěšném požadavku programu prostřednictvím funkcí s čísly 13 nebo 14. Master si musí od zařízení slave vyžádat diagnostické informace nebo informace o chybě.
08Zařízení slave zjistilo chybu parity při čtení rozšířené paměti. Master může požadavek zopakovat, ale obvykle jsou v takových případech potřeba opravy.

Programy pro práci s protokolem Modbus RTU

Níže jsou uvedeny programy, které usnadňují práci s protokolem Modbus.

DCON Utility Pro s podporou pro Modbus RTU, ASCII, DCON. Stáhnout

Modbus Master Tool s podporou pro Modbus RTU, ASCII, TCP. Stáhnout

Klient protokolu Modbus TCP s podporou pro Modbus TCP. Stáhnout

https://ipc2u.cz/articles/simple-decisions/protokolu-modbus-rtu-v-kostce/
00:17 16.12.2018