TapHome

Błędy skryptów i rozwiązywanie problemów

Komunikaty błędów skryptów TapHome przytoczone dosłownie — Division by zero, błędy parsowania, błędy wykonania oraz błędy kontekstu i wersji — z przyczyną i rozwiązaniem każdego z nich.

Skrypt TapHome może zawieść na jeden z dwóch sposobów. Błąd parsowania zostaje wykryty podczas odczytu tekstu skryptu: edytor skryptu go wyświetla, a skrypt się nie uruchamia. Błąd wykonania zatrzymuje skrypt, który już działa. Poniższe komunikaty są przytoczone dosłownie; X, A, B i N oznaczają nazwę, typ lub liczbę w komunikacie.

Jak zgłaszane są błędy

Błąd wykonania niesie wiersz skryptu i komunikat:

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

Tam, gdzie podział wiersza nie jest wyświetlany, ten sam błąd brzmi Line in script: 7 Message: Division by zero. Skrypt zatrzymany błędem wykonania nie daje żadnej wartości (Null); smart rule Formuła ma wtedy przy następnym uruchomieniu także LastState = Null.

Dzielenie przez zero

Line in script: 1 Message: Division by zero oznacza, że dzielnik w chwili uruchomienia skryptu był dokładnie 0 — zwykle jest to wartość urządzenia, taka jak va2 w va1/va2. Dziel tylko wtedy, gdy dzielnik jest większy od 0:

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

Funkcyjna forma IF oblicza tylko wybraną gałąź, więc nigdy nie dzieli przez 0. Gdy dzielnik może być ujemny, użyj va2 <> 0. Więcej gotowych rozwiązań w Przykładach.

Błędy parsowania

KomunikatPrzyczyna i rozwiązanie
Unknown variable or constant 'X'Literówka, wartość urządzenia niedodana do skryptu albo słowo, którego język nie zna: NOT 1 daje 'NOT' — negacja to !. Poza blokiem brakujący ; w poprzednim wierszu może pojawić się jako następna nazwa.
Unknown function 'X'Nie ma takiej funkcji. MODBUS, TOBYTEARRAY i BYTEARRAY nie istnieją — użyj MODBUSR lub MODBUSW, TOBYTES i BYTECOLLECTION.
Wrong number of literals and operators in expressionOperator bez operandu, na przykład 1 == 1. Równość to =, nierówność <>.
Unexpected character 'X' at the end of statement.Brakuje ; przed następną instrukcją. Wewnątrz bloku komunikat kończy się Expected ';', na przykład Unexpected character 'E' at the end of statement. Expected ';' przed END.
Unexpected character '.'Właściwość odczytywana z wyniku funkcji, taka jak AVG(1, 2).Type. Najpierw zapisz wartość w zmiennej.
Unexpected character ';' in WHILE statement (lub DO); po wewnętrznym END lub LOOP wewnątrz pętli.
Unexpected keyword 'X' at the end of IF statement.; po wewnętrznym END wewnątrz bloku IF.
Comment must start on a new line and inline comments are not supported# przed ; instrukcji albo po warunku IF lub WHILE.
Comparison with NaN is always false. Use the IsNaN method to check for NaN value.x = NaN — użyj ISNAN(x).
Couldn't unescape XPojedynczy ukośnik wsteczny w tekście; napisz "C:\\data".
Too many characters in char literalTekst w pojedynczych cudzysłowach, taki jak 'ab'; tekst wymaga podwójnych cudzysłowów.
Variable name must start with letter, Only letters or numbers are allowed in variable nameNazwa taka jak 1x lub my_value.
Variable must have initial value providedVAR x; — podaj wartość albo zadeklaruj typ: int x;.

Błędy wykonania

KomunikatPrzyczyna i rozwiązanie
Division by zeroZobacz Dzielenie przez zero.
Specified argument was out of the range of valid values.PARSETEXT znalazł lewy wzorzec, ale nie prawy. Najpierw sprawdź przez INDEXOF.
PARSEJSON - Element not found: 'X'JSONPath niczego nie dopasował. Przekaż TRUE jako trzeci argument, aby zamiast tego dostać Null.
Operator 'X' not defined for 'A' and 'B'Operacja na niezgodnych typach, na przykład arytmetyka z Null. Najpierw sprawdź przez ISNULL.
Cannot cast 'A' to 'B'Wartość typu, którego nie da się przekonwertować, na przykład tekst tam, gdzie potrzebna jest liczba.
Can not directly set value to device variablePrzypisanie do wartości urządzenia poza smart rule Skrypt.
More than 1 000 000 loops, stopping loopPętla WHILE lub DO, która się nie kończy.
Cannot use BREAK() outside of WHILE or DO-WHILEBREAK poza pętlą; tak samo CONTINUE.
Interval 'X' is out of range (0-10000)SLEEP z ujemnym interwałem lub dłuższym niż 10 000 ms.
Maximum array length is 2048BYTECOLLECTION z tekstu szesnastkowego dłuższego niż 2048 bajtów.
Invalid array length. Must be greater than 0 and less than or equal 2048BYTECOLLECTION z liczbą bajtów 0 lub większą niż 2048.
UINT16COLLECTION: count must be between 1 and 2048UINT16COLLECTION, lub BOOLCOLLECTION z własną nazwą, z liczbą elementów poza 1 – 2048.
GETBIT - bit must be between 0 and 15Bit lub bajt poza typem wartości, tutaj wartości 16-bitowej.
GETBIT - value X is out of the 32-bit range (-2147483648 .. 4294967295)Wartość dziesiętna, która nie jest 32-bitową liczbą całkowitą.
Return value 'X' does not match required return type constraint: 'T'Skrypt odczytu urządzenia zwrócił typ, którego wartość urządzenia nie może przechować.
Response is too long (Nbytes). Maximum supported length is 128KBOdpowiedź HTTP większa niż 128 kB.
Invalid register number: XRejestr Modbus poza zakresem 0 do 65535.
RegisterValueToWrites: Can't write double.NaN to modbus registerNaN zapisane przez MODBUSW.

Błędy kontekstu i wersji

KomunikatPrzyczyna i rozwiązanie
X function not supported here.Funkcja nie działa w tym rodzaju skryptu, na przykład ADDERROR function not supported here. w smart rule.
SLEEP function not allowed in this context.SLEEP w smart rule Skrypt lub w skrypcie powiadomienia.
ModbusFunction - unknown modbus device to work withFunkcja Modbus poza skryptem Modbus.
PacketParserFunction - PacketParserContext is nullFunkcja Packet parser poza skryptem Packet parser.
DEBOUNCE - invalid argument, must be a device variablePierwszy argument DEBOUNCE jest wyrażeniem, a nie wartością urządzenia.
DEBOUNCE - Function is not availableDEBOUNCE w skrypcie bez wartości urządzeń, na których DEBOUNCE może działać.
X function not supported. Please update your core unit to be able to use this feature.Core jest starszy niż funkcja.
Data type 'X' not supported. Please update your core unit to be able to use this feature.Słowo kluczowe typu nowsze niż Core.
Modbus data type 'X' not supported. Please update your core unit to be able to use this feature.Int64, UInt64 lub Double na Core starszym niż 2026.1, kompilacja 40595.

Której kompilacji wymaga każda funkcja, opisuje strona Wymagania wersji skryptów.