Tipovi podataka
Tipovi podataka skriptnog jezika TapHome: brojevi, tekst, strukturirani i enum tipovi, zbirke, svojstvo .Type, proširenje tipa u aritmetici te ponašanje vrijednosti Null i NaN.
Skalarni tipovi
Svaka vrijednost u skripti ima konkretan tip. Nazivi tipova u nastavku koriste se u deklaracijama s tipom (vidi Lokalne varijable), a vraća ih svojstvo .Type.
| Tip | Vrijednosti | Napomene |
|---|---|---|
bool | TRUE, FALSE | Svaki broj različit od nule pretvara se u TRUE, nula u FALSE. |
int8, uint8, int16, uint16, int, uint, int64, uint64 | Cijeli brojevi od 8, 16, 32 i 64 bita | int i uint su 32-bitni tipovi. uint8 je bajt zbirki bajtova. |
float, double | Brojevi s pomičnim zarezom | Brojčani literali i većina aritmetike daju double. |
char | Jedan znak, 'A' | U aritmetici sudjeluje svojim kodom znaka. |
string | Tekst, "abc" | + s nizom znakova na bilo kojoj strani spaja tekst. |
Strukturirani tipovi
Strukturirani tipovi sadrže više vrijednosti, dostupnih kao svojstva:
| Tip | Sadrži | Svojstva |
|---|---|---|
datetime | Datum i vrijeme s vrstom (Local, Utc, Unspecified) | Vidi Datum i vrijeme |
timespan | Vremenski interval | Days, Hours, Minutes, Seconds, Milliseconds, TotalDays, TotalHours, TotalMinutes, TotalSeconds, TotalMilliseconds (samo za čitanje) |
httprequest | Pripremljeni HTTP zahtjev iz HTTPREQUEST | Path, Method, Body, Headers (čitanje i pisanje) |
httpresponse | Odgovor funkcije SENDHTTPREQUEST | Content, Headers, IsSuccess, StatusCode, ReasonPhrase (samo za čitanje) |
receivedmessage | Dolazna poruka RECEIVEDMSG listener skripte | Protocol, Payload, Length, Topic, ContentType, PayloadFormat, ClientId, Expiry, Dup (samo za čitanje) |
blob | Neobrađeni bajtovi, na primjer RECEIVEDMSG.PAYLOAD | Length (samo za čitanje) |
rgbcolor, hsvcolor | Boje, vidi Boje | Red, Green, Blue i Hue, Saturation, Value (čitanje i pisanje) |
groupvalue | Vrijednost skupine uređaja | Calculated, Values (samo za čitanje) |
currentvalueinfo, historyvalues | Dijelovi varijable Info vrijednosti | Vidi Info vrijednosti |
Enum tipovi
Enum tip je fiksni skup imenovanih vrijednosti koje neke funkcije primaju kao parametar:
| Tip | Vrijednosti | Koristi ga |
|---|---|---|
ModbusRegisterType | C, H, D, A | Funkcije Modbus |
ModbusDataType | Int16, Uint16, Int32, UInt32, Float, Bool, String, Int64, UInt64, Double i njihove varijante redoslijeda bajtova, vidi Tipovi podataka Modbus | Funkcije Modbus, PACKVALUE, UNPACKVALUE |
LinearType | DEFAULT, BOUNDS, STRICT, INFINITE | LINEAR |
DateTimeKind | Local, Utc, Unspecified | NOW, DATETIME |
DayOfWeek | Monday … Sunday | Svojstva tipa datetime |
CompareOptions | None, IgnoreCase, IgnoreNonSpace, IgnoreSymbols, IgnoreKanaType, IgnoreWidth, OrdinalIgnoreCase, StringSort, Ordinal | COMPARE |
Vrijednost enuma piše se sama (Utc) ili sa svojim tipom (DateTimeKind.Utc). Enum tipovi rade i kao ključne riječi deklaracije:
DateTimeKind kind := Utc;
VAR t := NOW(kind);Zbirke
collection<T> je popis vrijednosti jednog tipa elementa T.
collection<uint16> registers := UINT16COLLECTION(4);
collection<string> names := {"a", "b", "c"};
collection<uint8> data := BYTECOLLECTION("0A0B0C");
LENGTH(names);
# Result: 3- Tip elementa dolazi iz deklaracije, inače iz prvog elementa koji nije
Null. Sam{Null}završava pogreškomUnable to determine collection type. - Ugniježđene zbirke nisu podržane:
Collection<Collection<>> is not supported. - Zbirke su referentne vrijednosti.
APPEND,INSERT,REMOVEAT,SETATiREPLACEmijenjaju zbirku na mjestu i vraćaju istu zbirku. BYTECOLLECTION,UINT16COLLECTIONiBOOLCOLLECTIONstvaraju najviše 2048 elemenata; svaki oblik veći broj prijavljuje vlastitom porukom (vidi Pogreške pri izvršavanju).LENGTH(c)ilic.Lengthvraća broj elemenata.
Dostupno — zbirke s tipom: Core 2022.2 ili noviji; UINT16COLLECTION i BOOLCOLLECTION: TapHome Next 2026.1.39016+.
Svojstvo .Type
Svaka vrijednost ima svojstvo samo za čitanje .Type, koje vraća naziv njezina tipa kao tekst. Za vrijednost enuma to je enum tip, na primjer "DateTimeKind".
VAR x := 5.5;
x.Type;
# Result: "Double"
VAR c := BYTECOLLECTION("0A0B");
c.Type;
# Result: "Collection<UInt8>"Svojstva se mogu čitati samo iz imenovane varijable. AVG('a', 'c').Type završava pogreškom Unexpected character '.'; vrijednost najprije spremite u varijablu.
Pravila pretvorbe tipova
U aritmetici tip rezultata određuje prvo pravilo koje odgovara dvama operandima:
- Bilo koji operand je
double(ili vrijednost skupine):double. - Bilo koji operand je
float:float. - Bilo koji operand je
int64:int64. - Bilo koji operand je
uint64:uint64. - Bilo koji operand je
uint:uintkada je i drugi bez predznaka, inačeint64. - Inače (manji cijeli brojevi,
bool,char):int.
Dijeljenje dvaju cijelih brojeva odbacuje decimalni dio. Brojčani literal je double, pa dijeljenje njime to ne radi:
int a := 5;
int b := 2;
a / b;
# Result: 2
a / 2;
# Result: 2.5- Operatori nad bitovima rade s cijelim brojevima; operand
doublenajprije se pretvara uint64. +s nizom znakova na bilo kojoj strani spaja tekst:"T=" + 21.5je"T=21.5".datetime+ broj dodaje milisekunde,datetime+timespandodaje interval, atimespan±timespanradi kako se i očekuje.- Dijeljenje nulom zaustavlja skriptu pogreškom
Division by zero. Djelitelj zaštitite funkcijomIF. - Dodjela varijabli s tipom pretvara vrijednost u njezin tip, vidi Lokalne varijable.
Null i NaN
NaN je broj čija je vrijednost nepoznata, na primjer senzor koji još nije očitan ili uređaj u pogrešci. Null znači da vrijednost uopće ne postoji: obrisani uređaj ili funkcija koja nije ništa pronašla.
- Usporedba s literalom
NaN(x = NaN,x < NaN) odbija se već pri raščlambi skripte:Comparison with NaN is always false. Use the IsNaN method to check for NaN value.KoristiteISNAN. <,>,<=i>=s operandomNulldajuFALSE.Null = Null,Null <= NulliNull >= NullsuTRUE,Null = 5jeFALSE.&,|i^s operandomNulldajuNull;<<i>>dajuNullza vrijednostNulls lijeve strane, dok broj pomakaNullzaustavlja skriptu pogreškomCannot cast DataType.Null to number.- Aritmetika i logika s
Null(Null + 5,!Null) zaustavlja skriptu pogreškomOperator '+' not defined for 'Null' and 'Double'. Vrijednost najprije provjerite funkcijomISNULL. - Uvjet
NulluIFvrijedi kaoFALSE. MIN,MAX,AVGiORDERpreskačuNulliNaN; varijante…STRICTih prosljeđuju dalje.EQUALS(NaN, NaN)jeTRUE.
IF(ISNULL(value) OR ISNAN(value), 0, value);
# Result: the value, or 0 when it is missing or unknown