Logika és diagnosztika
TapHome szkriptfüggvények az ismeretlen értékekhez és az eszközök diagnosztikájához: ISNULL, ISNAN, EQUALS, SLEEP, ADDERROR, ADDWARNING, ADDINFO és DEBOUNCE.
Ezek a függvények megvizsgálják, hogy egy érték Null vagy NaN, tűréssel hasonlítanak össze tizedes számokat, szüneteltetik az eszköz szkriptjét, és üzeneteket jeleznek az eszközön. A NaN ismeretlen szám, a Null hiányzó érték — lásd Adattípusok. Az egyes függvényekhez szükséges legkisebb Core verzió a Verziókövetelmények oldalon található.
ISNULL
Az ISNULL akkor ad vissza TRUE értéket, ha az érték Null, vagyis hiányzik — ilyen például a LastState a Képlet smart rule első futásakor, vagy a hibák figyelmen kívül hagyásával hívott PARSEJSON, ha nem találja az útvonalat.
| |
Visszatérési érték — bool. Bármilyen típusú értéket elfogad. A NaN szám, nem hiányzó érték, ezért az ISNULL(NaN) értéke FALSE.
Példa
IF(ISNULL(LastState), 0, LastState);
# Result: 0 on the first run of a Formula smart rule, then the previous resultLásd még — ISNAN, Szkriptek a smart rule-okban.
ISNAN
Az ISNAN akkor ad vissza TRUE értéket, ha egy szám NaN, vagyis ismeretlen érték — például egy hibás vagy még be nem olvasott eszköz értéke.
| |
Visszatérési érték — bool.
Megjegyzések — a NaN soha nem egyenlő semmivel. A NaN literállal való összehasonlítást, például az x = NaN kifejezést, a szkript mentésekor elutasítja. Az argumentumnak számnak kell lennie: az ISNAN(Null) futásidejű hibával leállítja a szkriptet, ezért ha az érték hiányozhat is, előbb az ISNULL függvénnyel vizsgáld.
Példa — 0 beírása, ha az eszköz hibában van vagy NaN értéket ad vissza
Az IF(ISNAN(x), 0, x) segítségével akkor is számot adsz tovább, ha a forráseszköz hibában van:
IF(ISNAN(x), 0, x);
# Result: 0 while the device is in error or returns NaN, otherwise xHa az érték Null is lehet, azt vizsgáld először — az OR nem értékeli ki a jobb oldalát, ha a bal oldal már TRUE:
IF(ISNULL(value) OR ISNAN(value), 0, value);Hibák — Comparison with NaN is always false. Use the IsNaN method to check for NaN value. (a szkript mentésekor).
EQUALS
Az EQUALS akkor ad vissza TRUE értéket, ha két szám legfeljebb egy tűréshatárral (epsilon, alapértelmezetten 0.005) tér el egymástól; tizedes értékeknél, például hőmérsékleteknél, az = helyett ezt használd.
| |
Paraméterek
| Név | Típus | Leírás |
|---|---|---|
number1, number2 | szám | Az összehasonlítandó értékek. |
epsilon | szám, nem kötelező | A legnagyobb eltérés, amely még egyenlőnek számít. Alapértelmezés: 0.005. |
Visszatérési érték — bool. Két NaN érték egyenlőnek számít, ezért az EQUALS(NaN, NaN) értéke TRUE. A Null argumentum futásidejű hibát okoz.
Példa
EQUALS(21.499, 21.5);
# Result: TRUE
EQUALS(21.4, 21.5, 0.01);
# Result: FALSE
EQUALS(NaN, NaN);
# Result: TRUESLEEP
A SLEEP a megadott számú ezredmásodpercre (0 – 10 000) szünetelteti a Modbus vagy Packet parser szkriptet, és ezt a számot adja vissza.
| |
Megjegyzések — amíg a szkript vár, a modul nem kérdezi le az eszközeit, ezért a szünet legyen rövid, jellemzően annyi, amennyi időt az eszköz két írás között igényel.
Példa
MODBUSW(H, 100, Uint16, 1);
SLEEP(200);
MODBUSW(H, 101, Uint16, 1);Hibák
- SLEEP function not allowed in this context. — a szkript egy smart rule-hoz (Egyenlet, Képlet vagy Szkript) vagy egy értesítéshez tartozik; nem menthető.
- Interval ‘X’ is out of range (0-10000) — futás közben.
Elérhetőség — Modbus és Packet parser szkriptek.
ADDERROR, ADDWARNING, ADDINFO
Az ADDERROR, az ADDWARNING és az ADDINFO hibát, figyelmeztetést vagy tájékoztató üzenetet jelenít meg az eszközön a TapHome alkalmazásban, és TRUE értéket ad vissza.
| |
Paraméterek
| Név | Típus | Leírás |
|---|---|---|
code | egész szám, nem kötelező | Az üzenet azonosítója. A különböző kódú üzenetek egymás mellett jelennek meg; az azonos kódú új üzenet, vagy egy második kód nélküli üzenet felváltja az előzőt. |
text | string | Az alkalmazásban megjelenő üzenet. |
Megjegyzések — az üzenetek minden futáskor újra kiértékelődnek: az üzenet eltűnik, amint a szkript egy futása már nem jelzi.
Példa
VAR alarm := MODBUSR(H, 599, Uint16);
IF(alarm > 0, ADDERROR("There are " + alarm + " active alarms"));
IF(GETBIT(MODBUSR(H, 600, Uint16), 0) = 1, ADDERROR(1, "Alarm 1 active"));
IF(GETBIT(MODBUSR(H, 600, Uint16), 1) = 1, ADDWARNING(2, "Filter change due"));Hibák — ADDERROR function not supported here. (vagy ADDWARNING, ADDINFO) minden olyan szkriptben, amely nem szerepel az Elérhetőség alatt.
Elérhetőség — a Modbus modulok és eszközök olvasó szkriptjei; a Packet parser olvasó, író és listener szkriptjei. Nem érhető el a Modbus író és inicializáló szkriptjeiben, egyik integráció szolgáltatási attribútumaiban és szolgáltatási műveleteiben sem, valamint a smart rule-okban és az értesítésekben.
Lásd még — Modbus függvények, Packet parser függvények.
DEBOUNCE
A DEBOUNCE a megadott számú ezredmásodpercig figyelmen kívül hagyja egy eszközérték eszközről beolvasott értékeit, és az idő leteltekor újra ellenőrzi az értéket; az eszközre történő írásokat nem érinti.
| |
Paraméterek
| Név | Típus | Leírás |
|---|---|---|
deviceVariable | eszközváltozó | Az eszközérték rövidítése, például St. Kifejezést nem fogad el. |
milliseconds | szám | Az ablak hossza, 0 vagy több. |
Visszatérési érték — az intervallum. Pergésmentesítő szűrő nélküli eszközértéken a hívás nem csinál semmit.
Példa
DEBOUNCE(St, 500);Hibák
- DEBOUNCE - Function is not available — a szkript nem az Elérhetőség alatt felsorolt eszközszkriptek egyike.
- DEBOUNCE - invalid argument, must be a device variable
Elérhetőség — Core 2026.1, build 36599 és újabb · a Modbus eszközök olvasó és író szkriptjei, a Packet parser olvasó, író és listener szkriptjei.