Logik und Diagnose
Funktionen der TapHome-Skripte für unbekannte Werte und Gerätediagnose: ISNULL, ISNAN, EQUALS, SLEEP, ADDERROR, ADDWARNING, ADDINFO und DEBOUNCE.
Diese Funktionen prüfen Werte auf Null und NaN, vergleichen Dezimalzahlen mit einer Toleranz, halten ein Geräteskript an und melden Nachrichten an einem Gerät. NaN ist eine unbekannte Zahl, Null ein fehlender Wert — siehe Datentypen. Die minimale Core-Version jeder Funktion steht in Versionsanforderungen.
ISNULL
ISNULL gibt TRUE zurück, wenn ein Wert Null ist, also ein fehlender Wert — zum Beispiel LastState beim ersten Durchlauf einer smart rule Formel oder PARSEJSON mit ignorierten Fehlern, wenn der Pfad nicht gefunden wird.
| |
Rückgabewert — bool. Ein Wert jedes Typs wird akzeptiert. NaN ist eine Zahl, kein fehlender Wert, daher ist ISNULL(NaN) gleich FALSE.
Beispiel
IF(ISNULL(LastState), 0, LastState);
# Result: 0 on the first run of a Formula smart rule, then the previous resultSiehe auch — ISNAN, Skripte in smart rules.
ISNAN
ISNAN gibt TRUE zurück, wenn eine Zahl NaN ist, also ein unbekannter Wert — zum Beispiel der Wert eines Geräts, das einen Fehler hat oder noch nicht gelesen wurde.
| |
Rückgabewert — bool.
Hinweise — NaN ist nie gleich irgendetwas. Ein Vergleich mit dem Literal NaN, etwa x = NaN, wird beim Speichern des Skripts abgelehnt. Das Argument muss eine Zahl sein: ISNAN(Null) bricht das Skript mit einem Laufzeitfehler ab; prüfen Sie also zuerst ISNULL, wenn ein Wert auch fehlen kann.
Beispiel — 0 schreiben, wenn ein Gerät einen Fehler hat oder NaN zurückgibt
Verwenden Sie IF(ISNAN(x), 0, x), um eine Zahl weiterzugeben, auch während das Quellgerät einen Fehler hat:
IF(ISNAN(x), 0, x);
# Result: 0 while the device is in error or returns NaN, otherwise xWenn der Wert auch Null sein kann, prüfen Sie das zuerst — OR wertet seine rechte Seite nicht aus, wenn die linke Seite bereits TRUE ist:
IF(ISNULL(value) OR ISNAN(value), 0, value);Fehler — Comparison with NaN is always false. Use the IsNaN method to check for NaN value. (beim Speichern des Skripts).
EQUALS
EQUALS gibt TRUE zurück, wenn sich zwei Zahlen höchstens um eine Toleranz unterscheiden (epsilon, standardmäßig 0.005); verwenden Sie es statt = für Dezimalwerte wie Temperaturen.
| |
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
number1, number2 | Zahl | Zu vergleichende Werte. |
epsilon | Zahl, optional | Größte Differenz, die noch als gleich gilt. Standard 0.005. |
Rückgabewert — bool. Zwei Werte NaN gelten als gleich, daher ist EQUALS(NaN, NaN) gleich TRUE. Ein Argument Null ist ein Laufzeitfehler.
Beispiel
EQUALS(21.499, 21.5);
# Result: TRUE
EQUALS(21.4, 21.5, 0.01);
# Result: FALSE
EQUALS(NaN, NaN);
# Result: TRUESLEEP
SLEEP hält ein Skript von Modbus oder Packet Parser für die angegebene Anzahl Millisekunden (0 – 10 000) an und gibt diese Zahl zurück.
| |
Hinweise — Während das Skript wartet, fragt das Modul seine Geräte nicht ab; halten Sie die Pause also kurz, typischerweise eine Lücke, die ein Gerät zwischen zwei Schreibvorgängen braucht.
Beispiel
MODBUSW(H, 100, Uint16, 1);
SLEEP(200);
MODBUSW(H, 101, Uint16, 1);Fehler
- SLEEP function not allowed in this context. — das Skript gehört zu einer smart rule (Gleichung, Formel oder Skript) oder zu einer Benachrichtigung; es lässt sich nicht speichern.
- Interval ‘X’ is out of range (0-10000) — zur Laufzeit.
Verfügbar — Skripte von Modbus und Packet Parser.
ADDERROR, ADDWARNING, ADDINFO
ADDERROR, ADDWARNING und ADDINFO zeigen am Gerät in der TapHome-App einen Fehler, eine Warnung oder eine Infomeldung an und geben TRUE zurück.
| |
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
code | ganze Zahl, optional | Kennzeichnet die Meldung. Meldungen mit unterschiedlichen Codes werden nebeneinander angezeigt; eine neue Meldung mit demselben Code oder eine zweite Meldung ohne Code ersetzt die vorherige. |
text | string | In der App angezeigte Meldung. |
Hinweise — Die Meldungen werden bei jedem Durchlauf neu ausgewertet: Eine Meldung verschwindet, sobald ein Durchlauf des Skripts sie nicht mehr auslöst.
Beispiel
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"));Fehler — ADDERROR function not supported here. (oder ADDWARNING, ADDINFO) in jedem Skript, das nicht unter Verfügbar aufgeführt ist.
Verfügbar — Leseskripte von Modbus-Modulen und -Geräten; Lese-, Schreib- und Listener-Skripte des Packet Parsers. Nicht in Schreib- und Initialisierungsskripten von Modbus, in Service-Attributen und Service-Aktionen beider Integrationen, in smart rules oder Benachrichtigungen.
Siehe auch — Modbus-Funktionen, Packet-Parser-Funktionen.
DEBOUNCE
DEBOUNCE ignoriert die vom Gerät gelesenen Werte eines Gerätewerts für die angegebene Anzahl Millisekunden und prüft den Wert erneut, wenn diese Zeit abläuft; Schreibvorgänge an das Gerät sind nicht betroffen.
| |
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
deviceVariable | Gerätevariable | Abkürzung des Gerätewerts, zum Beispiel St. Ein Ausdruck wird nicht akzeptiert. |
milliseconds | Zahl | Länge des Zeitfensters, 0 oder mehr. |
Rückgabewert — das Intervall. Bei einem Gerätewert ohne Entprellfilter bewirkt der Aufruf nichts.
Beispiel
DEBOUNCE(St, 500);Fehler
- DEBOUNCE - Function is not available — das Skript ist kein unter Verfügbar aufgeführtes Geräteskript.
- DEBOUNCE - invalid argument, must be a device variable
Verfügbar — Core 2026.1, Build 36599 und neuer · Lese- und Schreibskripte von Modbus-Geräten, Lese-, Schreib- und Listener-Skripte des Packet Parsers.