Logica e diagnostica
Funzioni degli script TapHome per i valori sconosciuti e la diagnostica dei dispositivi: ISNULL, ISNAN, EQUALS, SLEEP, ADDERROR, ADDWARNING, ADDINFO e DEBOUNCE.
Queste funzioni verificano i valori Null e NaN, confrontano numeri decimali con una tolleranza, mettono in pausa uno script del dispositivo e segnalano messaggi su un dispositivo. NaN è un numero sconosciuto, Null è un valore mancante — vedi Tipi di dati. La versione minima del Core di ogni funzione è in Requisiti di versione.
ISNULL
ISNULL restituisce TRUE quando un valore è Null, cioè mancante — per esempio LastState alla prima esecuzione di una smart rule Formula, oppure PARSEJSON con l’opzione di ignorare gli errori quando il percorso non viene trovato.
| |
Valore restituito — bool. È accettato un valore di qualsiasi tipo. NaN è un numero, non un valore mancante, quindi ISNULL(NaN) è FALSE.
Esempio
IF(ISNULL(LastState), 0, LastState);
# Result: 0 on the first run of a Formula smart rule, then the previous resultVedi anche — ISNAN, Script nelle smart rule.
ISNAN
ISNAN restituisce TRUE quando un numero è NaN, cioè un valore sconosciuto — per esempio il valore di un dispositivo in errore o non ancora letto.
| |
Valore restituito — bool.
Note — NaN non è mai uguale a nulla. Un confronto con il letterale NaN, come x = NaN, viene rifiutato al salvataggio dello script. L’argomento deve essere un numero: ISNAN(Null) interrompe lo script con un errore di esecuzione, quindi verifica prima ISNULL quando un valore può anche mancare.
Esempio — scrivere 0 quando un dispositivo è in errore o restituisce NaN
Usa IF(ISNAN(x), 0, x) per passare un numero anche mentre il dispositivo sorgente è in errore:
IF(ISNAN(x), 0, x);
# Result: 0 while the device is in error or returns NaN, otherwise xQuando il valore può essere anche Null, controllalo prima — OR non valuta il lato destro quando il lato sinistro è già TRUE:
IF(ISNULL(value) OR ISNAN(value), 0, value);Errori — Comparison with NaN is always false. Use the IsNaN method to check for NaN value. (al salvataggio dello script).
EQUALS
EQUALS restituisce TRUE quando due numeri differiscono al massimo di una tolleranza (epsilon, 0.005 per impostazione predefinita); usalo al posto di = per valori decimali come le temperature.
| |
Parametri
| Nome | Tipo | Descrizione |
|---|---|---|
number1, number2 | numero | Valori da confrontare. |
epsilon | numero, facoltativo | Differenza massima ancora considerata uguaglianza. Predefinito 0.005. |
Valore restituito — bool. Due valori NaN sono considerati uguali, quindi EQUALS(NaN, NaN) è TRUE. Un argomento Null è un errore di esecuzione.
Esempio
EQUALS(21.499, 21.5);
# Result: TRUE
EQUALS(21.4, 21.5, 0.01);
# Result: FALSE
EQUALS(NaN, NaN);
# Result: TRUESLEEP
SLEEP mette in pausa uno script Modbus o Packet parser per il numero di millisecondi indicato (0 – 10 000) e restituisce quel numero.
| |
Note — Mentre lo script attende, il modulo non interroga i suoi dispositivi, quindi mantieni la pausa breve, di solito l’intervallo di cui un dispositivo ha bisogno tra due scritture.
Esempio
MODBUSW(H, 100, Uint16, 1);
SLEEP(200);
MODBUSW(H, 101, Uint16, 1);Errori
- SLEEP function not allowed in this context. — lo script appartiene a una smart rule (Equazione, Formula o Script) o a una notifica; non può essere salvato.
- Interval ‘X’ is out of range (0-10000) — durante l’esecuzione.
Disponibile — script Modbus e Packet parser.
ADDERROR, ADDWARNING, ADDINFO
ADDERROR, ADDWARNING e ADDINFO mostrano sul dispositivo nell’app TapHome un messaggio di errore, di avviso o di informazione e restituiscono TRUE.
| |
Parametri
| Nome | Tipo | Descrizione |
|---|---|---|
code | numero intero, facoltativo | Identifica il messaggio. I messaggi con codici diversi vengono mostrati uno accanto all’altro; un nuovo messaggio con lo stesso codice, o un secondo messaggio senza codice, sostituisce il precedente. |
text | string | Messaggio mostrato nell’app. |
Note — I messaggi vengono valutati a ogni esecuzione: un messaggio scompare non appena un’esecuzione dello script non lo genera più.
Esempio
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"));Errori — ADDERROR function not supported here. (oppure ADDWARNING, ADDINFO) in qualsiasi script non elencato in Disponibile.
Disponibile — script di lettura dei moduli e dei dispositivi Modbus; script di lettura, di scrittura e script listener del Packet parser. Non negli script di scrittura e di inizializzazione Modbus, negli attributi di servizio e nelle azioni di servizio di entrambe le integrazioni, nelle smart rule né nelle notifiche.
Vedi anche — Funzioni Modbus, Funzioni Packet parser.
DEBOUNCE
DEBOUNCE ignora i valori di un valore del dispositivo letti dal dispositivo per il numero di millisecondi indicato e controlla di nuovo il valore allo scadere di quel tempo; le scritture verso il dispositivo non ne sono influenzate.
| |
Parametri
| Nome | Tipo | Descrizione |
|---|---|---|
deviceVariable | variabile del dispositivo | Abbreviazione del valore del dispositivo, per esempio St. Un’espressione non è accettata. |
milliseconds | numero | Durata della finestra, 0 o più. |
Valore restituito — l’intervallo. Su un valore del dispositivo senza filtro antirimbalzo la chiamata non fa nulla.
Esempio
DEBOUNCE(St, 500);Errori
- DEBOUNCE - Function is not available — lo script non è uno script del dispositivo elencato in Disponibile.
- DEBOUNCE - invalid argument, must be a device variable
Disponibile — Core 2026.1, build 36599 e successivi · script di lettura e scrittura dei dispositivi Modbus, script di lettura, di scrittura e script listener del Packet parser.