Espressioni

Panoramica

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

Ordine delle operazioni

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

Assegnazione come espressione

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
i := i + 1;
END_IF

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