Tipuri de date Modbus
Tipurile de date Modbus din scripturile TapHome — Int16, Uint16, Int32, UInt32, Float, Bool, String și tipurile pe 64 de biți Int64, UInt64 și Double — cu variantele big-endian, little-endian și byte-swap.
Tipul de date este al treilea argument al funcțiilor MODBUSR, MODBUSW și MODBUSWNE și al funcțiilor UNPACKVALUE și PACKVALUE. El decide câte registre de 16 biți ocupă o valoare și în ce ordine sunt stocați octeții ei. Numele tipurilor de date nu țin cont de majuscule și minuscule.
Tipuri de date de bază
Fiecare tip de date de bază ocupă un număr fix de registre de 16 biți și dă scriptului o valoare de un tip fix.
| Tip | Registre | Interval | Valoarea în script |
|---|---|---|---|
Bool | 1 | 0 = FALSE, orice altceva TRUE | bool |
Int16 | 1 | −32 768 … 32 767 | număr |
Uint16 | 1 | 0 … 65 535 | număr |
Int32 | 2 | −2 147 483 648 … 2 147 483 647 | număr |
UInt32 | 2 | 0 … 4 294 967 295 | număr |
Float | 2 | IEEE 754 simplă precizie | număr |
Int64, UInt64 | 4 | numere întregi pe 64 de biți | int64, uint64 |
Double | 4 | IEEE 754 dublă precizie | număr |
String | 1 – 123 | 2 caractere per registru | șir de caractere |
Multe dispozitive stochează o valoare zecimală ca număr întreg cu o scară fixă — împărțiți-o după citire, de exemplu MODBUSR(H, 20, Int16) / 10. Valorile codificate BCD se convertesc cu FROMBCD.
Variante ale ordinii octeților
Fiecare tip există într-o variantă big-endian și una little-endian; tipurile pe 32 și 64 de biți și în variante byte-swap.
| |
| Indicator | Semnificație pentru registre |
|---|---|
BigEndian | Registrul cel mai semnificativ este primul. Aceasta este varianta implicită: Int32 este BigEndianInt32. |
LittleEndian | Ordinea registrelor este inversată (word swap). La un tip pe 16 biți, care are un singur registru, se inversează cei doi octeți din el. |
ByteSwap | Cei doi octeți din fiecare registru se inversează. |
Observații
- Citirile și scrierile aplică toți indicatorii la fel, așa că o valoare scrisă și citită înapoi cu același tip dă aceeași valoare. Pe Core mai vechi decât 2026.1,
MODBUSWșiMODBUSWNEignorauByteSwappentruInt32șiUInt32. - Când o valoare se citește fără sens, încercați variantele în operațiile Modbus manuale din aplicație, care schimbă tipul de date peste aceleași registre.
- Într-o colecție de octeți indicatorii înseamnă în schimb ordinea octeților — consultați Ordinea octeților în colecții.
Exemplu
MODBUSR(H, 0x0100, LittleEndianFloat);
MODBUSR(A, 30, BigEndianUint32ByteSwap);Tipuri de date pe 64 de biți
Int64, UInt64 și Double ocupă patru registre; Int64 și UInt64 se citesc ca numere întregi pe 64 de biți, exacte pe tot intervalul, deoarece un double reține exact numerele întregi doar până la 2^53.
Observații — O valoare pe 64 de biți își păstrează toți cei 64 de biți în funcțiile pe biți, așa că biții 32 până la 63 ai unui cuvânt de alarmă sunt accesibili.
Exemplu — contor de energie în Wh, afișat în kWh
VAR energy := MODBUSR(H, 100, UInt64);
energy / 1000;Erori — Modbus data type ‘X’ not supported. Please update your core unit to be able to use this feature. — când scriptul se salvează pentru un Core mai vechi.
Disponibilitate — Core 2026.1, build 40595 sau mai nou.
String
String citește text stocat câte două caractere per registru, octetul superior primul; numărul de registre este al patrulea argument.
Observații
MODBUSRcitește 0 până la 123 de registre; textul se termină la primul octet zero. Fiecare octet este un caracter.Stringse poate doar citi.MODBUSWșiPACKVALUEnu îl scriu.
Exemplu
MODBUSR(H, 14, String, 4);
# Result: text of up to 8 characters, for example a serial numberScrierea valorilor
MODBUSW, MODBUSWNE și PACKVALUE convertesc valoarea în tipul de date înainte de scriere.
- Tipurile întregi rotunjesc la cel mai apropiat număr întreg; o valoare aflată exact la jumătate merge spre numărul par, așa că
2.5se scrie ca2, iar3.5ca4. - O valoare în afara intervalului tipurilor
Int16,Uint16sauFloatoprește scriptul: Overflow when writing X as UInt16. NaNse poate scrie doar înFloatșiDouble. Într-un tip întreg oprește scriptul: RegisterValueToWrites: Can’t write double.NaN to modbus register (MODBUSW,MODBUSWNE) sau PACKVALUE: Can’t write double.NaN to modbus register.Boolscrie 1 pentru orice valoare diferită de 0.TRUEșiFALSEse pot scrie și în tipurile numerice ca 1 și 0.
Exemplu — valoare dorită cu o zecimală
MODBUSW(H, 20, Int16, ROUND(Te * 10));Consultați și — Funcții Modbus, Scripturi Modbus și prefetch, Date binare.