PLCBytes
Nástroje pro Modbus

Dekodér rámců Modbus

Vložte hex bajty rámce Modbus RTU, TCP nebo ASCII. Dekodér je rozdělí na pole, zkontroluje CRC, spáruje požadavky s odpověďmi a vysvětlí chybové kódy.

Rámce

Příklad

RTU s CRC, TCP s hlavičkou MBAP nebo ASCII začínající dvojtečkou. Více rámců dejte na samostatné řádky. Hex stream i hex dump z Wiresharku a log z Modbus Poll fungují tak, jak jsou.

Příklady

Rozebrané rámce

Běží celé ve vašem prohlížeči. Nic z toho, co zadáte, se neodesílá na server.

Jak jsou rámce Modbus složené

Modbus RTU

ČástBajtů
Adresa zařízení (unit ID)1
Funkční kód1
Data0–252
CRC, nižší bajt první2

Modbus TCP

ČástBajtů
ID transakce2
ID protokolu, vždy 02
Délka: unit ID + PDU2
Adresa zařízení (unit ID)1
Funkční kód1
Data0–252

Modbus ASCII

ČástBajtů
:1
Adresa zařízení (unit ID)2
Funkční kód2
Data0–504
LRC2
CR LF2

Část od funkčního kódu do konce dat se nazývá PDU a je ve všech třech variantách stejná. Hodnoty registrů se posílají vyšším bajtem napřed, jen CRC u RTU jde nižším bajtem napřed.

Jak dekodér čte rámec

Nejdřív hledá obálku. Rámec RTU končí CRC, které sedí s bajty před ním. Rámec TCP začíná 7bajtovou hlavičkou MBAP, jejíž pole délky odpovídá zbytku. Rámec ASCII začíná dvojtečkou. Uvnitř obálky funkční kód určuje, jak je složený zbytek. Požadavek a odpověď téže funkce mají jinou strukturu, takže je dekodér rozliší, a každou odpověď spáruje s požadavkem před ní.

Odpověď na čtení nese jen hodnoty, ne počáteční adresu. Vložte požadavek spolu s odpovědí a dekodér ukáže skutečná čísla registrů. Jedním kliknutím otevřete hodnoty v dekodéru registrů, který najde float, 32bitové hodnoty i pořadí bajtů.

Časté chyby

Otázky z praxe

Co obsahuje hlavička MBAP u Modbus TCP?

Sedm bajtů: ID transakce (2), ID protokolu (2, vždy 0), délku (2) a unit ID (1). Délka počítá bajty za ní, tedy unit ID a PDU. 00 01 00 00 00 06 11 znamená transakci 1, protokol Modbus, následuje 6 bajtů, unit 17.

Jak zkopírovat rámec Modbus z Wiresharku?

V detailu paketu klikněte pravým tlačítkem na řádek Modbus/TCP a zkopírujte ho jako hex stream, nebo zkopírujte bajty celého paketu. Funguje obojí: dekodér rozpozná hlavičky Ethernet, IPv4 a TCP a přeskočí je. Funguje i hex dump s offsety a sloupcem ASCII.

Proč rozebraná odpověď neukazuje čísla registrů?

Odpověď na čtení obsahuje počet bajtů a hodnoty, nic víc. Ze kterých registrů pocházejí, je jen v požadavku. Vložte požadavek na řádek nad odpověď a dekodér je spáruje, očísluje registry a předá počáteční adresu do dekodéru registrů.

Jaký je rozdíl mezi Modbus TCP a RTU over TCP?

Modbus TCP dává před PDU 7bajtovou hlavičku MBAP a nemá CRC. RTU over TCP posílá nezměněný sériový rámec včetně adresy zařízení a CRC přes spojení TCP. Klient nastavený na špatnou variantu nedostane odpověď. Dekodér zvládne obojí: rámec s platným CRC ukáže jako RTU bez ohledu na to, jak byl přenesen.

Co znamená chybový kód 0B?

Gateway Target Device Failed to Respond: brána Modbus TCP požadavek přijala a poslala na sériovou linku, ale zařízení za ní včas neodpovědělo. Zkontrolujte, že unit ID odpovídá adrese sériového zařízení, potom rychlost a paritu brány a zapojení RS-485. Kód 0A znamená, že brána ani nevěděla, kam požadavek poslat.

Související nástroje