TapHome

Chyby skriptu a řešení problémů

Chybová hlášení skriptu TapHome doslovně — Division by zero, chyby parsování, chyby za běhu a chyby kontextu či verze — s příčinou a opravou každé z nich.

Skript TapHome může selhat dvěma způsoby. Chyba parsování se najde při čtení textu skriptu: editor skriptu ji zobrazí a skript se nespustí. Chyba za běhu zastaví skript, který už běží. Hlášení níže jsou citována doslovně; X, A, B a N zastupují název, typ nebo číslo v hlášení.

Jak se chyby hlásí

Chyba za běhu nese řádek skriptu a hlášení:

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

Kde se zalomení řádku nezobrazuje, zní stejná chyba Line in script: 7 Message: Division by zero. Skript zastavený chybou za běhu nedá žádnou hodnotu (Null); smart rule Vzorec pak má při dalším běhu také LastState = Null.

Dělení nulou

Line in script: 1 Message: Division by zero znamená, že dělitel byl při běhu skriptu přesně 0 — typicky hodnota zařízení, například va2 ve va1/va2. Dělte jen tehdy, když je dělitel větší než 0:

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

Funkční podoba IF vyhodnotí jen zvolenou větev, takže nikdy nedělí nulou. Když může být dělitel záporný, použijte va2 <> 0. Další recepty na stránce Příklady.

Chyby parsování

HlášeníPříčina a oprava
Unknown variable or constant 'X'Překlep, hodnota zařízení nepřidaná do skriptu nebo slovo, které jazyk nezná: NOT 1 dá 'NOT' — negace je !. Mimo blok se chybějící ; na předchozím řádku může projevit jako další název.
Unknown function 'X'Taková funkce neexistuje. MODBUS, TOBYTEARRAY a BYTEARRAY neexistují — použijte MODBUSR nebo MODBUSW, TOBYTES a BYTECOLLECTION.
Wrong number of literals and operators in expressionOperátor bez operandu, například 1 == 1. Rovnost je =, nerovnost <>.
Unexpected character 'X' at the end of statement.Chybí ; před dalším příkazem. Uvnitř bloku hlášení končí Expected ';', například Unexpected character 'E' at the end of statement. Expected ';' před END.
Unexpected character '.'Vlastnost čtená z výsledku funkce, například AVG(1, 2).Type. Nejprve uložte hodnotu do proměnné.
Unexpected character ';' in WHILE statement (nebo DO); za vnitřním END nebo LOOP uvnitř cyklu.
Unexpected keyword 'X' at the end of IF statement.; za vnitřním END uvnitř bloku IF.
Comment must start on a new line and inline comments are not supported# před ; příkazu nebo za podmínkou IF či WHILE.
Comparison with NaN is always false. Use the IsNaN method to check for NaN value.x = NaN — použijte ISNAN(x).
Couldn't unescape XJedno zpětné lomítko v řetězci; pište "C:\\data".
Too many characters in char literalText v jednoduchých uvozovkách, například 'ab'; text potřebuje dvojité uvozovky.
Variable name must start with letter, Only letters or numbers are allowed in variable nameNázev jako 1x nebo my_value.
Variable must have initial value providedVAR x; — zadejte hodnotu nebo deklarujte typ: int x;.

Chyby za běhu

HlášeníPříčina a oprava
Division by zeroViz Dělení nulou.
Specified argument was out of the range of valid values.PARSETEXT našel levý vzor, ale ne pravý. Nejprve ověřte přes INDEXOF.
PARSEJSON - Element not found: 'X'JSONPath nic nenašel. Předejte TRUE jako třetí argument a dostanete místo toho Null.
Operator 'X' not defined for 'A' and 'B'Operace s nekompatibilními typy, například aritmetika s Null. Nejprve ověřte přes ISNULL.
Cannot cast 'A' to 'B'Hodnota typu, který nelze převést, například text tam, kde je potřeba číslo.
Can not directly set value to device variablePřiřazení do hodnoty zařízení mimo smart rule Skript.
More than 1 000 000 loops, stopping loopCyklus WHILE nebo DO, který neskončí.
Cannot use BREAK() outside of WHILE or DO-WHILEBREAK mimo cyklus; totéž CONTINUE.
Interval 'X' is out of range (0-10000)SLEEP se záporným intervalem nebo delším než 10 000 ms.
Maximum array length is 2048BYTECOLLECTION ze šestnáctkového textu delšího než 2048 bajtů.
Invalid array length. Must be greater than 0 and less than or equal 2048BYTECOLLECTION s počtem bajtů 0 nebo větším než 2048.
UINT16COLLECTION: count must be between 1 and 2048UINT16COLLECTION, nebo BOOLCOLLECTION s vlastním názvem, s počtem mimo 1 – 2048.
GETBIT - bit must be between 0 and 15Bit nebo bajt mimo typ hodnoty, zde 16bitové hodnoty.
GETBIT - value X is out of the 32-bit range (-2147483648 .. 4294967295)Desetinná hodnota, která není 32bitové celé číslo.
Return value 'X' does not match required return type constraint: 'T'Skript pro čtení zařízení vrátil typ, který hodnota zařízení neudrží.
Response is too long (Nbytes). Maximum supported length is 128KBOdpověď HTTP větší než 128 kB.
Invalid register number: XRegistr Modbus mimo 0 až 65535.
RegisterValueToWrites: Can't write double.NaN to modbus registerNaN zapsané přes MODBUSW.

Chyby kontextu a verze

HlášeníPříčina a oprava
X function not supported here.Funkce v tomto druhu skriptu nefunguje, například ADDERROR function not supported here. ve smart rule.
SLEEP function not allowed in this context.SLEEP ve smart rule Skript nebo ve skriptu oznámení.
ModbusFunction - unknown modbus device to work withFunkce Modbus mimo skript Modbus.
PacketParserFunction - PacketParserContext is nullFunkce Packet parser mimo skript Packet parser.
DEBOUNCE - invalid argument, must be a device variablePrvní argument DEBOUNCE je výraz, ne hodnota zařízení.
DEBOUNCE - Function is not availableDEBOUNCE ve skriptu bez hodnot zařízení, které lze ošetřit proti zákmitům.
X function not supported. Please update your core unit to be able to use this feature.Core je starší než funkce.
Data type 'X' not supported. Please update your core unit to be able to use this feature.Klíčové slovo typu novější než Core.
Modbus data type 'X' not supported. Please update your core unit to be able to use this feature.Int64, UInt64 nebo Double na Core starším než 2026.1, build 40595.

Jaký build která funkce vyžaduje, najdete na stránce Požadavky na verzi.