Pogreške skripti i rješavanje problema
Poruke o pogreškama skripti TapHome navedene doslovno — Division by zero, pogreške raščlambe, pogreške pri izvršavanju te pogreške konteksta i verzije — s uzrokom i rješenjem svake.
Skripta TapHome može zakazati na jedan od dva načina. Pogreška raščlambe otkriva se dok se čita tekst skripte: uređivač skripti je prikazuje i skripta se ne izvršava. Pogreška pri izvršavanju zaustavlja skriptu koja se već izvršava. Poruke u nastavku navedene su doslovno; X, A, B i N označavaju naziv, tip ili broj u poruci.
Kako se pogreške javljaju
Pogreška pri izvršavanju nosi redak skripte i poruku:
| |
Gdje prijelom retka nije prikazan, ista pogreška glasi Line in script: 7 Message: Division by zero. Skripta zaustavljena pogreškom pri izvršavanju ne daje vrijednost (Null); smart rule Formula tada pri sljedećem izvršavanju ima i LastState = Null.
Dijeljenje nulom
Line in script: 1 Message: Division by zero znači da je djelitelj pri izvršavanju skripte bio točno 0 — obično vrijednost uređaja, kao va2 u va1/va2. Dijelite samo kada je djelitelj veći od 0:
IF(va2 > 0, va1/va2, 0);
# Result: 0 when va2 is 0, otherwise va1 divided by va2Funkcijski oblik IF izračunava samo odabranu granu, pa nikada ne dijeli s 0. Kada djelitelj može biti negativan, koristite va2 <> 0. Više recepata na stranici Primjeri.
Pogreške raščlambe
| Poruka | Uzrok i rješenje |
|---|---|
Unknown variable or constant 'X' | Tipkarska pogreška, vrijednost uređaja koja nije dodana u skriptu ili riječ koju jezik nema: NOT 1 daje 'NOT' — negacija je !. Izvan bloka ; koji nedostaje u prethodnom retku može se pojaviti kao sljedeći naziv. |
Unknown function 'X' | Takva funkcija ne postoji. MODBUS, TOBYTEARRAY i BYTEARRAY ne postoje — koristite MODBUSR ili MODBUSW, TOBYTES i BYTECOLLECTION. |
Wrong number of literals and operators in expression | Operator bez operanda, na primjer 1 == 1. Jednakost je =, nejednakost <>. |
Unexpected character 'X' at the end of statement. | Nedostaje ; prije sljedeće naredbe. Unutar bloka poruka završava s Expected ';', na primjer Unexpected character 'E' at the end of statement. Expected ';' prije END. |
Unexpected character '.' | Svojstvo čitano iz rezultata funkcije, kao AVG(1, 2).Type. Najprije spremite vrijednost u varijablu. |
Unexpected character ';' in WHILE statement (ili DO) | ; iza unutarnjeg END ili LOOP unutar petlje. |
Unexpected keyword 'X' at the end of IF statement. | ; iza unutarnjeg END unutar bloka IF. |
Comment must start on a new line and inline comments are not supported | # prije ; naredbe ili iza uvjeta IF ili WHILE. |
Comparison with NaN is always false. Use the IsNaN method to check for NaN value. | x = NaN — koristite ISNAN(x). |
Couldn't unescape X | Jedna obrnuta kosa crta u stringu; napišite "C:\\data". |
Too many characters in char literal | Tekst u jednostrukim navodnicima, kao 'ab'; tekst treba dvostruke navodnike. |
Variable name must start with letter, Only letters or numbers are allowed in variable name | Naziv kao 1x ili my_value. |
Variable must have initial value provided | VAR x; — zadajte vrijednost ili deklarirajte tip: int x;. |
Pogreške pri izvršavanju
| Poruka | Uzrok i rješenje |
|---|---|
Division by zero | Vidi Dijeljenje nulom. |
Specified argument was out of the range of valid values. | PARSETEXT je pronašao lijevi uzorak, ali ne i desni. Najprije provjerite funkcijom INDEXOF. |
PARSEJSON - Element not found: 'X' | JSONPath nije pronašao ništa. Kao treći argument predajte TRUE da biste umjesto toga dobili Null. |
Operator 'X' not defined for 'A' and 'B' | Operacija nad nespojivim tipovima, na primjer aritmetika s Null. Najprije provjerite funkcijom ISNULL. |
Cannot cast 'A' to 'B' | Vrijednost tipa koji se ne može pretvoriti, na primjer tekst gdje je potreban broj. |
Can not directly set value to device variable | Dodjela vrijednosti uređaja izvan smart rule Skripta. |
More than 1 000 000 loops, stopping loop | Petlja WHILE ili DO koja ne završava. |
Cannot use BREAK() outside of WHILE or DO-WHILE | BREAK izvan petlje; isto vrijedi za CONTINUE. |
Interval 'X' is out of range (0-10000) | SLEEP s negativnim intervalom ili duljim od 10 000 ms. |
Maximum array length is 2048 | BYTECOLLECTION iz heksadecimalnog teksta duljeg od 2048 bajtova. |
Invalid array length. Must be greater than 0 and less than or equal 2048 | BYTECOLLECTION s brojem bajtova 0 ili većim od 2048. |
UINT16COLLECTION: count must be between 1 and 2048 | UINT16COLLECTION ili BOOLCOLLECTION (s vlastitim nazivom u poruci) s brojem izvan 1 – 2048. |
GETBIT - bit must be between 0 and 15 | Bit ili bajt izvan tipa vrijednosti, ovdje 16-bitne vrijednosti. |
GETBIT - value X is out of the 32-bit range (-2147483648 .. 4294967295) | Decimalna vrijednost koja nije 32-bitni cijeli broj. |
Return value 'X' does not match required return type constraint: 'T' | Skripta za čitanje uređaja vratila je tip koji vrijednost uređaja ne može sadržavati. |
Response is too long (Nbytes). Maximum supported length is 128KB | HTTP odgovor veći od 128 kB. |
Invalid register number: X | Registar Modbus izvan raspona 0 do 65535. |
RegisterValueToWrites: Can't write double.NaN to modbus register | NaN upisan funkcijom MODBUSW. |
Pogreške konteksta i verzije
| Poruka | Uzrok i rješenje |
|---|---|
X function not supported here. | Funkcija ne radi u ovoj vrsti skripte, na primjer ADDERROR function not supported here. u smart rule. |
SLEEP function not allowed in this context. | SLEEP u smart rule Skripta ili u skripti obavijesti. |
ModbusFunction - unknown modbus device to work with | Funkcija Modbus izvan skripte Modbus. |
PacketParserFunction - PacketParserContext is null | Funkcija Packet parsera izvan skripte Packet parsera. |
DEBOUNCE - invalid argument, must be a device variable | Prvi argument funkcije DEBOUNCE je izraz, a ne vrijednost uređaja. |
DEBOUNCE - Function is not available | DEBOUNCE u skripti bez vrijednosti uređaja na koje se može primijeniti debounce. |
X function not supported. Please update your core unit to be able to use this feature. | Core je stariji od funkcije. |
Data type 'X' not supported. Please update your core unit to be able to use this feature. | Ključna riječ tipa novija od jedinice Core. |
Modbus data type 'X' not supported. Please update your core unit to be able to use this feature. | Int64, UInt64 ili Double na jedinici Core starijoj od 2026.1, build 40595. |
Koji build treba pojedina funkcija, navedeno je na stranici Zahtjevi skripti za verziju.