Sei sulla pagina 1di 41

P.I.

Marco Zollia

PROGRAMMAZIONE
DEI PLC S7-200 NEL
LINGUAGGIO
LADDER (KOP)

1
DESCRIZIONI DELLE PRINCIPALI
CARATTERISTICHE DEL SOFWARE S7-200

INTRODUZIONE

Il PLC (Programmable Logic Controller) ha ormai sostituito la tecnologia a


relè, specialmente in campo industriale.
L’utilizzo di queste apparecchiature comporta diversi vantaggi, quali:
- riduzioni dei costi
- ingombri ridotti
- minore provabilità di guasti
- possibilità di adattare la macchina alle diverse esigenze produttive,
semplicemente modificando il programma
Un PLC è costituito da una CPU che comunica con l’ambiente esterno
attraverso terminali di ingresso ed uscita.
I terminali di ingresso rilevano lo stato dei sensori (es. finecorsa, pulsanti,
fotocellule) installati sulla macchina; medianti i terminali d’uscita vengono
invece comandati teleruttori, elettrovalvole, segnalazioni luminose ecc.
I moderni PLC possono essere programmati mediante PC, utilizzando il
software fornito dalle case costruttrici, che mette a disposizione diversi
linguaggi. Tra questi il più semplice è il linguaggio ladder (KOP).
Un diagramma ladder si basa su una logica piuttosto simile a quella di uno
schema funzionale elettromeccanico: i suoi elementi base non sono altro che
relè virtuali.

2
P. L. C.

(Programmable Logic Controller)

Il PLC è nato nell’anno 1960 concepito dalla General Motors, prima


dell’avvento del microprocessore.
Negli anni ’70 il PLC si trasformò da semplice dispositivo di logica
sequenziale, in unità di governo multi-scopo.
Il vantaggio della logica programmabile rispetto alla logica cablata è apparso
subito evidente. (Appartiene alla logica cablata: metodo diretto, metodo in
cascata e elettropneumatica di base).
Si passa dalla rigidezza dei collegamenti pneumatici o elettrico-pneumatici,
che impongono una sola soluzione, alla possibilità di modificare a piacere le
fasi di un ciclo, senza dover spostare un tubo od un cavo.
Definizione di PLC: “speciale elaboratore di tipo industriale, concepito per
risolvere i problemi di controllo e automazione”.

Struttura di un PLC

Fig. 1
Memoria

Dal processo Sezione di Sezione di Al processo


ingresso CPU uscita

Sezione di
alimentazione

Il PLC può essere suddiviso in:


Unità centrale (CPU) - Memoria - Sezione di alimentazione -
Sezione di ingresso - Sezione di uscita

Il PLC, come ogni computer, è in grado di elaborare solamente delle


informazioni espresse con due livelli logici 1 e 0.
1 logico = presenza di segnale
0 logico = assenza di segnale

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.

Riportiamo di seguito la tabella di corrispondenza tra i vari codici:

DECIMALE BINARIO ESADECIMALE OTTALE


0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 8 10
9 1001 9 11
10 1010 A 12
11 1011 B 13
12 1100 C 14
13 1101 D 15
14 1110 E 16
15 1111 F 17

Le Memorie:
In un PLC, le funzioni di controllo e comando sono determinate dal programma, che
viene caricato, istruzione per istruzione, in memoria.

I vari tipi di memoria in un PLC sono:

 memoria di sistema (System memory)


 memoria applicativa (Application memory)

La memoria di sistema è destinata a contenere il sistema operativo definita dal


costruttore e non accessibile all’utente.

La memoria applicativa è destinata alle applicazioni e quindi all’utente e si divide in:

1. Memoria dati (Flag, Registri)


2. Memoria di programma (programma utente)

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)

RAM RANDOM ACCESS MEMORY (Memoria ad accesso casuale)


Sono memorie a lettura/scrittura e sono volatili.

ROM READ ONLY MEMORY (Memoria a sola lettura)


Non volatile e inalterabile nel tempo.

PROM PROGRAMMABLE READ ONLY MEMORY (Rom programmabile)


Dal contenuto fisso e inalterabile nel tempo. Possono essere programmate dall’utente.

EPROM ERASABLE PROGRAMMABLE READ ONLY MEMORY


(Memoria a sola lettura programmabile e cancellabile)
Sono non volatili. Si cancellano con l’esposizione ai raggi ultravioletti. Tempo di
esposizione 10-15 minuti.

EEPROM ELETTRICALLY ERASABLE PROGRAMMABLE ROM (Rom


programmabile elettricamente cancellabile)
Le memorie EEPROM o E2PROM, note anche come EAROM (Eletrically alterable
ROM), possono essere cancellate con tensioni opportune e senza rimuoverle dal PLC.

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.

Memoria dati o memoria di lavoro.


L’elaborazione di un programma da parte della CPU genera risultati intermedi che
devono essere memorizzati per il futuro. La memoria RAM di lavoro è adatta allo
scopo.
Prevede due sezioni:

1. Registri
2. Flag

Registri: elemento di memoria che registra lo stato logico di un segnale o di una


funzione eseguita.

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:

- risultati di operazioni numeriche


- valori di contatori
- valori di temporizzatori

Memorie di massa.
Sono in grado di memorizzare elevate quantità di dati o informazioni.
Floppy disk, EEPROM memory card.

Linguaggi di programmazione:

1. Ladder diagram (LD) o linguaggio a contatti.


2. Function block diagram (FBD) o schema a blocchi funzionale.
3. Instruction list (IL) o lista d’istruzioni.
4. Struktured text (ST) o letterale strutturato.
5. Sequential function chart (SFC) o diagramma funzionale in sequenza
(GRAFCET).

Ladder diagram (LD) Le caratteristiche principali sono:

- elementi grafici organizzati in reti connesse e barre d’alimentazione;


- forma grafica degli elementi imposta;
- evoluzione delle reti per elementi;
- elementi utilizzati: contatti, bobine, funzioni, blocchi funzionali, elementi di
comando (salti, ritorni, ecc.)

6
Contatto normalmente aperto

Contatto normalmente chiuso

Bobina o attuatore in uscita

Funtional Block Diagram. Usa una simbologia derivante dalla progettazione di


circuiti elettronici.

%10003

%10002 1
%Q0001
%10001 &

Solo per citare i due più vicini alle nostre conoscenze.

7
OPERAZIONI PRELIMINARI

Prima di iniziare ad utilizzare il PLC è opportuno verificare alcune


impostazioni hardware e software, facendo riferimento al manuale fornito
dalla casa costruttrice.
Si raccomanda di controllare la tensione di alimentazione del PLC (non è
uguale in tutti i modelli di PLC).
I modelli di CPU della classe 200 sono: 221; 222; 224: 224XP; 226
possono essere alimentati alla tensione di 24V in c.c., da 120 a 240V in a.c.

MODULI DI COMUNICAZIONE

Le CPU s7-200 sopportano diversi tipi di comunicazione:


- interfaccia punto a punto (PPI)
- interfaccia multipoint (MPI)
- PROFIBUS DB

Interfaccia punto a punto (PPI): è un protocollo master/slave (computer/PLC)


i dispositivi master inviano richieste ai dispositivi slave e questi ultimi
rispondono. I master comunicano con gli slave mediante un collegamento
condiviso gestito dal protocollo PPI. Il PPI non pone limiti al numero di master
che possono comunicare con gli slave, ma la rete non sopporta più di 32
master. Per le CPU 221, 222, 224 solo una porta RS-485, per le CPU 224XP
e 226 due porte RS-485.
Bisogna configurare i microinterruttori del cavo PC/PPI con la velocità di
trasmissione voluta (baud di rete) che sono 9,6; 19,2; 187,5 kbaud.
Connettere l’estremità RS-232 del cavo PC/PPI all’interfaccia di
comunicazione COM1 o COM2 del computer, l’altra estremità RS-485 del
cavo PC/PPI all’interfaccia di comunicazione della CPU.
Dopo aver fatto questo si va su VISUALIZZA (finestra di sinistra)→finestra
“IMPOSTA INTERFACCIA PG/PC

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.

Tornare su VISUALIZZA e andare sulla finestra COMUNICAZIONE →”fare


doppio clic per il refresh” e constatare che il nostro PLC sia collegato al PC.

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

Protocollo PROFIBUS: viene utilizzato per la comunicazione veloce con i


dispositivi DP (I/O remoti). Le reti PROFIBUS dispongono solitamente di un
master e di più dispositivi slave I/O. Il dispositivo master è configurato in
modo da riconoscere quali tipi di slave di I/O sono collegati e quali utilizzati.

11
PROGRAMMAZIONE DI BASE

Per accedere alla programmazione in linguaggio ladder si va sull’icona di


sinistra BLOCCO DI CODICE. Si apre una schermata suddivisa in parti
uguali chiamati SEGMENTI, questi segmenti fanno parte del programma
chiamato MAIN (OB1).
Per inserire un elemento nel diagramma bisogna aprire la relativa cartella,
selezionandolo o trascinarlo (tenerlo cliccato).
Per una corretta compilazione del programma occorre siglare gli elementi
seguendo precise tabelle (non è quindi ammesso assegnare sigle a piacere,
come avviene negli schemi elettromeccanici), per cui gli ingressi avranno
come sigla “I” e le uscite “Q”
Evitare di inserire più bobine nello stesso segmento (esempio)

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

Area di memoria CPU 222 CPU 224


Input da I 0.0 a I 15.7 da I 0.0 a I 15.7
Output da Q 0.0 a Q15.7 da Q 0.0 a Q15.7
Merker interni da M 0.0 a M31.7 da M 0.0 a M31.7
Merker speciali da SM 0.0 a SM 179.7 da SM 0.0 a SM 179.7
Memoria di
variabili da V 0.0 a V2047.7 da V 0.0 a V 5119.7

Accesso ai byte, alle parole o alle doppie parole della memoria

L’operatore può specificare l’indirizzo di un byte, di una parola (word), o di


una doppia parola (doble word), in un modo analogo al caso del singolo bit.
L’indirizzo consiste in un identificatore dell’area, dall’indicazione relativa alla
dimensione e dall’indirizzo del valore del byte, della word o della doppia word.

CAMPO NUMERI INTERI SENZA SEGNO


Grandezza dati FORMATO DECIMALE FORMATO ESADECIMALE

B(byte o 8 bit) da Q 0.0 a Q15.7 da Q 0.0 a Q15.7


W(word o 16 bit) da M 0.0 a M31.7 da M 0.0 a M31.7
D(doble word o 32
bit) da SM 0.0 a SM 179.7 da SM 0.0 a SM 179.7

CAMPO NUMERI INTERI CON SEGNO


FORMATO DECIMALE FORMATO ESADECIMALE

B(byte o 8 bit) da -128 a 127 da 80 a 7F


W(word o 16 bit) da -32768 a +32767 da 8000 a 7FFF
D(doble word o 32
bit) da -2.147.483.648 a +2.1474836 47 da 80000000 a 7FFFFFFF

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

Accesso ad un valore in formato


byte

Identificazione dell'area

V W 120
Ingresso del byte

Accesso ad un valore in formato


word

Identificazione dell'area

V D 120
Ingresso del byte

Accesso ad un valore in formato doble


word

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.

Merker interni (flag)

I merker interni (M), o relè di controllo, provvedono all’immagazzinamento di


risultati intermedi o di informazioni di controllo. Sebbene i merker interni
vengano usati come bit, l’accesso ad essi può avvenire non solo in bit, ma
anche in formato di byte, word e doble word.

Esempio di uso di un merker usato come autoritenuta per l’avvio di un’uscita,


con un pulsante di marcia (I0.0) e un pulsante di arresto (I0.1).

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.

Registro di stato SMB 0

SMB 0 contiene otto bit di stato, i quali vengono aggiornati dal controllore
programmabile alla fine di ogni ciclo di scansione.

Bit di stato Descrizione


SM 0.0 Questo bit è sempre attivo
SM 0.1 Questo bit è attivo nel primo ciclo di scansione. Esso viene usato, per
esempio, per richiamare un sottoprogramma di iniziazione.
SM 0.2 Questo bit viene attivato per la durata di un ciclo di scansione se i dati a
ritenzione sono andati persi. Tale bit può essere usato come merker
di errore o per richiamare una sequenza di avviamento speciale.
SM 0.3 Questo bit viene attivato per la durata di un ciclo di scansione se il modo
operativo RUN viene impostato da una condizione di accensione. Tale bit
può essere usato per riscaldare l'impianto prima dell'avviamento
SM 0.4 Questo bit provoca un impulso per rimanere attivo 30 secondi e, per altri
30 secondi disattivo, per la durata di un ciclo, ovvero per un minuto. Si ha
a disposizione, quindi, un tempo di ritardo di facile impiego, o un impulso
di 1 minuto.
SM 0.5 Questo bit provoca un impulso per rimanere attivo 0,5 secondi e, per altri
0,5 secondi disattivo, per la durata di un ciclo, ovvero per un secondo. Si ha
a disposizione, quindi, un tempo di ritardo di facile impiego, o un impulso,
o un impulso di un secondo.
SM 0.6 Questo bit è un impulso di ciclo, il quale è attivo per la durata di un ciclo,
e sisattivo durante il ciclo successivo. Tale bit può essere usato come
ingresso di un contatore di ciclo.
SM 0.7 Questo bit riflette le posizioni dell'interruttore di modo operativo
(TERM-off, RUN-on). Usando questo bit per abilitare il modo di
comunicazione liberamente programmabile, quando l'interruttore è
posizionato su RUN, si dve commutare l'interruttore su TERM per abilitare
la normale comunicazione con il dispositivo di programmazione

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

Nell’automazione industriale di notevole importanza è l’uso di temporizzatori,


essi permettono di sostituire i classici temporizzatori elettromeccanici, primo
perché i temporizzatori elettromeccanici non permettono di dare una
affidabilità come può darla un temporizzatore del PLC, secondo perché un
temporizzatore elettromeccanico ha una durata, invece il temporizzatore del
PLC ha una durata illimitata.
I temporizzatori del PLC funzionano a impulsi, ogni impulso è determinato dal
numero di temporizzatore che si usa. (vedere tabella 1) , i temporizzatori
vengono determinati dalla lettera “T” e seguita dal numero corrispondente,
ogni numero determina il valore “dell’impulso” che può variare da 0.001 sec,
a 0,1 sec.
I 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 temporizzatore conta solo da 0 a 32767 (valori positivi).
Le CPU 222 e 224 dispongono di 256 temporizzatori.

OPERAZIONI DI TEMPORIZZAZIONE: La CPU S7-200 può usare per


sviluppare delle funzioni basate sul tempo in quanto dispone di due
operazioni di temporizzazione differenti:
- temporizzatore avviato come ritardo all’ inserzione (TON)
- temporizzatore avviato come ritardo alla disinserzione (TOF)
- temporizzatore avviato come ritardo all’ inserzione con memoria (TONR)

Il box “Avvia temporizzatore con ritardo all’inserzione” (TON) misura il


tempo sino al valore massimo se l’ingresso di abilitazione (IN) viene
attivato. Se il valore corrente è maggiore o uguale al tempo di
reimpostazione (PT), il bit di temporizzazione viene attivato. Esso viene
resettato quando l’ingresso di abilitazione viene disabilitato. La
temporizzazione si arresta al raggiungimento del valore massimo

Il box “ Avvia temporizzatore con ritardo alla disinserzione” (TOF) consente


di ritardare la disattivazione di un’uscita per un dato periodo di tempo dopo
che l’ingresso è stato disattivato.

Il box “Avvia temporizzatore con ritardo all’inserzione con memoria”


(TONR) misura il tempo sino al valore massimo se l’ingresso di abilitazione
(IN) viene attivato. Se il valore corrente è maggiore o uguale al tempo di
reimpostazione (PT), il bit di temporizzazione viene attivato. La
temporizzazione si arresta quando l’ingresso di abilitazione viene
disattivato o al raggiungimento del valore massimo.

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.

Risoluzione temporizzatore Valore massimo Numero del temporizzatore


TON E
TOF 1 ms = 0,001 sec 32,767 sec T32, T96
TON E
TOF 10 ms = 0,01 sec 327,67 sec da T33 a T36 e da T97 a T100
TON E da T37 a T63 e da T101 a
TOF 100 ms = 0,1 sec 3276,7 sec T255

TORN 1 ms = 0,001 sec 32,767 sec T0, T64


TORN 10 ms = 0,01 sec 327,67 sec da T1 a T4 e da T65 a T68
TORN 100 ms = 0,1 sec 3276,7 sec da T5 a T31 e da T69 a T95

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

Le CPU 222 e 224 dispongono di 256 temporizzatori.


22
E’ molto importante ricordarsi che il contatore e il suo contatto non possono
stare nello stesso segmento, il PLC questo lo considera errore, per cui vanno
messi in due segmenti distinti. Bisogna sempre mettere il contatto sul reset,
chiaramente il contatto deve essere normalmente aperto, in caso contrario il
contatore resetta sempre e non conta.

Operazioni di imposta (SET) e resetta (RESET)

L’operazione SET può essere vista come l’impostazione di un’uscita in


autoritenuta, con questa istruzione si può impostare ad “1” un bit o un gruppo
di bit. Questa istruzione è affiancata sempre dalla funzione RESET il quale
imposta il bit, o un gruppo di bit, che prima era a “1”, lo imposta “0”.

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

La funzione “Imposta (R)” resetta le uscite (o la memoria) iniziando da


“S_bit” per il numero di uscite specificato da “n”. Se “S_bit” è un
temporizzatore (T) o un contatore (C), si il bit di temporizzazione e di
conteggio che il valore attuale di temporizzazione e conteggio vengono
resettati
Q0.0
------( R ) imposta ad 0 solo Q0.0
1

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.

Rilevazione del fronte di salita di I0.1

I0.0

Q0.1

Attiva solo per un Attiva solo per un


ciclo di scansione ciclo di scansione

25
Rilevazione del fronte di discesa di I0.2

I0.1

Q0.2

Attiva solo per un Attiva solo per un


ciclo di scansione ciclo di scansione

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.

Nel “segmento 1” è indicata una funzione di confronto “uguale” cioè il valore


indicato con “n1” deve essere uguale al valore “n2” , quando si raggiunge
questo valore c’è il passaggio di corrente e l’uscita Q0.0 viene portata al
valore 1.
Nel “segmento 2” la funzione di confronto “minore” e “maggiore” sono messe
nello stesso segmento. Se noi impostiamo al valore di “n1” un contatore
es. C1, e il primo “n2” al valore di 5 e il secondo “n2” il valore di 9, vedremo
che la prima funzione di confronto conduce per valori maggiori di 5 e la
seconda conduce per valori minori di 9, per cui l’uscita Q0.1 va al valore 1 per
valori compresi tra 6 e 8.

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

N1 Il contatto per il “confronto uguale di doppi numeri interi” è chiuso se il


----| == D |---- valore di parola intera con segno memorizzato all’indirizzo N1 è
uguale al valore di parola intera con segno memorizzato all’indirizzo
N2
N2. La corrente passa per il contatto se chiuso

N1 Il contatto per il “confronto uguale di numeri reali” è chiuso se il valore di


----| == R |---- parola intera con segno memorizzato all’indirizzo N1 è uguale al
valore di numero reale memorizzato all’indirizzo N2. La corrente
N2
passa per il contatto se chiuso

N1 Il contatto per il “confronto di numeri interi maggiore o uguale” è chiuso se il


----| >= I |---- valore di parola intera con segno memorizzato all’indirizzo N1 è
uguale al valore di parola intera con segno memorizzato all’indirizzo
N2
N2. La corrente passa per il contatto se chiuso.
N1 Il contatto per il “confronto maggiore o uguale di doppi numeri interi” è chiuso
----| >= D |---- se il valore di doppia parola intera con segno memorizzato
all’indirizzo N1 è uguale al valore di doppia parola intera con segno
N2
memorizzato all’indirizzo N2. La corrente passa per il contatto se
chiuso.
N1 Il contatto per il “confronto maggiore o uguale di numeri reali” è chiuso se il
----|>= R |---- valore di numero reale memorizzato all’indirizzo N1 è uguale al
valore di numero reale memorizzato all’indirizzo N2. La corrente
N2
passa per il contatto se chiuso.

N1 Il contatto per il “confronto di byte maggiore o uguale” è chiuso se il valore


----|>= B |---- di byte memorizzato all’indirizzo N1 è uguale al valore di byte
memorizzato all’indirizzo N2. La corrente passa per il contatto se
N2
chiuso.
N1 Il contatto per il “confronto di numeri interi minore o uguale” è chiuso se il
----| <= I |---- valore di parola intera con segno memorizzato all’indirizzo N1 è
minore o uguale al valore di parola intera con segno memorizzato
N2
all’indirizzo N2. La 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

Tutti i computer, inclusi i PLC, sono in grado di trasferire il contenuto di un


registro della memoria da un indirizzo all’altro durante l’elaborazione del
programma. Un PLC ha istruzioni per trasferire un registro per volta ed
istruzioni per trasferire un gruppo di registri in una sola operazione.
In tutti i tipi di trasferimento il contenuto del registro iniziale rimane inalterato,
alla fine del trasferimento si avrà una duplicazione del contenuto del registro
sorgente nel registro di duplicazione. Ovviamente, il contenuto precedente
del registro di duplicazione viene cancellato e sostituito con il nuovo valore.

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_B Il box "Trasferisci byte" (MOV_B) trasferisce il byte di ingresso


EN (IN) al byte di uscita (OUT). Il byte di ingresso non viene cambiato
da questa operazione
IN OUT

Il box "Trasferisci word" (MOV_W) trasferisce la word di


MOV_W ingresso
EN (IN) al byte di uscita (OUT). La word di ingresso non viene cambiata
da questa operazione
IN OUT

MOV_DW Il box "Trasferisci doble word" (MOV_DW) trasferisce la doble word


EN di ingresso (IN) alla dooble word di uscita (OUT). La boble word di ingresso
non viene cambiata questa operazione
IN OUT

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

Quando ci troviamo di fronte programmazioni complesse che richiedono una


serie notevole di “segmenti”, possiamo scomporre il programma principale
(MAIN o OB1) in diversi sottoprogrammi tutti legati tra loro, in base alla
programmazione che faremo, oppure se durante la programmazione ci sono
delle istruzioni che si ripetono si può far ricorso a dei sottoprogrammi.
Si possono avere fino a 64 sottoprogrammi (solamente nella CPU 226XM si
possono avere 128).
Il programma principale può essere costituito solamente da sottoprogrammi,
nel programma principale al massimo posso mettere 8 sottoprogrammi, si
possono avere sottoprogrammi di sottoprogrammi.

SUB 4 SUB 33
OB1
SUB
MAIN 1

SUB 5 SUB 34

SUB 6 SUB 35
SUB
2

SUB 7 SUB 36

LIVELLO 1 LIVELLO 2 LIVELLO 3 LIVELLO 8

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.

Nel “sottoprogramma 1” (SBR_0) adesso possiamo costruire una parte del


programma, nel nostro caso, il programma principale è diviso in due
sottoprogrammi.

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

Adesso vediamo ogni sottoprogramma prima SBR_0

36
Adesso SBR_1

37
Funzioni matematiche

Un PLC è in grado di eseguire le funzioni matematiche tradizionali.


Qualunque operazione avviene quando la linea di abilitazione passa dallo
stato OFF allo stato ON.
Le operazioni matematiche permettono all’utente di eseguire dei calcoli nel
proprio programma. Nella programmazione a contatti (KOP) l’utente ha a
disposizione quattro box matematici, con i quale può sommare e sottrarre
valori a 16 e 32 bit. Il box della moltiplicazione moltiplica due numeri interi a
16 bit, e produce come risultato un numero intero a 32 bit. Il box della
divisione divide due numeri interi a 16 bit, il risultato è un quoziente a 16 bit
con il resto a 16 bit che viene caricato nell’indirizzo seguente all’indirizzo in
cui è memorizzato il quoziente.
L’S7-200 supporta la matematica a numeri interi e a virgola mobile per le
quattro operazioni fondamentali (somma, sottrazione, moltiplicazione e
divisione), sopporta anche la funzione radice quadrata e quella di
conversione tra numero reale e intero a doble word.

ADDIZIONE (ADD)
I0.0
ABILITAZIONE

OPERANDO1 (IN1)

REGISTRO
(OUT) DESTINAZIONE

OPERANDO2 (IN2)

In questo esempio vediamo una operazione di addizione, se l’addizione è


“somma di numeri interi” sia IN1 e IN2 sono a 16 bit (word), per cui si può
mettere un numero intero fino a 65535 oppure una memoria variabile in word
( V W 20), e chiaramente anche il risultato deve essere una word.
In caso di operazioni con numeri reali che a doble word funzionano a 32 bit,
per cui useremo memorie variabile del tipo (VD100).

38
SEGMENTO 1
I0.0 MOV_W
EN

100 IN OUT VW20

MOV_W
EN

200 IN OUT VW30

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

Usiamo tre funzioni di trasferimento MOVE_W, perché le funzioni


matematiche funzionano a 16 bit (word), chiudendo il contatto I0.0,
trasferiamo i valori numerici nelle memorie variabili corrispondenti, chiudendo
il contatto I0.1 attiviamo le operazioni, nel nostro caso la V W 50 passa da
risultato della somma a valore (IN1) nella sottrazione per cui il risultato di
queste operazioni sarà 250.

39
Istruzione Descrizione

ADD_I Il box "Somma di numeri interi (a 16 bit)" (ADD_I) somma due


EN numeri interi a 16 bit (IN1, IN2), e produce un risultato a 16 bit
(OUT), come riportato nella seguente equazione:
IN1
OUT IN1+IN2=OUT
IN2

SUB_I Il box "Sottrai di numeri interi (a 16 bit)" (SUB_I) sottrae due


EN numeri interi a 16 bit (IN1, IN2), e produce un risultato a 16 bit
(OUT), come riportato nella seguente equazione:
IN1
OUT IN1-IN2=OUT
IN2

ADD_DI Il box "Somma di numeri interi (a 32 bit)" (ADD_DI) somma due


EN numeri interi a 32 bit (IN1, IN2), e produce un risultato a 32 bit
(OUT), come riportato nella seguente equazione:
IN1
OUT IN1+IN2=OUT
IN2

SUB_DI Il box "Sottrai di numeri interi (a 32 bit)" (SUB_DI) sottrae due


EN numeri interi a 32 bit (IN1, IN2), e produce un risultato a 32 bit
(OUT), come riportato nella seguente equazione:
IN1
OUT IN1-IN2=OUT
IN2

MUL Il box "Moltiplica numeri interi (a 16 bit)" (MUL) moltiplica due


EN numeri interi a 16 bit (IN1, IN2), e produce un risultato a 32 bit
(OUT), come riportato nella seguente equazione:
IN1
OUT IN1xIN2=OUT
IN2

Il box "Dividi numeri interi (a 16 bit)" (DIV) divide


DIV due
EN numeri interi a 16 bit (IN1, IN2), e produce un risultato a 32 bit
(OUT), come riportato nella seguente equazione:
IN1
OUT IN1:IN2=OUT
IN2

SUB_R Il box "Sottrai di numeri reali (a 32 bit)" (SUB_R) sottrae due

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

Il box "Moltiplica numeri reali (a 32 bit)" (MUL_R) moltiplica


MUL_R due
EN numeri reali a 32 bit (IN1, IN2), e produce un risultato a 32 bit
(OUT), come riportato nella seguente equazione:
IN1
OUT IN1xIN2=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

SQRT L'operazione "Radice quadrata di un numero reale" (SQRT)


EN estrae la radice quadrata di un numero reale a 32 bit (IN), il risultato
prodotto (OUT), è anch'esso un numero reale a 32 bit, come riportato
nella seguente equazione
OUT √IN1=OUT
IN1

41