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říkladRTU 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.
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
| Část | Bajtů |
|---|---|
| Adresa zařízení (unit ID) | 1 |
| Funkční kód | 1 |
| Data | 0–252 |
| CRC, nižší bajt první | 2 |
Modbus TCP
| Část | Bajtů |
|---|---|
| ID transakce | 2 |
| ID protokolu, vždy 0 | 2 |
| Délka: unit ID + PDU | 2 |
| Adresa zařízení (unit ID) | 1 |
| Funkční kód | 1 |
| Data | 0–252 |
Modbus ASCII
| Část | Bajtů |
|---|---|
| : | 1 |
| Adresa zařízení (unit ID) | 2 |
| Funkční kód | 2 |
| Data | 0–504 |
| LRC | 2 |
| CR LF | 2 |
Čá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
- Výjimka 02, i když registr existuje. Obvykle je adresa posunutá o 1: registr 40001 je v rámci adresa 0. Převod adres ukáže obojí.
- Žádná odpověď. Zařízení mlčí, když je CRC špatně, adresa zařízení nesedí nebo se liší rychlost a parita. Když dekodér najde požadavek v pořádku, hledejte chybu v zapojení a nastavení linky. Kalkulačka CRC sestaví správný rámec na zkoušku.
- Vložený celý ethernetový paket. To nevadí. Dekodér přeskočí hlavičky Ethernet, IP a TCP, pokud sedí kontrolní součet IPv4. Více paketů dejte každý na vlastní řádek.
- Odpovědi přiřazené ke špatnému požadavku. V Modbus TCP páruje odpověď s požadavkem ID transakce. Klient, který ID používá znovu příliš brzy, dostane matoucí výsledky, stejně jako log, ve kterém požadavky a odpovědi nejdou po sobě.
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
- Dekodér registrůFloat32, Int32, UInt16 i bity ve všech pořadích bajtů a funkce Najít moji hodnotu.
- Převod adres40001 ↔ offset 0, zápis 4x/3x/0x/1x, 5- i 6místné adresy.
- Kódování hodnotyHodnotu jako 230.5 převede na registry pro všechna pořadí bajtů.
- Kalkulačka CRC-16Kontrolní součet Modbus RTU v pořadí na lince a kontrola celého rámce.
- Funkční a chybové kódyCo který kód znamená a jaká bývá příčina v praxi.