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 od verzije Core 2022.2; UINT16COLLECTION i BOOLCOLLECTION od verzije Core 2026.1, build 39001.
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