TapHome

Logică și diagnostic

Funcțiile de script TapHome pentru valori necunoscute și diagnosticul dispozitivelor: ISNULL, ISNAN, EQUALS, SLEEP, ADDERROR, ADDWARNING, ADDINFO și DEBOUNCE.

Aceste funcții testează valorile pentru Null și NaN, compară numere zecimale cu o toleranță, întrerup un script al dispozitivului și raportează mesaje pe un dispozitiv. NaN este un număr necunoscut, Null este o valoare lipsă — consultați Tipuri de date. Versiunea minimă Core pentru fiecare funcție se găsește în Cerințe de versiune.

ISNULL

ISNULL returnează TRUE când o valoare este Null, adică lipsește — de exemplu LastState la prima rulare a unei smart rule Formulă sau PARSEJSON cu ignorarea erorilor când calea nu este găsită.

1
ISNULL(value)

Returnează — bool. Se acceptă o valoare de orice tip. NaN este un număr, nu o valoare lipsă, deci ISNULL(NaN) este FALSE.

Exemplu

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

Consultați și — ISNAN, Scripturi în smart rules.

ISNAN

ISNAN returnează TRUE când un număr este NaN, adică o valoare necunoscută — de exemplu valoarea unui dispozitiv care este în eroare sau care încă nu a fost citit.

1
ISNAN(number)

Returnează — bool.

Observații — NaN nu este niciodată egal cu nimic. O comparație cu literalul NaN, precum x = NaN, este respinsă la salvarea scriptului. Argumentul trebuie să fie un număr: ISNAN(Null) oprește scriptul cu o eroare la rulare, de aceea, când o valoare poate și lipsi, se testează mai întâi ISNULL.

Exemplu — scrierea valorii 0 când un dispozitiv este în eroare sau returnează NaN

IF(ISNAN(x), 0, x) transmite mai departe un număr chiar și cât timp dispozitivul sursă este în eroare:

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

Când valoarea poate fi și Null, aceasta se verifică mai întâi — OR nu evaluează partea dreaptă când partea stângă este deja TRUE:

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

Erori — Comparison with NaN is always false. Use the IsNaN method to check for NaN value. (la salvarea scriptului).

Consultați și — ISNULL, EQUALS.

EQUALS

EQUALS returnează TRUE când două numere diferă cel mult cu o toleranță (epsilon, implicit 0.005); se folosește în locul lui = pentru valori zecimale precum temperaturile.

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

Parametri

NumeTipDescriere
number1, number2numărValorile comparate.
epsilonnumăr, opționalCea mai mare diferență considerată încă egalitate. Implicit 0.005.

Returnează — bool. Două valori NaN sunt considerate egale, deci EQUALS(NaN, NaN) este TRUE. Un argument Null produce o eroare la rulare.

Exemplu

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

SLEEP

SLEEP întrerupe un script Modbus sau Packet parser pentru numărul dat de milisecunde (0 – 10 000) și returnează acest număr.

1
SLEEP(milliseconds)

Observații — Cât timp scriptul așteaptă, modulul nu își interoghează dispozitivele, de aceea pauza trebuie să fie scurtă, de regulă intervalul de care are nevoie un dispozitiv între două scrieri.

Exemplu

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

Erori

  • SLEEP function not allowed in this context. — scriptul aparține unei smart rule (Ecuație, Formulă sau Script) ori unei notificări; nu se poate salva.
  • Interval ‘X’ is out of range (0-10000) — la rulare.

Disponibilitate — scripturile Modbus și Packet parser.

ADDERROR, ADDWARNING, ADDINFO

ADDERROR, ADDWARNING și ADDINFO afișează pe dispozitiv în aplicația TapHome un mesaj de eroare, de avertisment sau de informare și returnează TRUE.

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

Parametri

NumeTipDescriere
codenumăr întreg, opționalIdentifică mesajul. Mesajele cu coduri diferite se afișează unul lângă altul; un mesaj nou cu același cod sau un al doilea mesaj fără cod îl înlocuiește pe cel anterior.
textstringMesajul afișat în aplicație.

Observații — Mesajele se evaluează la fiecare rulare: un mesaj dispare imediat ce o rulare a scriptului nu îl mai generează.

Exemplu

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

Erori — ADDERROR function not supported here. (sau ADDWARNING, ADDINFO) în orice script care nu este enumerat la Disponibilitate.

Disponibilitate — scripturile de citire ale modulelor și dispozitivelor Modbus; scripturile de citire, de scriere și listener ale Packet parser. Nu în scripturile de scriere și de inițializare Modbus, în atributele și acțiunile de service ale niciuneia dintre integrări, în smart rules sau în notificări.

Consultați și — Funcții Modbus, Funcții Packet parser.

DEBOUNCE

DEBOUNCE ignoră, pentru numărul dat de milisecunde, valorile unei valori de dispozitiv citite din dispozitiv și verifică din nou valoarea când acest timp se încheie; scrierile către dispozitiv nu sunt afectate.

1
DEBOUNCE(deviceVariable, milliseconds)

Parametri

NumeTipDescriere
deviceVariablevariabilă de dispozitivAbrevierea valorii dispozitivului, de exemplu St. O expresie nu este acceptată.
millisecondsnumărLungimea ferestrei, 0 sau mai mult.

Returnează — intervalul. La o valoare de dispozitiv fără filtru debounce, apelul nu face nimic.

Exemplu

DEBOUNCE(St, 500);

Erori

  • DEBOUNCE - Function is not available — scriptul nu este un script al dispozitivului enumerat la Disponibilitate.
  • DEBOUNCE - invalid argument, must be a device variable

Disponibilitate — Core 2026.1, build 36599 și mai nou · scripturile de citire și de scriere ale dispozitivelor Modbus, scripturile de citire, de scriere și listener ale Packet parser.