TapHome

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ékekMegjegyzés
boolTRUE, FALSEBármely nem nulla szám TRUE értékké, a nulla FALSE értékké alakul.
int8, uint8, int16, uint16, int, uint, int64, uint648, 16, 32 és 64 bites egész számokAz int és az uint a 32 bites típus. Az uint8 a bájtgyűjtemények bájtja.
float, doubleLebegőpontos számokA számliterálok és a legtöbb aritmetikai művelet double értéket ad.
charEgy karakter, 'A'Az aritmetikában a karakterkódjával vesz részt.
stringSzöveg, "abc"A + szöveget fűz össze, ha bármelyik oldalán szöveg áll.

Az Int32 x := 4; az Unknown variable or constant 'Int32' hibával leáll. Az olyan nevek, mint az Int32 és az UInt32, csak a MODBUSR és a MODBUSW Modbus adattípusai között léteznek.

Strukturált típusok

A strukturált típusok több értéket tartalmaznak, amelyek tulajdonságként érhetők el:

TípusTartalomTulajdonságok
datetimeDátum és idő a fajtájával (Local, Utc, Unspecified)Lásd Dátum és idő
timespanIdőintervallumDays, Hours, Minutes, Seconds, Milliseconds, TotalDays, TotalHours, TotalMinutes, TotalSeconds, TotalMilliseconds (csak olvasható)
httprequestA HTTPREQUEST által előkészített HTTP-kérésPath, Method, Body, Headers (olvasható és írható)
httpresponseA SENDHTTPREQUEST válaszaContent, Headers, IsSuccess, StatusCode, ReasonPhrase (csak olvasható)
receivedmessageA listener szkript RECEIVEDMSG bejövő üzeneteProtocol, Payload, Length, Topic, ContentType, PayloadFormat, ClientId, Expiry, Dup (csak olvasható)
blobNyers bájtok, például RECEIVEDMSG.PAYLOADLength (csak olvasható)
rgbcolor, hsvcolorSzínek, lásd SzínekRed, Green, Blue, illetve Hue, Saturation, Value (olvasható és írható)
groupvalueEgy eszközcsoport értékeCalculated, Values (csak olvasható)
currentvalueinfo, historyvaluesEgy Value info változó részeiLá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ékekHasználja
ModbusRegisterTypeC, H, D, AModbus függvények
ModbusDataTypeInt16, Uint16, Int32, UInt32, Float, Bool, String, Int64, UInt64, Double és ezek bájtsorrend-változatai, lásd Modbus adattípusokModbus függvények, PACKVALUE, UNPACKVALUE
LinearTypeDEFAULT, BOUNDS, STRICT, INFINITELINEAR
DateTimeKindLocal, Utc, UnspecifiedNOW, DATETIME
DayOfWeekMonday … SundayA datetime tulajdonságai
CompareOptionsNone, IgnoreCase, IgnoreNonSpace, IgnoreSymbols, IgnoreKanaType, IgnoreWidth, OrdinalIgnoreCase, StringSort, OrdinalCOMPARE

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} az Unable to determine collection type hibá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, az INSERT, a REMOVEAT, a SETAT és a REPLACE helyben módosítja a gyűjteményt, és ugyanazt a gyűjteményt adja vissza.
  • A BYTECOLLECTION, az UINT16COLLECTION és a BOOLCOLLECTION legfeljebb 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 a c.Length az 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:

  1. Valamelyik operandus double (vagy csoportérték): double.
  2. Valamelyik operandus float: float.
  3. Valamelyik operandus int64: int64.
  4. Valamelyik operandus uint64: uint64.
  5. Valamelyik operandus uint: uint, ha a másik is előjel nélküli, különben int64.
  6. 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 double operandust előbb int64 típusra alakítják.
  • A + szöveget fűz össze, ha bármelyik oldalán szöveg áll: a "T=" + 21.5 eredménye "T=21.5".
  • A datetime + szám ezredmásodperceket ad hozzá, a datetime + timespan az intervallumot adja hozzá, a timespan ± timespan pedig a várt módon működik.
  • A nullával való osztás a Division by zero hibával leállítja a szkriptet. Az osztót az IF segí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 NaN literá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 az ISNAN függvényt.
  • A <, >, <= és >= Null operandussal FALSE eredményt ad. A Null = Null, a Null <= Null és a Null >= Null értéke TRUE, a Null = 5 értéke FALSE.
  • Az &, | és ^ Null operandussal Null eredményt ad; a << és a >> Null eredményt ad, ha a bal oldali érték Null, a Null eltolásszám viszont a Cannot cast DataType.Null to number hibával leállítja a szkriptet.
  • A Null értékkel végzett aritmetikai és logikai művelet (Null + 5, !Null) az Operator '+' not defined for 'Null' and 'Double' hibával leállítja a szkriptet. Előbb ellenőrizd az értéket az ISNULL függvénnyel.
  • Az IF Null feltétele FALSE értéknek számít.
  • A MIN, MAX, AVG és ORDER kihagyja a Null és a NaN értékeket; a …STRICT változatok továbbadják őket. Az EQUALS(NaN, NaN) értéke TRUE.
IF(ISNULL(value) OR ISNAN(value), 0, value);
# Result: the value, or 0 when it is missing or unknown