TapHome

Erori de script și depanare

Mesajele de eroare ale scripturilor TapHome citate cuvânt cu cuvânt — Division by zero, erori de parsare, erori la rulare și erori de context sau de versiune — cu cauza și remedierea fiecăreia.

Un script TapHome poate eșua în două feluri. O eroare de parsare este găsită la citirea textului scriptului: editorul de scripturi o afișează, iar scriptul nu rulează. O eroare la rulare oprește un script care rulează deja. Mesajele de mai jos sunt citate cuvânt cu cuvânt; X, A, B și N țin locul numelui, tipului sau numărului din mesaj.

Cum sunt raportate erorile

O eroare la rulare conține linia din script și mesajul:

1
2
Line in script: 7
Message: Division by zero

Acolo unde trecerea la rând nouă nu se afișează, aceeași eroare apare ca Line in script: 7 Message: Division by zero. Un script oprit de o eroare la rulare nu dă nicio valoare (Null); o smart rule Formulă are atunci și LastState = Null la următoarea rulare.

Împărțire la zero

Line in script: 1 Message: Division by zero înseamnă că un împărțitor a fost exact 0 când a rulat scriptul — de regulă o valoare a dispozitivului, precum va2 în va1/va2. Împărțiți doar când împărțitorul este mai mare decât 0:

IF(va2 > 0, va1/va2, 0);
# Result: 0 when va2 is 0, otherwise va1 divided by va2

Forma de funcție a lui IF evaluează doar ramura aleasă, așa că nu împarte niciodată la 0. Folosiți va2 <> 0 când împărțitorul poate fi negativ. Mai multe rețete în Exemple.

Erori de parsare

MesajCauză și remediere
Unknown variable or constant 'X'O greșeală de tipar, o valoare a dispozitivului care nu a fost adăugată în script sau un cuvânt pe care limbajul nu îl are: NOT 1 dă 'NOT' — negația este !. În afara unui bloc, un ; lipsă pe linia anterioară poate apărea ca numele următor.
Unknown function 'X'Nu există o astfel de funcție. MODBUS, TOBYTEARRAY și BYTEARRAY nu există — folosiți MODBUSR sau MODBUSW, TOBYTES și BYTECOLLECTION.
Wrong number of literals and operators in expressionUn operator fără operand, de exemplu 1 == 1. Egalitatea este =, inegalitatea <>.
Unexpected character 'X' at the end of statement.Lipsește ; înaintea instrucțiunii următoare. În interiorul unui bloc mesajul se termină cu Expected ';', de exemplu Unexpected character 'E' at the end of statement. Expected ';' înainte de END.
Unexpected character '.'O proprietate citită din rezultatul unei funcții, precum AVG(1, 2).Type. Stocați mai întâi valoarea într-o variabilă.
Unexpected character ';' in WHILE statement (sau DO)Un ; după un END sau LOOP interior în interiorul unei bucle.
Unexpected keyword 'X' at the end of IF statement.Un ; după un END interior în interiorul unui bloc IF.
Comment must start on a new line and inline comments are not supportedUn # înaintea caracterului ; al unei instrucțiuni sau după o condiție IF ori WHILE.
Comparison with NaN is always false. Use the IsNaN method to check for NaN value.x = NaN — folosiți ISNAN(x).
Couldn't unescape XO singură bară inversă într-un șir de caractere; scrieți "C:\\data".
Too many characters in char literalText între ghilimele simple, precum 'ab'; textul are nevoie de ghilimele duble.
Variable name must start with letter, Only letters or numbers are allowed in variable nameUn nume precum 1x sau my_value.
Variable must have initial value providedVAR x; — dați o valoare sau declarați un tip: int x;.

Erori la rulare

MesajCauză și remediere
Division by zeroConsultați Împărțire la zero.
Specified argument was out of the range of valid values.PARSETEXT a găsit șablonul din stânga, dar nu și pe cel din dreapta. Verificați mai întâi cu INDEXOF.
PARSEJSON - Element not found: 'X'JSONPath nu s-a potrivit cu nimic. Transmiteți TRUE ca al treilea argument pentru a primi în schimb Null.
Operator 'X' not defined for 'A' and 'B'O operație pe tipuri incompatibile, de exemplu aritmetică cu Null. Verificați mai întâi cu ISNULL.
Cannot cast 'A' to 'B'O valoare de un tip care nu se poate converti, de exemplu text acolo unde este nevoie de un număr.
Can not directly set value to device variableO atribuire către o valoare a dispozitivului în afara unei smart rule Script.
More than 1 000 000 loops, stopping loopO buclă WHILE sau DO care nu se termină.
Cannot use BREAK() outside of WHILE or DO-WHILEBREAK în afara unei bucle; la fel CONTINUE.
Interval 'X' is out of range (0-10000)SLEEP cu un interval negativ sau mai lung de 10 000 ms.
Maximum array length is 2048BYTECOLLECTION dintr-un text hexazecimal de peste 2048 de octeți.
Invalid array length. Must be greater than 0 and less than or equal 2048BYTECOLLECTION cu un număr de octeți de 0 sau de peste 2048.
UINT16COLLECTION: count must be between 1 and 2048UINT16COLLECTION, sau BOOLCOLLECTION cu propriul nume, cu un număr de elemente în afara intervalului 1 – 2048.
GETBIT - bit must be between 0 and 15Un bit sau un octet în afara tipului valorii, aici o valoare pe 16 biți.
GETBIT - value X is out of the 32-bit range (-2147483648 .. 4294967295)O valoare zecimală care nu este un număr întreg pe 32 de biți.
Return value 'X' does not match required return type constraint: 'T'Scriptul de citire al unui dispozitiv a returnat un tip pe care valoarea dispozitivului nu îl poate reține.
Response is too long (Nbytes). Maximum supported length is 128KBUn răspuns HTTP mai mare de 128 kB.
Invalid register number: XUn registru Modbus în afara intervalului 0 – 65535.
RegisterValueToWrites: Can't write double.NaN to modbus registerNaN scris cu MODBUSW.

Erori de context și de versiune

MesajCauză și remediere
X function not supported here.Funcția nu funcționează în acest tip de script, de exemplu ADDERROR function not supported here. într-o smart rule.
SLEEP function not allowed in this context.SLEEP într-o smart rule Script sau într-un script de notificare.
ModbusFunction - unknown modbus device to work withO funcție Modbus în afara unui script Modbus.
PacketParserFunction - PacketParserContext is nullO funcție Packet parser în afara unui script Packet parser.
DEBOUNCE - invalid argument, must be a device variablePrimul argument al lui DEBOUNCE este o expresie, nu o valoare a dispozitivului.
DEBOUNCE - Function is not availableDEBOUNCE într-un script fără valori ale dispozitivelor care pot fi filtrate cu debounce.
X function not supported. Please update your core unit to be able to use this feature.Core este mai vechi decât funcția.
Data type 'X' not supported. Please update your core unit to be able to use this feature.Un cuvânt cheie de tip mai nou decât Core.
Modbus data type 'X' not supported. Please update your core unit to be able to use this feature.Int64, UInt64 sau Double pe un Core mai vechi decât 2026.1, build 40595.

De ce build are nevoie fiecare funcție se găsește în Cerințe de versiune.