Szkripthibák és hibaelhárítás
A TapHome szkript hibaüzenetei szó szerint idézve — Division by zero, elemzési hibák, futásidejű hibák, valamint környezeti és verzióhibák — mindegyik okával és javításával.
A TapHome szkript kétféleképpen hibázhat. Az elemzési hiba a szkript szövegének beolvasásakor derül ki: a szkriptszerkesztő megjeleníti, és a szkript nem fut le. A futásidejű hiba egy már futó szkriptet állít le. Az alábbi üzenetek szó szerint vannak idézve; az X, A, B és N az üzenetben szereplő nevet, típust vagy számot jelöli.
Hogyan jelződnek a hibák
A futásidejű hiba tartalmazza a szkript sorát és az üzenetet:
| |
Ahol a sortörés nem látszik, ugyanez a hiba így olvasható: Line in script: 7 Message: Division by zero. A futásidejű hibával leállt szkript nem ad értéket (Null); a Képlet smart rule-nak ekkor a következő futáskor a LastState értéke is Null.
Nullával való osztás
A Line in script: 1 Message: Division by zero azt jelenti, hogy egy osztó pontosan 0 volt a szkript futásakor — jellemzően egy eszközérték, például a va2 a va1/va2 kifejezésben. Csak akkor ossz, ha az osztó nagyobb 0-nál:
IF(va2 > 0, va1/va2, 0);
# Result: 0 when va2 is 0, otherwise va1 divided by va2Az IF függvényalakja csak a kiválasztott ágat értékeli ki, így soha nem oszt 0-val. Ha az osztó negatív is lehet, használd a va2 <> 0 feltételt. További receptek a Példák oldalon.
Elemzési hibák
| Üzenet | Ok és javítás |
|---|---|
Unknown variable or constant 'X' | Elírás, a szkripthez hozzá nem adott eszközérték, vagy olyan szó, amely a nyelvben nem létezik: a NOT 1 eredménye 'NOT' — a tagadás jele a !. Blokkon kívül az előző sorból hiányzó ; a következő névként is megjelenhet. |
Unknown function 'X' | Nincs ilyen függvény. A MODBUS, a TOBYTEARRAY és a BYTEARRAY nem létezik — használd a MODBUSR vagy MODBUSW, a TOBYTES és a BYTECOLLECTION függvényt. |
Wrong number of literals and operators in expression | Operandus nélküli operátor, például 1 == 1. Az egyenlőség jele =, az egyenlőtlenségé <>. |
Unexpected character 'X' at the end of statement. | Hiányzik a ; a következő utasítás előtt. Blokkon belül az üzenet Expected ';' szöveggel végződik, például Unexpected character 'E' at the end of statement. Expected ';' az END előtt. |
Unexpected character '.' | Tulajdonság kiolvasása egy függvény eredményéből, például AVG(1, 2).Type. Előbb tárold az értéket egy változóban. |
Unexpected character ';' in WHILE statement (vagy DO) | ; egy cikluson belüli belső END vagy LOOP után. |
Unexpected keyword 'X' at the end of IF statement. | ; egy IF blokkon belüli belső END után. |
Comment must start on a new line and inline comments are not supported | # egy utasítás ; jele előtt, vagy egy IF vagy WHILE feltétele után. |
Comparison with NaN is always false. Use the IsNaN method to check for NaN value. | x = NaN — használd az ISNAN(x) függvényt. |
Couldn't unescape X | Egyetlen fordított perjel egy szövegben; írd így: "C:\\data". |
Too many characters in char literal | Szöveg egyszeres idézőjelben, például 'ab'; a szöveghez dupla idézőjel kell. |
Variable name must start with letter, Only letters or numbers are allowed in variable name | Olyan név, mint az 1x vagy a my_value. |
Variable must have initial value provided | VAR x; — adj meg értéket, vagy deklarálj típust: int x;. |
Futásidejű hibák
| Üzenet | Ok és javítás |
|---|---|
Division by zero | Lásd: Nullával való osztás. |
Specified argument was out of the range of valid values. | A PARSETEXT megtalálta a bal oldali mintát, de a jobb oldalit nem. Előbb ellenőrizd az INDEXOF függvénnyel. |
PARSEJSON - Element not found: 'X' | A JSONPath semmire sem illeszkedett. Harmadik argumentumként add meg a TRUE értéket, hogy helyette Null értéket kapj. |
Operator 'X' not defined for 'A' and 'B' | Művelet nem kompatibilis típusokon, például számtani művelet Null értékkel. Előbb ellenőrizd az ISNULL függvénnyel. |
Cannot cast 'A' to 'B' | Nem átalakítható típusú érték, például szöveg ott, ahol szám kell. |
Can not directly set value to device variable | Értékadás eszközértéknek a Szkript smart rule-on kívül. |
More than 1 000 000 loops, stopping loop | Véget nem érő WHILE vagy DO ciklus. |
Cannot use BREAK() outside of WHILE or DO-WHILE | BREAK cikluson kívül; ugyanígy a CONTINUE. |
Interval 'X' is out of range (0-10000) | SLEEP negatív vagy 10 000 ms-nál hosszabb intervallummal. |
Maximum array length is 2048 | BYTECOLLECTION 2048 bájtnál hosszabb hexadecimális szövegből. |
Invalid array length. Must be greater than 0 and less than or equal 2048 | BYTECOLLECTION 0 vagy 2048-nál több bájttal. |
UINT16COLLECTION: count must be between 1 and 2048 | UINT16COLLECTION, vagy a saját nevével a BOOLCOLLECTION, 1 – 2048 tartományon kívüli darabszámmal. |
GETBIT - bit must be between 0 and 15 | Az érték típusán kívül eső bit vagy bájt, itt egy 16 bites értéknél. |
GETBIT - value X is out of the 32-bit range (-2147483648 .. 4294967295) | Olyan tizedes érték, amely nem 32 bites egész szám. |
Return value 'X' does not match required return type constraint: 'T' | Egy eszköz olvasó szkriptje olyan típust adott vissza, amelyet az eszközérték nem tud tárolni. |
Response is too long (Nbytes). Maximum supported length is 128KB | 128 kB-nál nagyobb HTTP-válasz. |
Invalid register number: X | 0 és 65535 közötti tartományon kívüli Modbus regiszter. |
RegisterValueToWrites: Can't write double.NaN to modbus register | MODBUSW függvénnyel írt NaN. |
Környezeti és verzióhibák
| Üzenet | Ok és javítás |
|---|---|
X function not supported here. | A függvény nem működik ebben a szkriptfajtában, például ADDERROR function not supported here. egy smart rule-ban. |
SLEEP function not allowed in this context. | SLEEP egy Szkript smart rule-ban vagy egy értesítés szkriptjében. |
ModbusFunction - unknown modbus device to work with | Modbus függvény Modbus szkripten kívül. |
PacketParserFunction - PacketParserContext is null | Packet parser függvény Packet parser szkripten kívül. |
DEBOUNCE - invalid argument, must be a device variable | A DEBOUNCE első argumentuma kifejezés, nem eszközérték. |
DEBOUNCE - Function is not available | DEBOUNCE olyan szkriptben, amelyben nincs pergésmentesíthető eszközérték. |
X function not supported. Please update your core unit to be able to use this feature. | A Core régebbi, mint a függvény. |
Data type 'X' not supported. Please update your core unit to be able to use this feature. | A Core-nál újabb típuskulcsszó. |
Modbus data type 'X' not supported. Please update your core unit to be able to use this feature. | Int64, UInt64 vagy Double a 2026.1, build 40595-nél régebbi Core-on. |
Azt, hogy melyik függvény melyik buildet igényli, a Verziókövetelmények oldal tartalmazza.