TapHome Icon

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.

Syntax Highlighting Example

Základy

Přiřazení

1
Mu := Se + 2;

Víceřádkový algoritmus

Každý řádek je oddělen středníkem.

1
2
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.
1
2
3
(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.

1
VAR X := 5;

IF klauze

Excel styl

1
2
IF(logical_expression, value_if_true, value_if_false);
IF(logical_expression, value_if_true);

Víceřádkový styl

1
2
3
4
5
6
7
IF X < 5
  RETURN(1);
ELSEIF X > 10
  RETURN(3);
ELSE
  RETURN(0);
END

SWITCH

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í.

1
SWITCH(expression, case1, value1, [case2, ...], [value2, ...], default_value)

Příklad:

1
2
3
4
5
6
7
8
9
SWITCH( MODBUSR(H, 168, UInt16),
  0, 0,
  0x0002, 1,
  0x0004, 2,
  0x0008, 3,
  0x0010, 4,
  0x0040, 5,
  0x0800, 6,
  NaN)
SWITCH Example

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
int i := 10;
while i > 0
    i := i - 1;
    
    if i > 5
        continue;
    else
        break;
    end
loop

Příklad s podmínkou na konci:

1
2
3
4
int i := 10;
do
    i := i + i;
loop while i < 10

NaN (not a number) hodnota

NaN může být vrácena jako hodnota v případě, že skutečná hodnota není známa.

1
2
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:

1
ISNULL(object)

Sleep

Pozastaví skript na uvedený počet milisekund. Používejte jen ve velmi specifických případech.

1
SLEEP(5);

Komentáře

Nový řádek začínající znakem #.

1
# 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

1
2
0xA0A0   (41120)
0xa0a0   (41120)

Binární čísla

0b1010 = 10

1
0b10101010   (170)

Matematické výrazy

+, -, *, /

1
(20.5 + 9.5) / 2    (15)

Logické výrazy

AND, OR, !, =, !=, >, <

1
2
(!IsRaining OR (Wind>30))
MultiValueSwitchState != 2 (není rovno 2)

Funkce

LINEAR

Vrací lineárně upravenou hodnotu – lineární interpolaci.

1
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)
GRAPH

Příklady

1
2
3
4
5
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.

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.

1
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.

1
2
MIN( n1, n2, n3, …)
MIN( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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 d1

MINSTRICT

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.

1
2
MINSTRICT( n1, n2, n3, …)
MINSTRICT( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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 NULL

MAX

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.

1
2
MAX( n1, n2, n3, …)
MAX( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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 d2

MAXSTRICT

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.

1
2
MAXSTRICT( n1, n2, n3, …)
MAXSTRICT( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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 NULL

AVG

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.

1
2
AVG( n1, n2, n3, …)
AVG( collection )

Příklady:

1
2
3
4
5
6
7
8
9
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})						= 2

AVGSTRICT

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.

1
2
AVGSTRICT( n1, n2, n3, …)
AVGSTRICT( collection )

Příklady:

1
2
3
4
5
6
7
8
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})						= NaN

ROUND

1
ROUND(value1)    

Vrátí zaokrouhlenou hodnotu.

1
2
3
4
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.

1
ABS(number)

Příklady:

1
2
ABS(100)  ...   100
ABS(-100)   ...   100

DEWPOINT

1
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.

1
2
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.

1
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.

1
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.

1
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.

1
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.

1
RAND()

Příklady:

  • RAND()

RANDINT

Funkce RANDINT generuje náhodné celé číslo mezi dvěma zadanými celými čísly.

1
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.

1
SIGN(number)

Příklady:

  • SIGN(100) … 1
  • SIGN(0) … 0
  • SIGN(-100) … -1

SQRT

Funkce SQRT vypočítá kladnou druhou odmocninu zadaného čísla.

1
SQRT(number)

Příklady:

  • SQRT(25) … 5

LOG

Funkce LOG vypočítá logaritmus zadaného čísla o zvoleném základu.

1
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.

1
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.

1
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.

1
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.

1
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:

1
2
3
GETBYTE(256, 0)  →  0001 0000 0000 →  0
GETBYTE(256, 1)   →  0001 0000 0000  →  1
GETBYTE(259, 0)   →  0001 0000 0011   →  3

SETBYTE

Přiřadí novou hodnotu do zadaného bajtu v uvedeném čísle a vrátí nové číslo.

1
SETBYTE( number, byte_position, new_value )

Příklady:

1
2
3
4
SETBYTE(1, 0, 0)   →   0
SETBYTE(256, 0, 255)   →   511
SETBYTE(256, 1, 1)	  →   256
SETBYTE(259, 1, 2)	  →    515

SETBIT

Přiřadí novou hodnotu k zadanému bitu v daném čísle a vrátí nové číslo.

1
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.

1
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Ů)

1
8 << 2   (32)

Excel: BITLSHIFT(number, shift_amount)

» (PRAVÉ POSUNUTÍ BITŮ)

1
32 >> 2   (8)

Excel: BITRSHIFT(number, shift_amount)

& (BITWISE AND)

1
3 & 1   (1)

Excel: BITAND(number1, number2)

| (BITWISE OR)

1
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.

1
LENGTH( object )

Příklady:

1
2
3
4
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 z uvedených hexadecimálních hodnot.

1
BYTECOLLECTION( bytes )

Příklady:

1
2
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.

1
INDEXOF( string/collection, element )

Příklady:

1
2
3
4
5
6
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).

1
COPY( string/collection, startIndex, length)

Příklady:

1
2
3
4
5
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.

1
REPLACE( string/collection, oldValue, newValue)

Příklady:

1
2
3
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čů.

1
2
3
4
SPLIT( string, string )
SPLIT( string, char )
SPLIT( string, Collection<string> )
SPLIT( string, Collection<char> )

Příklady:

1
2
3
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í.

1
COMPARE( string, string, CompareOptions )

Příklady:

1
2
3
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.

1
2
APPEND( string, string )
APPEND( Collection, value )

Příklady:

1
2
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.

1
2
INSERT( collection, index, value )
INSERT( string, index, value )

Příklady:

1
2
3
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ů.

1
2
REMOVEAT( collection, index, length )
REMOVEAT( string, index, length )

Příklady:

1
2
3
4
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.

1
2
GETAT( collection, index )
GETAT( string, index )

Příklady:

1
2
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.

1
2
SETAT( collection, index, value )
SETAT( string, index, value )

Příklady:

1
2
3
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.

1
ENCODE( string, format )

Podporované formáty:

  • XML
  • Base64

Příklady:

1
2
3
ENCODE("Hello", “xml”)				(Result is “Hello”)
ENCODE("<Hello id=1>", “xml”)		(Result is “&lt;Hello id=1&gt;”)
ENCODE("Hello", “base64”)			(Result is “SGVsbG8=”)

DECODE

Dekóduje zadaný řetězec zvoleným formátem a vrací nový řetězec.

1
DECODE( string, format )

Podporované formáty:

  • XML
  • Base64

Příklady:

1
2
3
DECODE("Hello", “xml”)				  (Result is “Hello”)
DECODE("&lt;Hello id=1&gt;", “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.

1
EQUALS( number1, number2, epsilon=0.005 )

Příklady:

1
2
3
4
5
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í.

1
2
ORDER( n1, n2, n3 , … )
ORDER( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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í.

1
2
ORDERINDEX( n1, n2, n3 , … )
ORDERINDEX( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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.

1
2
ORDERSTRICT( n1, n2, n3 , … )
ORDERSTRICT( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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.

1
2
ORDERINDEXSTRICT( n1, n2, n3 , … )
ORDERINDEXSTRICT( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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í.

1
2
ORDERDESC( n1, n2, n3 , … )
ORDERDESC( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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í.

1
2
ORDERINDEXDESC( n1, n2, n3 , … )
ORDERINDEXDESC( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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.

1
2
ORDERDESCSTRICT( n1, n2, n3 , … )
ORDERDESCSTRICT( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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.

1
2
ORDERINDEXDESCSTRICT( n1, n2, n3 , … )
ORDERINDEXDESCSTRICT( collection )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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.

1
2
3
4
DATETIME( ticks, DateTimeKind )
DATETIME( string, format )
DATETIME( string, DateTimeKind )
DATETIME( year, month, day, hour, minute, second, millisecond, DateTimeKind  )

Příklady:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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.

1
NOW()

Příklady:

1
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.

1
TIMESPAN( days, hours, minutes, seconds, milliseconds )

Příklady:

1
2
3
4
VAR t := TimeSpan(1, 2, 3, 4, 0);
	t.TOTALSECONDS			

Výsledek ... 93784

LOCALTIMEZONE

Vrací lokální časové pásmo jako počet milisekund od UTC času.

1
LOCALTIMEZONE()

Příklady:

1
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.

1
DATETIMEADD(datetime, years, months, days, hours, minutes, seconds, milliseconds)

Příklady:

1
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.

1
TODOUBLE( text )

Příklady:

1
2
3
TODOUBLE(“232”) ... 232
TODOUBLE(“-192.332”)  ...  -192.332
TODOUBLE(“some text”)  ...  NaN

TOSTRING

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).

1
TOSTRING(value, encoding)

Příklady:

1
2
3
4
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”
1
2
3
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.

1
TOBCD(number)

Příklady:

1
2
3
TOBCD(1)  ...  1
TOBCD(9)  ...  9
TOBCD(10)  ...  16

FROMBCD

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.

1
FROMBCD(number)

Příklady:

1
2
FROMBCD(16)  ...  10
FROMBCD(32)  ...  20

TOBYTEARRAY

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).

1
TOBYTEARRAY( string, encoding )

Příklady:

1
TOBYTEARRAY("Hello")			(Result is byte array 48656c6c6f)

RGBTOHSV

Převede definici barvy v RGB a vrátí barvu ve formátu Hue / Saturation / Brightness.

1
RGBTOHSV( r, g, b )      (r, g, b ... 0 - 0xFF)

Příklad:

1
2
3
4
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.

1
HSVTORGB( hue, saturation, value )

Příklad:

1
2
3
4
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.

1
PARSETEXT( input, left_pattern, right_pattern)

Příklady:

1
2
3
4
5
6
7
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.

1
PARSEJSON( json_string, json_path, ignore_error)

Příklady:

S json =

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "firstName": "John",
  "lastName" : "doe",
  "age" : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  }
}
1
2
3
4
5
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.

1
PARSEXML( xml_string, xml_path)

Příklady:

S XML =

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0"?>
<catalog>
	<book id="bk101">
		<author>Gambardella, Matthew</author>
		<title>XML Developer's Guide</title>
		<genre>Computer</genre>
		<price>44.95</price>
		<publish_date>2000-10-01</publish_date>
		<description>An in-depth look at creating...</description>
	</book>
	<book id="bk102">
		<author>Ralls, Kim</author>
		<title>Midnight Rain</title>
		<genre>Fantasy</genre>
		<price>5.95</price>
		<publish_date>2000-12-16</publish_date>
		<description>A former architect battles…</description>
	</book>
</catalog>
1
2
3
4
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

Podrobné informace o konfiguraci Modbus.