Tipovi podataka Modbus
Tipovi podataka Modbus u skriptama TapHome — Int16, Uint16, Int32, UInt32, Float, Bool, String i 64-bitni Int64, UInt64 i Double — s inačicama big-endian, little-endian i zamjenom bajtova.
Tip podataka treći je argument funkcija MODBUSR, MODBUSW i MODBUSWNE te funkcija UNPACKVALUE i PACKVALUE. Određuje koliko 16-bitnih registara vrijednost zauzima i kojim su redoslijedom spremljeni njezini bajtovi. Nazivi tipova podataka ne razlikuju velika i mala slova.
Osnovni tipovi podataka
Svaki osnovni tip podataka zauzima fiksan broj 16-bitnih registara i skripti daje vrijednost fiksnog tipa.
| Tip | Registri | Raspon | Vrijednost u skripti |
|---|---|---|---|
Bool | 1 | 0 = FALSE, sve ostalo TRUE | bool |
Int16 | 1 | −32 768 … 32 767 | broj |
Uint16 | 1 | 0 … 65 535 | broj |
Int32 | 2 | −2 147 483 648 … 2 147 483 647 | broj |
UInt32 | 2 | 0 … 4 294 967 295 | broj |
Float | 2 | IEEE 754 jednostruka preciznost | broj |
Int64, UInt64 | 4 | 64-bitni cijeli brojevi | int64, uint64 |
Double | 4 | IEEE 754 dvostruka preciznost | broj |
String | 1 – 123 | 2 znaka po registru | string |
Mnogi uređaji spremaju decimalnu vrijednost kao cijeli broj s fiksnim mjerilom — nakon čitanja je podijelite, na primjer MODBUSR(H, 20, Int16) / 10. Vrijednosti kodirane u BCD-u pretvaraju se funkcijom FROMBCD.
Inačice redoslijeda bajtova
Svaki tip postoji u inačici big-endian i little-endian; 32- i 64-bitni tipovi i u inačicama sa zamjenom bajtova.
| |
| Zastavica | Značenje za registre |
|---|---|
BigEndian | Najznačajniji registar dolazi prvi. To je zadano: Int32 je BigEndianInt32. |
LittleEndian | Redoslijed registara je obrnut (zamjena riječi). Kod 16-bitnog tipa, koji ima jedan registar, zamijenjena su dva bajta unutar njega. |
ByteSwap | Zamijenjena su dva bajta unutar svakog registra. |
Napomene
- Čitanje i zapis primjenjuju sve zastavice na isti način, pa zapis vrijednosti i ponovno čitanje istim tipom daje istu vrijednost. Na centralnim jedinicama starijim od 2026.1
MODBUSWiMODBUSWNEzanemarivali suByteSwapzaInt32iUInt32. - Kada se vrijednost čita kao besmislica, isprobajte inačice u ručnim operacijama Modbus u aplikaciji, koje mijenjaju tip podataka nad istim registrima.
- U zbirci bajtova zastavice umjesto toga znače redoslijed bajtova — vidi Redoslijed bajtova u zbirkama.
Primjer
MODBUSR(H, 0x0100, LittleEndianFloat);
MODBUSR(A, 30, BigEndianUint32ByteSwap);64-bitni tipovi podataka
Int64, UInt64 i Double zauzimaju četiri registra; Int64 i UInt64 čitaju se kao 64-bitni cijeli brojevi, točni u cijelom rasponu, jer double cijele brojeve drži točno samo do 2^53.
Napomene — 64-bitna vrijednost u funkcijama za bitove zadržava svih 64 bita, pa su dostupni i bitovi 32 do 63 riječi alarma.
Primjer — brojač energije u Wh, prikazan u kWh
VAR energy := MODBUSR(H, 100, UInt64);
energy / 1000;Pogreške — Modbus data type ‘X’ not supported. Please update your core unit to be able to use this feature. — kada se skripta sprema za stariju centralnu jedinicu.
Dostupno — Core 2026.1, build 40595 ili noviji.
String
String čita tekst spremljen po dva znaka u registru, najprije viši bajt; broj registara četvrti je argument.
Napomene
MODBUSRčita 0 do 123 registra; tekst završava na prvom nultom bajtu. Svaki bajt je jedan znak.Stringse može samo čitati.MODBUSWiPACKVALUEga ne zapisuju.
Primjer
MODBUSR(H, 14, String, 4);
# Result: text of up to 8 characters, for example a serial numberZapis vrijednosti
MODBUSW, MODBUSWNE i PACKVALUE prije zapisa pretvaraju vrijednost u tip podataka.
- Cjelobrojni tipovi zaokružuju na najbliži cijeli broj; vrijednost točno na polovici ide na paran broj, pa se
2.5zapisuje kao2, a3.5kao4. - Vrijednost izvan raspona tipa
Int16,Uint16iliFloatzaustavlja skriptu: Overflow when writing X as UInt16. NaNse može upisati samo uFloatiDouble. U cjelobrojni tip zaustavlja skriptu: RegisterValueToWrites: Can’t write double.NaN to modbus register (MODBUSW,MODBUSWNE) ili PACKVALUE: Can’t write double.NaN to modbus register.Boolza svaku vrijednost osim 0 upisuje 1.TRUEiFALSEmogu se upisati i u brojčane tipove kao 1 i 0.
Primjer — zadana vrijednost s jednim decimalnim mjestom
MODBUSW(H, 20, Int16, ROUND(Te * 10));Vidi također — Funkcije Modbus, Skripte Modbus i prefetch, Binarni podaci.