Víceřádkový skriptovací jazyk se zvýrazněním syntaxe, použitelný v chytrých pravidlech Rovnice, Vzorec a Skript a také v rozhraních Modbus a Packet parser.

Základy
Přiřazení
Mu := Se + 2;Víceřádkový algoritmus
Každý řádek je oddělen středníkem.
Last := Current;
Current := 0;Návratová hodnota
- Výsledek posledního řádku kódu.
- RETURN(expression) ukončí provádění algoritmu a vrátí obsah uvnitř závorek.
(Co2 > 800) AND (Wind < 10);
equals:
RETURN((CO2 > 800) and (Wind < 10));Dočasná proměnná
Existuje pouze během jednoho spuštění skriptu.
VAR X := 5;IF klauze
Excel styl
IF(logical_expression, value_if_true, value_if_false);
IF(logical_expression, value_if_true);Víceřádkový styl
IF X < 5
RETURN(1);
ELSEIF X > 10
RETURN(3);
ELSE
RETURN(0);
ENDSWITCH
Testuje výraz vůči seznamu případů a vrací hodnotu prvního shodného případu, případně výchozí hodnotu, pokud žádný případ nevyhoví.
SWITCH(expression, case1, value1, [case2, ...], [value2, ...], default_value)Příklad:
SWITCH( MODBUSR(H, 168, UInt16),
0, 0,
0x0002, 1,
0x0004, 2,
0x0008, 3,
0x0010, 4,
0x0040, 5,
0x0800, 6,
NaN)
Smyčka
LOOP / WHILE … opakuje sled příkazů na základě zadané podmínky, dokud není podmínka splněna. CONTINUE … přeskočí provádění příkazů a pokračuje na další cyklus. BREAK … ukončí smyčku.
Příklad s podmínkou na začátku:
int i := 10;
while i > 0
i := i - 1;
if i > 5
continue;
else
break;
end
loopPříklad s podmínkou na konci:
int i := 10;
do
i := i + i;
loop while i < 10NaN (not a number) hodnota
NaN může být vrácena jako hodnota v případě, že skutečná hodnota není známa.
IF Temperature > 250
RETURN(NaN);Funkce ISNAN(expression) vrací TRUE, pokud výraz není číslo.
ISNULL
Vrací true, pokud je parametr NULL, jinak false. Používá se pro typy String a Bytearray. Příklad: pokud XML prvek nebyl nalezen, vrácená hodnota je NULL a výraz ISNULL je true.
Syntaxe funkce:
ISNULL(object)Sleep
Pozastaví skript na uvedený počet milisekund. Používejte jen ve velmi specifických případech.
SLEEP(5);Komentáře
Nový řádek začínající znakem #.
# commentČíselné literály
Hexadecimální čísla
Výrazy mohou také používat hexadecimální čísla. Je vyžadován prefix 0x a zbytek není citlivý na velikost písmen.
0x0A = 10
0xA0A0 (41120)
0xa0a0 (41120)Binární čísla
0b1010 = 10
0b10101010 (170)Matematické výrazy
+, -, *, /
(20.5 + 9.5) / 2 (15)Logické výrazy
AND, OR, !, =, !=, >, <
(!IsRaining OR (Wind>30))
MultiValueSwitchState != 2 (není rovno 2)Funkce
LINEAR
Vrací lineárně upravenou hodnotu – lineární interpolaci.
LINEAR(input, value1_input, value1_output, value2_input, value2_output, [type])Parametry
- input… vstupní hodnota
- value1_input… hodnota na vstupu na dolní hranici
- value1_output… hodnota na výstupu na dolní hranici
- value2_input… hodnota na vstupu na horní hranici
- value2_output… hodnota na výstupu na horní hranici
- [type]… volitelný parametr. Definuje, jaký má být výsledek, když je vstupní hodnota mimo rozsah value1_input ↔︎ value2_input:
- bez parametru (stejné jako s parametrem BOUNDS)… Pokud je vstupní hodnota mimo definovaný rozsah, výstupní hodnota bude jedna z krajních hodnot (minimum nebo maximum)
- INFINITE… Pokud je vstupní hodnota mimo definovaný rozsah, výsledek je extrapolovaná hodnota
- STRICT… Pokud je vstupní hodnota mimo definovaný rozsah, výstupní hodnota bude NaN (not a number)
Příklady
Example 1: LINEAR(250, 0,0, 50,500) (Výsledek je 25°C)
Example 2: LINEAR(Co2, 400,0, 1200,1)
(Pokud je hodnota ze senzoru Co2 400ppm, výstup pro návrat vzduchu bude 0%.
Pokud je Co2 1200, výstup bude 100%. A pokud např. Co2=800, výstup bude 50%)Příklady pro různé hodnoty [type]:
- input = 11
- value1_input = 0, value1_output = 400
- value2_input = 10, value2_output = 2000
Výsledek pro různé parametry [type]:
- BOUNDS (výchozí hodnota) = 2000
- INFINITE = 2160
- STRICT = NaN
HYSTERESIS
Hysteresi lze použít k filtrování signálů tak, aby výstup reagoval pomaleji, než by jinak reagoval, a zohledňoval přitom historii systému. Například termostat řídící topení může zapnout topení, když teplota klesne pod A, ale nevypne ho, dokud teplota nestoupne nad B.
Vrací 0 nebo 1.
HYSTERESIS(value, upper_bound, lower_bound, upper_output, lower_output, last_value)Příklad: udržovat teplotu 20 °C v rozsahu hystereze 2 °C. Zapnout topení, když teplota klesne pod 18 °C a vypnout, když překročí 22 °C.
heater := HYSTERESIS(temperature, 22, 18, 0, 1, heater);Matematické funkce
MIN
Funkce MIN vrací nejmenší hodnotu ze zadaných číselných hodnot. Přijímá mezi 1 a 100 argumenty nebo jednu kolekci. Hodnoty NaN a NULL jsou ignorovány.
MIN( n1, n2, n3, …)
MIN( collection )Příklady:
MIN(40, 80) = 40
MIN(2, 2, 6) = 2
MIN(80, NAN) = 80
MIN(NAN, NAN) = NaN
VAR data := {10, 20, 30}; MIN(data) = 10
MIN({1, 2, 3}) = 1
MIN({1, NaN, 3}) = 1
VAR d1 := DATETIME(2014, 12, 8, 0, 0, 0, 0, DateTimeKind.Utc);
VAR d2 := DATETIME(2015, 12, 8, 0, 0, 0, 0, DateTimeKind.Utc);
MIN(d1, d2) ... Výsledek je d1MINSTRICT
Funkce MINSTRICT vrací minimum z poskytnutých číselných hodnot. Přijímá mezi 1 a 100 argumenty či jednu kolekci. Pokud je jakákoli hodnota NaN nebo NULL, funkce vrátí NaN/NULL.
MINSTRICT( n1, n2, n3, …)
MINSTRICT( collection )Příklady:
MINSTRICT(40, 80) = 40
MINSTRICT(2, 2, 6) = 2
MINSTRICT(80, NAN) = NaN
MINSTRICT(NAN, NAN) = NaN
VAR data := {10, 20, 30}; MINSTRICT(data) = 10
MINSTRICT({1, 2, 3}) = 1
MINSTRICT({1, NaN, 3}) = NaN
VAR d1 := DATETIME(2014, 12, 8, 0, 0, 0, 0, DateTimeKind.Utc);
VAR d2 := DATETIME(2015, 12, 8, 0, 0, 0, 0, DateTimeKind.Utc);
MINSTRICT(d1, NULL, d2) ... Výsledek je NULLMAX
Funkce MAX vrací maximum z poskytnutých číselných hodnot. Přijímá mezi 1 a 100 argumenty nebo jednu kolekci. Hodnoty NaN a NULL jsou ignorovány.
MAX( n1, n2, n3, …)
MAX( collection )Příklady:
MAX(40, 80) = 80
MAX(2, 2, 6) = 6
MAX(80, NAN) = 80
MAX(NAN, NAN) = NaN
VAR data := {10, 20, 30}; MAX(data) = 30
MAX({1, 2, 3}) = 3
MAX({1, NaN, 3}) = 3
VAR d1 := DATETIME(2014, 12, 8, 0, 0, 0, 0, DateTimeKind.Utc);
VAR d2 := DATETIME(2015, 12, 8, 0, 0, 0, 0, DateTimeKind.Utc);
MAX(d1, d2) ... Výsledek je d2MAXSTRICT
Funkce MAXSTRICT vrací maximum z poskytnutých číselných hodnot. Přijímá mezi 1 a 100 argumenty či jednu kolekci. Pokud je jakákoli hodnota NaN nebo NULL, funkce vrátí NaN/NULL.
MAXSTRICT( n1, n2, n3, …)
MAXSTRICT( collection )Příklady:
MAXSTRICT(40, 80) = 80
MAXSTRICT(2, 2, 6) = 6
MAXSTRICT(80, NAN) = NaN
MAXSTRICT(NAN, NAN) = NaN
VAR data := {10, 20, 30}; MAXSTRICT(data) = 30
MAXSTRICT({1, 2, 3}) = 3
MAXSTRICT({1, NaN, 3}) = NaN
VAR d1 := DATETIME(2014, 12, 8, 0, 0, 0, 0, DateTimeKind.Utc);
VAR d2 := DATETIME(2015, 12, 8, 0, 0, 0, 0, DateTimeKind.Utc);
MAXSTRICT(d1, NULL, d2) ... Výsledek je NULLAVG
Funkce AVG vypočítá průměr (mean) poskytnutých číselných hodnot. Přijímá mezi 1 a 100 argumenty nebo jednu kolekci. Hodnoty NaN jsou ignorovány.
AVG( n1, n2, n3, …)
AVG( collection )Příklady:
AVG(40, 80) = 60
AVG(2, 2, 6) = 3.3333
AVG(80, NAN) = 80
AVG(‘a’, ‘c’) = ‘b’
AVG(NAN, NAN) = NaN
VAR data := {10, 20, 30}; AVG(data) = 20
AVG({1, 2, 3}) = 2
AVG({1, NaN, 3}) = 2AVGSTRICT
Funkce AVGSTRICT vypočítá průměr (mean) poskytnutých číselných hodnot. Přijímá mezi 1 a 100 argumenty nebo jednu kolekci. Pokud je jakákoli hodnota není číslo, funkce vrátí NaN.
AVGSTRICT( n1, n2, n3, …)
AVGSTRICT( collection )Příklady:
AVGSTRICT(40, 80) = 60
AVGSTRICT(2, 2, 6) = 3.3333
AVGSTRICT(80, NAN) = NaN
AVGSTRICT(NAN, NAN) = NaN
VAR data := {10, 20, 30}; AVGSTRICT(data) = 20
AVGSTRICT({1, 2, 3}) = 2
AVGSTRICT({1, NaN, 3}) = NaNROUND
ROUND(value1) Vrátí zaokrouhlenou hodnotu.
Příklad 1: ROUND(2.01) (Výsledek je 2)
Příklad 2: ROUND(2.49) (Výsledek je 2)
Příklad 3: ROUND(2.5) (Výsledek je 3)
Příklad 4: ROUND(2.99) (Výsledek je 3)ABS
Funkce ABS vrací absolutní hodnotu (tj. modul) libovolného zadaného čísla.
ABS(number)Příklady:
ABS(100) ... 100
ABS(-100) ... 100DEWPOINT
DEWPOINT(temperature, relativeHumidity)Vrací teplotu rosného bodu vzhledem k aktuální teplotě a relativní vlhkosti. Rosný bod je počítán podle této rovnice.
Příklad 1: DEWPOINT(20, 0.50) (Výsledek je ~9.26)
Příklad 2: DEWPOINT(0, 1.00) (Výsledek je 0)POWER
Funkce POWER vypočítá dané číslo na zadanou mocninu.
POWER(number, power)Příklady:
- POWER(2,3) … 2^3 = 8
- POWER(10, -3) … 0,001
- POWER(25, 0) … 1
MOD
Funkce MOD vrací zbytek po dělení dvou zadaných čísel.
MOD(number, divisor)Argumenty:
- number - číslo, které má být děleno.
- divisor - hodnota, kterou se číslo dělí.
Příklady:
- MOD(6, 4) … 2
- MOD(6, 2.5) … 1
CEIL
Funkce CEIL zaokrouhluje zadané číslo od nuly na nejbližší násobek daného čísla.
CEIL(number, significance)Argumenty:
- number - číslo, které má být zaokrouhleno.
- significance (optional) - násobek významnosti, na který má být zadané číslo zaokrouhleno. Pokud významnost není uvedena, je rovna 1 (obecně by měla mít stejné aritmetické znaménko – kladné nebo záporné – jako vstupní číslo).
Příklady:
- CEIL(22.25,0.1) … 22.3
- CEIL(22.25,1) … 23
- CEIL(22.25) … 23
- CEIL(-22.25,-1) … -23
- CEIL(-22.25,1) … -22
- CEIL(-22.25) … -22
- CEIL(-22.25,-5) … -25
FLOOR
Funkce FLOOR zaokrouhluje zadané číslo směrem k nule na nejbližší násobek dané významnosti.
FLOOR(number, significance)Argumenty:
- number - číslo, které má být zaokrouhleno.
- significance (optional) - násobek významnosti, na který má být číslo zaokrouhleno. Pokud významnost není uvedena, je rovna 1 (obecně by měla mít stejné aritmetické znaménko jako vstup).
Příklady:
- FLOOR(22.25,0.1)… 22.2
- FLOOR(22.25,1) … 22
- FLOOR(22.25) … 22
- FLOOR(-22.25,-1) … -22
- FLOOR(-22.25,1) … -23
- FLOOR(-22.25) … -23
- FLOOR(-22.25,-5) … -20
RAND
Funkce RAND generuje náhodné reálné číslo mezi 0 a 1.
RAND()Příklady:
- RAND()
RANDINT
Funkce RANDINT generuje náhodné celé číslo mezi dvěma zadanými celými čísly.
RANDINT(bottom, top)Příklady:
- RANDINT(1,5)
- RANDINT(-2,2)
SIGN
Funkce SIGN vrací aritmetické znaménko (+1, -1 nebo 0) zadaného čísla. Tj. pokud je číslo kladné, funkce vrací +1, pokud záporné, vrací -1 a pokud je nula, vrací 0.
SIGN(number)Příklady:
- SIGN(100) … 1
- SIGN(0) … 0
- SIGN(-100) … -1
SQRT
Funkce SQRT vypočítá kladnou druhou odmocninu zadaného čísla.
SQRT(number)Příklady:
- SQRT(25) … 5
LOG
Funkce LOG vypočítá logaritmus zadaného čísla o zvoleném základu.
LOG(number, base)Argumenty:
- number - kladné reálné číslo, jehož logaritmus chceme vypočítat.
- base (optional) - volitelný argument určující základ, ke kterému má být logaritmus vypočítán. Pokud argument není uveden, používá se výchozí hodnota 10.
Příklady:
- LOG(4,0.5) … -2
- LOG(100) … 2
LN
Funkce LN vypočítá přirozený logaritmus zadaného čísla.
LN(number)kde number je kladné reálné číslo, jehož přirozený logaritmus chceme vypočítat.
Příklady:
- LN(100) … 4,60517
Bitové operace
GETBIT
Vrací hodnotu bitu na zadané pozici.
GETBIT(number, bit_position)Argumenty:
- number - číslo, ze kterého má být hodnota konkrétního bitu vyextrahována
- bit_position - pozice bitu, počítaná od 0 z pravé strany
Příklady:
- GETBIT(2, 0) → první bit čísla 2 (0b0010) je 0
- GETBIT(4,2) → třetí bit čísla 4 (0b0100) je 1
GETBITS
Vrací hodnotu zadaného počtu bitů na konkrétní pozici.
GETBITS(number, start_bit, number_of_bits)Příklady:
- GETBITS(216, 3, 2) → číslo 216 = 0b1101 1000; čtvrtý bit z pravé strany je 1, pátý bit je 1, takže výsledek je 0b0011 = 3
- GETBITS(0xFF, 0, 4) → číslo 0xFF = 255 = 0b1111 1111; prvních 4 bitů z pravé strany je 0b1111 = 0xF = 15
GETBYTE
Vrací hodnotu bajtu na zadané pozici v daném čísle.
GETBYTE( number, byte_position )Argumenty:
- number - číslo, ze kterého má být hodnota konkrétního bajtu vyextrahována
- byte_position - pozice bajtu, počítaná od 0 z pravé strany
Příklady:
GETBYTE(256, 0) → 0001 0000 0000 → 0
GETBYTE(256, 1) → 0001 0000 0000 → 1
GETBYTE(259, 0) → 0001 0000 0011 → 3SETBYTE
Přiřadí novou hodnotu do zadaného bajtu v uvedeném čísle a vrátí nové číslo.
SETBYTE( number, byte_position, new_value )Příklady:
SETBYTE(1, 0, 0) → 0
SETBYTE(256, 0, 255) → 511
SETBYTE(256, 1, 1) → 256
SETBYTE(259, 1, 2) → 515SETBIT
Přiřadí novou hodnotu k zadanému bitu v daném čísle a vrátí nové číslo.
SETBIT(number, bit_position, new_value)Argumenty:
- number - číslo, které má být upraveno
- bit_position - pozice bitu, počítaná od 0 z pravé strany
- new_value - 0 nebo 1 – hodnota, která bude nastavena na určený bit
Příklady:
- SETBIT(1, 1, 1) → 3
- SETBIT(3, 1, 1) → 3
- SETBIT(4, 2, 0) → 4
- SETBIT(12, 1, 0) → 14
SETBITS
Přiřadí novou hodnotu vybraným bitům v uvedeném čísle a vrátí nové číslo.
SETBITS(number, start_bit, number_of_bits, new_value)Příklady:
- SETBITS(192, 4, 2, 3) → 240
- SETBITS(192, 5, 2, 3) → 224
« (LEVÉ POSUNUTÍ BITŮ)
8 << 2 (32)Excel: BITLSHIFT(number, shift_amount)
» (PRAVÉ POSUNUTÍ BITŮ)
32 >> 2 (8)Excel: BITRSHIFT(number, shift_amount)
& (BITWISE AND)
3 & 1 (1)Excel: BITAND(number1, number2)
| (BITWISE OR)
2 | 1 (3)Excel: BITOR(number1, number2)
Podívejte se na příklad operací s bity v Google Sheets: https://docs.google.com/spreadsheets/d/1hF5FMpGMJbgYh-YLwWrq2n186_ATyGyLUb689__IhLY/edit?usp=sharing
Nebo vyzkoušejte interaktivní nástroj na http://bitwisecmd.com/
Text, řetězce a pole bajtů
LENGTH
Vrací délku objektu nebo počet bajtů. Objektem může být číslo, boolean, řetězec nebo kolekce.
LENGTH( object )Příklady:
LENGTH(“Hello World”) (Result is 11)
LENGTH(“40”) (Result is 2)
LENGTH(40) (Result is 8)
LENGTH(BYTECOLLECTION(“010203”)) (Result is 3)BYTECOLLECTION
Vytvoří Collection
BYTECOLLECTION( bytes )Příklady:
BYTECOLLECTION(“010203”) (Result is Collection<UInt8> {01, 02, 03})
BYTECOLLECTION(“aa, be1-1,fe”) (Result is Collection<UInt8> {aa be 11 fe})INDEXOF
Vrací index určeného prvku v řetězci nebo v kolekci. Vrací -1, pokud prvek nelze nalézt.
INDEXOF( string/collection, element )Příklady:
INDEXOF("Hello", “H”) (Result is 0)
INDEXOF("Hello World", “Wor”) (Result is 6)
INDEXOF("Hello World", “Wor”) (Result is 6)
INDEXOF("Hello World", “or12”) (Result is -1)
INDEXOF(BYTECOLLECTION("ab cd ee ff 01 02"), 2) (Result is 5)
INDEXOF({1, 2, 3}, 3) (Result is 2)COPY
Vrátí kopii zadaného řetězce nebo kolekce (nebo jejich části).
COPY( string/collection, startIndex, length)Příklady:
COPY("Hello") (Result is “Hello”)
COPY("Hello World", 2) (Result is “llo World”)
COPY("Hello World", 2, 4) (Result is “llo ”)
COPY(BYTEARRAY("01020304")) (Result is byte array 01020304)
COPY(BYTEARRAY("01020304"), 2, 1) (Result is byte array 03)REPLACE
Vrací nový řetězec nebo kolekci, ve které jsou všechny výskyty zadané hodnoty nahrazeny novou hodnotou.
REPLACE( string/collection, oldValue, newValue)Příklady:
REPLACE("Hello", “l”, “”) (Result is “Heo”)
REPLACE("Hello", “lo”, “22”) (Result is “Hel22”)
REPLACE(BYTECOLLECTION(“050607”), 5, 9) (Result is Collection<UInt8>{09, 06, 07})SPLIT
Rozdělí řetězec na podřetězce na základě oddělovačů.
SPLIT( string, string )
SPLIT( string, char )
SPLIT( string, Collection<string> )
SPLIT( string, Collection<char> )Příklady:
SPLIT("1;2;3;4", “;”) (Result is Collection<String>{“1”, “2”, “3”, “4”})
SPLIT("1;2;3.4", “2;”) (Result is Collection<String>{“1;”, “3.4”})
SPLIT("1;2;3.4", {“2”, “3.”}) (Result is Collection<String>{“1;”, “;”, “4”})COMPARE
Porovnává 2 řetězce a vrací celé číslo, které naznačuje jejich relativní pozici v pořadí třídění.
COMPARE( string, string, CompareOptions )Příklady:
COMPARE("abc", “abc”) (Result is 0)
COMPARE("abc", “ABC”) (Result is 32)
COMPARE("abc", “ABC”, CompareOptions.IgnoreCase) (Result is 0)APPEND
Přidá hodnotu k řetězci nebo kolekci a vrátí nový objekt s přidanou hodnotou.
APPEND( string, string )
APPEND( Collection, value )Příklady:
APPEND({1, 2}, 3) (Result is Collection<Double>{1, 2, 3})
APPEND("abc", “def”) (Result is “abcdef”)INSERT
Vloží hodnotu do kolekce nebo řetězce. Vrací kolekci nebo řetězec se vloženou hodnotou.
INSERT( collection, index, value )
INSERT( string, index, value )Příklady:
INSERT(“Hello”, 5, “ World”) (Result is “Hello World”)
INSERT(“Hello”, 1, “i”) (Result is “Hiello”)
INSERT({1, 2, 4}, 2, 3) (Result is Collection<Double>{1, 2, 3, 4})REMOVEAT
Odebere prvky z kolekce nebo řetězce na základě indexu prvku a délky. Vrací kolekci nebo řetězec bez zadaných prvků.
REMOVEAT( collection, index, length )
REMOVEAT( string, index, length )Příklady:
REMOVEAT(“Hello”, 1) (Result is “Hllo”)
REMOVEAT(“Hello”, 3, 2) (Result is “Ho”)
REMOVEAT({1, 2, 3, 4}, 2) (Result is Collection<Double>{1, 2, 4})
REMOVEAT({1, 2, 3, 4}, 2, 2) (Result is Collection<Double>{1, 2})GETAT
Získá hodnotu prvku z kolekce nebo řetězce na základě zadaného indexu.
GETAT( collection, index )
GETAT( string, index )Příklady:
GETAT(“Hello”, 2) (Result is “l”)
GETAT({1, 2, 4}, 2) (Result is 4)SETAT
Nastaví hodnotu prvku v kolekci nebo řetězci na uvedený index.
SETAT( collection, index, value )
SETAT( string, index, value )Příklady:
SETAT(“Hello”, 1, “a”) (Result is “Hallo”)
SETAT(“Hello”, 4, “o World”) (Result is “Hello World”)
SETAT({1, 2, 4}, 2, 3) (Result is Collection<Double>{1, 2, 3})ENCODE
Kóduje zadaný řetězec do vybraného formátu a vrací nový řetězec.
ENCODE( string, format )Podporované formáty:
- XML
- Base64
Příklady:
ENCODE("Hello", “xml”) (Result is “Hello”)
ENCODE("<Hello id=1>", “xml”) (Result is “<Hello id=1>”)
ENCODE("Hello", “base64”) (Result is “SGVsbG8=”)DECODE
Dekóduje zadaný řetězec zvoleným formátem a vrací nový řetězec.
DECODE( string, format )Podporované formáty:
- XML
- Base64
Příklady:
DECODE("Hello", “xml”) (Result is “Hello”)
DECODE("<Hello id=1>", “xml”) (Result is “<Hello id=1>”)
DECODE("SGVsbG8=", “base64”) (Result is “Hello”)EQUALS
Porovnává dvě čísla s plovoucí desetinnou čárkou. Čísla jsou považována za rovná, pokud | n1 - n2 | < epsilon. Výchozí hodnota prahu (*epsilon) je 0.005 a je volitelným argumentem.
EQUALS( number1, number2, epsilon=0.005 )Příklady:
EQUALS(1.33, 1.33) 1.0 (true)
EQUALS(1.333, 1.3335) 1.0 (true)
EQUALS(1.333, 1.338) 1.0 (false)
EQUALS(1.333, 1.338, 0.01) 1.0 (true)
EQUALS(NAN, NAN) 1.0 (true)Třídění
Existuje několik variant ORDER:
Vzestupně – ORDER, ORDERSTRICT – ORDERINDEX, ORDERINDEXSTRICT
Sestupně – ORDERDESC, ORDERDESCSTRICT – ORDERINDEXDESC, ORDERINDEXDESCSTRICT
ORDER
Funkce ORDER třídí poskytnuté vstupní hodnoty vzestupně a vrací je v nové kolekci. Přijímá n hodnot (až 100 argumentů) nebo jednu kolekci. Hodnoty nemusí být numerické, musí však být porovnatelné (např. čísla, TIMESPAN, DATETIME, řetězce). Smíšené typy (např. čísla a řetězce) nejsou povoleny. Hodnoty NaN a NULL jsou ignorovány a ve vrácené kolekci se nevyskytují.
ORDER( n1, n2, n3 , … )
ORDER( collection )Příklady:
ORDER(3, 1, 2) = {1, 2, 3}
ORDER(1) = {1}
ORDER(3, NaN, 2, NaN) = {2, 3}
ORDER(NaN) = {}
ORDER('Z', 'a', 'X') = {'X', 'Z', 'a'}
ORDER(“str1”, “STR2”, “stR1”) = {"STR2", "stR1", "str1"}
ORDER(“str1”, NULL, “STR2”, “stR1”) = {"STR2", "stR1", "str1"}
ORDER(TIMESPAN(0,0,0,0,100), TIMESPAN(0,0,0,0,99)) = {TIMESPAN(0,0,0,0,99), TIMESPAN(0,0,0,0,100)}
ORDER(NULL, TIMESPAN(0,0,0,0,99)) = {TIMESPAN(0,0,0,0,99)}ORDERINDEX
Funkce ORDERINDEX třídí poskytnuté vstupní hodnoty vzestupně podobně jako ORDER. Namísto vrácení seřazených hodnot vrací kolekci indexů, které určují polohy původních hodnot v seřazeném pořadí. Přijímá n hodnot (až 100 argumentů) nebo jednu kolekci. Hodnoty nemusí být numerické, musí však být porovnatelné. Smíšené typy nejsou povoleny. Hodnoty NaN a NULL jsou ignorovány a ve vrácené kolekci se nevyskytují.
ORDERINDEX( n1, n2, n3 , … )
ORDERINDEX( collection )Příklady:
ORDERINDEX(3, 1, 2) = {1, 2, 0}
ORDERINDEX(1) = {0}
ORDERINDEX(3, NaN, 2, NaN) = {2, 0}
ORDERINDEX(NaN) = {}
ORDERINDEX('Z', 'a', 'X') = {2, 0, 1}
ORDERINDEX(“str1”, “STR2”, “stR1”) = {1, 2, 0}
ORDERINDEX(“str1”, NULL, “STR2”, “stR1”) = {2, 3, 0}
ORDERINDEX(TIMESPAN(0,0,0,0,100), TIMESPAN(0,0,0,0,99)) = {1, 0}
ORDERINDEX(NULL, TIMESPAN(0,0,0,0,99)) = {1}ORDERSTRICT
Funkce ORDERSTRICT třídí poskytnuté vstupní hodnoty vzestupně a vrací je v nové kolekci. Přijímá n hodnot (až 100 argumentů) nebo jednu kolekci. Hodnoty nemusí být numerické, ale musí být porovnatelné. Smíšené typy nejsou povoleny. Hodnoty NaN a NULL jsou zahrnuty a vždy se řadí na první místa výsledku.
ORDERSTRICT( n1, n2, n3 , … )
ORDERSTRICT( collection )Příklady:
ORDERSTRICT(3, 1, 2) = {1, 2, 3}
ORDERSTRICT(1) = {1}
ORDERSTRICT(3, NaN, 2, NaN) = {NaN, NaN, 2, 3}
ORDERSTRICT(NaN) = {NaN}
ORDERSTRICT('Z', 'a', 'X') = {'X', 'Z', 'a'}
ORDERSTRICT(“str1”, “STR2”, “stR1”) = {"STR2", "stR1", "str1"}
ORDERSTRICT(“str1”, NULL, “STR2”, “stR1”) = {NULL, "STR2", "stR1", "str1"}
ORDERSTRICT(TIMESPAN(0,0,0,0,100), TIMESPAN(0,0,0,0,99)) = {TIMESPAN(0,0,0,0,99), TIMESPAN(0,0,0,0,100)}
ORDERSTRICT(NULL, TIMESPAN(0,0,0,0,99)) = {NULL, TIMESPAN(0,0,0,0,99)}ORDERINDEXSTRICT
Funkce ORDERINDEXSTRICT třídí poskytnuté vstupní hodnoty vzestupně, podobně jako ORDERSTRICT. Místo vrácení seřazených hodnot vrací kolekci indexů určujících polohy původních hodnot v seřazeném pořadí. Přijímá n hodnot (až 100 argumentů) nebo jednu kolekci. Hodnoty nemusí být numerické, ale musí být porovnatelné. Smíšené typy nejsou povoleny. Hodnoty NaN a NULL jsou zahrnuty a vždy se řadí na první místa výsledku.
ORDERINDEXSTRICT( n1, n2, n3 , … )
ORDERINDEXSTRICT( collection )Příklady:
ORDERINDEXSTRICT(3, 1, 2) = {1, 2, 0}
ORDERINDEXSTRICT(1) = {0}
ORDERINDEXSTRICT(3, NaN, 2, NaN) = {1, 3, 2, 0}
ORDERINDEXSTRICT(NaN) = {0}
ORDERINDEXSTRICT('Z', 'a', 'X') = {2, 0, 1}
ORDERINDEXSTRICT(“str1”, “STR2”, “stR1”) = {1, 2, 0}
ORDERINDEXSTRICT(“str1”, NULL, “STR2”, “stR1”) = {1, 2, 3, 0}
ORDERINDEXSTRICT(TIMESPAN(0,0,0,0,100), TIMESPAN(0,0,0,0,99)) = {1, 0}
ORDERINDEXSTRICT(NULL, TIMESPAN(0,0,0,0,99)) = {0, 1}ORDERDESC
Funkce ORDERDESC třídí poskytnuté vstupní hodnoty sestupně a vrací je v nové kolekci. Hodnoty nemusí být numerické, ale musí být porovnatelné. Smíšené typy nejsou povoleny. Hodnoty NaN a NULL jsou ignorovány a ve vrácené kolekci se nevyskytují.
ORDERDESC( n1, n2, n3 , … )
ORDERDESC( collection )Příklady:
ORDERDESC(3, 1, 2) = {3, 2, 1}
ORDERDESC(1) = {1}
ORDERDESC(3, NaN, 2, NaN) = {3, 2}
ORDERDESC(NaN) = {}
ORDERDESC('Z', 'a', 'X') = {'a', 'Z', 'X'}
ORDERDESC(“str1”, “STR2”, “stR1”) = {"str1", "stR1", "STR2"}
ORDERDESC(“str1”, NULL, “STR2”, “stR1”) = {"str1", "stR1", "STR2"}
ORDERDESC(TIMESPAN(0,0,0,0,100), TIMESPAN(0,0,0,0,99)) = {TIMESPAN(0,0,0,0,100), TIMESPAN(0,0,0,0,99)}
ORDERDESC(NULL, TIMESPAN(0,0,0,0,99)) = {TIMESPAN(0,0,0,0,99)}ORDERINDEXDESC
Funkce ORDERINDEXDESC třídí poskytnuté vstupní hodnoty sestupně, podobně jako ORDERDESC. Místo vrácení seřazených hodnot vrací kolekci indexů určujících polohy původních hodnot v seřazeném pořadí. Hodnoty nemusí být numerické, ale musí být porovnatelné. Smíšené typy nejsou povoleny. Hodnoty NaN a NULL jsou ignorovány a ve vrácené kolekci se nevyskytují.
ORDERINDEXDESC( n1, n2, n3 , … )
ORDERINDEXDESC( collection )Příklady:
ORDERINDEXDESC(3, 1, 2) = {0, 2, 1}
ORDERINDEXDESC(1) = {0}
ORDERINDEXDESC(3, NaN, 2) = {0, 2}
ORDERINDEXDESC(NaN) = {}
ORDERINDEXDESC('Z', 'a', 'X') = {1, 0, 2}
ORDERINDEXDESC(“str1”, “STR2”, “stR1”) = {0, 2, 1}
ORDERINDEXDESC(“str1”, NULL, “STR2”, “stR1”) = {0, 3, 2}
ORDERINDEXDESC(TIMESPAN(0,0,0,0,100), TIMESPAN(0,0,0,0,99)) = {0, 1}
ORDERINDEXDESC(NULL, TIMESPAN(0,0,0,0,99)) = {1}ORDERDESCSTRICT
Funkce ORDERDESCSTRICT třídí poskytnuté vstupní hodnoty sestupně a vrací je v nové kolekci. Přijímá n hodnot (až 100 argumentů) nebo jednu kolekci. Hodnoty nemusí být numerické, ale musí být porovnatelné. Smíšené typy nejsou povoleny. Hodnoty NaN a NULL jsou zahrnuty a vždy se řadí na první místa výsledku.
ORDERDESCSTRICT( n1, n2, n3 , … )
ORDERDESCSTRICT( collection )Příklady:
ORDERDESCSTRICT(3, 1, 2) = {3, 2, 1}
ORDERDESCSTRICT(1) = {1}
ORDERDESCSTRICT(3, NaN, 2, NaN) = {NaN, NaN, 3, 2}
ORDERDESCSTRICT(NaN) = {NaN}
ORDERDESCSTRICT('Z', 'a', 'X') = {'a', 'Z', 'X'}
ORDERDESCSTRICT(“str1”, “STR2”, “stR1”) = {"str1", "stR1", "STR2"}
ORDERDESCSTRICT(“str1”, NULL, “STR2”, “stR1”) = {NULL, "str1", "stR1", "STR2"}
ORDERDESCSTRICT(TIMESPAN(0,0,0,0,100), TIMESPAN(0,0,0,0,99)) = {TIMESPAN(0,0,0,0,100), TIMESPAN(0,0,0,0,99)}
ORDERDESCSTRICT(NULL, TIMESPAN(0,0,0,0,99)) = {NULL, TIMESPAN(0,0,0,0,99)}ORDERINDEXDESCSTRICT
Funkce ORDERINDEXDESCSTRICT třídí poskytnuté vstupní hodnoty sestupně, podobně jako ORDERDESCSTRICT. Místo vrácení seřazených hodnot vrací kolekci indexů určujících polohy původních hodnot v seřazeném pořadí. Hodnoty nemusí být numerické, ale musí být porovnatelné. Smíšené typy nejsou povoleny. Hodnoty NaN a NULL jsou zahrnuty a vždy se řadí na první místa výsledku.
ORDERINDEXDESCSTRICT( n1, n2, n3 , … )
ORDERINDEXDESCSTRICT( collection )Příklady:
ORDERINDEXDESCSTRICT(3, 1, 2) = {0, 2, 1}
ORDERINDEXDESCSTRICT(1) = {0}
ORDERINDEXDESCSTRICT(3, NaN, 2, NaN) = {1, 3, 0, 2}
ORDERINDEXDESCSTRICT(NaN) = {0}
ORDERINDEXDESCSTRICT('Z', 'a', 'X') = {1, 0, 2}
ORDERINDEXDESCSTRICT(“str1”, “STR2”, “stR1”) = {0, 2, 1}
ORDERINDEXDESCSTRICT(“str1”, NULL, “STR2”, “stR1”) = {1, 0, 3, 2}
ORDERINDEXDESCSTRICT(TIMESPAN(0,0,0,0,100), TIMESPAN(0,0,0,0,99)) = {0, 1}
ORDERINDEXDESCSTRICT(NULL, TIMESPAN(0,0,0,0,99)) = {0, 1}Datum a čas
DATETIME
Vytvoří objekt DateTime. Vlastnost DateTime.Ticks je počet milisekund od 1.1.0001 00:00:00.000. DateTime má vlastnosti: TICKS, YEAR, MONTH, DAY, DAYOFWEEK, DAYOFYEAR, HOUR, MINUTE, SECOND, MILLISECOND, KIND, UTCDATETIME, LOCALDATETIME, UNIXTIME.
DATETIME( ticks, DateTimeKind )
DATETIME( string, format )
DATETIME( string, DateTimeKind )
DATETIME( year, month, day, hour, minute, second, millisecond, DateTimeKind )Příklady:
VAR date:= DATETIME(2014, 12, 8, 23, 54, 12, 456);
VAR date:= DATETIME(2014, 12, 8, 23, 54, 12, 456, DateTimeKind.Local);
VAR date:= DATETIME(2014, 12, 8, 23, 54, 12, 456, DateTimeKind.Utc);
VAR date:= DATETIME("13:36");
VAR date:= DATETIME("2022-08-03T07:39:03.688133+05:00");
VAR date:= DATETIME("03.01 2008 10:00");
VAR date:= DATETIME("mar.01 2008 10:00");
VAR date:= DATETIME("03.01 2008 10:00", "dd.MM yyyy hh:mm");
VAR date:= DATETIME(518832000);
VAR date:= DATETIME(518832000, DateTimeKind.Utc);
VAR date := NOW(); date.YEAR := 1999;
DATETIME date; date.UNIXTIME := 123456;NOW
Vrací DateTime objekt nastavený na aktuální datum a čas v místním časovém pásmu.
NOW()Příklady:
VAR now := NOW();TIMESPAN
Funkce TIMESPAN vytváří proměnnou, která reprezentuje délku času, udanou v dnech, hodinách, minutách, sekundách a milisekundách. TIMESPAN má vlastnosti pro přímý přístup ke každé složce časového intervalu: DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS. TIMESPAN má i vlastnosti pro přístup k celkovým hodnotám času v konkrétních jednotkách (včetně zlomkových hodnot): TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDS.
TIMESPAN( days, hours, minutes, seconds, milliseconds )Příklady:
VAR t := TimeSpan(1, 2, 3, 4, 0);
t.TOTALSECONDS
Výsledek ... 93784LOCALTIMEZONE
Vrací lokální časové pásmo jako počet milisekund od UTC času.
LOCALTIMEZONE()Příklady:
VAR timezoneDiff := LOCALTIMEZONE();DATETIMEADD
Přidá zadaný počet let, měsíců, dnů, hodin, minut, sekund a milisekund k existujícímu DateTime a vrátí nový DateTime.
DATETIMEADD(datetime, years, months, days, hours, minutes, seconds, milliseconds)Příklady:
VAR dt := NOW(); VAR yearBefore := DATETIMEADD(dt, -1);Převody datových typů
TODOUBLE
Převede řetězec na číslo. V případě chyby vrátí NaN.
TODOUBLE( text )Příklady:
TODOUBLE(“232”) ... 232
TODOUBLE(“-192.332”) ... -192.332
TODOUBLE(“some text”) ... NaNTOSTRING
Vrací řetězcovou reprezentaci zadané hodnoty nebo kolekce dle zvoleného kódování. Kódování je volitelné (ve výchozím nastavení se používá iso-8859-1).
TOSTRING(value, encoding)Příklady:
TOSTRING(192, “X”) … Výsledek = “C0”
TOSTRING(192, “X4”) … Výsledek = “00C0”
TOSTRING(192, “F4”) … Výsledek = “123.3400”
TOSTRING(192, “F0”) … Výsledek = “123”TOSTRING(BYTECOLLECTION("48656c6c6f")) (Result is “Hello”)
TOSTRING(BYTECOLLECTION(\"48656c6c6f\"), “iso-8859-1”) (Result is “Hello”)
TOSTRING(192, “X4”) (Result is “00C0”)TOBCD
Převede zadané číslo do formátu binárně kódovaných desítek (BCD). Schéma kódování je BCD-8421.
TOBCD(number)Příklady:
TOBCD(1) ... 1
TOBCD(9) ... 9
TOBCD(10) ... 16FROMBCD
Dekóduje zadané číslo, které je zakódováno ve formátu binárně kódovaných desítek (BCD). Schéma kódování je BCD-8421.
FROMBCD(number)Příklady:
FROMBCD(16) ... 10
FROMBCD(32) ... 20TOBYTEARRAY
Převede řetězec na bajtové pole dle zvoleného kódování. Kódování je volitelné (ve výchozím nastavení se používá iso-8859-1).
TOBYTEARRAY( string, encoding )Příklady:
TOBYTEARRAY("Hello") (Result is byte array 48656c6c6f)RGBTOHSV
Převede definici barvy v RGB a vrátí barvu ve formátu Hue / Saturation / Brightness.
RGBTOHSV( r, g, b ) (r, g, b ... 0 - 0xFF)Příklad:
VAR HSVColor := RGBTOHSV( r, g, b );
VAR saturation := HSVColor.Saturation; (Saturation ... 0 - 1)
VAR hue := HSVColor.Hue; (Hue ... 0 - 360)
VAR value := HSVColor.Value; (Value ... 0 - 1)HSVTORGB
Převede barvu definovanou pomocí Hue / Saturation / Brightness a vrátí barvu v RGB formátu.
HSVTORGB( hue, saturation, value )Příklad:
VAR color := HSVTORGB( hue, saturation, 1)
VAR red := color.red; (red ... 0 - 0xFF)
VAR green := color.green; (green ... 0 - 0xFF)
VAR blue := color.blue; (blue ... 0 - 0xFF)Parsovací funkce
PARSETEXT
Vrací část vstupního textu na základě levého a pravého vyhledávacího vzoru.
PARSETEXT( input, left_pattern, right_pattern)Příklady:
PARSETEXT(“Lorem ipsum dolor sit amet”, “ipsum”, “amet”) (Result is “dolor sit”)
PARSETEXT(“<temp>12.2</temp>”, “<temp>”, “</temp”) (Result is 12.2)
PARSETEXT(“<temp>12.2</temp>”, “<temp>”) (Result is 12.2)
PARSETEXT(“status:ok,error:none”, “status:”) (Result is “ok”)
PARSETEXT(“Lorem ipsum dolor sit amet”, “ipsum”) (Result is “dolor”)
PARSETEXT(“Lorem ipsum dolor sit amet”, “ipsum…sit”) (Result is “amet”)
PARSETEXT(“Lorem ipsum dolor sit amet consectetur adipiscing”, “ipsum…sit”, “adipiscing”) (Result is “amet consectetur”)PARSEJSON
Vrací hodnotu prvku z textu ve formátu JSON. Prvek je určen jsonPath.
PARSEJSON( json_string, json_path, ignore_error)Příklady:
S json =
| |
PARSEJSON(json, “firstName”) (Result is “John”)
PARSEJSON(json, “address.city”) (Result is “Nara”)
PARSEJSON(json, “address.country”) (error)
PARSEJSON(json, “address.country”, 0) (error)
PARSEJSON(json, “address.city”, 1) (Result is null)PARSEXML
Vrací hodnotu prvku z XML řetězce. Prvek je určen xml path.
PARSEXML( xml_string, xml_path)Příklady:
S XML =
| |
PARSEXML(xml, "//catalog/book[1]/price") (Result is 44.95)
PARSEXML(xml, "//book[2]/title") (Result is "Midnight Rain")
PARSEXML(xml, "//book[1]/@id") (Result is "bk101")
PARSEXML(xml, "//catalog/magazine[1]/price") (Result is null)Pokud XML obsahuje jmenné prostory, musíte u prvků uvádět kompletní názvy včetně jmenného prostoru, např. PARSEXML(xml, “//DIDL-Lite:container[dc:title=‘My Playlist’’]/DIDL-Lite:res”);
Packet parser
Pro více informací viz stránku o Packet parser
SENDHTTPREQUEST
SENDDATA
MQTTPUBLISH
FTPDOWNLOAD
FTPUPLOAD
COMPLETESERVICEATTRIBUTE
COMPLETESERVICEACTION
Modbus
Modbus