Un'espressione è una costruzione che dopo la valutazione restituisce un valore. Questo valore viene utilizzato nelle istruzioni.
Le espressioni sono composte da operatori, operandi e/o assegnazioni. Un operando può essere una costante, una variabile, una chiamata di funzione o un'altra espressione.
Esempi
|
33 |
(* Costante *) |
|
ivar |
(* Variabile *) |
|
fct(a,b,c) |
(* Chiamata di funzione *) |
|
a AND b |
(* Espressione *) |
|
(x*y) / z |
(* Espressione *) |
|
real_var2 := int_var; |
(* Assegnazione, vedere sotto *) |
La valutazione di un'espressione avviene tramite l'elaborazione degli operatori, in base a regole stabilite. L'operatore con l'ordine di operazione più alto viene elaborato per primo, seguito dall'operatore con il livello operativo successivo e così via, finché non vengono elaborati tutti gli operatori.
Di seguito è riportata una tabella degli operatori ST nell'ordine del rispettivo livello operativo ordinale:
|
Funzionamento |
Simbolo |
Livello operativo |
|---|---|---|
|
tra parentesi |
(espressione) |
ordine più alto |
|
chiamata di funzione |
nome di funzione (elenco parametri) |
.............. |
|
elevazione a potenza |
EXPT |
............. |
|
negazione |
– |
............ |
|
compilazione di complementi |
NOT |
........... |
|
moltiplicazione |
* |
.......... |
|
divisione |
/ |
......... |
|
modulo |
MOD |
........ |
|
addizione |
+ |
....... |
|
sottrazione |
– |
...... |
|
confronto V |
<,>,<=,>= |
..... |
|
uguale a |
= |
.... |
|
non uguale a |
<> |
... |
|
AND booleano |
AND |
.. |
|
XOR booleano |
XOR |
. |
|
OR booleano |
OR |
ordine più basso |
Come estensione allo standard IEC 61131-3 (ExST), è possibile utilizzare le assegnazioni come espressioni.
Esempi:
|
|
|
|---|---|
|
int_var1 := int_var2 := int_var3 + 9; |
(* int_var1 e int_var2 corrispondono entrambi al valore di int_var3 + 9*) |
|
real_var1 := real_var2 := int_var; |
(* assegnazioni corrette, real_var1 e real_var2 otterranno il valore di int_var *) |
|
int_var := real_var1 := int_var; |
(* viene visualizzato un messaggio per la mancata corrispondenza del tipo di real-int *) |
|
IF b := (i = 1) THEN |
(*Espressione utilizzata all'interno dell'istruzione della condizione IF: alla prima b verrà assegnato TRUE o FALSE, in base al fatto che i sia o meno 1, quindi verrà valutato il valore risultante di b.*) |