Kódování hodnoty do registrů
Zadejte hodnotu, kterou chcete poslat, a vyberte datový typ. Dostanete registry pro všechna pořadí bajtů v hex i desítkově a k tomu rámec, který je zapíše.
Hodnota
PříkladStejně jako v mapě registrů: hodnota zařízení je registr dělený tímto číslem. Jen pro celočíselné typy.
Registry
| Pořadí | Hex | Desítkově | Bajty |
|---|
Zápisový požadavek
Rámec, který master pošle pro zápis těchto registrů: funkce 06 pro jeden registr, 16 pro více.
- 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.
Datové typy v kostce
| Typ | Registry | Rozsah |
|---|---|---|
| UInt16 | 1 | 0 … 65535 |
| Int16 | 1 | −32768 … 32767 |
| UInt32 | 2 | 0 … 4294967295 |
| Int32 | 2 | −2147483648 … 2147483647 |
| Float32 | 2 | ±3.4e38, ~7 digits |
| UInt64 | 4 | 0 … 18446744073709551615 |
| Int64 | 4 | −9223372036854775808 … 9223372036854775807 |
| Float64 | 4 | ±1.8e308, ~15 digits |
Jak to funguje
Modbus registr nese 16 bitů. Větší hodnoty se rozdělí na bajty a rozloží do dvou nebo čtyř registrů a pořadí určuje zařízení. Kodér sestaví bajty vaší hodnoty a ukáže je ve všech čtyřech pořadích. Vyberte řádek, který zařízení očekává. Pokud si nejste jistí, přečtěte nejdřív známou hodnotu dekodérem registrů a pro zápis použijte stejné pořadí.
Celočíselné typy s měřítkem fungují tak, jak je popisují mapy registrů. Žádaná hodnota 230.5 V s „÷10“ se pošle jako 2305. Výpočet probíhá přesně v desítkové soustavě, takže 230.55 s ÷10 se zaokrouhlí na 2306 a dozvíte se to.
Časté chyby
- Zápis poloviny hodnoty. 32bitová hodnota potřebuje oba registry v jednom požadavku (funkce 16). Dva samostatné zápisy funkcí 06 nechají v zařízení mezitím smíšenou hodnotu a mnoho zařízení je odmítne.
- Zapomenuté měřítko. Zápis 230 do registru, který čeká desetiny, nastaví 23.0.
- Záporná čísla v registrech bez znaménka. Z -1 se stane 65535 (FFFF). Než zapíšete hodnotu pod nulou, ověřte, zda je registr se znaménkem.
- Registry jen pro čtení. Input registry (3x) zapsat nejde vůbec. Některé holding registry jsou také jen pro čtení a odpoví výjimkou 02 nebo 03.
Otázky z praxe
Jak zapsat float do Modbus registru?
Vyberte Float32, zadejte hodnotu a pořadí bajtů, které zařízení používá. Oba registry zapište najednou funkcí 16 od prvního registru dvojice. Celý rámec ukazuje panel Zápisový požadavek.
Proč se z 0.1 stane 0.100000001?
Float32 ukládá čísla binárně s přesností asi 7 platných číslic a 0.1 nemá přesný binární tvar. Nejbližší hodnota, kterou umí uložit, je 0.100000001. Zařízení ji zobrazí jako 0.1, takže je to v pořádku. Pokud potřebujete přesná desetinná čísla, použijte Float64 nebo celé číslo s měřítkem.
Jak se ukládají záporná čísla?
Typy se znaménkem používají dvojkový doplněk. -1 je v Int16 FFFF a v Int32 FFFF FFFF; -10 s měřítkem ÷10 je -100, tedy FF9C. Pokud mapa registrů uvádí UInt16, zařízení záporné hodnoty vůbec nepřijme.
Použít funkci 06, nebo 16?
Funkce 06 zapíše právě jeden registr. Funkce 16 zapíše jeden nebo více registrů v jednom požadavku, což je nutné pro 32- a 64bitové hodnoty. Některá zařízení přijímají jen funkci 16, i pro jediný registr; manuál to obvykle uvádí.
Co tu znamená měřítko ÷10?
Je to stejné měřítko, jaké mapa registrů uvádí pro čtení: hodnota zařízení je registr dělený 10. Pro zápis 230.5 kodér pošle 2305. ÷100 a ÷1000 fungují stejně.
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.
- Kalkulačka CRC-16Kontrolní součet Modbus RTU v pořadí na lince a kontrola celého rámce.