TapHome

Logika i diagnostyka

Funkcje skryptowe TapHome dla nieznanych wartości i diagnostyki urządzeń: ISNULL, ISNAN, EQUALS, SLEEP, ADDERROR, ADDWARNING, ADDINFO i DEBOUNCE.

Te funkcje sprawdzają wartości pod kątem Null i NaN, porównują liczby dziesiętne z tolerancją, wstrzymują skrypt urządzenia i zgłaszają komunikaty na urządzeniu. NaN to nieznana liczba, Null to brakująca wartość — zobacz Typy danych. Minimalna wersja Core dla każdej funkcji jest podana w Wymaganiach wersji.

ISNULL

ISNULL zwraca TRUE, gdy wartość jest Null, czyli brakuje jej — na przykład LastState przy pierwszym uruchomieniu smart rule Formuła albo PARSEJSON z ignorowaniem błędów, gdy ścieżka nie zostanie znaleziona.

1
ISNULL(value)

Zwraca — bool. Przyjmowana jest wartość dowolnego typu. NaN jest liczbą, a nie brakującą wartością, więc ISNULL(NaN) daje FALSE.

Przykład

IF(ISNULL(LastState), 0, LastState);
# Result: 0 on the first run of a Formula smart rule, then the previous result

Zobacz też — ISNAN, Skrypty w smart rules.

ISNAN

ISNAN zwraca TRUE, gdy liczba jest NaN, czyli wartością nieznaną — na przykład wartość urządzenia, które jest w błędzie albo nie zostało jeszcze odczytane.

1
ISNAN(number)

Zwraca — bool.

Uwagi — NaN nigdy nie jest równe niczemu. Porównanie z literałem NaN, na przykład x = NaN, jest odrzucane przy zapisywaniu skryptu. Argument musi być liczbą: ISNAN(Null) zatrzymuje skrypt błędem wykonania, więc gdy wartości może też brakować, najpierw sprawdź ISNULL.

Przykład — zapis 0, gdy urządzenie jest w błędzie lub zwraca NaN

Użyj IF(ISNAN(x), 0, x), aby przekazać liczbę nawet wtedy, gdy urządzenie źródłowe jest w błędzie:

IF(ISNAN(x), 0, x);
# Result: 0 while the device is in error or returns NaN, otherwise x

Gdy wartość może być też Null, sprawdź to najpierw — OR nie oblicza prawej strony, gdy lewa jest już TRUE:

IF(ISNULL(value) OR ISNAN(value), 0, value);

Błędy — Comparison with NaN is always false. Use the IsNaN method to check for NaN value. (przy zapisywaniu skryptu).

Zobacz też — ISNULL, EQUALS.

EQUALS

EQUALS zwraca TRUE, gdy dwie liczby różnią się najwyżej o tolerancję (epsilon, domyślnie 0.005); używaj jej zamiast = dla wartości dziesiętnych, takich jak temperatury.

1
2
EQUALS(number1, number2)
EQUALS(number1, number2, epsilon)

Parametry

NazwaTypOpis
number1, number2liczbaPorównywane wartości.
epsilonliczba, opcjonalnaNajwiększa różnica, która wciąż liczy się jako równość. Domyślnie 0.005.

Zwraca — bool. Dwie wartości NaN liczą się jako równe, więc EQUALS(NaN, NaN) daje TRUE. Argument Null to błąd wykonania.

Przykład

EQUALS(21.499, 21.5);
# Result: TRUE
EQUALS(21.4, 21.5, 0.01);
# Result: FALSE
EQUALS(NaN, NaN);
# Result: TRUE

SLEEP

SLEEP wstrzymuje skrypt Modbus lub Packet parser na podaną liczbę milisekund (0 – 10 000) i zwraca tę liczbę.

1
SLEEP(milliseconds)

Uwagi — Gdy skrypt czeka, moduł nie odpytuje swoich urządzeń, więc pauza powinna być krótka, zwykle jest to przerwa, której urządzenie potrzebuje między dwoma zapisami.

Przykład

MODBUSW(H, 100, Uint16, 1);
SLEEP(200);
MODBUSW(H, 101, Uint16, 1);

Błędy

  • SLEEP function not allowed in this context. — skrypt należy do smart rule (Równanie, Formuła lub Skrypt) albo do powiadomienia; nie da się go zapisać.
  • Interval ‘X’ is out of range (0-10000) — podczas wykonania.

Dostępność — skrypty Modbus i Packet parser.

ADDERROR, ADDWARNING, ADDINFO

ADDERROR, ADDWARNING i ADDINFO wyświetlają na urządzeniu w aplikacji TapHome błąd, ostrzeżenie lub informację i zwracają TRUE.

1
2
3
4
5
6
ADDERROR(text)
ADDERROR(code, text)
ADDWARNING(text)
ADDWARNING(code, text)
ADDINFO(text)
ADDINFO(code, text)

Parametry

NazwaTypOpis
codeliczba całkowita, opcjonalnaIdentyfikuje komunikat. Komunikaty z różnymi kodami są wyświetlane obok siebie; nowy komunikat z tym samym kodem albo drugi komunikat bez kodu zastępuje poprzedni.
textstringKomunikat wyświetlany w aplikacji.

Uwagi — Komunikaty są obliczane przy każdym uruchomieniu: komunikat znika, gdy tylko kolejne uruchomienie skryptu przestanie go zgłaszać.

Przykład

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"));

Błędy — ADDERROR function not supported here. (albo ADDWARNING, ADDINFO) w każdym skrypcie, który nie jest wymieniony w części Dostępność.

Dostępność — skrypty odczytu modułów i urządzeń Modbus; skrypty odczytu, zapisu i listener modułu Packet parser. Nie w skryptach zapisu i inicjalizacji Modbus, w atrybutach i akcjach serwisowych obu integracji, w smart rules ani w powiadomieniach.

Zobacz też — Funkcje Modbus, Funkcje Packet parser.

DEBOUNCE

DEBOUNCE przez podaną liczbę milisekund ignoruje odczyty jednej wartości urządzenia i po upływie tego czasu sprawdza ją ponownie; zapisów do urządzenia to nie dotyczy.

1
DEBOUNCE(deviceVariable, milliseconds)

Parametry

NazwaTypOpis
deviceVariablezmienna urządzeniaSkrót wartości urządzenia, na przykład St. Wyrażenie nie jest przyjmowane.
millisecondsliczbaDługość okna, 0 lub więcej.

Zwraca — podany czas w milisekundach. Na wartości urządzenia bez filtra debounce wywołanie nic nie robi.

Przykład

DEBOUNCE(St, 500);

Błędy

  • DEBOUNCE - Function is not available — skrypt nie jest skryptem urządzenia wymienionym w części Dostępność.
  • DEBOUNCE - invalid argument, must be a device variable

Dostępność — Core 2026.1, kompilacja 36599 i nowsze · skrypty odczytu i zapisu urządzeń Modbus, skrypty odczytu, zapisu i listener modułu Packet parser.