Errori degli script e risoluzione dei problemi
Messaggi di errore degli script TapHome citati alla lettera — Division by zero, errori di parsing, errori in fase di esecuzione ed errori di contesto o di versione — con la causa e la soluzione di ciascuno.
Uno script TapHome può fallire in due modi. Un errore di parsing viene rilevato durante la lettura del testo dello script: l’editor degli script lo mostra e lo script non viene eseguito. Un errore in fase di esecuzione interrompe uno script già in esecuzione. I messaggi qui sotto sono citati alla lettera; X, A, B e N indicano il nome, il tipo o il numero nel messaggio.
Come vengono segnalati gli errori
Un errore in fase di esecuzione riporta la riga dello script e il messaggio:
| |
Dove l’interruzione di riga non viene mostrata, lo stesso errore si legge Line in script: 7 Message: Division by zero. Uno script interrotto da un errore in fase di esecuzione non restituisce alcun valore (Null); una smart rule Formula ha quindi anche LastState = Null alla sua esecuzione successiva.
Divisione per zero
Line in script: 1 Message: Division by zero significa che un divisore era esattamente 0 quando lo script è stato eseguito — tipicamente un valore di un dispositivo, come va2 in va1/va2. Dividi solo quando il divisore è maggiore di 0:
IF(va2 > 0, va1/va2, 0);
# Result: 0 when va2 is 0, otherwise va1 divided by va2La forma a funzione di IF valuta solo il ramo scelto, quindi non divide mai per 0. Usa va2 <> 0 quando il divisore può essere negativo. Altre ricette in Esempi.
Errori di parsing
| Messaggio | Causa e soluzione |
|---|---|
Unknown variable or constant 'X' | Un errore di battitura, un valore di dispositivo non aggiunto allo script o una parola che il linguaggio non ha: NOT 1 dà 'NOT' — la negazione è !. Fuori da un blocco, un ; mancante sulla riga precedente può comparire come il nome successivo. |
Unknown function 'X' | La funzione non esiste. MODBUS, TOBYTEARRAY e BYTEARRAY non esistono — usa MODBUSR o MODBUSW, TOBYTES e BYTECOLLECTION. |
Wrong number of literals and operators in expression | Un operatore senza operando, ad esempio 1 == 1. L’uguaglianza è =, la disuguaglianza <>. |
Unexpected character 'X' at the end of statement. | Manca il ; prima dell’istruzione successiva. All’interno di un blocco il messaggio termina con Expected ';', ad esempio Unexpected character 'E' at the end of statement. Expected ';' prima di END. |
Unexpected character '.' | Una proprietà letta dal risultato di una funzione, come AVG(1, 2).Type. Salva prima il valore in una variabile. |
Unexpected character ';' in WHILE statement (o DO) | Un ; dopo un END o LOOP interno all’interno di un ciclo. |
Unexpected keyword 'X' at the end of IF statement. | Un ; dopo un END interno all’interno di un blocco IF. |
Comment must start on a new line and inline comments are not supported | Un # prima del ; di un’istruzione, oppure dopo una condizione IF o WHILE. |
Comparison with NaN is always false. Use the IsNaN method to check for NaN value. | x = NaN — usa ISNAN(x). |
Couldn't unescape X | Una barra rovesciata singola in una stringa; scrivi "C:\\data". |
Too many characters in char literal | Testo tra virgolette singole, come 'ab'; il testo richiede le virgolette doppie. |
Variable name must start with letter, Only letters or numbers are allowed in variable name | Un nome come 1x o my_value. |
Variable must have initial value provided | VAR x; — assegna un valore o dichiara un tipo: int x;. |
Errori in fase di esecuzione
| Messaggio | Causa e soluzione |
|---|---|
Division by zero | Vedi Divisione per zero. |
Specified argument was out of the range of valid values. | PARSETEXT ha trovato il modello sinistro ma non quello destro. Verifica prima con INDEXOF. |
PARSEJSON - Element not found: 'X' | Il JSONPath non ha trovato nulla. Passa TRUE come terzo argomento per ottenere invece Null. |
Operator 'X' not defined for 'A' and 'B' | Un’operazione su tipi incompatibili, ad esempio aritmetica con Null. Verifica prima con ISNULL. |
Cannot cast 'A' to 'B' | Un valore di un tipo che non si può convertire, ad esempio testo dove serve un numero. |
Can not directly set value to device variable | Un’assegnazione a un valore di dispositivo al di fuori di una smart rule Script. |
More than 1 000 000 loops, stopping loop | Un ciclo WHILE o DO che non termina. |
Cannot use BREAK() outside of WHILE or DO-WHILE | BREAK fuori da un ciclo; lo stesso vale per CONTINUE. |
Interval 'X' is out of range (0-10000) | SLEEP con un intervallo negativo o più lungo di 10 000 ms. |
Maximum array length is 2048 | BYTECOLLECTION da un testo esadecimale di più di 2048 byte. |
Invalid array length. Must be greater than 0 and less than or equal 2048 | BYTECOLLECTION con un numero di byte pari a 0 o superiore a 2048. |
UINT16COLLECTION: count must be between 1 and 2048 | UINT16COLLECTION, oppure BOOLCOLLECTION con il proprio nome, con un numero di elementi fuori da 1 – 2048. |
GETBIT - bit must be between 0 and 15 | Un bit o un byte fuori dal tipo del valore, qui un valore a 16 bit. |
GETBIT - value X is out of the 32-bit range (-2147483648 .. 4294967295) | Un valore decimale che non è un numero intero a 32 bit. |
Return value 'X' does not match required return type constraint: 'T' | Uno script di lettura del dispositivo ha restituito un tipo che il valore del dispositivo non può contenere. |
Response is too long (Nbytes). Maximum supported length is 128KB | Una risposta HTTP più grande di 128 kB. |
Invalid register number: X | Un registro Modbus fuori dall’intervallo da 0 a 65535. |
RegisterValueToWrites: Can't write double.NaN to modbus register | NaN scritto con MODBUSW. |
Errori di contesto e di versione
| Messaggio | Causa e soluzione |
|---|---|
X function not supported here. | La funzione non funziona in questo tipo di script, ad esempio ADDERROR function not supported here. in una smart rule. |
SLEEP function not allowed in this context. | SLEEP in una smart rule Script o in uno script di notifica. |
ModbusFunction - unknown modbus device to work with | Una funzione Modbus fuori da uno script Modbus. |
PacketParserFunction - PacketParserContext is null | Una funzione Packet parser fuori da uno script Packet parser. |
DEBOUNCE - invalid argument, must be a device variable | Il primo argomento di DEBOUNCE è un’espressione, non un valore di dispositivo. |
DEBOUNCE - Function is not available | DEBOUNCE in uno script senza valori di dispositivo a cui si possa applicare il debounce. |
X function not supported. Please update your core unit to be able to use this feature. | Il Core è più vecchio della funzione. |
Data type 'X' not supported. Please update your core unit to be able to use this feature. | Una parola chiave di tipo più recente del Core. |
Modbus data type 'X' not supported. Please update your core unit to be able to use this feature. | Int64, UInt64 o Double su un Core più vecchio di 2026.1, build 40595. |
Quale build richiede ciascuna funzione è indicato in Requisiti di versione.