Adattípusok
A TapHome szkriptnyelv adattípusai: számok, szöveg, strukturált és felsorolt típusok, gyűjtemények, a .Type tulajdonság, típuskiterjesztés az aritmetikában, valamint a Null és a NaN viselkedése.
Skaláris típusok
A szkriptben minden értéknek konkrét típusa van. Az alábbi típusneveket a típusos deklarációk használják (lásd Helyi változók), és a .Type tulajdonság is ezeket adja vissza.
| Típus | Értékek | Megjegyzés |
|---|---|---|
bool | TRUE, FALSE | Bármely nem nulla szám TRUE értékké, a nulla FALSE értékké alakul. |
int8, uint8, int16, uint16, int, uint, int64, uint64 | 8, 16, 32 és 64 bites egész számok | Az int és az uint a 32 bites típus. Az uint8 a bájtgyűjtemények bájtja. |
float, double | Lebegőpontos számok | A számliterálok és a legtöbb aritmetikai művelet double értéket ad. |
char | Egy karakter, 'A' | Az aritmetikában a karakterkódjával vesz részt. |
string | Szöveg, "abc" | A + szöveget fűz össze, ha bármelyik oldalán szöveg áll. |
Strukturált típusok
A strukturált típusok több értéket tartalmaznak, amelyek tulajdonságként érhetők el:
| Típus | Tartalom | Tulajdonságok |
|---|---|---|
datetime | Dátum és idő a fajtájával (Local, Utc, Unspecified) | Lásd Dátum és idő |
timespan | Időintervallum | Days, Hours, Minutes, Seconds, Milliseconds, TotalDays, TotalHours, TotalMinutes, TotalSeconds, TotalMilliseconds (csak olvasható) |
httprequest | A HTTPREQUEST által előkészített HTTP-kérés | Path, Method, Body, Headers (olvasható és írható) |
httpresponse | A SENDHTTPREQUEST válasza | Content, Headers, IsSuccess, StatusCode, ReasonPhrase (csak olvasható) |
receivedmessage | A listener szkript RECEIVEDMSG bejövő üzenete | Protocol, Payload, Length, Topic, ContentType, PayloadFormat, ClientId, Expiry, Dup (csak olvasható) |
blob | Nyers bájtok, például RECEIVEDMSG.PAYLOAD | Length (csak olvasható) |
rgbcolor, hsvcolor | Színek, lásd Színek | Red, Green, Blue, illetve Hue, Saturation, Value (olvasható és írható) |
groupvalue | Egy eszközcsoport értéke | Calculated, Values (csak olvasható) |
currentvalueinfo, historyvalues | Egy Value info változó részei | Lásd Value info |
Felsorolt típusok
A felsorolt típus (enum) névvel ellátott értékek rögzített halmaza, amelyet egyes függvények paraméterként fogadnak:
| Típus | Értékek | Használja |
|---|---|---|
ModbusRegisterType | C, H, D, A | Modbus függvények |
ModbusDataType | Int16, Uint16, Int32, UInt32, Float, Bool, String, Int64, UInt64, Double és ezek bájtsorrend-változatai, lásd Modbus adattípusok | Modbus függvények, PACKVALUE, UNPACKVALUE |
LinearType | DEFAULT, BOUNDS, STRICT, INFINITE | LINEAR |
DateTimeKind | Local, Utc, Unspecified | NOW, DATETIME |
DayOfWeek | Monday … Sunday | A datetime tulajdonságai |
CompareOptions | None, IgnoreCase, IgnoreNonSpace, IgnoreSymbols, IgnoreKanaType, IgnoreWidth, OrdinalIgnoreCase, StringSort, Ordinal | COMPARE |
A felsorolt érték írható önmagában (Utc) vagy a típusával együtt (DateTimeKind.Utc). A felsorolt típusok deklarációs kulcsszóként is működnek:
DateTimeKind kind := Utc;
VAR t := NOW(kind);Gyűjtemények
A collection<T> egyetlen T elemtípusú értékek listája.
collection<uint16> registers := UINT16COLLECTION(4);
collection<string> names := {"a", "b", "c"};
collection<uint8> data := BYTECOLLECTION("0A0B0C");
LENGTH(names);
# Result: 3- Az elemtípust a deklaráció adja meg, ennek hiányában az első olyan elem, amely nem
Null. A magában álló{Null}azUnable to determine collection typehibával leáll. - Az egymásba ágyazott gyűjtemények nem támogatottak:
Collection<Collection<>> is not supported. - A gyűjtemények referenciaértékek. Az
APPEND, azINSERT, aREMOVEAT, aSETATés aREPLACEhelyben módosítja a gyűjteményt, és ugyanazt a gyűjteményt adja vissza. - A
BYTECOLLECTION, azUINT16COLLECTIONés aBOOLCOLLECTIONlegfeljebb 2048 elemet hoz létre; nagyobb darabszámnál minden alak saját üzenetet ad (lásd Futásidejű hibák). - A
LENGTH(c)vagy ac.Lengthaz elemek számát adja vissza.
Elérhetőség — típusos gyűjtemények a Core 2022.2 verziótól; az UINT16COLLECTION és a BOOLCOLLECTION a Core 2026.1 verziótól (build 39001).
A .Type tulajdonság
Minden értéknek van egy csak olvasható .Type tulajdonsága, amely szövegként adja vissza a típusa nevét. Felsorolt értéknél ez a felsorolt típus, például "DateTimeKind".
VAR x := 5.5;
x.Type;
# Result: "Double"
VAR c := BYTECOLLECTION("0A0B");
c.Type;
# Result: "Collection<UInt8>"Tulajdonságot csak névvel ellátott változóból lehet olvasni. Az AVG('a', 'c').Type az Unexpected character '.' hibával leáll; előbb tárold az értéket egy változóban.
Típuskonverzió szabályai
Az aritmetikában az eredmény típusát az első olyan szabály határozza meg, amely a két operandusra illik:
- Valamelyik operandus
double(vagy csoportérték):double. - Valamelyik operandus
float:float. - Valamelyik operandus
int64:int64. - Valamelyik operandus
uint64:uint64. - Valamelyik operandus
uint:uint, ha a másik is előjel nélküli, különbenint64. - Minden más esetben (kisebb egészek,
bool,char):int.
Két egész szám osztása csonkol. A számliterál double, így a vele való osztás nem csonkol:
int a := 5;
int b := 2;
a / b;
# Result: 2
a / 2;
# Result: 2.5- A bitenkénti operátorok egész számokkal dolgoznak; a
doubleoperandust előbbint64típusra alakítják. - A
+szöveget fűz össze, ha bármelyik oldalán szöveg áll: a"T=" + 21.5eredménye"T=21.5". - A
datetime+ szám ezredmásodperceket ad hozzá, adatetime+timespanaz intervallumot adja hozzá, atimespan±timespanpedig a várt módon működik. - A nullával való osztás a
Division by zerohibával leállítja a szkriptet. Az osztót azIFsegítségével védd. - A típusos változónak adott érték a változó típusára alakul, lásd Helyi változók.
Null és NaN
A NaN olyan szám, amelynek értéke ismeretlen, például egy még be nem olvasott érzékelő vagy egy hibás eszköz értéke. A Null azt jelenti, hogy egyáltalán nincs érték: törölt eszköz, vagy egy függvény, amely nem talált semmit.
- A
NaNliterállal való összehasonlítást (x = NaN,x < NaN) a szkript elemzésekor elutasítja:Comparison with NaN is always false. Use the IsNaN method to check for NaN value.Használd azISNANfüggvényt. - A
<,>,<=és>=NulloperandussalFALSEeredményt ad. ANull = Null, aNull <= Nullés aNull >= NullértékeTRUE, aNull = 5értékeFALSE. - Az
&,|és^NulloperandussalNulleredményt ad; a<<és a>>Nulleredményt ad, ha a bal oldali értékNull, aNulleltolásszám viszont aCannot cast DataType.Null to numberhibával leállítja a szkriptet. - A
Nullértékkel végzett aritmetikai és logikai művelet (Null + 5,!Null) azOperator '+' not defined for 'Null' and 'Double'hibával leállítja a szkriptet. Előbb ellenőrizd az értéket azISNULLfüggvénnyel. - Az
IFNullfeltételeFALSEértéknek számít. - A
MIN,MAX,AVGésORDERkihagyja aNullés aNaNértékeket; a…STRICTváltozatok továbbadják őket. AzEQUALS(NaN, NaN)értékeTRUE.
IF(ISNULL(value) OR ISNAN(value), 0, value);
# Result: the value, or 0 when it is missing or unknown