Set di operazioni
Le operazioni AWL implementate nel PLC simulato, cioè quelle che il compilatore interno di PC-Sim riconosce e compila correttamente, costituiscono, come abbiamo appena visto, un ampia parte del set di operazioni del corrispondente PLC reale.
La Tabella 42 riporta sinteticamente l’elenco delle operazioni implementate nel PLC simulato In essa, le colonne relative al risultato logico combinatorio (RLC) hanno il significato espresso in Tabella 41.
Le differenze di scrittura tra la notazione Simatic e quella internazionale per la stessa operazione sono evidenziate nelle colonne S ed I.
Tabella 42: Set di operazioni per S7 300
Operazione |
Operandi ammessi | RLC |
Descrizione |
||||
Sim. |
Int. |
D | I | L | |||
Operazioni sugli accumulatori |
|||||||
TAK |
|
N | N | N |
Scambia il contenuto di ACCU1 con quello di ACCU2 |
||
INC |
n = 0…255 |
N | N | N |
Incrementa di n il byte basso della parola bassa di ACCU1 |
||
DEC |
n = 0…255 |
N | N | N |
Decrementa di n il byte basso della parola bassa di ACCU1 |
||
NOP0 |
|
N | N | N |
Nessuna operazione |
||
NOP1 |
|
N | N | N |
Nessuna operazione |
||
Operazioni logiche a bit |
|||||||
U | A |
E, A, M, DBX, T, Z |
N | S | N |
Combinazione AND o test sullo stato “1” |
|
UN |
AN |
E, A, M, DBX, T, Z |
N | S | N |
Combinazione AND con negazione operando o test sullo stato “0” |
|
O |
E, A, M, DBX, T, Z |
N | S | N |
Combinazione OR o test sullo stato “1” |
||
ON |
E, A, M, DBX, T, Z |
N | S | N |
Combinazione OR con negazione operando o test sullo stato “0” |
||
X |
E, A, M, DBX, T, Z |
N | S | N |
Combinazione XOR o test sullo stato “1” |
||
XN |
E, A, M, DBX, T, Z |
N | S | N |
Combinazione XOR con negazione operando o test sullo stato “0” |
||
O |
|
N | S | S |
Combinazione OR di funzioni AND |
||
U( |
A( |
N | S | S |
Combinazione AND di espressione tra parentesi |
||
UN( |
AN( |
N | S | S |
Combinazione AND NOT di espressione tra parentesi |
||
O( |
|
N | S | S |
Combinazione OR di espressione tra parentesi |
||
ON( |
|
N | S | S |
Combinazione OR NOT di espressione tra parentesi |
||
X( |
|
N | S | S |
Combinazione XOR di espressione tra parentesi |
||
XN( |
|
N | S | S |
Combinazione XOR NOT di espressione tra parentesi |
||
) |
|
N | S | N |
Fine di un’espressione tra parentesi |
||
FP |
M, DBX |
N | S | N |
Fronte di salita |
||
FN |
M, DBX |
N | S | N |
Fronte di discesa |
||
NOT |
|
N | S | N |
Inverte RLC |
||
SET |
|
N | 1 | N |
Imposta a 1 RLC |
||
CLR |
|
N | 0 | N |
Resetta a 0 RLC |
||
S |
E, A, M, DBX |
S | N | S |
Attivazione dell’operando su RLC=1 |
||
R |
E, A, M, DBX |
S | N | S |
Disattivazione dell’operando su RLC=1 |
||
= |
E, A, M, DBX |
N | N | S |
Assegnazione dell’operando al valore di RLC |
||
Operazioni di caricamento e trasferimento |
|||||||
L |
±n |
N | N | N |
Caricamento di una costante a 16 bit in ACCU1 |
||
L |
L#±n |
N | N | N |
Caricamento di una costante a 32 bit in ACCU1 |
||
L |
B#16#hh |
N | N | N |
Caricamento di una costante esadecimale a 8 bit in ACCU1 |
||
L |
W#16#hhhh |
N | N | N |
Caricamento di una costante esadecimale a 16 bit in ACCU1 |
||
L |
DW#16#hhhh_hhhh |
N | N | N |
Caricamento di una costante esadecimale a 32 bit in ACCU1 |
||
L |
2#bbbb_bbbb_bbbb_bbbb |
N | N | N |
Caricamento di una costante binaria a 16 bit in ACCU1 |
||
L |
2#bbbb_bbbb_bbbb_bbbb_bbbb_bbbb_bbbb_bbbb |
N | N | N |
Caricamento di una costante binaria a 32 bit in ACCU1 |
||
L |
S5TIME#aH_bbM_ccS_dddMS |
N | N | N |
Caricamento di una costante di tempo in ACCU1 espressa in ore, minuti, secondi e millesimi di secondo |
||
L |
Z#n |
N | N | N |
Caricamento di una costante di conteggio in ACCU1 |
||
L |
EB |
N | N | N |
Caricamento di un byte dell’IPI in ACCU1 |
||
L |
EW |
N | N | N |
Caricamento di una word dell’IPI in ACCU1 |
||
L |
ED |
N | N | N |
Caricamento di una doppia word dell’IPI in ACCU1 |
||
L |
AB |
N | N | N |
Caricamento di un byte dell’IPU in ACCU1 |
||
L |
AW |
N | N | N |
Caricamento di una word dell’IPU in ACCU1 |
||
L |
AD |
N | N | N |
Caricamento di una doppia word dell’IPU in ACCU1 |
||
L |
MB |
N | N | N |
Caricamento di un merker byte in ACCU1 |
||
L |
MW |
N | N | N |
Caricamento di una merker word in ACCU1 |
||
L |
MD |
N | N | N |
Caricamento di una doppia merker word in ACCU1 |
||
L |
DBB |
N | N | N |
Caricamento di un byte di dati in ACCU1 |
||
L |
DBW |
N | N | N |
Caricamento di una data word in ACCU1 |
||
L |
DBD |
N | N | N |
Caricamento di una doppia data word in ACCU1 |
||
L |
T,Z |
N | N | N |
Caricamento di un valore di tempo o di conteggio in ACCU1 |
||
LC |
T,Z |
N | N | N |
Caricamento di un valore di tempo o di conteggio, codificato BCD, in ACCU1 |
||
T |
EB |
N | N | N |
Trasferimento del contenuto di ACCU1 in un byte dell’IPI |
||
T |
EW |
N | N | N |
Trasferimento del contenuto di ACCU1 in una word dell’IPI |
||
T |
ED |
N | N | N |
Trasferimento del contenuto di ACCU1 in una doppia word dell’IPI |
||
T |
AB |
N | N | N |
Trasferimento del contenuto di ACCU1 in un byte dell’IPU |
||
T |
AW |
N | N | N |
Trasferimento del contenuto di ACCU1 in una word dell’IPU |
||
T |
AD |
N | N | N |
Trasferimento del contenuto di ACCU1 in una doppia word dell’IPU |
||
T |
MB |
N | N | N |
Trasferimento del contenuto di ACCU1 in un merker byte |
||
T |
MW |
N | N | N |
Trasferimento del contenuto di ACCU1 in una merker word |
||
T |
MD |
N | N | N |
Trasferimento del contenuto di ACCU1 in una doppia merker word |
||
T |
DBB |
N | N | N |
Trasferimento del contenuto di ACCU1 in un byte di dati |
||
T |
DBW |
N | N | N |
Trasferimento del contenuto di ACCU1 in una data word |
||
T |
DBD |
N | N | N |
Trasferimento del contenuto di ACCU1 in una doppia data word |
||
Operazioni di temporizzazione |
|||||||
SI |
SP |
T |
S | N | S |
Attivazione di un temporizzatore ad impulso |
|
SV |
SE |
T |
S | N | S |
Attivazione di un temporizzatore ad impulso prolungato |
|
SE |
SD |
T |
S | N | S |
Attivazione di un temporizzatore con ritardo all’eccitazione |
|
SS |
T |
S | N | S |
Attivazione di un temporizzatore con ritardo all’eccitazione con memoria |
||
SA |
SF |
T |
S¯ | N | S |
Attivazione di un temporizzatore con ritardo alla diseccitazione |
|
R |
T |
S | N | S |
Reset di un temporizzatore |
||
Operazioni di conteggio |
|||||||
ZV |
CU |
Z |
S | N | S |
Incrementa il contatore |
|
ZR |
CD |
Z |
S | N | S |
Decrementa il contatore |
|
S |
Z |
S | N | S |
Impostazione del contatore |
||
R |
Z |
S | N | S |
Reset del contatore |
||
Operazioni matematiche con numeri interi |
|||||||
+I |
|
N | N | N |
Somma la parola bassa di ACCU1 alla parola bassa di ACCU2 con risultato nella parola bassa di ACCU1 |
||
-I |
|
N | N | N |
Sottrae la parola bassa di ACCU1 dalla parola bassa di ACCU2 con risultato nella parola bassa di ACCU1 |
||
*I |
|
N | N | N |
Moltiplica la parola bassa di ACCU1 per la parola bassa di ACCU2 con risultato in ACCU1 (32 bit) |
||
/I |
|
N | N | N |
Divide la parola bassa di ACCU2 per la parola bassa di ACCU1, il risultato viene memorizzato nella parola bassa di ACCU1, il resto nella parola alta di ACCU1. |
||
+D |
|
N | N | N |
Somma il contenuto di ACCU1 a quello di ACCU2 con risultato in ACCU1 |
||
-D |
|
N | N | N |
Sottrae il contenuto di ACCU1 da quello di ACCU2 con risultato in ACCU1 |
||
*D |
|
N | N | N |
Moltiplica il contenuto di ACCU1 quello di ACCU2 con risultato in ACCU1 |
||
/D |
|
N | N | N |
Divide il contenuto di ACCU2 per quello di ACCU1 con risultato in ACCU1 |
||
MOD |
|
N | N | N |
Divide il contenuto di ACCU2 per quello di ACCU1 e memorizza il resto in ACCU1 |
||
+ |
±n |
N | N | N |
Somma la costante a 16 bit alla parola bassa di ACCU1 e memorizza il risultato in ACCU1 |
||
+ |
L#±n |
N | N | N |
Somma la costante a 32 bit al contenuto di ACCU1 e memorizza il risultato in ACCU1 |
||
Operazioni di confronto |
|||||||
==I |
|
N | S | N |
Verifica se la parola bassa di ACCU2 è uguale alla parola bassa di ACCU2 |
||
<>I |
|
N | S | N |
Verifica se la parola bassa di ACCU2 è diversa dalla parola bassa di ACCU2 |
||
>I |
|
N | S | N |
Verifica se la parola bassa di ACCU2 è maggiore della parola bassa di ACCU2 |
||
<I |
|
N | S | N |
Verifica se la parola bassa di ACCU2 è minore della parola bassa di ACCU2 |
||
>=I |
|
N | S | N |
Verifica se la parola bassa di ACCU2 è maggiore o uguale alla parola bassa di ACCU2 |
||
<=I |
|
N | S | N |
Verifica se la parola bassa di ACCU2 è minore o uguale alla parola bassa di ACCU2 |
||
==D |
|
N | S | N |
Verifica se il contenuto di ACCU2 è uguale al contenuto di ACCU2 |
||
<>D |
|
N | S | N |
Verifica se il contenuto di ACCU2 è diverso dal contenuto di ACCU2 |
||
>D |
|
N | S | N |
Verifica se il contenuto di ACCU2 è maggiore del contenuto di ACCU2 |
||
<D |
|
N | S | N |
Verifica se il contenuto di ACCU2 è minore del contenuto di ACCU2 |
||
>=D |
|
N | S | N |
Verifica se il contenuto di ACCU2 è maggiore o uguale del contenuto di ACCU2 |
||
<=D |
|
N | S | N |
Verifica se il contenuto di ACCU2 è minore o uguale del contenuto di ACCU2 |
||
Operazioni di conversione |
|||||||
INVI |
|
N | N | N |
Esegue il complemento a 1 la parola bassa ACCU1 |
||
NEGI |
|
N | N | N |
Esegue il complemento a 2 la parola bassa di ACCU1 |
||
INVD |
|
N | N | N |
Esegue il complemento a 1 il contenuto di ACCU1 |
||
NEGD |
|
N | N | N |
Esegue il complemento a 2 il contenuto di ACCU1 |
||
Operazioni logiche su parola |
|||||||
UW |
AW |
N | N | N |
Combinazione AND (bit a bit) tra la parola bassa di ACCU1 e quella di ACCU2 con risultato in ACCU1 |
||
OW |
|
N | N | N |
Combinazione OR (bit a bit) tra la parola bassa di ACCU1 e quella di ACCU2 con risultato in ACCU1 |
||
XOW |
|
N | N | N |
Combinazione XOR (bit a bit) tra la parola bassa ACCU1 e quella di ACCU2 con risultato in ACCU1 |
||
UD |
AD |
N | N | N |
Combinazione AND (bit a bit) tra ACCU1 e ACCU2 con risultato in ACCU1 |
||
OD |
|
N | N | N |
Combinazione OR (bit a bit) tra ACCU1 e ACCU2 con risultato in ACCU1 |
||
XOD |
|
N | N | N |
Combinazione XOR (bit a bit) tra ACCU1 e ACCU2 con risultato in ACCU1 |
||
Operazioni di scorrimento e rotazione |
|||||||
SLW |
n = 0…15 |
N | N | N |
Scorrimento verso sinistra della parola bassa di ACCU1 per il numero di bit indicato nell’operando. Le posizioni liberate vengono riempite con 0. |
||
SLW |
|
N | N | N |
Scorrimento verso sinistra della parola bassa di ACCU1 per il numero di bit indicato nel byte basso della parola bassa di ACCU2. Le posizioni liberate vengono riempite con 0. |
||
SRW |
n = 0…15 |
N | N | N |
Scorrimento verso destra della parola bassa di ACCU1 per il numero di bit indicato nell’operando. Le posizioni liberate vengono riempite con 0. |
||
SRW |
|
N | N | N |
Scorrimento verso destra della parola bassa di ACCU1 per il numero di bit indicato nel byte basso della parola bassa di ACCU2. Le posizioni liberate vengono riempite con 0. |
||
SLD |
n = 0…32 |
N | N | N |
Scorrimento verso sinistra del contenuto di ACCU1 per il numero di bit indicato nell’operando. Le posizioni liberate vengono riempite con 0. |
||
SLD |
|
N | N | N |
Scorrimento verso sinistra del contenuto di ACCU1 per il numero di bit indicato nel byte basso della parola bassa di ACCU2. Le posizioni liberate vengono riempite con 0. |
||
SRD |
n = 0…15 |
N | N | N |
Scorrimento verso destra del contenuto di ACCU1 per il numero di bit indicato nell’operando. Le posizioni liberate vengono riempite con 0. |
||
SRD |
|
N | N | N |
Scorrimento verso destra del contenuto di ACCU1 per il numero di bit indicato nel byte basso della parola bassa di ACCU2. Le posizioni liberate vengono riempite con 0. |
||
RLD |
n = 0…32 |
N | N | N |
Rotazione verso sinistra del contenuto di ACCU1 per il numero di bit indicato nell’operando. Le posizioni liberate vengono riempite con i bit traslati fuori dall’accumulatore. |
||
RLD |
|
N | N | N |
Rotazione verso sinistra del contenuto di ACCU1 per il numero di bit indicato nel byte basso della parola bassa di ACCU2. Le posizioni liberate vengono riempite con i bit traslati fuori dall’accumulatore. |
||
RRD |
n = 0…32 |
N | N | N |
Rotazione verso destra del contenuto di ACCU1 per il numero di bit indicato nell’operando. Le posizioni liberate vengono riempite con i bit traslati fuori dall’accumulatore. |
||
RRD |
|
N | N | N |
Rotazione verso destra del contenuto di ACCU1 per il numero di bit indicato nel byte basso della parola bassa di ACCU2. Le posizioni liberate vengono riempite con i bit traslati fuori dall’accumulatore. |
||
Operazioni per blocchi dati |
|||||||
AUF |
OPN |
DB |
N | N | N |
Apre il blocco dati specificato come operando |
|
Operazioni di salto |
|||||||
SPA |
JU |
Etichetta |
N | N | N |
Salto assoluto all’etichetta |
|
SPB |
JC |
Etichetta |
S | 1 | S |
Salto condizionato all’etichetta (se RLC=1) |
|
SPBN |
JCN |
Etichetta |
S | 1 | S |
Salto condizionato all’etichetta (se RLC=0) |
|
SPO |
JO |
Etichetta |
N | N | N |
Salto per overflow |
|
SPZ |
JZ |
Etichetta |
N | N | N |
Salto se risultato nullo |
|
SPN |
JN |
Etichetta |
N | N | N |
Salto se risultato non nullo |
|
SPP |
JP |
Etichetta |
N | N | N |
Salto se risultato positivo |
|
SPM |
JM |
Etichetta |
N | N | N |
Salto se risultato negativo |
|
SPMZ |
JMZ |
Etichetta |
N | N | N |
Salto se risultato negativo o nullo |
|
SPPZ |
JPZ |
Etichetta |
N | N | N |
Salto se risultato positivo o nullo |
|
Operazioni di controllo del programma |
|||||||
CC |
FC |
N | N | N |
Richiamo condizionato di un blocco (se RLC=1) |
||
UC |
FC |
N | N | N |
Richiamo incondizionato di un blocco |
||
CALL |
FC |
N | N | N |
Richiamo incondizionato di un blocco |
||
BE |
|
N | N | S |
Fine blocco |
||
BEB |
BEC |
S | 1 | S |
Fine blocco condizionata |
||
BEA |
BEU |
N | N | S |
Fine blocco assoluta |
Tabella 43: influenza delle operazioni su A1 ed A0
Operazioni | Indicatori | |||||
Matematiche | Logiche | Confronto | Scorrimento | Conversione | A1 | A0 |
Risultato=0 | Risultato=0 | ACCU2=ACCU1 | Bit spostato=0 |
Risultato=0 |
0 | 0 |
Risultato<0 |
ACCU2<ACCU1 |
Risultato<0 |
0 | 1 | ||
Risultato>0 |
Risultato¹0 | ACCU2>ACCU1 | Bit spostato=1 |
Risultato>0 |
1 | 0 |