Chyby skriptu a riešenie problémov
Chybové hlásenia skriptov TapHome citované doslovne — Division by zero, chyby pri parsovaní, chyby pri vykonávaní a chyby kontextu či verzie — s príčinou a riešením každej z nich.
Skript TapHome môže zlyhať dvoma spôsobmi. Chyba pri parsovaní sa nájde už pri čítaní textu skriptu: zobrazí ju editor skriptu a skript sa nespustí. Chyba pri vykonávaní zastaví skript, ktorý už beží. Hlásenia nižšie sú citované doslovne; X, A, B a N zastupujú meno, typ alebo číslo v hlásení.
Ako sa chyby hlásia
Chyba pri vykonávaní nesie riadok skriptu a hlásenie:
| |
Kde sa zalomenie riadku nezobrazí, tá istá chyba znie Line in script: 7 Message: Division by zero. Skript zastavený chybou pri vykonávaní nevráti žiadnu hodnotu (Null); smart rule Vzorec má potom pri ďalšom spustení aj LastState = Null.
Delenie nulou
Line in script: 1 Message: Division by zero znamená, že deliteľ bol pri behu skriptu presne 0 — typicky hodnota zariadenia, napríklad va2 vo výraze va1/va2. Deľte, len keď je deliteľ väčší ako 0:
IF(va2 > 0, va1/va2, 0);
# Result: 0 when va2 is 0, otherwise va1 divided by va2Funkčný tvar IF vyhodnotí iba zvolenú vetvu, takže nulou nikdy nedelí. Keď môže byť deliteľ záporný, použite va2 <> 0. Ďalšie postupy sú v Príkladoch.
Chyby pri parsovaní
| Hlásenie | Príčina a riešenie |
|---|---|
Unknown variable or constant 'X' | Preklep, hodnota zariadenia, ktorá nebola pridaná do skriptu, alebo slovo, ktoré jazyk nepozná: NOT 1 dá 'NOT' — negácia je !. Mimo bloku sa chýbajúca ; na predchádzajúcom riadku môže prejaviť ako nasledujúce meno. |
Unknown function 'X' | Taká funkcia neexistuje. MODBUS, TOBYTEARRAY ani BYTEARRAY jazyk nemá — použite MODBUSR alebo MODBUSW, TOBYTES a BYTECOLLECTION. |
Wrong number of literals and operators in expression | Operátor bez operandu, napríklad 1 == 1. Rovnosť je =, nerovnosť <>. |
Unexpected character 'X' at the end of statement. | Pred nasledujúcim príkazom chýba ;. Vnútri bloku správa končí Expected ';', napríklad Unexpected character 'E' at the end of statement. Expected ';' pred END. |
Unexpected character '.' | Vlastnosť čítaná z výsledku funkcie, napríklad AVG(1, 2).Type. Hodnotu najprv uložte do premennej. |
Unexpected character ';' in WHILE statement (alebo DO) | ; za vnoreným END alebo LOOP vnútri cyklu. |
Unexpected keyword 'X' at the end of IF statement. | ; za vnoreným END vnútri bloku IF. |
Comment must start on a new line and inline comments are not supported | # pred ; príkazu alebo za podmienkou IF či WHILE. |
Comparison with NaN is always false. Use the IsNaN method to check for NaN value. | x = NaN — použite ISNAN(x). |
Couldn't unescape X | Jedna spätná lomka v reťazci; napíšte "C:\\data". |
Too many characters in char literal | Text v jednoduchých úvodzovkách, napríklad 'ab'; text patrí do dvojitých úvodzoviek. |
Variable name must start with letter, Only letters or numbers are allowed in variable name | Meno ako 1x alebo my_value. |
Variable must have initial value provided | VAR x; — zadajte hodnotu alebo deklarujte typ: int x;. |
Chyby pri vykonávaní
| Hlásenie | Príčina a riešenie |
|---|---|
Division by zero | Pozri Delenie nulou. |
Specified argument was out of the range of valid values. | PARSETEXT našiel ľavý vzor, ale nie pravý. Najprv to overte cez INDEXOF. |
PARSEJSON - Element not found: 'X' | JSONPath nič nenašiel. Ak chcete namiesto chyby dostať Null, zadajte ako tretí argument TRUE. |
Operator 'X' not defined for 'A' and 'B' | Operácia s nekompatibilnými typmi, napríklad aritmetika s Null. Najprv to overte cez ISNULL. |
Cannot cast 'A' to 'B' | Hodnota typu, ktorý sa nedá previesť, napríklad text tam, kde je potrebné číslo. |
Can not directly set value to device variable | Priradenie do hodnoty zariadenia mimo smart rule Skript. |
More than 1 000 000 loops, stopping loop | Cyklus WHILE alebo DO, ktorý neskončí. |
Cannot use BREAK() outside of WHILE or DO-WHILE | BREAK mimo cyklu; rovnako CONTINUE. |
Interval 'X' is out of range (0-10000) | SLEEP so záporným intervalom alebo dlhším ako 10 000 ms. |
Maximum array length is 2048 | BYTECOLLECTION zo šestnástkového textu s viac ako 2048 bajtmi. |
Invalid array length. Must be greater than 0 and less than or equal 2048 | BYTECOLLECTION s počtom bajtov 0 alebo viac ako 2048. |
UINT16COLLECTION: count must be between 1 and 2048 | UINT16COLLECTION, alebo BOOLCOLLECTION s vlastným menom, s počtom mimo 1 – 2048. |
GETBIT - bit must be between 0 and 15 | Bit alebo bajt mimo typu hodnoty, tu 16-bitovej hodnoty. |
GETBIT - value X is out of the 32-bit range (-2147483648 .. 4294967295) | Desatinné číslo, ktoré nie je 32-bitovým celým číslom. |
Return value 'X' does not match required return type constraint: 'T' | Skript na čítanie zariadenia vrátil typ, ktorý hodnota zariadenia nedokáže uložiť. |
Response is too long (Nbytes). Maximum supported length is 128KB | HTTP odpoveď väčšia ako 128 kB. |
Invalid register number: X | Register Modbus mimo rozsahu 0 až 65535. |
RegisterValueToWrites: Can't write double.NaN to modbus register | NaN zapisované cez MODBUSW. |
Chyby kontextu a verzie
| Hlásenie | Príčina a riešenie |
|---|---|
X function not supported here. | Funkcia v tomto druhu skriptu nefunguje, napríklad ADDERROR function not supported here. v smart rule. |
SLEEP function not allowed in this context. | SLEEP v smart rule Skript alebo v skripte notifikácie. |
ModbusFunction - unknown modbus device to work with | Funkcia Modbus mimo skriptu Modbus. |
PacketParserFunction - PacketParserContext is null | Funkcia Packet parser mimo skriptu Packet parser. |
DEBOUNCE - invalid argument, must be a device variable | Prvý argument DEBOUNCE je výraz, nie hodnota zariadenia. |
DEBOUNCE - Function is not available | DEBOUNCE v skripte bez hodnôt zariadení, na ktoré sa dá DEBOUNCE použiť. |
X function not supported. Please update your core unit to be able to use this feature. | Core je starší ako funkcia. |
Data type 'X' not supported. Please update your core unit to be able to use this feature. | Kľúčové slovo typu, ktoré je novšie ako Core. |
Modbus data type 'X' not supported. Please update your core unit to be able to use this feature. | Int64, UInt64 alebo Double na Core staršom ako 2026.1, build 40595. |
Ktorý build potrebuje každá funkcia, nájdete v Požiadavkách na verziu.