PLCBytes
Nástroje pro Modbus

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říklad
Měřítko

Stejně jako v mapě registrů: hodnota zařízení je registr dělený tímto číslem. Jen pro celočíselné typy.

Registry

PořadíHexDesí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

TypRegistryRozsah
UInt1610 … 65535
Int161−32768 … 32767
UInt3220 … 4294967295
Int322−2147483648 … 2147483647
Float322±3.4e38, ~7 digits
UInt6440 … 18446744073709551615
Int644−9223372036854775808 … 9223372036854775807
Float644±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

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