Linguaggio di scripting multilinea con evidenziazione della sintassi, utilizzabile nelle Equation, Formula e Script delle Smart Rule(s), e anche nelle interfacce Modbus e Packet Parser.

Nozioni di base
Assegnazione
|
|
Algoritmo multilinea
Ogni riga è separata dal punto e virgola.
|
|
Valore restituito
- Risultato dell’ultima riga di codice
- RETURN(expression) interrompe l’esecuzione dell’algoritmo e restituisce il contenuto tra parentesi
|
|
Variabile temporanea
Esiste solo durante una singola esecuzione dello script.
|
|
Clausola IF
Stile Excel
|
|
Stile multilinea
|
|
Switch
Verifica un’espressione rispetto a un elenco di casi e restituisce il valore corrispondente al primo caso che corrisponde, con un valore di default se nessun altro caso è soddisfatto.
|
|
Esempio:
|
|

Loop
LOOP / WHILE … ripete una serie di comandi finché una condizione specificata è soddisfatta. CONTINUE … salta l’esecuzione dei comandi rimanenti e passa al ciclo successivo. BREAK … termina il ciclo.
Esempio con condizione all’inizio:
|
|
Esempio con condizione alla fine:
|
|
Valore NaN (not a number)
NaN può essere restituito come valore nel caso in cui il valore reale non sia noto.
|
|
La funzione ISNAN(expression) restituisce TRUE se l’espressione non è un numero.
ISNULL
Restituisce true se il parametro è NULL, altrimenti false. Usato per i tipi String e Bytearray. Esempio: se l’elemento XML non viene trovato, il valore restituito è NULL, quindi il risultato della funzione è TRUE.
La sintassi della funzione è:
|
|
Sleep
Mette in pausa lo script per un numero di millisecondi. Usare solo in casi molto specifici.
|
|
Commenti
Nuova riga che inizia con il carattere #
|
|
Letterali numerici
Numeri esadecimali
Le espressioni possono interpretare anche numeri esadecimali. Il prefisso 0x è obbligatorio e il resto non è case-sensitive.
0x0A = 10
|
|
Numeri binari
0b1010 = 10
|
|
Espressioni matematiche
+, -, *, /
|
|
Espressioni logiche
AND, OR, !, =, !=, >, <
|
|
Funzioni
LINEAR
Restituisce un valore regolato linearmente – interpolazione lineare.
|
|
Parametri
- input… valore in ingresso
- value1_input… valore all’ingresso al limite inferiore
- value1_output… valore all’uscita al limite inferiore
- value2_input… valore all’ingresso al limite superiore
- value2_output… valore all’uscita al limite superiore
- [type]… parametro opzionale. Definisce cosa accade al risultato quando il valore in ingresso è fuori dall’intervallo value1_input ↔︎ value2_input:
- senza parametro (uguale a BOUNDS)… Se il valore in ingresso è fuori dall’intervallo definito, il valore in uscita sarà uno degli estremi (minimo o massimo)
- INFINITE… Se il valore in ingresso è fuori dall’intervallo definito, il risultato è un valore di estrapolazione
- STRICT… Se il valore in ingresso è fuori dall’intervallo definito, il valore in uscita sarà NaN (non è un numero)
Esempi
|
|
Esempi per differenti attributi [type]:
- input = 11
- value1_input = 0, value1_output = 400
- value2_input = 10, value2_output = 2000
- risultato per differenti parametri [type]:
- BOUNDS (valore di default) = 2000
- INFINITE = 2160
- STRICT = NaN
HYSTERESIS
L’isteresi può essere utilizzata per filtrare segnali in modo che l’uscita reagisca meno rapidamente di quanto farebbe altrimenti, tenendo in considerazione la storia recente del sistema. Ad es. un termostato che controlla un riscaldatore può accendere il riscaldatore quando la temperatura scende al di sotto di A, ma non spegnerlo finché la temperatura non sale oltre B.
Restituisce 0 o 1.
|
|
Esempio: mantenere una temperatura di 20 °C entro una banda di isteresi di 2 °C. Accendere il riscaldatore quando la temperatura scende sotto i 18 °C e spegnerlo quando la temperatura supera i 22 °C.
|
|
Funzioni matematiche
MIN
La funzione MIN restituisce il minimo tra i valori numerici forniti. Accetta tra 1 e 100 argomenti o una singola collezione. I valori NaN e NULL sono ignorati.
|
|
Esempi:
|
|
MINSTRICT
La funzione MINSTRICT restituisce il minimo tra i valori numerici forniti. Accetta tra 1 e 100 argomenti o una singola collezione. Se uno qualsiasi dei valori forniti è NaN o NULL, la funzione restituisce NaN/NULL.
|
|
Esempi:
|
|
MAX
La funzione MAX restituisce il massimo tra i valori numerici forniti. Accetta tra 1 e 100 argomenti o una singola collezione. NaN e NULL sono ignorati.
|
|
Esempi:
|
|
MAXSTRICT
La funzione MAXSTRICT restituisce il massimo tra i valori numerici forniti. Accetta tra 1 e 100 argomenti o una singola collezione. Se uno qualsiasi dei valori forniti è NaN o NULL, la funzione restituisce NaN/NULL.
|
|
Esempi:
|
|
AVG
La funzione AVG calcola la media aritmetica dei valori numerici forniti. Accetta tra 1 e 100 argomenti o una singola collezione. I valori NaN sono ignorati.
|
|
Esempi:
|
|
AVGSTRICT
La funzione AVGSTRICT calcola la media dei valori numerici forniti. Accetta tra 1 e 100 argomenti o una singola collezione. Se uno dei valori forniti non è un numero, la funzione restituisce NaN.
|
|
Esempi:
|
|
ROUND
|
|
Restituisce il valore arrotondato.
|
|
ABS
La funzione ABS restituisce il valore assoluto (cioè il modulo) di qualsiasi numero fornito.
|
|
Esempi:
|
|
DEWPOINT
|
|
Restituisce la temperatura del punto di rugiada data la temperatura attuale e l’umidità relativa. Il punto di rugiada è calcolato secondo questa equazione.
|
|
POWER
La funzione POWER calcola un numero dato elevato a una potenza fornita.
|
|
Esempi:
- POWER(2,3) … 2^3 = 8
- POWER(10, -3) … 0,001
- POWER(25, 0) … 1
MOD
La funzione MOD restituisce il resto di una divisione tra due numeri forniti.
|
|
Argomenti:
- number - Il numero da dividere.
- divisor - Il valore per cui si divide il numero.
Esempi:
- MOD(6, 4) … 2
- MOD(6, 2.5) … 1
CEIL
La funzione CEIL arrotonda un numero fornito per eccesso, al multiplo di un numero dato.
|
|
Argomenti:
- number - Il numero da arrotondare.
- significance (optional) - Il multiplo al quale il numero fornito deve essere arrotondato. Se non specificato, significance = 1. (Questo dovrebbe avere lo stesso segno aritmetico, positivo o negativo, del numero fornito)
Esempi:
- 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
La funzione FLOOR arrotonda un numero fornito verso zero, al multiplo di una significatività specificata.
|
|
Argomenti:
- number - Il numero da arrotondare.
- significance (optional) - Il multiplo al quale il numero fornito deve essere arrotondato. Se non specificato, è uguale a 1. (Questo dovrebbe avere lo stesso segno aritmetico, positivo o negativo, del numero fornito)
Esempi:
- 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
La funzione RAND genera un numero reale casuale tra 0 e 1.
|
|
Esempi:
- RAND()
RANDINT
La funzione RANDINT genera un intero casuale tra due interi forniti.
|
|
Esempi:
- RANDINT(1,5)
- RANDINT(-2,2)
SIGN
La funzione SIGN restituisce il segno aritmetico (+1, -1 o 0) di un numero fornito. Ad es. se il numero è positivo, SIGN restituisce +1, se è negativo restituisce -1 e se è 0 restituisce 0.
|
|
Esempi:
- SIGN(100) … 1
- SIGN(0) … 0
- SIGN(-100) … -1
SQRT
La funzione SQRT calcola la radice quadrata positiva di un numero fornito.
|
|
Esempi:
- SQRT(25) … 5
LOG
La funzione LOG calcola il logaritmo di un numero dato, con una base fornita.
|
|
Argomenti:
- number - Il numero reale positivo di cui si vuole calcolare il logaritmo.
- base (optional) - Argomento opzionale che specifica la base a cui calcolare il logaritmo. Se non specificato, la base di default è 10.
Esempi:
- LOG(4,0.5) … -2
- LOG(100) … 2
LN
La funzione LN calcola il logaritmo naturale di un numero dato.
|
|
dove l’argomento è il numero reale positivo di cui si vuole calcolare il logaritmo naturale.
Esempi:
- LN(100) … 4,60517
Operazioni sui bit
GETBIT
Restituisce il valore di un bit nella posizione specificata.
|
|
Argomenti:
- number - numero da cui estrarre il valore di un bit specifico
- bit_position - posizione del bit, partendo da 0, da destra
Esempi:
- GETBIT(2, 0) → il primo bit del numero 2 (0b0010) è 0
- GETBIT(4,2) → il terzo bit del numero 4 (0b0100) è 1
GETBITS
Restituisce il valore di un numero specificato di bit nella posizione specificata.
|
|
Esempi:
- GETBITS(216, 3, 2) → numero 216 = 0b1101 1000; il valore del 4° bit da destra è 1, il 5° bit è 1, quindi il risultato è 0b0011 = 3
- GETBITS(0xFF, 0, 4) → numero 0xFF = 255 = 0b1111 1111; il valore dei primi 4 bit da destra è 0b1111 = 0xF = 15
GETBYTE
Restituisce il valore di un byte nel numero specificato.
|
|
Argomenti:
- number - numero da cui estrarre il valore di un byte specifico
- byte_position - posizione del byte, partendo da 0, da destra
Esemppi:
|
|
SETBYTE
Assegna un nuovo valore al byte specificato nel numero fornito e restituisce il nuovo numero.
|
|
Esempi:
|
|
SETBIT
Assegna un nuovo valore al bit specificato nel numero fornito e restituisce un nuovo numero.
|
|
Argomenti:
- number - numero da modificare
- bit_position - posizione del bit, partendo da 0, da destra
- new_value - 0 o 1 - valore che verrà impostato sul bit specificato
Esempi:
- SETBIT(1, 1, 1) → 3
- SETBIT(3, 1, 1) → 3
- SETBIT(4, 2, 0) → 4
- SETBIT(12, 1, 0) → 14
SETBITS
Assegna un nuovo valore ai bit specificati nel numero fornito e restituisce un nuovo numero.
|
|
Esempi:
- SETBITS(192, 4, 2, 3) → 240
- SETBITS(192, 5, 2, 3) → 224
« (LEFT BIT SHIFT)
|
|
Excel: BITLSHIFT(number, shift_amount)
» (RIGHT BIT SHIFT)
|
|
Excel: BITRSHIFT(number, shift_amount)
& (BITWISE AND)
|
|
Excel: BITAND(number1, number2)
| (BITWISE OR)
|
|
Excel: BITOR(number1, number2)
Vedi l’esempio di operazioni sui bit in Google Sheets: https://docs.google.com/spreadsheets/d/1hF5FMpGMJbgYh-YLwWrq2n186_ATyGyLUb689__IhLY/edit?usp=sharing
Oppure prova lo strumento interattivo su http://bitwisecmd.com/
Testo, Stringa e Byte array
LENGTH
Restituisce la lunghezza di un oggetto o il numero di byte. L’oggetto può essere un numero, un booleano, una stringa o una Collezione.
|
|
Esempi:
|
|
BYTECOLLECTION
Crea una Collection
|
|
Esempi:
|
|
INDEXOF
Restituisce l’indice dell’elemento specificato in una stringa o in una collezione. Restituisce -1 se l’elemento non viene trovato.
|
|
Esempi:
|
|
COPY
Copia una stringa o una collezione (o una loro parte).
|
|
Esempi:
|
|
REPLACE
Restituisce una nuova stringa o una nuova collezione, in cui tutte le occorrenze del valore specificato sono sostituite con il nuovo valore.
|
|
Esempi:
|
|
SPLIT
Divide una stringa in sottostringhe basate sui parametri separatori.
|
|
Esempi:
|
|
COMPARE
Confronta 2 stringhe e restituisce un intero che indica la loro posizione relativa nell’ordinamento.
|
|
Esempi:
|
|
APPEND
Aggiunge un valore a una collezione o a una stringa e restituisce un nuovo oggetto con il valore aggiunto.
|
|
Esempi:
|
|
INSERT
Inserisce un valore in una collezione o in una stringa. Restituisce la collezione o la stringa con il valore inserito.
|
|
Esempi:
|
|
REMOVEAT
Rimuove elementi dalla collezione o dalla stringa in base all’indice dell’elemento e alla lunghezza. Restituisce la collezione o la stringa senza gli elementi specificati.
|
|
Esempi:
|
|
GETAT
Ottiene il valore di un elemento da una collezione o da una stringa in base all’indice fornito.
|
|
Esempi:
|
|
SETAT
Imposta il valore di un elemento nella collezione o in una stringa all’indice fornito.
|
|
Esempi:
|
|
ENCODE
Codifica una stringa specificata utilizzando uno dei formati e restituisce la nuova stringa.
|
|
Formati supportati:
- XML
- Base64
Esempi:
|
|
DECODE
Decodifica una stringa specificata utilizzando uno dei formati e restituisce la nuova stringa.
|
|
Formati supportati:
- XML
- Base64
Esempi:
|
|
EQUALS
Confronta due numeri in virgola mobile. I numeri sono considerati uguali se | n1 - n2 |< epsilon. Il valore predefinito della soglia (*epsilon) è 0.005 ed è un parametro opzionale.
|
|
Esempi:
|
|
Ordinamento
Esistono diverse varianti ORDER disponibili:
Ascendente - ORDER, ORDERSTRICT - ORDERINDEX, ORDERINDEXSTRICT
Discendente - ORDERDESC, ORDERDESCSTRICT - ORDERINDEXDESC, ORDERINDEXDESCSTRICT
ORDER
La funzione ORDER ordina i valori di input forniti in ordine crescente e li restituisce in una nuova collezione. Accetta n valori (fino a 100 argomenti) o una singola collezione. I valori non devono necessariamente essere numerici, ma devono essere confrontabili (ad es. numeri, TIMESPAN, DATETIME, stringhe). Tipi misti (ad es. numeri e stringhe) non sono consentiti. NaN e NULL sono ignorati ed esclusi dalla collezione restituita.
|
|
Esempi:
|
|
ORDERINDEX
La funzione ORDERINDEX ordina i valori di input in modo crescente, ma invece di restituire i valori ordinati, restituisce una collezione di indici che indicano le posizioni dei valori originali nell’ordine ordinato. Accetta n valori (fino a 100 argomenti) o una singola collezione. I valori non devono necessariamente essere numerici, ma devono essere confrontabili (ad es. numeri, TIMESPAN, DATETIME, stringhe). Tipi misti non sono consentiti. NaN e NULL sono ignorati ed esclusi dalla collezione restituita.
|
|
Esempi:
|
|
ORDERSTRICT
La funzione ORDERSTRICT ordina i valori di input in modo crescente e li restituisce in una nuova collezione. Può accettare n valori (fino a 100 argomenti) o una singola collezione. I valori non devono necessariamente essere numerici, ma devono essere confrontabili (ad es. numeri, TIMESPAN, DATETIME, stringhe). Tipi misti non sono consentiti. NaN e NULL sono inclusi e sempre ordinati per primi nel risultato.
|
|
Esempi:
|
|
ORDERINDEXSTRICT
La funzione ORDERINDEXSTRICT ordina i valori di input in modo crescente, simile a ORDERSTRICT. Tuttavia, invece di restituire i valori ordinati, restituisce una collezione di indici che indicano le posizioni dei valori originali nell’ordine ordinato. Accetta n valori (fino a 100 argomenti) o una singola collezione. I valori non devono necessariamente essere numerici, ma devono essere confrontabili (ad es. numeri, TIMESPAN, DATETIME, stringhe). Tipi misti non sono consentiti. NaN e NULL sono inclusi e sempre ordinati per primi nel risultato.
|
|
Esempi:
|
|
ORDERDESC
La funzione ORDERDESC ordina i valori di input forniti in ordine decrescente e li restituisce in una nuova collezione. Accetta n valori (fino a 100 argomenti) o una singola collezione. I valori non devono necessariamente essere numerici, ma devono essere confrontabili (ad es. numeri, TIMESPAN, DATETIME, stringhe). Tipi misti non sono consentiti. NaN e NULL sono ignorati ed esclusi dalla collezione restituita.
|
|
Esempi:
|
|
ORDERINDEXDESC
La funzione ORDERINDEXDESC ordina i valori di input in modo decrescente, simile a ORDERDESC. Tuttavia, invece di restituire i valori ordinati, restituisce una collezione di indici che indicano le posizioni dei valori originali nell’ordine ordinato. Accetta n valori (fino a 100 argomenti) o una singola collezione. I valori non devono necessariamente essere numerici, ma devono essere confrontabili (ad es. numeri, TIMESPAN, DATETIME, stringhe). Tipi misti non sono consentiti. NaN e NULL sono ignorati ed esclusi dalla collezione restituita.
|
|
Esempi:
|
|
ORDERDESCSTRICT
La funzione ORDERDESCSTRICT ordina i valori di input in modo decrescente e li restituisce in una nuova collezione. Può accettare n valori (fino a 100 argomenti) o una singola collezione. I valori non devono necessariamente essere numerici, ma devono essere confrontabili (ad es. numeri, TIMESPAN, DATETIME, stringhe). Tipi misti non sono consentiti. NaN e NULL sono inclusi e sempre ordinati per primi nel risultato.
|
|
Esempi:
|
|
ORDERINDEXDESCSTRICT
La funzione ORDERINDEXDESCSTRICT ordina i valori di input in modo decrescente, simile a ORDERDESC. Tuttavia, invece di restituire i valori ordinati, restituisce una collezione di indici che indicano le posizioni dei valori originali nell’ordine ordinato. Accetta n valori (fino a 100 argomenti) o una singola collezione. I valori non devono necessariamente essere numerici, ma devono essere confrontabili (ad es. numeri, TIMESPAN, DATETIME, stringhe). Tipi misti non sono consentiti. NaN e NULL sono inclusi e sempre ordinati per primi nel risultato.
|
|
Esempi:
|
|
DATETIME
Crea un oggetto DateTime. La proprietà DateTime.Ticks è il numero di millisecondi dal 1.1.0001 00:00:00.000. DateTime ha le seguenti proprietà: TICKS, YEAR, MONTH, DAY, DAYOFWEEK, DAYOFYEAR, HOUR, MINUTE, SECOND, MILLISECOND, KIND, UTCDATETIME, LOCALDATETIME, UNIXTIME.
|
|
Esempi:
|
|
NOW
Restituisce un oggetto DateTime impostato all’attuale data e ora nel fuso orario locale.
|
|
Esempi:
|
|
TIMESPAN
La funzione TIMESPAN crea una variabile che rappresenta una durata di tempo, espressa in giorni, ore, minuti, secondi e millisecondi. TIMESPAN ha proprietà per accedere direttamente a ciascun componente della durata: DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS. TIMESPAN ha inoltre proprietà per accedere al valore totale del tempo in unità specifiche (inclusi valori frazionari): TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDS.
|
|
Esempi:
|
|
LOCALTIMEZONE
Restituisce il fuso orario locale come numero di millisecondi rispetto all’ora UTC.
|
|
Esempi:
|
|
DATETIMEADD
Aggiunge un numero specificato di anni, mesi, giorni, ore, minuti, secondi, millisecondi a una DateTime esistente e restituisce una nuova DateTime.
|
|
Esempi:
|
|
Conversioni tra tipi di dati
TODOUBLE
Converte una stringa in numero. Restituisce NaN in caso di errore.
|
|
Esempi:
|
|
TOSTRING
Restituisce una stringa dal valore specificato o dalla Collection, secondo la codifica specificata. La codifica è opzionale (di default viene usata iso-8859-1).
|
|
Esempi:
|
|
|
|
TOBCD
Converte il numero fornito nel formato decimal-coded (BCD). Lo schema di codifica è BCD-8421.
|
|
Esempi:
|
|
FROMBCD
Decodifica il numero fornito, che è codificato in Binary-Coded Decimal (BCD). Lo schema di codifica è BCD-8421.
|
|
Esempi:
|
|
TOBYTEARRAY
Converte una stringa in array di byte secondo la codifica specificata. La codifica è opzionale (di default è usata iso-8859-1).
|
|
Esempi:
|
|
RGBTOHSV
Converte una definizione di colore RGB e restituisce il colore in formato Hue / Saturation / Brightness.
|
|
Esempio:
|
|
HSVTORGB
Converte un colore definito da Hue / Saturation / Brightness e restituisce il colore in formato RGB.
|
|
Esempio:
|
|
Funzioni di parsing
PARSETEXT
Restituisce una parte del testo di input, basata sui pattern di ricerca left e right.
|
|
Esempi:
|
|
PARSEJSON
Restituisce il valore di un elemento dalla stringa JSON formattata. L’elemento è specificato tramite json path.
|
|
Esempi:
Con json =
|
|
|
|
PARSEXML
Restituisce il valore di un elemento da una stringa XML. L’elemento è specificato tramite xml path.
|
|
Esempi:
Con xml =
|
|
|
|
Se xml contiene namespace, devi specificare completamente i nomi degli elementi con namespace, ad es. PARSEXML(xml, “//DIDL-Lite:container[dc:title=‘My Playlist’’]/DIDL-Lite:res”);
Packet Parser
Per ulteriori informazioni, vedere la pagina su Packet Parser
SENDHTTPREQUEST
SENDDATA
MQTTPUBLISH
FTPDOWNLOAD
FTPUPLOAD
COMPLETESERVICEATTRIBUTE
COMPLETESERVICEACTION
Modbus
Modbus