Szintaxis és vezérlési szerkezetek
A TapHome szkriptnyelv szintaxisa: utasítások és pontosvesszők, megjegyzések, literálok, az IF függvény- és blokkformája, SWITCH, WHILE és DO ciklusok, BREAK, CONTINUE és RETURN.
Utasítások és pontosvesszők
A szkript utasítások sorozata, és minden utasítás pontosvesszővel ; végződik. A blokkutasítások (IF … END, WHILE … LOOP, DO … LOOP WHILE …) és a megjegyzések után nincs pontosvessző. A kulcsszavak és a nevek nem különböztetik meg a kis- és nagybetűket: az IF, az if és az If ugyanaz.
VAR x := 5;
IF x > 3
x := x - 1;
END
x;
# Result: 4A pontosvessző csak a szkript utolsó utasítása után hagyható el; blokkon belül minden utasításnak kell, az END vagy LOOP előtti utolsónak is. Ha blokkon belül hiányzik a pontosvessző az END vagy a LOOP előtt, a szkript az Unexpected character 'E' at the end of statement. Expected ';' hibával leáll (a LOOP előtt 'L').
Megjegyzések
A megjegyzés # jellel kezdődik, és a sor végéig tart. Állhat külön sorban, vagy követhet egy teljes utasítást: a pontosvessző után, illetve az END, ELSE vagy LOOP után.
# starting value
VAR x := 5; # a comment after the semicolon
IF x > 3
x := 1;
END # end of the checkAz utasításon belüli # (a pontosvessző előtt, vagy egy IF vagy WHILE feltétele után) a Comment must start on a new line and inline comments are not supported hibát okozza.
Literálok
A literál a szkriptbe közvetlenül beírt érték.
| Literál | Példa | Megjegyzés |
|---|---|---|
| Szám | 5, 21.5, -3 | Tizedesjel: pont .. A számliterál double, ezért az 5 / 2 eredménye 2.5. Kitevő (1e3) és kezdő pont (.5) nem használható. |
| Hexadecimális | 0xA0A0, 0xff | int, a számjegyeknél a kis- és nagybetű nem számít: a 0xA0A0 értéke 41120. |
| Bináris | 0b10101010 | int: 170. |
| Logikai | TRUE, FALSE | |
| Ismeretlen szám | NaN | Soha nem egyenlő semmivel; az ISNAN függvénnyel vizsgáld. |
| Nincs érték | Null | Az ISNULL függvénnyel vizsgáld. |
| Szöveg | "°C", "a\nb", "C:\\data" | Escape-szekvenciák: \n, \r, \t, \", \\, \xHH, \uXXXX. Érvénytelen escape-szekvencia esetén Couldn't unescape … hiba. |
| Karakter | 'A', '\n' | Pontosan egy karakter. |
| Gyűjtemény | {1, 2, 3}, {"a", "b"} | Legalább egy elem, lásd Gyűjtemények. |
| Felsorolt érték | H, BigEndianFloat, DateTimeKind.Utc | Önmagában vagy a típus nevével, lásd Felsorolt típusok. |
IF
Az IF egy feltételtől függően két érték egyikét adja vissza (függvényforma), vagy több utasításblokk egyikét futtatja le (blokkforma).
| |
Paraméterek
| Név | Típus | Leírás |
|---|---|---|
condition | bool | A nem nulla szám TRUE, a Null FALSE. |
valueIfTrue | any | Ezt adja vissza, ha a feltétel TRUE. |
valueIfFalse | any | Nem kötelező; minden más esetben ezt adja vissza. |
Visszatérési érték: a kiválasztott érték, vagy Null, ha a feltétel nem TRUE és nincs harmadik argumentum. Csak a kiválasztott ág értékelődik ki, így a másik nem okozhat hibát.
Példa — biztonságos osztás és a NaN helyettesítése. A nullával való osztás a Line in script: 1 Message: Division by zero hibával leállítja a szkriptet; a feltétel ezt megakadályozza:
IF(va2 > 0, va1/va2, 0);
# Result: va1/va2, or 0 when va2 is 0
IF(ISNAN(Te), 0, Te);
# Result: 0 when the device is in error or returns NaNBlokkforma
| |
A feltétel lehet zárójelben, és egy sorba kell férnie; a sortörés lezárja. Az ELSEIF ismétlődhet, az ELSE nem kötelező, az END kötelező. Maga a blokk Null értéket ad vissza; ha a blokk belsejéből akarsz értéket adni, használd a RETURN utasítást.
IF Te < 5
RETURN(1);
ELSEIF Te > 10
RETURN(3);
ELSE
RETURN(0);
ENDHibák — Function IF requires at least 2 parameters.; Unexpected keyword 'X' at the end of IF statement., ha egy belső END után ; áll.
Lásd még — SWITCH, Operátorok.
SWITCH
A SWITCH egy értéket esetek listájával hasonlít össze, és az első egyező eset eredményét adja vissza, vagy egy alapértelmezett eredményt, ha egyik eset sem egyezik.
| |
Megjegyzések — a SWITCH legalább 4 és legfeljebb 100 argumentumot fogad, mindig páros számút: az értéket, eset–eredmény párokat és az alapértelmezett eredményt. Az esetek összehasonlítása úgy működik, mint az =: a számok érték szerint, a szöveg pontos egyezéssel; szöveg és szám összehasonlítása az Operator '==' not defined … hibát okozza. Csak az egyező eset eredménye értékelődik ki.
Példa — az eszköz kézikönyve az aktív üzemmódot bitértékekként adja meg; a szkript ezeket a többállású kapcsoló pozícióivá alakítja:

SWITCH(MODBUSR(H, 168, UInt16),
0, 0,
0x0002, 1,
0x0004, 2,
0x0008, 3,
0x0010, 4,
0x0040, 5,
0x0800, 6,
NaN);Hibák — Function SWITCH requires at least 4 parameters.; páratlan számú argumentum esetén Invalid arguments for SWITCH function..
WHILE és DO ciklusok
A WHILE addig ismétli az utasításait, amíg a feltétel TRUE; a DO … LOOP WHILE legalább egyszer lefuttatja őket. A CONTINUE; átugorja a menet hátralévő részét, a BREAK; kilép a ciklusból; mindkettőt zárójel nélkül kell írni.
| |
Ahogy az IF esetén, a feltétel a sortörésnél ér véget. Ha ( jellel kezdődik, a hozzá tartozó ) jelnél ér véget: a WHILE (a > 0) AND (b > 0) feltételként csak az (a > 0) részt veszi, ezért írd így: WHILE (a > 0 AND b > 0).
int i := 10;
WHILE i > 0
i := i - 1;
IF i > 5
CONTINUE;
END
BREAK;
LOOP
i;
# Result: 5int n := 1;
DO
n := n * 2;
LOOP WHILE n < 100
n;
# Result: 128Hibák — a ciklus a More than 1 000 000 loops, stopping loop hibával leáll. A cikluson kívüli BREAK vagy CONTINUE a Cannot use BREAK() outside of WHILE or DO-WHILE hibát okozza. Egy belső LOOP vagy END utáni ; az Unexpected character ';' in WHILE statement hibát okozza.
A nevek feloldása a ciklus kulcsszavai előtt történik. Egy
DovagyWhilenevű változó vagy eszközrövidítés elfedi a kulcsszót, és a ciklus aMissing operator between 'DO' and …hibával leáll.
RETURN
A RETURN azonnal befejezi a szkriptet, és a megadott értéket teszi meg az eredményének.
| |
Megjegyzések — RETURN nélkül az eredmény az utolsó utasítás értéke. A RETURN segítségével adhatsz értéket egy blokk belsejéből, vagy idő előtt leállíthatod a listener szkriptet azoknál az üzeneteknél, amelyeket nem dolgoz fel.
IF ISNAN(Te)
RETURN(0);
END
Te * 1.8 + 32;
# Result: the temperature in °F, or 0 when it is unknownLásd még — A szkript eredménye.