Alla scoperta dei PLC: la programmazione ladder

PLC - programmazione ladder

Nel precedente articolo abbiamo visto i concetti introduttivi e generali relativi ai PLC. La nostra avventura nel fantastico mondo dei PLC è solo all’inizio, e ci attende un’altra tappa importante. Siete curiosi? Volete apprendere i rudimenti della programmazione dei controllori a logica programmabile? Andiamo allora alla scoperta del linguaggio di programmazione per PLC più “antico”, ma ancora oggi ampiamente utilizzato, vale a dire la logica ladder.

Dalla scorsa puntata, abbiamo appreso che un PLC è fondamentalmente un dispositivo programmabile la cui funzione è quella di processare un insieme di ingressi e, sulla base delle logiche implementate al suo interno (il “programma”), determinare il valore da assegnare alle sue uscite. Aggiungiamo ora qualche altra informazione che ci servirà per meglio comprendere la fase di programmazione dei PLC. Anzitutto occorre specificare che sia gli ingressi che le uscite di un PLC sono associati a dispositivi di campo reali (sensori, trasduttori, motori, elettrovalvole, lampade, relè, ecc.), i quali sono in genere alimentati con tensioni alternate (valori tipici sono 120 VAC oppure 230 VAC) oppure con tensioni continue (il valore tipico è 24 VCC). Il PLC, al suo interno, è invece realizzato con componenti elettronici che operano a bassa tensione (ad es. 5 VCC); si pensi tipicamente alla CPU e alle memorie RAM e ROM. Ciò implica che i moduli (schede) di ingresso di un PLC dovranno gestire opportunamente questa differenza di tensione e disaccoppiare elettricamente le due parti, in modo tale da proteggere la componente a bassa tensione ed evitare il suo danneggiamento. Gl ingressi del PLC sono pertanto collegati tramite dei circuiti disaccoppiatori a livello ottico, e sono spesso dotati di un opportuno circuito di filtraggio. Per quanto riguarda invece le uscite, sono possibili diverse opzioni, a seconda del tipo di alimentazione utilizzata dal carico. Nel caso di carichi alimentati a 120/230 VAC, si utilizzano tipicamente dei triac. Per carichi alimentati a 5/12/24 VCC si utilizzano invece dei transistor (tradizionali, oppure FET o MOSFET). I relè, infine, rappresentano ancora oggi una soluzione “general-purpose”, e si adattano ad entrambi i tipi di alimentazione citati precedentemente. Altra informazione importante da tenere presente riguarda l’indirizzamento degli I/O di un PLC. Ad ogni segnale di ingresso/uscita viene infatti assegnato un indirizzo univoco, utilizzato poi negli schemi e all’interno del programma. Esistono due modalità di assegnamento dell’indirizzo:

  • indirizzo assegnato in base alla posizione fisica del segnale di ingresso/uscita
  • indirizzo assegnato in base a un valore (codice) programmabile

La tecnica più utilizzata è la prima, in quanto dipende esclusivamente dalla posizione fisica delle schede di I/O e dalla posizione del singolo segnale all’interno della scheda. Supponiamo ad esempio che un PLC sia equipaggiato con due schede di ingresso ciascuna con 8 segnali, e una scheda di uscita anch’essa con 8 segnali. Gli ingressi della prima scheda verranno allora identificati tramite la notazione I0.0 (primo ingresso della prima scheda di input), I0.1, .. , I0.7 (ultimo ingresso della prima scheda di input). Analogamente, gli ingressi della seconda scheda verranno identificati con: I1.0, I1.1, .. , I1.7. Per le uscite si utilizza invece la lettera “Q”, quindi avremo: Q0.0, Q0.1, .. , Q0.7. E’ importante abituarsi a utilizzare questa terminologia, perchè è la stessa che viene utilizzata per identificare i segnali sulle targhette dei PLC commerciali. Nel caso di PLC alimentati a +24 VCC, potremo anche facilmente individuare le due linee di alimentazione per ogni scheda di I/O; tipicamente, relativamente alla prima scheda, i segnali sono identificati con le notazioni 1M per la massa, e 1L+ per il positivo dell’alimentazione (per la seconda scheda avremo 2M e 2L*, e così via).

La logica ladder

La logica ladder, che si esprime graficamente attraverso i diagrammi ladder, è stato storicamente il primo tipo di linguaggio utilizzato per la programmazione dei PLC. Del resto, i PLC sono nati proprio per sostituire e semplificare i tradizionali sistemi elettro-meccanici per l’automazione basati sui relè. Di conseguenza, è naturale che il primo linguaggio ad essere sviluppato fosse proprio basato su una rappresentazione grafica del tutto simile a quella dei tradizionali schemi elettrici a relè. Questa semplicità ed intuitività, che fra l’altro ha permesso di eliminare i costi di training del personale (già abitutato ad utilizzare questo tipo di rappresentazione), ha decretato il successo e la diffusione della logica ladder, a tal punto che ancora oggi non è stata soppiantata da altri metodi di programmazione, più moderni ed evoluti. Un diagramma ladder assomiglia effettivamente a una scala a pioli (ladder, in inglese) e va interpretato esaminandolo dall’alto verso il basso, e da sinistra verso destra, proprio come se si stesse leggendo un comune libro. La parte a sinistra di ogni ramo (“rung” in inglese) contiene il blocco decisionale, mentre quella più a destra contiene il blocco attuativo, quello cioè dove vengono opportunamente settate le uscite.

   +——————–+   +——————+

—| blocco decisionale |—| blocco attuativo |—

   +——————–+   +——————+

Il blocco decisionale è composto da una combinazione di “contatti” (in pratica, porte logiche di tipo AND, OR, NOT) le quali operano su delle variabili che possono essere, di volta in volta, ingressi, uscite, o bit appartenenti alla memoria interna del PLC. Ad ogni contatto viene quindi associato l’indirizzo della corrispondente variabile di memoria (ad esempio I1.0) ed eventualmente anche un nome simbolico. I contatti possono essere di due tipi distinti:

  • contatto normalmente aperto: è chiuso (ON) quando il bit associato ha valore 1, mentre è aperto (OFF) quando il bit associato ha valore 0
  • contatto normalmente chiuso: è chiuso (ON) quando il bit associato ha valore 0, mentre è aperto (OFF) quando il bit associato ha valore 1

I simboli corrispondenti sono i seguenti:

–| |–  contatto normalmente aperto

–|/|–  contatto normalmente chiuso

Come esempio pratico di blocco decisionale, si consideri il seguente caso. Vogliamo rappresentare graficamente il blocco decisionale tale per cui, dati i tre ingressi I1, I2, e I3, l’uscita del blocco è ON (valore 1) se I1 e I2 valgono 1 mentre I3 vale 0. Utilizzando l’algebra di Boole, dovremo in sostanza rappresentare graficamente l’espressione:

I1 AND I2 AND (NOT I3)

I1 e I2 sono ON quando i bit corrispondenti valgono 1, per cui saranno rappresentati da contatti normalmente aperti. I3, viceversa, è ON quando il bit corrispondente vale 0, quindi sarà rappresentato da un contatto normalmente chiuso. Riassumendo, avremo il seguente diagramma ladder:

|    I1    I2    I3   |

+—| |—| |—|/|—+

|                     |

Come ulteriore esempio, supponiamo che si voglia rappresentare con un diagramma ladder l’espressione:

(I1 OR I2) AND I3

In questo caso tutti gli ingressi saranno di tipo normalmente aperto, e il corrispondente diagramma ladder sarà:

|    I1        I3   |

+—| |—+—| |—+

|         |         |

|    I2   |         |

+—| |—+         |
|                   |
Per quanto riguarda il blocco attuativo, questo viene solitamente rappresentato con una notazione del tipo:
     Q
—(   )—
In questo caso, il blocco attuativo (uscita) vale 1 (0) quando il blocco decisionale che la precede genera in uscita un valore pari a 1 (0). In pratica, il valore di Q corrisponde (è =) all’uscita del blocco decisionale. Questo è un caso particolare di uscita, vedremo più avanti altri tipi diversi della stessa (le funzioni di set e reset).
Come semplice applicazione dei concetti appena esposti, supponiamo si voglia rappresentare tramite un diagramma ladder un semplicissimo circuito, composto da due pulsanti (P1 e P2) che permettono di attivare un carico (ad esempio un motore) da due punti dislocati in posizioni diverse, e da un pulsante di emergenza (P3) che serve a disattivare il carico indipendentemente dallo stato di P1 e P2. Possiamo rappresentare tutto ciò con il seguente diagramma:
|    I1    I2    I3    Q    |
+—| |—| |—|/|—( )—+
|                           |
I1 e I2 sono due contatti normalmente aperti in quanto normalmente il carico (motore) non è attivato. I3 è invece un contatto normalmente chiuso in quanto, essendo un interruttore di emegenza, normalmente non interferirà con il funzionamento del carico, disaccopiandolo solo quando esso viene volutamente premuto. L’espressione logica corrispondente sarà la seguente:
Q = I1 AND I2 AND (NOT I3)
L’estensione del contatto di uscita (utilizzabile anche come relè interno) genera due nuove varianti, dette set e reset.
—( S )— simbolo del SET
—( R )— simbolo del RESET
Il loro significato è il seguente. Un’uscita SET è tale per cui vale 1 quando il blocco decisionale che la precede assume il valore 1, mentre rimane inalterata in caso contrario. Quindi il SET funge da “latch” dell’ingresso quando esso passa dal valore 0 a 1. L’uscita RESET, viceversa, vale 1 quando il blocco decisionale che la precede assume il valore 0, mentre rimane inalterata in caso contrario. Sia il SET che il RESET possono essere applicati a più variabili (indirizzi). In tal caso il numero n di indirizzi a cui fa riferimento il SET o RESET viene mostrato sotto il simbolo stesso.
Ad esempio:
    Q0
—( S )—
     4
In precedenza si è detto che il simbolo di uscita può essere utilizzato anche per rappresentare delle variabili di memoria interne (si parla in questo caso di punti interni o “merker“). I merker sono in sostanza dei relè ausiliari e servono a memorizzare lo stato di una veriabile interna (tipicamente un singolo bit). I merker vengono identificati con la lettera “M”. Esempio:
    M0.1   I1.2
|—(  )—|  |— …
I punti interni presentano il vantaggio di poter sostituire un blocco logico presente in più punti del diagramma con un unico merker, richiamando poi quest’ultimo ogni volta che è necessario.
Prima di passare oltre, occorre introdurre un altro concetto molto importante relativo all’uscita (che, ricordiamo, viene anche indicata con il termine “bobina“, proprio come avviene nel mondo dei relè). Questo concetto viene detto “autoritenuta“, e si ha quando un’uscita viene utilizzata anche nella parte decisionale del diagramma ladder.
Si consideri il seguente diagramma:
|   I0.0        I0.1   O1.1   |
+—|  |—+—| / |—(  )—+
|          |                  |
+—(  )—+                  |
|   O1.1                      |
Questo è un classico esempio di circuito con autoritenuta. Premendo il pulsanto associato all’ingresso I0.0, la bobina O1.1 viene attivata (supponiamo che ad essa venga associata una lampada, che quindi si accenderà). Ora, la stessa bobina è presente anche nel secondo ramo del diagramma, e pertanto la bobina rimarrà attivata anche dopo il rilascio del pulsante associato a I0.0. Un secondo pulsante (associato al contatto normalmente chiuso I0.1) permetterà poi di forzare la disattivazione dell’uscita (spegnimento della lampada) quando richiesto.

Il temporizzatore

Esistono fondamentalmente tre tipi di temporizzatori, raggruppati in due sottoclassi:

  • temporizzatori TOF, ritardati alla diseccitazione
  • temporizzatori TON e TONR, ritardati all’eccitazione. La differenza tra questi ultimi due è che il temporizzatore TON si eccita soltanto quando viene abilitato, in modo continuativo e senza interruzioni, per il periodo impostato; non dispone quindi di una memoria relativa al periodo di abilitazione. Il temporizzatore, TONR, viceversa, ha una funzione di memoria e può eccitarsi anche dopo un’interruzione del conteggio (ad esempio dopo un power down), mantenendo memoria del periodo di abilitazione già trascorso

Negli schemi, i temporizzatori vengono rappresentati con la lettera T seguita da un numero, ad esempio T12. Il periodo necessario affinchè il timer si abiliti viene detto tempo di preset, ed è sempre un multiplo della base di tempo, o risoluzione, del timer. Valori tipici di risoluzione per i temporizzatori dei PLC commerciali sono 1 ms, 10 ms, e 100 ms. A scopo puramente informativo, si consideri la seguente tabella, estratta dalle caratteristiche tecniche del PLC Siemens S7200 (le varie colonne si riferiscono a diversi modelli di CPU appartenenti alla stessa serie di PLC).

Con riferimento proprio al PLC S7200, supponiamo ad esempio di voler impostare un periodo di 2 secondi tramite il temporizzatore, di tipo TON, T36. Dalla tabella osserviamo che questo temporizzatore ha una risoluzione di 10 ms. Pertanto, il valore di preset dovrà essere pari a:

preset = periodo (in ms) / risoluzione (in ms) = 2000/10 = 200

La rappresentazione grafica del temporizzatore è la seguente:

   +———–+

—|IN      TON|—

   |           |

100|PT     10ms|

   +———–+

IN è l’ingresso di abilitazione, al quale corrisponde l’uscita (vicino alla quale è indicato il tipo di temporizzatore, TON in questo caso). In basso a sinistra è indicato il preset (PT), mentre in basso a destra la risoluzione (10 ms in questo caso). Supponiamo ora di voler creare il diagramma ladder per un circuito temporizzatore delle luci scale. Semplificando al massimo il problema, immaginiamo la presenza di un pulsante associato all’ingresso I1.2 del PLC e di una bobina Q2.0 associata alla lampada delle scale. Supponiamo di voler ottenere una temporizzazione di 30 secondi: quando il pulsante viene premuto, le luci scale rimangono accese per 30 secondi, dopodichè si spengono automaticamente. Possiamo quindi usare il temporizzatore T38 visto in precedenza, e in questo caso il preset andrà caricato con il valore 3000 (3000 x 10 ms = 30 sec).

Lo schema completo è il seguente:

|   I1.2           Q2.0    |

+—|  |—+——(  )—–+

|          |               |

|   Q2.0   |               |

+—|  |—+               |

|                 T38      |

|   Q2.0     +———-+  |

+—|  |—–|IN     TON|  |

|            |          |  |

|        3000|PT    10ms|  |

|            +———-+  |

|    T38       Q2.0        |

+—| / |——|  |——–+

|                          |

Questo diagramma, di primo acchito, può sembrare un attimino complesso. In realtà non è così, basta armarsi di buona volontà e di un pò di pazienza e applicare i concetti visti in precedenza. Anzitutto, ricordiamo che il termine ladder significa scala a pioli, e che dobbiamo interpretare il diagramma partendo dall’angolo in alto a sinistra, procedendo poi dall’alto verso il basso e da sinistra verso destra. Il primo rung (piolo) che incontriamo è relativamente immediato: ci dice che il contatto normalmente aperto associato all’ingresso I1.2 del PLC (in pratica un pulsante), quando attivato (cioè premuto) attiva la bobina (lampada delle scale) associata all’uscita Q2.0 del PLC. Inoltre, sotto a I1.2 è presente un ramo di autoritenuta; ciò significa che una volta accesa, la lampada rimarrà tale anche dopo il rilascio del pulsante. Questo è il primo piolo, ma non è sufficiente a soddisfare interamente il nostro requisito, che richiede la temporizzazione di 30 secondi. Andiamo allora ad analizzare il secondo rung, dove compare il timer T38. Qui vediamo che la bobina Q2.0 è utilizzata per abilitare il timer stesso. Ciò significa che, una volta accesa, lo stato della lampada verrà utilizzato per abilitare il timer. Il preset è 3000, la risoluzione 10ms, e il tipo di timer è TON (senza memoria). Per attivare T38 è pertanto necessario tenere attivata l’uscita Q2.0 per almeno 30 secondi, senza interruzioni (rilasci del pulsante e/o interruzioni dell’alimentazione). Quando ciò avviene, T38 diventa attivo. Come indicato nel terzo e ultimo rung, T38 attivo forza Q2.0 a 0, e quindi la lampada si spegnerà. Non era poi così complicato come sembrava, non è vero?

I contatori

I contatori vengono contraddistinti con la lettera C seguita da un numero, ad esempio C120 e C14 sono entrambi dei possibili identificativi per un contatore. Tutti i moduli contatori sono provvisti di un ingresso per abilitare il conteggio; nei contatori “normali” il conteggio procede sempre in avanti, e questo ingresso viene identificato con la sigla “CU” (count up). Esistono poi dei contatori, detti “reversibili”, che oltre al normale ingresso CU sono provvisti di un secondo ingresso di contaggio per abilitare il conteggio verso il basso. Questo secondo ingresso viene identificato con la sigla “CD” (count down). Entrambi i contatori hanno poi un ingresso di reset (R) e un ingresso al quale viene associato il preset del contatore. La simbologia per i due tipi di contatori è la seguente (CTU è il contatore “normale”, mentre CTUD è quello reversibile):

   +———–+

   |CU      CTU|

   |           |

   |R          |

   |           |

+10|PV         |

   +———–+

Inizialmente, o dopo ogni fronte presente sul segnale di ingresso di reset (R), il contatore parte dal valore 0. Ad ogni fronte che si presenta sull’ingresso di conteggio CU, il contatore si incrementa, e ciò continua fino al raggiungimento del preset impostato tramite PV (10 in questo caso). A questo punto, l’uscita del contatore è abilitata e può attivare altri blocchi presenti nel diagramma ladder.

   +————–+

   |CU        CTUD|

   |              |

   |CD            |

   |              |

   |R             |

   |              |

+15|PV            |

   +————–+

Il contatore reversibile è del tutto simile a quello normale, con la differenza che il conteggio può essere decrementato attivando il segnale di ingresso CD. E’ importante far notare che, al raggiungimento del valore 0, ulteriori impulsi presenti su CD hanno ancora effetto; è perciò possibile assegnare a PV un valore negativo (in virtù di questo fatto, si preferisce indicare esplicitamente il segno dei numeri associati all’ingresso PV, in modo tale da non creare possibili ambiguità). Buona parte dei PLC commerciali, inoltre, dispone anche di contatori solo all’indietro, anche se le due categorie più utilizzate sono quelle che abbiamo indicato in precedenza.

Come applicazione pratica dei contatori, supponiamo di modellare un semplice circuito che richiede l’inserimento di una chiave di sicurezza per abilitare un’uscita (ad esempio l’apertura di una cassaforte). Supponiamo di avere 3 pulsanti (P1, P2, e P3) attraverso i quali dobbiamo selezionare le 3 cifre della combinazione (P1 per la prima cifra, P2 per la seconda, e P3 per la terza). Supponiamo poi che vi sia un quarto pulsante (P4) attraverso il quale viene resettato il conteggio su tutte e tre le cifre, quindi un reset completo del circuito. L’apertura della cassaforte avverrà poi tramite una serratura elettromeccanica associata all’uscita A0.0 del PLC, mentre i 4 pulsanti verranno associati agli ingressi I0.1, .. , I0.3. Possiamo a questo punto buttare giù il diagramma ladder corrispondente (supponiamo che la combinazione segreta sia 647):

|                   C0

|     I0.1      +———+

+—–|  |——|CU    CTU|

|     I0.0      |         |

+—–|  |——|R        |

|               |         |

|           +6 -|PV       |

|               +———+

|                   C1

|     I0.2      +———+

+—–|  |——|CU    CTU|

|     I0.0      |         |

+—–|  |——|R        |

|               |         |

|           +4 -|PV       |

|               +———+

|                   C2

|     I0.3      +———+

+—–|  |——|CU    CTU|

|     I0.0      |         |

+—–|  |——|R        |

|               |         |

|           +7 -|PV       |

|               +———+

|   C0    C1    C2   Q0.0 |

+–|  |–|  |–|  |–(  )-+

|                         |

Si tratta ovviamente di un esempio puramente didattico, però contiene di per sè tutti gli elementi che servono per saper applicare e comprendere l’utilizzo dei contatori nella logica ladder.

Conclusioni

In questo secondo articolo sui PLC abbiamo affrontato e analizzato un linguaggio per la programmazione dei PLC, quello storicamente più antico e più vicino alla tradizionale logica dei circuiti a relè. Pur se datata, la programmazione in ladder logic è utilizzata ampiamente ancora oggi, tanto è vero che praticamente tutti i tool di sviluppo per i PLC delle principali case costruttici permettono di creare programmi con questa tecnica.

Nel corso della prossima puntata ci spingeremo un pò più in là, andando a vedere i principali linguaggi di programmazione di tipo testuale, cioè quelli più simili ai tradizionali linguaggi di programmazione procedurali (Pascal, Basic, C, ecc.). Torneremo comunque a parlare di ladder logic in una puntata successiva, nella quale verranno esaminati e messi alla prova alcuni software di programmazione per PLC (in versione free o evaluation).

 

Quello che hai appena letto è un Articolo Premium reso disponibile affinché potessi valutare la qualità dei nostri contenuti!

 

Gli Articoli Tecnici Premium sono infatti riservati agli abbonati e vengono raccolti mensilmente nella nostra rivista digitale EOS-Book in PDF, ePub e mobi.
volantino eos-book1
Vorresti accedere a tutti gli altri Articoli Premium e fare il download degli EOS-Book? Allora valuta la possibilità di sottoscrivere un abbonamento a partire da € 2,95!
Scopri di più

11 Comments

  1. Piero Boccadoro Piero Boccadoro 21 maggio 2013
  2. Emanuele Emanuele 22 maggio 2013
  3. ciccio-1976 22 maggio 2013
  4. Boris L. 22 maggio 2013
  5. Boris L. 22 maggio 2013
  6. Max Caruso 23 maggio 2013
  7. Piero Boccadoro Piero Boccadoro 24 maggio 2013
  8. slovati slovati 24 maggio 2013
  9. Max Caruso 27 marzo 2014
  10. slovati slovati 29 marzo 2014
  11. Max Caruso 29 marzo 2014

Leave a Reply