Dátové typy Modbus
Dátové typy Modbus v skriptoch TapHome — Int16, Uint16, Int32, UInt32, Float, Bool, String a 64-bitové Int64, UInt64 a Double — s variantmi big-endian, little-endian a byte swap.
Dátový typ je tretím argumentom funkcií MODBUSR, MODBUSW a MODBUSWNE aj funkcií UNPACKVALUE a PACKVALUE. Určuje, koľko 16-bitových registrov hodnota zaberá a v akom poradí sú uložené jej bajty. Na veľkosti písmen v názvoch dátových typov nezáleží.
Základné dátové typy
Každý základný dátový typ zaberá pevný počet 16-bitových registrov a dáva skriptu hodnotu pevne daného typu.
| Typ | Registre | Rozsah | Hodnota v skripte |
|---|---|---|---|
Bool | 1 | 0 = FALSE, čokoľvek iné TRUE | bool |
Int16 | 1 | −32 768 … 32 767 | číslo |
Uint16 | 1 | 0 … 65 535 | číslo |
Int32 | 2 | −2 147 483 648 … 2 147 483 647 | číslo |
UInt32 | 2 | 0 … 4 294 967 295 | číslo |
Float | 2 | IEEE 754, jednoduchá presnosť | číslo |
Int64, UInt64 | 4 | 64-bitové celé čísla | int64, uint64 |
Double | 4 | IEEE 754, dvojitá presnosť | číslo |
String | 1 – 123 | 2 znaky na register | reťazec |
Mnohé zariadenia ukladajú desatinnú hodnotu ako celé číslo s pevnou mierkou — po prečítaní ho vydeľte, napríklad MODBUSR(H, 20, Int16) / 10. Hodnoty v kóde BCD prevádza funkcia FROMBCD.
Varianty poradia bajtov
Každý typ existuje vo variante big-endian a little-endian; 32- a 64-bitové typy aj vo variantoch byte swap.
| |
| Príznak | Význam pre registre |
|---|---|
BigEndian | Najvýznamnejší register je prvý. Je to predvolené správanie: Int32 je BigEndianInt32. |
LittleEndian | Poradie registrov je obrátené (word swap). Pri 16-bitovom type, ktorý má jeden register, sa vymenia dva bajty v ňom. |
ByteSwap | Dva bajty v každom registri sa vymenia. |
Poznámky
- Čítanie aj zápis uplatňujú všetky príznaky rovnako, takže zápis hodnoty a jej spätné prečítanie s tým istým typom dá tú istú hodnotu. Na riadiacich jednotkách starších ako 2026.1 funkcie
MODBUSWaMODBUSWNEpriInt32aUInt32príznakByteSwapignorovali. - Keď sa hodnota číta ako nezmysel, vyskúšajte varianty v ručných Modbus operáciách aplikácie, ktoré prepínajú dátový typ nad tými istými registrami.
- V bajtovej kolekcii znamenajú príznaky namiesto toho poradie bajtov — pozrite Poradie bajtov v kolekciách.
Príklad
MODBUSR(H, 0x0100, LittleEndianFloat);
MODBUSR(A, 30, BigEndianUint32ByteSwap);64-bitové dátové typy
Int64, UInt64 a Double zaberajú štyri registre; Int64 a UInt64 sa čítajú ako 64-bitové celé čísla, presne v celom rozsahu, pretože double drží celé čísla presne iba do 2^53.
Poznámky — 64-bitová hodnota si v bitových funkciách zachová všetkých 64 bitov, takže bity 32 až 63 alarmového slova sú dostupné.
Príklad — počítadlo energie vo Wh, zobrazené v kWh
VAR energy := MODBUSR(H, 100, UInt64);
energy / 1000;Chyby — Modbus data type ‘X’ not supported. Please update your core unit to be able to use this feature. — keď sa skript ukladá pre staršiu riadiacu jednotku.
Dostupnosť — Core 2026.1, build 40595 alebo novší.
String
String číta text uložený po dvoch znakoch v registri, vyšší bajt prvý; počet registrov je štvrtý argument.
Poznámky
MODBUSRprečíta 0 až 123 registrov; text končí na prvom nulovom bajte. Každý bajt je jeden znak.Stringsa dá iba čítať.MODBUSWaniPACKVALUEho nezapíšu.
Príklad
MODBUSR(H, 14, String, 4);
# Result: text of up to 8 characters, for example a serial numberZápis hodnôt
MODBUSW, MODBUSWNE a PACKVALUE pred zápisom prevedú hodnotu na dátový typ.
- Celočíselné typy zaokrúhľujú na najbližšie celé číslo; hodnota presne v polovici ide na párne číslo, takže
2.5sa zapíše ako2a3.5ako4. - Hodnota mimo rozsahu
Int16,Uint16aleboFloatzastaví skript: Overflow when writing X as UInt16. NaNsa dá zapísať iba doFloataDouble. Zápis do celočíselného typu zastaví skript: RegisterValueToWrites: Can’t write double.NaN to modbus register (MODBUSW,MODBUSWNE) alebo PACKVALUE: Can’t write double.NaN to modbus register.Boolzapíše 1 pre akúkoľvek hodnotu okrem 0.TRUEaFALSEsa dajú zapísať aj do číselných typov ako 1 a 0.
Príklad — požadovaná hodnota s jedným desatinným miestom
MODBUSW(H, 20, Int16, ROUND(Te * 10));Pozrite aj — Funkcie Modbus, Skripty Modbus a prefetch, Binárne dáta.