Převod Modbus adres
Zadejte adresu z manuálu nebo softwaru a uvidíte stejný registr ve všech zápisech: číslo registru, adresu od nuly, hex i bajty v rámci.
Adresa
PříkladNapříklad 40001, 400001, 4x0001, 30010, 0x006B nebo prostá adresa jako 107.
Stejný registr ve všech zápisech
| Typ | |
|---|---|
| Adresa v požadavku (od 0) | |
| Totéž v hex | |
| Bajty adresy v rámci | |
| Číslo registru, 5 číslic | |
| Číslo registru, 6 číslic | |
| Pořadí počítané od 1 |
Čtecí požadavek pro tuto adresu
Bajty, které master pošle pro čtení odsud. Porovnejte je se záznamem sériové linky nebo z Wiresharku.
- Modbus RTU (CRC nižší bajt první)
- Modbus TCP (transakce 1)
Běží celé ve vašem prohlížeči. Nic z toho, co zadáte, se neodesílá na server.
Typy registrů v kostce
| Typ | Čísla registrů | Čtení | Zápis | Velikost |
|---|---|---|---|---|
| Coily (0x) | 00001–09999 · 000001–065536 | 01 | 05, 15 | 1 bit |
| Diskrétní vstupy (1x) | 10001–19999 · 100001–165536 | 02 | jen čtení | 1 bit |
| Input registry (3x) | 30001–39999 · 300001–365536 | 04 | jen čtení | 16 bitů |
| Holding registry (4x) | 40001–49999 · 400001–465536 | 03 | 06, 16 | 16 bitů |
Číslo registru, nebo adresa?
Manuály obvykle uvádějí registry podle čísla registru: 40001, 30001, 10001 nebo 00001. První číslice určuje tabulku a počítá se od 1. V požadavku na lince je ale něco jiného: adresa od nuly v rozsahu 0 až 65535, bez číslice tabulky. Tabulku místo toho určuje funkční kód, 03 pro holding registry a 04 pro input registry. Proto se z 40001 stane adresa 0 a z 30010 adresa 9 s funkcí 04.
Šestimístná čísla jako 400001 fungují stejně. Existují proto, že pět číslic stačí jen na 9999 registrů v tabulce, kdežto protokol jich dovoluje 65536. Zápisy jako 4x0001 nebo 4x00001 jsou jen jiný způsob, jak napsat 40001.
Časté chyby
- Posun o jedna. Když zadáte 40001 minus 40000 = 1 místo 0, čtete další registr. Všechny hodnoty pak vypadají posunuté nebo se z 32bitového floatu stane nesmysl.
- Hex přečtený jako desítkové číslo. Manuál, který píše 0x0100, myslí adresu 256, ne 100. Má-li adresa písmena A až F nebo předponu 0x, je v hex.
- Špatná tabulka. 30001 a 40001 jsou různé registry. Čtení input registru funkcí 03 vrátí jinou hodnotu nebo výjimku 02, neplatná adresa dat.
- Software, který jedničku odečte sám. Některé programy chtějí čísla registrů od 1 a jedničku odečtou za vás. Pokud má váš nástroj volbu „base 0 / base 1“ nebo „PLC adresa“, ověřte si ji dřív, než budete cokoli odečítat sami.
Otázky z praxe
Je 40001 adresa 0, nebo 1?
Adresa 0. 40001 je první holding registr v klasickém číslování Modicon, které počítá od 1. Požadavek nese adresu od nuly, takže 40001 se pošle jako 00 00 a 40002 jako 00 01.
Jaký je rozdíl mezi 40001 a 400001?
Žádný, je to stejný registr. Pětimístná čísla dosáhnou jen na 49999, tedy adresu 9998. Šestimístná čísla (400001 až 465536) pokryjí celý rozsah 65536 adres, proto je některé manuály používají pro všechny registry.
Manuál uvádí 0x006B. Co mám zadat do softwaru?
0x006B je hex adresa, desítkově 107. Pokud software chce adresu od nuly, zadejte 107. Pokud chce číslo registru, zadejte 40108 pro holding registr nebo 30108 pro input registr.
Jakým funkčním kódem se čtou registry 3xxxx a 4xxxx?
Input registry (3xxxx) se čtou funkcí 04. Holding registry (4xxxx) se čtou funkcí 03 a zapisují funkcí 06 pro jeden registr nebo 16 pro více. Coily (0xxxx) používají 01, 05 a 15, diskrétní vstupy (1xxxx) funkci 02.
Proč dostávám výjimku 02, neplatná adresa dat?
Zařízení na požadované adrese nemá registr. Typické příčiny jsou adresa posunutá o jedna, hex adresa zadaná jako desítková, čtení input registru funkcí 03 nebo naopak, případně čtení více registrů, než má blok.
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.
- 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.