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:
| |
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 va2Forma 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
| Mesaj | Cauză ș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 expression | Un 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 supported | Un # î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 X | O singură bară inversă într-un șir de caractere; scrieți "C:\\data". |
Too many characters in char literal | Text î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 name | Un nume precum 1x sau my_value. |
Variable must have initial value provided | VAR x; — dați o valoare sau declarați un tip: int x;. |
Erori la rulare
| Mesaj | Cauză și remediere |
|---|---|
Division by zero | Consultaț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 variable | O atribuire către o valoare a dispozitivului în afara unei smart rule Script. |
More than 1 000 000 loops, stopping loop | O buclă WHILE sau DO care nu se termină. |
Cannot use BREAK() outside of WHILE or DO-WHILE | BREAK î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 2048 | BYTECOLLECTION dintr-un text hexazecimal de peste 2048 de octeți. |
Invalid array length. Must be greater than 0 and less than or equal 2048 | BYTECOLLECTION cu un număr de octeți de 0 sau de peste 2048. |
UINT16COLLECTION: count must be between 1 and 2048 | UINT16COLLECTION, sau BOOLCOLLECTION cu propriul nume, cu un număr de elemente în afara intervalului 1 – 2048. |
GETBIT - bit must be between 0 and 15 | Un 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 128KB | Un răspuns HTTP mai mare de 128 kB. |
Invalid register number: X | Un registru Modbus în afara intervalului 0 – 65535. |
RegisterValueToWrites: Can't write double.NaN to modbus register | NaN scris cu MODBUSW. |
Erori de context și de versiune
| Mesaj | Cauză ș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 with | O funcție Modbus în afara unui script Modbus. |
PacketParserFunction - PacketParserContext is null | O funcție Packet parser în afara unui script Packet parser. |
DEBOUNCE - invalid argument, must be a device variable | Primul argument al lui DEBOUNCE este o expresie, nu o valoare a dispozitivului. |
DEBOUNCE - Function is not available | DEBOUNCE î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.