Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Marco Zollia
PROGRAMMAZIONE
DEI PLC S7-200 NEL
LINGUAGGIO
LADDER (KOP)
1
DESCRIZIONI DELLE PRINCIPALI
CARATTERISTICHE DEL SOFWARE S7-200
INTRODUZIONE
2
P. L. C.
Struttura di un PLC
Fig. 1
Memoria
Sezione di
alimentazione
3
La rappresentazione di dati e istruzioni in termini di 1 e 0 logici, prende il nome di
numerazione binaria, in cui l’unità più piccola viene denominata bit (binary digit).
Si usano per la programmazione codici come l’ottale e l’esadecimale.
Le Memorie:
In un PLC, le funzioni di controllo e comando sono determinate dal programma, che
viene caricato, istruzione per istruzione, in memoria.
4
Tutte le memorie, di qualsiasi tipo siano, possono essere suddivise in due categorie:
- Volatili (in mancanza di alimentazione perdono il loro contenuto)
- Non volatili (mantengono il loro contenuto anche in mancanza di
alimentazione)
FLASH EPROM
Rappresentano l’ultimo risultato di ricerca nel settore delle memorie nei
semiconduttori. Combinano la capacità di cancellazione elettrica EEPROM con
l’economicità della EPROM. Le FLASH EPROM possono essere modificate senza
dover cancellare il precedente programma.
1. Registri
2. Flag
5
Flag: costituito da più bit che possono essere settati e resettati con la possibilità di
memorizzare temporaneamente dati e informazioni numeriche di un programma.
Si riferiscono a:
Memorie di massa.
Sono in grado di memorizzare elevate quantità di dati o informazioni.
Floppy disk, EEPROM memory card.
Linguaggi di programmazione:
6
Contatto normalmente aperto
%10003
%10002 1
%Q0001
%10001 &
7
OPERAZIONI PRELIMINARI
MODULI DI COMUNICAZIONE
8
PARAMETRIZZAZIONE INTERFACCE UTILIZZATE es. (PC/PPI cable (PPI)
→PROPRIETA’→controlla la velocità di trasmissione con i microinterruttori,
andare su COLLEGAMENTO LOCALE e determinare la porta es. COM1.
9
andare su COLLEGAMENTO LOCALE e determinare la porta es. COM1.
10
Protocollo MPI: consente sia la comunicazione da master a master che la
comunicazione da master a slave. I dispositivi in rete comunicano mediante
collegamenti separati (gestiti dal protocollo MPI). La comunicazione tra i
dispositivi è limitata al numero di collegamenti supportati dalle S7 o dalle
EM 277 (modulo di ampliamento).
11
PROGRAMMAZIONE DI BASE
12
CONTATTI E BOBINE
Gli ingressi sono determinati dalla sigla “I”, sono dei contatti in cui si
collegheremo pulsanti, finecorsa, fotocellule ecc. Già che ai capi delle uscite
c’è una tensione di 24V=, per pulsanti e finecorsa non ci sono problemi, per
le fotocellule bisogna che funzionino a 24V=.
Dato che la CPU del PLC ragiona come un computer e tutto viene tradotto in
sistema binario.
13
Il campo di ogni memoria è specificato nella seguente tabella
14
I numeri reali o in virgola mobile sono rappresentati mediante numeri a 32 bit.
All’area di memoria e all’indentificatore di dimensione segue l’indirizzo del
byte, della word o della doppia word. Si può accedere ai dati con indirizzi pari
o dispari indipendente dalla loro dimensione. L’indirizzo è un numero
decimale, dall’area di memoria e dalla dimensione del valore a cui si vuole
accedere
CPU 222
Area di memoria Byte Word Doble Word
Input da IB 0 a IB 15 da IW 0 a IW 14 da ID 0 a ID 12
Output da QB 0 a QB 15 da QW 0 a QW 14 da QD 0 a QD 12
Merker interi da MB 0 a MB 31 da MW 0 a MW 30 da MD 0 a MD 28
da SMB 0 a SMB
Merker speciali 179 da SMW 0 a SMW 178 da SMD 0 a SMD 176
Memorie variabili da VB 0 a VB 2047 da VW 0 a VW 2046 da VD 0 a VD 2044
CPU 224
Area di memoria Byte Word Doble Word
Input da IB 0 a IB 15 da IW 0 a IW 14 da ID 0 a ID 12
Output da QB 0 a QB 15 da QW 0 a QW 14 da QD 0 a QD 12
Merker interi da MB 0 a MB 31 da MW 0 a MW 30 da MD 0 a MD 28
da SMB 0 a SMB
Merker speciali 179 da SMW 0 a SMW 178 da SMD 0 a SMD 176
Memorie variabili da VB 0 a VB 5119 da VW 0 a VW 5118 da VD 0 a VD 5116
15
Illustriamo un esempio di accesso allo stesso indirizzo, prima in byte, poi in
word e poi in doble word.
MSB LSB
7 0
VB120
MSB LSB
15
8 7 0
VB120 VB121 VW120
MSB LSB
23 15
31 24 16 8 7 0
VB120 VB121 VB122 VB123 VD120
V B 120
Ingresso del byte
Identificazione dell'area
V W 120
Ingresso del byte
Identificazione dell'area
V D 120
Ingresso del byte
Identificazione dell'area
16
Nelle nostre memorie variabili possono stare dei valori numerici decimali.
Prendiamo ad esempio una memoria byte, all’interno ci possono stare valori
da 0 a 255 (in numeri decimali), ma se io prendo in considerazione il numero
354 non posso metterlo in una memoria byte ma devo per forza metterlo in
una memori word che va da 0 a 65535 (in numeri decimali).
Supponiamo che la memoria byte si formata da un mattoncino come nello
schema precedente, la memoria word è formata da due mattoncino, e di
conseguenza la memoria doble word è formata da 4 mattoncini.
Per cui nelle tabelle “Area di memoria” le memorie byte sono una ad una e
distinte es: VB0, VB1, VB2, VB3,…………………, VB2047, di conseguenza le
memorie word vanno a due a due es: VW0, VW2, VW4, VW6,……,VW2046,
e chiaramente le memorie doble word a quattro a quattro, VD0, VD4, VD8 ,
VD12,………………., VD2044.
Questo perché nessun bit di una memoria se cambiato non vada a
interessare e di conseguenza variare la memoria più grande che quel bit fa
parte.
17
I principali merker speciali di sistema delle CPU S7-200
I merker speciali offrono una vasta gamma di funzioni (sia di stato che di
comando), e consentono lo scambio di informazioni tra il controllore
programmabile ed il programma in esecuzione. I merker speciali possono
essere adoperati sia in forma di byte, word e doble word. Sono suddivisi in un
area di sola lettura ed in area di lettura e scrittura. L’area di sola lettura inizia
da SMB0 e si estende fino a SMB29. Questi indirizzi vengono aggiornati dal
controllore programmabile ed informano diverse informazione di stato. L’area
di lettura/scrittura va da SMB30 a SMB179. Tali indirizzi vengono usati per
selezionare e comandare molteplici funzioni.
SMB 0 contiene otto bit di stato, i quali vengono aggiornati dal controllore
programmabile alla fine di ogni ciclo di scansione.
18
Registro di stato SMB 1
I registri SMB 1 contengono diversi indicatori di errori potenziali. Questi bit
vengono settati e resettati dalle operazioni durante il periodo di esecuzione.
Alcuni indicatori di errori sono: diversi da zero, overflow, commutazione di
segno.
Bit di stato Descrizione
SM1.0 Viene attivato dall'esecuzione di determinare operazioni quando il risultato
dell'operazione è zero
SM1.1 Viene attivato dall'esecuzione di determinare operazioni quando si ha un overfloow
o viene rilevato un valore numerico non ammesso
SM1.2 Viene attivato se una operazione numerica produce un risultato negativo
SM 1.3 Viene attivato quando si tenta di effettuare una divisione per zero
SM1.4 Viene attivato se l'operazione "Registra valore della tabella"determina un
riempimento eccessivo della tabella
SM1.5 Viene attivato se un'operazione FIFO o LIFO cerca di leggere un valore da una
tabella
SM1.6 Viene attivato se si tenta di convertire un valore in formato non BCD in valore binario
Viene attivato se un valore ASCII risulta non covertibile in un valore esadecimale
SM1.7 valido
19
TEMPORIZZATORI
20
E’ molto importante ricordarsi che il temporizzatore e il suo contatto non
possono stare nello stesso segmento, il PLC questo lo considera errore, per
cui vanno messi in due segmenti distinti.
21
CONTATORI
I contatori, nei PLC, hanno un formato simile ai temporizzatori, funzionano a
16 bit, vuol dire, tradotto in sistema decimale da 0 a 65535 (senza segno),
ma già che noi usiamo solamente numeri con segno, il nostro contatore conta
solo da 0 a 32767 (valori positivi).
I contatori hanno la funzione di conteggio, ogni qual volta si verifica una
transizione da un valore “off” ad uno “on” (detto fronte di salita) dell’ ingresso
di conteggio in avanti (CU) o indietro (CD) dal valore attuale in cui si trova il
contatore. La CPU S7-200 può usare per sviluppare delle funzioni basate sul
conteggio in quanto dispone di tre operazioni di conteggio differenti:
- conta in avanti CTU
- conta indietro CTD
- conta avanti/indietro CTUD
Istruzione Descrizione
Cxx
Il box "Conta in avanti" (CTU) conta in avanti fino al valore
CTU massimo per fronti di salita dell'ingresso di conteggio in avanti
(CU). Quando il valore attuale (Cxx) è massimo o uguale al
CU valore
di preimpostazione PV, il bit di conteggio Cxx viene attivato. Il bit
R di conteggio viene resettato quando si attiva l'ingresso di reset ®
Il contatore si arresta al raggiungimento del valore massimo
PV 32767
Cxx
Il box "Conta indietro" (CTD) conta indietro per fronti di salita
CTD dell'ingresso di conteggio indietro (CD). Quando il valore attuale
CD (Cxx) è uguale a zero il bit di conteggio (Cxx) viene attivato. Il bit
di conteggio viene resettato quando si attiva l'ingresso di
caricamento (LD). Inoltre il caricatore carica il valore corrente
LD con
valore corrente con il valore preimpostato (PV) quando
l'ingresso
diventa attivo. IL contatore si arresta al raggiungimento del
PV valore
zero.
Cxx
CTUD Il box "Conta in avanti/indietro" (CTUD) conta in avanti fino al
CU valore massimo per fronti di salita dell'ingresso di conteggio in
avanti (CU) e conta all'indietro fino al valore massimo per fronti
di
CD salita dell'ingresso di conteggio all'indietro (CD). Quando il
valore attuale (Cxx) è maggiore o uguale al valore preimpostato
R (PV), il bit di conteggio (Cxx) viene attivato. Il bit ci conteggio
viene resettato quando l'ingresso di reset ® è
attivato.
PV
23
Istruzione Descrizione
La funzione “Imposta (S)” setta le uscite (o la memoria) iniziando da
“S_bit” per il numero di uscite specificato da “n”
Q0.0
S_bit ------( S ) imposta ad 1 solo Q0.0
-------( S ) 1
n
Q0.0
------( S ) imposta ad 1 le uscite Q0.0, Q0.1 e Q0.2
3 in ordine crescente senza opportunità di alti
S_bit Q0.0
-------( R ) ------( R ) imposta ad 0 le uscite Q0.0, Q0.1 e Q0.2
n 3 in ordine crescente senza opportunità di salti
T40
------( R ) resetta il temporizzatore T40
1
C80
------( R ) resetta il contatore C80
1
T50
------( R ) resetta i temporizzatori T40, T41, T42
3
C100
------( R ) resetta i contatori C100, C101, C102, C103
4
24
Fronti di salita e di discesa
Quando un segnale passa dallo stato 0 (off) allo stato 1 (on) si parla di “fronte
di salita” e quando un segnale passa dallo stato 1 (on) allo stato 0 (off) si
parla di “fronte di discesa”. La funzione di rilevamento del fronte di salita,
conosciuta anche come “one loop on” o transizione positiva, effettua la
messa a 1 di un bit per una sola scansione del ciclo di programma,
indipendentemente dal tempo in cui il segnale che ha attivato il fronte di
salita, rimane nello stato 1, Viceversa, la funzione di rilevamento del fronte di
discesa, conosciuta anche come “one loop off” o transizione negativa,
effettua la messa a 0 di un bit per una sola scansione del ciclo di programma,
indipendentemente dal tempo in cui il segnale che ha attivato il fronte di
discesa, rimane nello stato 0.
I0.0
Q0.1
25
Rilevazione del fronte di discesa di I0.2
I0.1
Q0.2
Istruzione Descrizione
L'operazione "Rilevamento fronte positivo" (EU) rileva da un
ciclo
di scansione all'altro, una transizione da 0 a 1 nel valore
P superiore dello stack. Il contatto "Transizione positiva" permette
alla corrente di circolare per un ciclo di scansione per ogni
transizione da 0 a 1. Se viene rilevata una transizione, il
valore
superiore dello stack viene impostato a 1, altrimetri a 0
Istruzione Descrizione
L'operazione "Rilevamento fronte negativo" (ED) rileva da un
ciclo
di scansione all'altro, una transizione da 1 a 0 nel valore
superiore dello stack. Il contatto "Transizione negativa"
N permette
alla corrente di circolare per un ciclo di scansione per ogni
transizione da 1 a 0. Se viene rilevata una transizione, il
valore
superiore dello stack viene impostato a 0, altrimetri a 1
26
Funzioni di confronto
I PLC hanno diverse funzioni che consentono di confrontare byte (B), numeri
interi (I), doble word (D), numeri reali (R), inoltre si possono confrontare valori
di temporizzatori e contatori.
Le funzioni di confronto nel plc sono le seguenti: “uguale”, “maggiore”,
“minore”, “maggiore o uguale”, “minore o uguale”.
Si possono mettere anche due funzioni di confronto nello stesso segmento.
27
Istruzione Descrizione
N1 Il contatto per il “confronto di byte uguale” è chiuso se il valore byte
----| == B |---- memorizzato all’indirizzo N1 è uguale al valore byte memorizzato
all’indirizzo N2. La corrente passa per il contatto se chiuso.
N2
N1 Il contatto per il “confronto di numeri interi uguale” è chiuso se il valore di
----| == I |---- parola intera con segno memorizzato all’indirizzo N1 è uguale al
valore di parola intera con segno memorizzato all’indirizzo N2. La
N2
corrente passa per il contatto se chiuso
28
N1 Il contatto per il “confronto di byte minore o uguale” è chiuso se il valore di
----|<= B |---- byte memorizzato all’indirizzo N1 è minore o uguale al valore di byte
memorizzato all’indirizzo N2. La corrente passa per il contatto se
N2
chiuso.
N1 Il contatto per il “confronto minore o uguale di doppi numeri interi” è chiuso
----| <= D |---- se il valore di doppia parola intera con segno memorizzato
all’indirizzo N1 è minore o uguale al valore di doppia parola intera
N2
con segno memorizzato all’indirizzo N2. La corrente passa per il
contatto se chiuso.
N1 Il contatto per il “confronto minore o uguale di numeri reali” è chiuso se il
----|<= R |---- valore di numero reale memorizzato all’indirizzo N1 è minore o
uguale al valore di numero reale memorizzato all’indirizzo N2. La
N2
corrente passa per il contatto se chiuso
Il contatto NOT modifica lo stato dei segnali. Se il flusso di corrente
----| NOT |---- raggiunge il contatto Not, questo viene bloccato. Se il flusso non
raggiunge il contatto Not questo genera il flusso di corrente
29
Trasferimento di dati
Nel nostro esempio quando chiudiamo il contatto I0.0 il valore nel registro
sorgente (IN) viene trasferito nel registro destinazione (OUT), per cui nel
registro sorgente posso mettere qualsiasi valore sia numerico che di memoria
variabile basta che sia conforme alla nostra funzione di trasferimento, nel
nostro caso una word.
30
In questo esempio, alla chiusura del contatto I0.0, il valore numerico 150
viene trasferito nella memoria variabile VW20
In quest’altro esempio alla chiusura del contatto I0.0 il valore 150 viene
trasferito nella memoria variabile VW20, chiudendo il contatto I0.1 il valore
zero (0) viene trasferito nella memoria VW20 sostituendo il valore precedente
nella stessa memoria variabile.
31
Istruzione Descrizione
MOV_R Il box "Trasferisci numero reale" (MOV_R) trasferisce la doble word reale
EN di ingresso a 32 bit (IN) alla dooble word di uscita (OUT). La boble word
di ingresso non viene cambiata questa operazione
IN OUT
SWAP Il box "Scambia byte nella parola" (SWAP) scambia il byte più
EN significativo con il byte meno significativo della parola (IN)
IN
32
Sottoprogrammi
SUB 4 SUB 33
OB1
SUB
MAIN 1
SUB 5 SUB 34
SUB 6 SUB 35
SUB
2
SUB 7 SUB 36
33
Per inserire un sottoprogramma nel programma principale bisogna dare un
comando all’ingresso “EN” , di solito con il contatto “N.A. “ SM0.0 il merker
speciale i cui stato è sempre attivo.
34
La descrizione comandi del sottoprogramma nell'albero delle operazioni
indica il nome di ciascun parametro.
Ci sono due ragioni principali per cui può essere necessario utilizzare una
variabile locale:
· si vogliono creare dei sottoprogrammi trasportabili che non facciano
riferimento ad indirizzi assoluti o simboli globali
· si vogliono utilizzare delle variabili temporanee (variabili locali dichiarate
come TEMP) per effettuare dei calcoli, in modo da occupare meno spazio di
memoria nella CPU.
Tipo di dichiarazione.
Descrizione:
IN Parametri di ingresso forniti dall'unità di programma richiamante.
OUT Parametri di uscita restituiti all'unità di programma richiamante.
IN_OUT Parametro il cui valore viene fornito dall'unità di programma
richiamante, modificato dal sottoprogramma ed infine restituito all'unità
richiamante.
TEMPORARY Variabile temporanea salvata provvisoriamente nello stack
dei dati locali. Una volta conclusa l'esecuzione dell'unità di programma, il
valore della variabile temporanea non è più disponibile. Le variabili di questo
tipo non mantengono il valore tra un'esecuzione e l'altra dell'unità di
programma.
35
Adesso vediamo la pagina principale MAIN
36
Adesso SBR_1
37
Funzioni matematiche
ADDIZIONE (ADD)
I0.0
ABILITAZIONE
OPERANDO1 (IN1)
REGISTRO
(OUT) DESTINAZIONE
OPERANDO2 (IN2)
38
SEGMENTO 1
I0.0 MOV_W
EN
MOV_W
EN
MOV_W
EN
50 IN OUT VW40
SEGMENTO 2
I0.1 ADD_I
EN
VW20 IN1
VW30 IN2
OUT VW50
SUB_I
EN
VW50 IN1
VW40 IN2
OUT VW60
39
Istruzione Descrizione
40
EN numeri reali a 32 bit (IN1, IN2), e produce un risultato a 32 bit
(OUT), come riportato nella seguente equazione:
IN1
OUT IN1-IN2=OUT
IN2
DIV_R Il box "Dividi numeri reali " (DIV_R) divide tra loro due
EN numeri reali a 32 bit (IN1, IN2), e produce un risultato un numero reale
a 32 bit (OUT), come riportato nella seguente equazione:
IN1
OUT IN1:IN2=OUT
IN2
41