1. Bit
Il bit è la più piccola unità di informazione binaria e può assumere soltanto due valori:
0 oppure 1
Lo 0 e l’1 sono valori logici. In un dispositivo elettronico devono essere rappresentati mediante grandezze fisiche; negli ingressi digitali questo avviene normalmente attraverso determinati intervalli di tensione e corrente.
In un sistema industriale con ingressi nominali a 24 V in corrente continua, quindi, non bisogna intendere che soltanto 0,000 V significhi 0 e soltanto 24,000 V significhi 1. L’ingresso riconosce come stato 0 oppure stato 1 determinati intervalli di valori, con soglie definite dalle caratteristiche dell’ingresso.
I valori logici e i valori elettrici sono quindi due cose distinte:
valore elettrico → interpretazione dell’ingresso → valore logico 0 oppure 1
2. Che cosa rappresentano 0 e 1
Una volta ottenuto uno stato logico, gli si attribuisce un significato all’interno del sistema.
Per esempio:
0 = pulsante non premuto
1 = pulsante premuto
oppure:
0 = finecorsa non raggiunto
1 = finecorsa raggiunto
Queste associazioni non sono universali. Dipendono dal circuito, dal tipo di sensore e dalla logica adottata.
Il significato dipende da come è progettato il circuito. Per esempio, con un contatto normalmente chiuso usato per sicurezza, l’ingresso può essere 1 quando il circuito è integro e diventare 0 quando il contatto si apre per intervento o guasto. Quindi 1 e 0 indicano due stati logici; il loro significato concreto dipende dal circuito e dalla logica utilizzata.
Bisogna distinguere:
condizione fisica → segnale elettrico → stato logico → significato attribuito allo stato
3. Byte e numero delle combinazioni
Ogni bit può assumere due valori: 0 oppure 1.
Con due bit si hanno:
2 × 2 = 4
combinazioni:
00
01
10
11
Con tre bit:
2 × 2 × 2 = 8
Con quattro bit:
2 × 2 × 2 × 2 = 16
In generale, con n bit, il numero delle combinazioni possibili è:
2ⁿ
Ogni bit aggiunto raddoppia quindi il numero delle combinazioni.
Un gruppo di 8 bit prende il nome di byte.
Di conseguenza un byte presenta:
2⁸ = 256 combinazioni differenti
da:
00000000
a:
11111111
4. Sistema binario
Le combinazioni di bit possono essere interpretate come numeri binari.
Una stessa sequenza di bit può però essere interpretata in modi diversi. Se vogliamo rappresentare soltanto numeri da zero in su, utilizziamo una rappresentazione senza segno: tutti i bit contribuiscono al valore del numero.
Per esempio, con 4 bit senza segno:
0000 = 0
0001 = 1
0010 = 2
…
1111 = 15
Se invece vogliamo rappresentare anche numeri negativi, occorre stabilire una diversa convenzione. Una sequenza di bit non indica quindi, da sola, se il valore rappresentato è positivo o negativo: il significato dipende dalla codifica utilizzata.
Nel seguito consideriamo, per semplicità, numeri binari senza segno.
Quando si utilizzano n bit, i valori rappresentabili sono:
da 0 a 2ⁿ − 1
Con tre bit si hanno quindi otto valori:
000 = 0
001 = 1
010 = 2
011 = 3
100 = 4
101 = 5
110 = 6
111 = 7
Con 3 bit si rappresentano dunque, senza segno, i numeri da 0 a 7.
Con 8 bit si rappresentano, senza segno, i numeri da 0 a 255.
Le stesse sequenze di bit possono essere utilizzate anche con significati differenti, per esempio come insieme di stati o secondo altre codifiche. Ma quando vengono interpretate come numeri binari interi senza segno, l’intervallo 0 … 2ⁿ − 1 è determinato univocamente.
5. Dal mondo reale al bit
In un sistema di automazione le informazioni provengono da dispositivi reali: pulsanti, finecorsa, sensori, pressostati, fotocellule e altri elementi.
Questi dispositivi producono o modificano un segnale elettrico.
Il circuito d’ingresso del sistema di controllo riceve tale segnale e, in funzione delle proprie soglie elettriche, determina se esso deve essere interpretato come stato logico 0 oppure come stato logico 1.
Il percorso è quindi:
condizione fisica → segnale elettrico → ingresso → 0/1
Soltanto dopo questa conversione il controllore dispone di un bit che può utilizzare nella propria elaborazione logica.
6. Ingressi digitali
Un ingresso digitale è il punto attraverso cui il controllore riceve dal campo un’informazione che può assumere soltanto due stati.
A un ingresso possono essere collegati, per esempio, pulsanti, finecorsa, pressostati, fotocellule, sensori di prossimità o contatti ausiliari, utilizzando contatti NA o NC secondo la funzione richiesta.
Il dispositivo esterno modifica la condizione elettrica presente sul morsetto d’ingresso. Il circuito elettronico del controllore rileva questa condizione e rende disponibile alla logica interna il corrispondente stato digitale.
Il percorso è:
dispositivo di campo → segnale elettrico → ingresso digitale → stato logico
Un ingresso digitale non misura il valore di una grandezza, ma rileva soltanto quale dei due stati previsti è presente.
Un pressostato, per esempio, non comunica al controllore una pressione di 4,7 bar: segnala soltanto se la pressione si trova da una parte o dall’altra della soglia impostata.
Allo stesso modo, un finecorsa non fornisce la posizione esatta di un organo meccanico: segnala soltanto se la posizione associata al suo intervento è stata raggiunta oppure no.
Il riferimento elettrico
Perché un ingresso possa riconoscere correttamente un segnale, deve esistere anche un riferimento elettrico comune tra il circuito di campo e il modulo d’ingresso.
Non è quindi sufficiente collegare semplicemente l’uscita di un sensore al morsetto dell’ingresso: occorre rispettare lo schema previsto dal costruttore e collegare correttamente alimentazione, riferimento e segnale.
Sensori PNP e NPN
Molti sensori industriali digitali utilizzano uscite elettroniche di tipo PNP oppure NPN.
Un sensore PNP, quando attivo, porta verso l’ingresso una tensione positiva rispetto al riferimento comune.
Un sensore NPN, quando attivo, porta invece il segnale verso il riferimento a 0 V.
Il modulo d’ingresso deve essere compatibile con il tipo di uscita utilizzato dal sensore. PNP e NPN non sono quindi due modi diversi di indicare lo stesso segnale, ma due differenti modalità di collegamento elettrico.
Nel caso tipico di un sensore a tre fili sono presenti:
- un filo per l’alimentazione positiva;
- un filo per lo 0 V;
- un filo di uscita collegato all’ingresso del controllore.
Il colore dei conduttori e lo schema di collegamento devono comunque essere verificati sulla documentazione del sensore.
Tempi di risposta e filtraggio
Un ingresso digitale non reagisce necessariamente a qualsiasi variazione, indipendentemente dalla sua durata.
I moduli d’ingresso possono utilizzare filtri per evitare che disturbi elettrici, rimbalzi dei contatti o variazioni molto brevi vengano interpretati come cambiamenti reali dello stato.
Di conseguenza, un impulso troppo breve può non essere riconosciuto dal controllore.
Questo aspetto diventa importante quando si devono acquisire segnali rapidi, per esempio impulsi provenienti da encoder, sensori di conteggio o dispositivi che cambiano stato molto velocemente. In questi casi possono essere necessari ingressi specifici ad alta velocità.
Protezione e isolamento
Il morsetto d’ingresso non è collegato direttamente alla parte logica del controllore.
Tra il segnale proveniente dal campo e l’elettronica interna sono normalmente presenti circuiti destinati ad adattare e proteggere il segnale e, in molti dispositivi, a realizzare anche una separazione elettrica tra campo e parte logica.
Questo permette al controllore di ricevere segnali provenienti dall’impianto senza esporre direttamente la propria elettronica interna alle condizioni elettriche presenti sul campo.
Diagnostica
La lettura di un ingresso fornisce uno stato, ma non sempre permette di conoscere direttamente la causa che lo ha prodotto.
Se un ingresso rimane a 0, per esempio, le cause potrebbero essere diverse:
- il sensore non è intervenuto;
- manca l’alimentazione del sensore;
- il collegamento è interrotto;
- il dispositivo è guasto.
Per questo, negli impianti più complessi, il semplice stato dell’ingresso viene spesso affiancato da ulteriori segnali, controlli o funzioni diagnostiche.
Esempio di collegamento
Consideriamo un sensore di prossimità PNP a tre fili alimentato a 24 V in corrente continua.
Il sensore viene alimentato attraverso i due conduttori dedicati. Il terzo conduttore costituisce l’uscita e viene collegato a un ingresso digitale del controllore.
Quando il sensore rileva l’oggetto, la sua uscita commuta e il segnale raggiunge il morsetto d’ingresso. Il controllore acquisisce così il cambiamento di stato e può utilizzarlo nel programma di automazione.
La catena completa diventa:
presenza dell’oggetto → sensore → uscita elettrica → ingresso digitale → stato utilizzabile dal programma
7. Ingressi analogici
Un ingresso digitale distingue soltanto due stati. Un ingresso analogico, invece, permette al controllore di acquisire un valore che può variare all’interno di un determinato intervallo.
È il caso, per esempio, della misura di:
- temperatura;
- pressione;
- livello;
- portata;
- posizione;
- tensione;
- corrente.
Il sensore o il trasmettitore converte la grandezza fisica da misurare in un segnale elettrico compatibile con l’ingresso del controllore.
In ambito industriale sono molto comuni segnali come:
0–10 V
oppure:
4–20 mA
Un trasmettitore di pressione, per esempio, può essere configurato in modo che:
4 mA = 0 bar
20 mA = 10 bar
Tra questi due estremi, il valore della corrente varia in relazione alla pressione misurata. Una corrente di 12 mA, trovandosi a metà dell’intervallo 4–20 mA, corrisponde in questo esempio a una pressione di 5 bar.
La relazione tra segnale elettrico e grandezza fisica prende il nome di scalatura.
Il percorso diventa quindi:
grandezza fisica → sensore o trasmettitore → segnale analogico → ingresso analogico → valore numerico
Conversione analogico-digitale
Il controllore lavora internamente con valori digitali. Il segnale analogico ricevuto deve quindi essere convertito in un numero.
Questa operazione viene eseguita da un convertitore analogico-digitale, indicato normalmente con la sigla ADC.
L’ADC suddivide il campo disponibile in un numero finito di livelli.
Il numero di livelli dipende dalla risoluzione del convertitore.
Per esempio:
- 8 bit → 2⁸ = 256 livelli;
- 10 bit → 2¹⁰ = 1024 livelli;
- 12 bit → 2¹² = 4096 livelli;
- 16 bit → 2¹⁶ = 65 536 livelli.
Un ingresso analogico non può quindi distinguere un numero infinito di valori: ogni misura viene associata a uno dei livelli disponibili.
Aumentando il numero di bit aumenta il numero dei livelli e diventa possibile distinguere variazioni più piccole del segnale.
Campo di misura e scalatura
Il valore numerico prodotto dall’ingresso non coincide necessariamente con la grandezza che interessa all’operatore.
Supponiamo ancora di utilizzare un trasmettitore:
4–20 mA → 0–10 bar
Il controllore acquisisce il segnale elettrico e lo converte in un valore numerico. Il programma deve poi associare quel valore alla corrispondente pressione.
La scalatura permette quindi di passare dal valore acquisito alla relativa unità fisica:
valore acquisito → 6,3 bar
anziché lavorare direttamente con il valore interno generato dal convertitore.
Segnale 0–10 V
Un altro segnale analogico molto utilizzato è 0–10 V.
In questo caso il valore della grandezza misurata viene rappresentato da una tensione compresa tra 0 e 10 V.
Per esempio, un trasmettitore di pressione con campo 0–10 bar potrebbe fornire:
0 V = 0 bar
5 V = 5 bar
10 V = 10 bar
Anche in questo caso i valori intermedi vengono convertiti proporzionalmente.
A differenza del 4–20 mA, nel segnale 0–10 V il valore minimo della grandezza corrisponde normalmente a 0 V. Per questo una tensione nulla può essere più difficile da distinguere da alcune condizioni di guasto, come un’interruzione del collegamento.
Il segnale in tensione è inoltre più sensibile alle cadute di tensione e ai disturbi lungo il collegamento rispetto a una trasmissione in corrente; per questo la scelta tra 0–10 V e 4–20 mA dipende anche dalla distanza, dall’ambiente e dalle caratteristiche dell’impianto.
Perché si utilizza 4–20 mA
Nel segnale 4–20 mA lo zero della grandezza misurata non corrisponde a una corrente nulla.
Nel nostro esempio:
4 mA = 0 bar
Questo permette di distinguere, almeno in determinate condizioni, una misura pari al minimo del campo da un’anomalia come l’interruzione del circuito, che può portare la corrente verso 0 mA.
Il valore di 4 mA viene per questo indicato come zero vivo.
Il segnale in corrente presenta inoltre vantaggi nella trasmissione su distanze relativamente elevate e una buona resistenza ai disturbi rispetto a molte trasmissioni in tensione.
Valori fuori campo
Un ingresso analogico può ricevere anche un valore al di fuori dell’intervallo previsto.
Un segnale inferiore o superiore al campo nominale può indicare, a seconda del dispositivo e dell’impianto:
- una condizione fuori scala;
- un guasto del sensore;
- un’interruzione o un problema del collegamento;
- un valore reale che ha superato il campo previsto.
Il programma può quindi controllare non soltanto il valore della misura, ma anche la sua plausibilità.
8. Ingressi speciali
Non tutti i segnali utilizzati nell’automazione possono essere trattati semplicemente come ingressi digitali ordinari oppure come ingressi analogici generici.
Alcune applicazioni richiedono circuiti d’ingresso progettati per acquisire particolari tipi di segnale.
Tra i più comuni troviamo:
- ingressi per conteggio veloce;
- ingressi in frequenza;
- ingressi per encoder;
- ingressi per termocoppie;
- ingressi per termoresistenze, come Pt100 e Pt1000.
Conteggio veloce e frequenza
Un normale ingresso digitale può non essere adatto a segnali che cambiano stato molto rapidamente.
Per contare impulsi ad alta frequenza si utilizzano quindi ingressi veloci o contatori hardware, capaci di acquisire eventi senza dipendere esclusivamente dal normale ciclo di elaborazione del programma.
Questi ingressi possono essere utilizzati, per esempio, per:
- conteggiare pezzi;
- misurare una frequenza;
- determinare una velocità;
- acquisire impulsi provenienti da determinati sensori.
Encoder
Gli encoder producono sequenze di impulsi che permettono di ricavare informazioni sul movimento.
A seconda del tipo di encoder e dell’interfaccia utilizzata, il controllore può determinare grandezze come:
- posizione;
- spostamento;
- velocità;
- direzione di movimento.
Gli encoder incrementali, per esempio, possono fornire due segnali impulsivi sfasati tra loro. Dal loro ordine il sistema può determinare anche il verso di rotazione.
Termocoppie e termoresistenze
Anche la temperatura può richiedere ingressi specifici.
Una termocoppia genera una piccola tensione legata alla differenza di temperatura e richiede un circuito di misura adatto al tipo di termocoppia utilizzato.
Una termoresistenza, come una Pt100, varia invece la propria resistenza elettrica in funzione della temperatura.
Questi sensori non vengono quindi collegati indifferentemente a un normale ingresso 0–10 V o 4–20 mA, salvo utilizzare un apposito trasmettitore che converta preventivamente il loro segnale.
Il tipo di ingresso deve sempre essere scelto in funzione del segnale che deve essere acquisito.
Con questi dispositivi si completa il quadro generale degli ingressi:
ingressi digitali → stati 0/1
ingressi analogici → valori variabili
ingressi speciali → segnali che richiedono modalità di acquisizione dedicate
9. Uscite digitali
Dopo aver acquisito e interpretato le informazioni provenienti dagli ingressi, il controllore deve poter comandare dispositivi esterni. Questo avviene attraverso le uscite.
Un’uscita digitale può assumere due stati logici:
0 oppure 1
e viene utilizzata per comandare dispositivi che richiedono due condizioni distinte, per esempio:
- lampada spenta / accesa;
- relè diseccitato / eccitato;
- elettrovalvola chiusa / aperta;
- contattore diseccitato / eccitato;
- segnalatore acustico inattivo / attivo.
Il percorso è quindi opposto a quello degli ingressi:
stato logico → uscita digitale → segnale elettrico → dispositivo di campo
Il controllore decide, attraverso il programma, quale stato assegnare all’uscita. Il circuito elettronico del modulo di uscita trasforma quindi quello stato logico in una condizione elettrica utilizzabile all’esterno.
Comando e potenza
Un’uscita del controllore non è necessariamente in grado di alimentare direttamente il dispositivo che deve essere comandato.
Una piccola lampada di segnalazione o la bobina di un relè possono, in alcuni casi, essere collegate direttamente all’uscita, purché tensione e corrente siano compatibili con le caratteristiche dichiarate dal costruttore.
Un motore, una resistenza di potenza o un altro carico che richiede correnti elevate non vengono invece alimentati direttamente dall’uscita del controllore.
In questi casi l’uscita comanda un dispositivo intermedio, per esempio un relè o un contattore, che a sua volta alimenta il carico.
Per esempio:
uscita del controllore → bobina del contattore → contatti di potenza → motore
Il controllore fornisce quindi il comando, mentre il circuito di potenza fornisce l’energia necessaria all’utilizzatore.
Uscite a relè
Nelle uscite a relè il controllore comanda internamente una bobina che apre o chiude uno o più contatti.
Il contatto del relè costituisce una separazione elettrica tra il circuito interno del controllore e il circuito comandato.
Le uscite a relè possono essere utilizzate con differenti tensioni e, entro i limiti indicati dal costruttore, sia con corrente continua sia con corrente alternata.
Essendo dispositivi elettromeccanici, hanno però una velocità di commutazione limitata e una durata legata anche al numero e alle caratteristiche delle manovre effettuate.
Uscite a transistor
Le uscite a transistor utilizzano componenti elettronici e non possiedono contatti meccanici.
Sono normalmente impiegate con carichi in corrente continua e permettono commutazioni più rapide rispetto alle uscite a relè.
Anche in questo caso è necessario rispettare:
- tensione ammessa;
- corrente massima;
- modalità di collegamento;
- tipo di uscita previsto dal modulo.
Come per i sensori digitali, le uscite a transistor possono essere realizzate secondo configurazioni differenti, tra cui PNP e NPN.
Uscite a triac
Alcuni moduli utilizzano uscite a triac, destinate al comando di carichi in corrente alternata.
Il triac è un dispositivo elettronico di commutazione e, come il transistor, non utilizza contatti meccanici.
Anche queste uscite devono essere utilizzate entro i limiti di tensione, corrente e tipo di carico indicati dal costruttore.
Alimentazione e comune delle uscite
Le uscite di un controllore non generano necessariamente da sole la tensione necessaria al comando del carico.
In molti moduli l’alimentazione delle uscite deve essere fornita esternamente e collegata ai morsetti previsti. Le uscite possono inoltre essere organizzate in gruppi, ciascuno con un proprio morsetto comune.
Il collegamento deve quindi rispettare lo schema del costruttore, tenendo conto sia dell’alimentazione del modulo sia della disposizione dei comuni.
Carichi induttivi
Bobine di relè, contattori ed elettrovalvole sono carichi induttivi.
Quando la corrente che attraversa una bobina viene interrotta, l’energia accumulata nel campo magnetico può generare una sovratensione.
Per evitare che questa sovratensione danneggi l’uscita o produca disturbi nell’impianto, si utilizzano dispositivi di soppressione adatti al tipo di alimentazione e di carico.
La protezione non deve quindi essere scelta in modo generico, ma in funzione del circuito utilizzato.
Corrente residua e carico minimo
Le uscite elettroniche, in particolare quelle a transistor e a triac, non si comportano esattamente come un contatto meccanico aperto.
Anche quando l’uscita è disattivata può essere presente una piccola corrente residua. Normalmente questa corrente non provoca effetti sul carico, ma con dispositivi particolarmente sensibili può essere sufficiente a generare comportamenti indesiderati.
Nel caso di alcune uscite a triac può inoltre essere necessario rispettare un carico minimo affinché la commutazione avvenga correttamente.
Anche questi valori devono quindi essere verificati nelle caratteristiche tecniche del modulo di uscita e del carico collegato.
Stato comandato e stato reale
Il fatto che il controllore abbia posto un’uscita a 1 significa che ha impartito un comando, non necessariamente che il dispositivo comandato abbia realmente eseguito l’azione.
Per esempio:
uscita motore = 1
significa che il controllore ha richiesto l’avviamento del motore.
Il motore potrebbe però non essere partito a causa di un contattore guasto, di una protezione intervenuta, della mancanza di alimentazione o di un altro problema.
Per conoscere lo stato reale della macchina occorre quindi, quando necessario, utilizzare un segnale di ritorno acquisito attraverso un ingresso.
Si distingue così tra:
comando → ciò che il controllore richiede
e
feedback → ciò che è realmente avvenuto
Questa distinzione è fondamentale nella diagnostica e nel controllo delle macchine automatiche.
Comportamento delle uscite in arresto o guasto
Nel progetto di un sistema automatico è necessario considerare anche cosa accade alle uscite quando il controllore non sta eseguendo normalmente il programma.
Per esempio, la CPU può essere portata in STOP, può verificarsi un errore oppure può mancare l’alimentazione.
A seconda del controllore e della configurazione utilizzata, le uscite possono essere disattivate, mantenere il proprio stato oppure assumere uno stato prestabilito.
Questo comportamento deve essere conosciuto e previsto durante la progettazione, soprattutto quando le uscite comandano dispositivi il cui stato può avere conseguenze sul funzionamento o sulla sicurezza della macchina.
10. Uscite analogiche
Un’uscita digitale può assumere soltanto due stati. Un’uscita analogica, invece, genera un segnale elettrico che può assumere valori differenti all’interno di un intervallo definito.
Viene utilizzata quando non basta comandare semplicemente un dispositivo acceso o spento, ma è necessario indicare quanto deve essere comandato.
Per esempio, un’uscita analogica può essere utilizzata per:
- fornire il riferimento di velocità a un inverter;
- comandare l’apertura di una valvola proporzionale;
- impostare la potenza richiesta a un regolatore;
- fornire un riferimento a un altro dispositivo di controllo.
Tra i segnali più comuni troviamo:
0–10 V
±10 V
0–20 mA
4–20 mA
Il percorso è:
valore elaborato dal controllore → uscita analogica → segnale elettrico → dispositivo di campo
Uscita 0–10 V
Con un’uscita 0–10 V il controllore genera una tensione proporzionale al valore richiesto.
Supponiamo, per esempio, che un inverter utilizzi:
0 V = 0 Hz
10 V = 50 Hz
Un comando di:
5 V
corrisponde quindi, con una relazione lineare, a:
25 Hz
Il programma non deve necessariamente lavorare direttamente in volt. Può utilizzare, per esempio, una richiesta di velocità espressa in percentuale o in hertz; sarà poi il sistema a convertire quel valore nel corrispondente segnale elettrico.
Per esempio:
richiesta 70 % → 7 V → inverter
Uscita ±10 V
In alcune applicazioni viene utilizzato un campo bipolare, per esempio −10 V … +10 V.
In questo caso anche il segno della tensione può avere un significato.
Per esempio, in un comando di velocità:
−10 V = velocità massima in un verso
0 V = arresto
+10 V = velocità massima nel verso opposto
Il significato effettivo dipende comunque dalla configurazione del dispositivo comandato.
Uscita 4–20 mA
Lo stesso principio può essere applicato a un segnale in corrente.
Supponiamo che una valvola proporzionale utilizzi:
4 mA = 0 %
20 mA = 100 %
Una corrente di:
12 mA
corrisponde al 50 % del campo.
Il controllore può quindi stabilire numericamente l’apertura desiderata e il modulo di uscita genera la corrente corrispondente.
Per esempio:
apertura richiesta 50 % → 12 mA → valvola
Anche nelle uscite analogiche il segnale 4–20 mA presenta il vantaggio dello zero vivo: il valore minimo del comando corrisponde a 4 mA e non a corrente nulla.
Conversione digitale-analogica
Il controllore elabora internamente valori digitali, mentre il dispositivo esterno deve ricevere una tensione o una corrente analogica.
È quindi necessaria una conversione opposta rispetto a quella vista per gli ingressi analogici.
Questa operazione viene effettuata da un convertitore digitale-analogico, normalmente indicato con la sigla DAC.
Il controllore fornisce un valore numerico e il convertitore genera il corrispondente segnale elettrico.
Per esempio:
valore numerico → DAC → 6,4 V
oppure:
valore numerico → DAC → 14,2 mA
Anche un’uscita analogica possiede una determinata risoluzione. Il segnale non può quindi assumere un numero infinito di valori, ma soltanto i livelli consentiti dalla risoluzione del modulo.
Scalatura dell’uscita
Come per gli ingressi analogici, anche nelle uscite è necessario mettere in relazione il valore utilizzato dal programma con il campo elettrico dell’uscita.
Supponiamo di voler comandare un inverter da 0 a 50 Hz attraverso un segnale 0–10 V.
La corrispondenza sarà:
0 Hz → 0 V
25 Hz → 5 V
50 Hz → 10 V
La scalatura permette quindi al programma di lavorare direttamente con la grandezza utile, per esempio gli hertz, lasciando al sistema il compito di ricavare il corrispondente valore dell’uscita.
Collegamento e riferimento elettrico
Anche un’uscita analogica deve essere collegata rispettando lo schema previsto dal costruttore.
Nelle uscite in tensione deve essere presente il corretto riferimento elettrico tra il modulo e il dispositivo comandato.
Nelle uscite in corrente deve invece essere realizzato correttamente il circuito attraverso cui circola la corrente del segnale.
Un collegamento errato del comune, del riferimento o del circuito di corrente può produrre un valore errato oppure impedire completamente il funzionamento dell’uscita.
Limiti dell’uscita
Anche un’uscita analogica deve essere utilizzata entro le proprie caratteristiche elettriche.
Per un’uscita in tensione è necessario rispettare, tra gli altri parametri, il carico che può essere collegato.
Per un’uscita in corrente deve essere rispettato il valore massimo di resistenza complessiva del circuito entro il quale il modulo riesce a mantenere la corrente richiesta.
Un collegamento non corretto o un carico incompatibile può quindi impedire all’uscita di generare il valore previsto.
Tempo di aggiornamento
Il valore di un’uscita analogica non viene necessariamente modificato in modo istantaneo.
Il modulo possiede un proprio tempo di conversione e di aggiornamento, cioè il tempo necessario per trasformare il nuovo valore numerico nel corrispondente segnale elettrico.
Nella maggior parte dei comandi relativamente lenti questo tempo non costituisce un problema. Diventa invece importante nelle applicazioni in cui il riferimento deve variare rapidamente o con una frequenza elevata.
Comando analogico e valore reale
Anche nel caso di un’uscita analogica bisogna distinguere il valore comandato dal valore realmente ottenuto nel processo.
Se il controllore comanda:
50 % di apertura della valvola
significa che ha generato il segnale corrispondente alla richiesta del 50 %.
Questo non dimostra, da solo, che la valvola abbia raggiunto realmente quella posizione.
Quando è necessario conoscere il risultato effettivo, si utilizza un segnale di ritorno, per esempio proveniente da un sensore di posizione, da un trasmettitore o direttamente dal dispositivo comandato.
Si ritrova quindi lo stesso principio già visto per le uscite digitali:
comando → azione richiesta
feedback → risultato realmente rilevato
Guasti e diagnostica
Anche il circuito di uscita analogica può essere interessato da anomalie.
A seconda del tipo di modulo, possono essere rilevate condizioni come:
- interruzione del circuito;
- cortocircuito;
- carico non compatibile;
- impossibilità di raggiungere il valore richiesto;
- valore fuori dal campo ammesso.
Quando il modulo dispone di funzioni diagnostiche, queste informazioni possono essere utilizzate dal controllore per generare allarmi o adottare una condizione di funzionamento prevista in caso di guasto.
11. Uscite speciali
Non tutti i comandi possono essere realizzati con una semplice uscita digitale ON/OFF oppure con un’uscita analogica.
Alcune applicazioni richiedono segnali che devono essere generati con una determinata frequenza, una precisa durata degli impulsi o una particolare sequenza temporale. Per queste funzioni vengono utilizzate uscite dedicate, normalmente realizzate mediante circuiti hardware specifici del controllore.
Tra le più comuni troviamo:
- uscite PWM;
- uscite impulsive veloci;
- uscite PTO;
- uscite STEP/DIR per azionamenti e motori passo-passo;
- uscite dedicate al controllo rapido o sincronizzato del movimento.
PWM
PWM significa Pulse Width Modulation, cioè modulazione della larghezza dell’impulso.
L’uscita non genera una tensione analogica continuamente variabile. Commuta invece rapidamente tra due stati, 0 e 1.
Ciò che viene modificato è il rapporto tra il tempo durante il quale l’uscita rimane attiva e la durata complessiva del ciclo.
Questo rapporto prende il nome di duty cycle.
Per esempio:
0 % → uscita sempre disattivata
25 % → uscita attiva per un quarto del periodo
50 % → uscita attiva per metà del periodo
100 % → uscita sempre attiva
Con un duty cycle del 50 %, quindi, l’uscita non sta generando metà della propria tensione nominale: continua a commutare tra i due livelli elettrici previsti, ma rimane attiva per metà del tempo.
Un segnale PWM può essere utilizzato, per esempio, per:
- regolare la potenza media fornita a determinati carichi;
- comandare alcuni azionamenti;
- regolare la luminosità di sorgenti luminose compatibili;
- fornire un riferimento a dispositivi progettati per ricevere questo tipo di segnale.
La frequenza del PWM e il duty cycle devono essere compatibili con il dispositivo comandato.
Frequenza e periodo
Un segnale impulsivo è caratterizzato anche dalla propria frequenza, cioè dal numero di cicli prodotti in un secondo.
La frequenza viene espressa in hertz:
1 Hz = 1 ciclo al secondo
100 Hz = 100 cicli al secondo
1 kHz = 1000 cicli al secondo
Il periodo è invece il tempo necessario per completare un ciclo.
Frequenza e periodo sono legati dalla relazione:
T = 1 / f
dove:
- T è il periodo;
- f è la frequenza.
Per esempio, un segnale a 100 Hz ha un periodo di:
1 / 100 = 0,01 s = 10 ms
La frequenza stabilisce quindi quanto rapidamente vengono ripetuti gli impulsi, mentre il duty cycle stabilisce per quale parte di ciascun periodo l’uscita rimane attiva.
Uscite impulsive veloci
Una normale uscita digitale viene generalmente comandata dal programma durante il normale funzionamento del controllore.
Quando è necessario generare impulsi molto rapidi o con intervalli temporali precisi, questo metodo può non essere sufficiente.
Si utilizzano allora uscite veloci, nelle quali la generazione degli impulsi viene affidata a circuiti hardware dedicati.
Questo permette di ottenere segnali più regolari e precisi senza dipendere direttamente dal tempo necessario alla CPU per eseguire ciclicamente il programma.
Le uscite a relè non sono adatte a questo tipo di funzionamento, perché utilizzano contatti meccanici e hanno tempi di commutazione e durata incompatibili con frequenze elevate.
Per le uscite veloci vengono normalmente utilizzati dispositivi elettronici, per esempio uscite a transistor.
PTO
PTO significa Pulse Train Output, cioè uscita a treno di impulsi.
Il controllore genera una successione precisa di impulsi destinata, per esempio, a un azionamento.
In molte applicazioni il numero degli impulsi rappresenta lo spostamento richiesto, mentre la loro frequenza determina la velocità con cui deve avvenire il movimento.
In forma semplificata:
numero di impulsi → quantità di movimento
frequenza degli impulsi → velocità di movimento
Se, per esempio, un azionamento è configurato in modo che 1000 impulsi corrispondano a una determinata rotazione, il controllore può ordinare quello spostamento generando esattamente il numero previsto di impulsi.
Il rapporto reale tra impulsi e movimento dipende comunque dalla configurazione dell’azionamento, del motore e della parte meccanica.
Comando STEP/DIR
Una modalità molto utilizzata per comandare motori passo-passo e alcuni azionamenti è l’interfaccia STEP/DIR.
Sono presenti normalmente due segnali principali:
STEP → fornisce gli impulsi di avanzamento;
DIR → stabilisce la direzione del movimento.
Ogni impulso STEP ordina all’azionamento un incremento di posizione secondo la configurazione impostata.
Il segnale DIR determina invece il verso nel quale questi incrementi devono essere eseguiti.
In forma concettuale:
DIR → verso
STEP → quantità e velocità del movimento
Il numero degli impulsi determina infatti lo spostamento complessivo, mentre la frequenza degli impulsi influenza la velocità.
Il controllore può inoltre modificare progressivamente la frequenza per realizzare rampe di accelerazione e decelerazione.
Controllo del movimento
Nelle applicazioni più evolute non è sufficiente generare semplicemente una successione di impulsi.
Può essere necessario controllare:
- posizione;
- velocità;
- accelerazione;
- decelerazione;
- arresto;
- sincronizzazione tra più assi.
In questi casi il controllore può utilizzare funzioni hardware e software dedicate al motion control.
Il programma stabilisce il movimento richiesto, mentre le funzioni dedicate si occupano di generare i segnali con la precisione temporale necessaria.
A seconda del sistema, il comando dell’azionamento può avvenire mediante impulsi oppure attraverso una rete di comunicazione industriale dedicata al controllo del movimento.
Precisione temporale
La caratteristica principale di queste uscite è la necessità di rispettare tempi precisi.
Un impulso generato troppo presto, troppo tardi o con una durata errata può modificare il comportamento del dispositivo comandato.
Per questo la generazione di segnali veloci viene normalmente affidata a funzioni hardware specifiche e non alla semplice accensione e spegnimento ciclico di una normale uscita all’interno del programma.
Si distingue quindi tra:
uscita digitale ordinaria → comando di uno stato
e
uscita veloce o speciale → generazione controllata di impulsi nel tempo
Compatibilità elettrica
Anche quando il segnale è corretto dal punto di vista logico e temporale, deve essere compatibile elettricamente con l’ingresso del dispositivo comandato.
Devono quindi essere verificati, tra gli altri:
- tensione;
- corrente;
- tipo di uscita;
- frequenza massima;
- tipo di ingresso dell’azionamento;
- modalità di collegamento prevista dal costruttore.
Un’uscita capace di generare correttamente un treno di impulsi non è automaticamente compatibile con qualsiasi azionamento.
Riepilogo delle uscite
Le principali famiglie di uscite possono quindi essere distinte in questo modo:
uscite digitali → due stati, 0/1
uscite analogiche → valore variabile entro un campo
uscite speciali → segnali generati con caratteristiche temporali definite
Con questo si completa il quadro generale degli ingressi e delle uscite del controllore.
12. Logica booleana e condizioni
Una volta acquisiti gli ingressi, il controllore deve stabilire quando eseguire una determinata azione.
Per farlo utilizza condizioni logiche che possono assumere soltanto due risultati:
VERO
oppure
FALSO
Questi due risultati possono essere rappresentati anche come:
1 = VERO
0 = FALSO
La logica che utilizza valori di questo tipo prende il nome di logica booleana.
Il nome deriva da George Boole, matematico che sviluppò un sistema algebrico basato su valori logici e sulle operazioni che possono essere eseguite tra essi.
In automazione, la logica booleana permette di combinare gli stati degli ingressi, delle uscite e delle variabili interne per stabilire se una determinata condizione è soddisfatta.
Per esempio:
se il pulsante START è premuto, il consenso è presente e non è attivo alcun allarme, allora può essere richiesto l’avviamento del motore.
La decisione non dipende quindi necessariamente da un solo ingresso, ma può essere il risultato della combinazione di molte condizioni.
Operatore NOT
L’operatore NOT inverte il valore logico di una condizione.
Se la condizione è 0, il risultato diventa 1.
Se la condizione è 1, il risultato diventa 0.
Tabella di verità:
A NOT A
0 1
1 0
Per esempio, supponiamo di avere:
ALLARME = 1 quando è presente un allarme.
La condizione:
NOT ALLARME
sarà vera soltanto quando l’allarme non è presente.
Quindi:
ALLARME = 0 → NOT ALLARME = 1
ALLARME = 1 → NOT ALLARME = 0
In una condizione di avviamento potremmo quindi utilizzare:
START AND NOT ALLARME
Il comando sarà consentito soltanto se START è vero e contemporaneamente ALLARME è falso.
Operatore AND
L’operatore AND produce un risultato vero soltanto quando tutte le condizioni collegate sono vere.
Tabella di verità con due condizioni:
A B A AND B
0 0 0
0 1 0
1 0 0
1 1 1
Per esempio, un motore può essere autorizzato a partire soltanto quando:
- il pulsante START è premuto;
- il riparo è chiuso.
La condizione sarà:
START AND RIPARO_CHIUSO
Il risultato sarà vero soltanto quando entrambe le condizioni saranno vere.
Se anche una sola delle due è falsa, il risultato sarà falso.
Con più condizioni il principio non cambia.
Per esempio:
START AND RIPARO_CHIUSO AND PRESSIONE_OK
sarà vero soltanto se tutte e tre le condizioni saranno contemporaneamente vere.
L’operatore AND viene quindi utilizzato quando sono necessari più consensi contemporaneamente.
Operatore OR
L’operatore OR produce un risultato vero quando è vera almeno una delle condizioni considerate.
Tabella di verità:
A B A OR B
0 0 0
0 1 1
1 0 1
1 1 1
Per esempio, supponiamo che un allarme debba attivarsi quando viene rilevata almeno una delle seguenti condizioni:
- temperatura troppo alta;
- pressione troppo alta.
La condizione sarà:
TEMPERATURA_ALTA OR PRESSIONE_ALTA
L’allarme sarà quindi attivo se:
- è alta soltanto la temperatura;
- è alta soltanto la pressione;
- sono alte entrambe.
Sarà falso soltanto quando entrambe le condizioni saranno false.
L’operatore OR viene quindi utilizzato quando è sufficiente che si verifichi almeno una tra più condizioni.
Combinazione degli operatori
NOT, AND e OR possono essere utilizzati insieme.
Supponiamo che un motore possa partire quando:
- viene richiesto START;
- il riparo è chiuso;
- non è presente un allarme.
La condizione può essere espressa come:
START AND RIPARO_CHIUSO AND NOT ALLARME
Il risultato sarà vero soltanto se:
START = 1
RIPARO_CHIUSO = 1
ALLARME = 0
Se una qualsiasi di queste condizioni non viene rispettata, il risultato sarà falso.
Le condizioni possono diventare anche più articolate.
Per esempio:
(START_LOCALE OR START_REMOTO) AND RIPARO_CHIUSO AND NOT ALLARME
In questo caso l’avviamento può essere richiesto da due sorgenti diverse:
- comando locale;
- comando remoto.
È sufficiente che una delle due richieste sia presente, ma devono comunque essere rispettate anche le altre condizioni.
Uso delle parentesi
Quando vengono combinati più operatori, le parentesi permettono di indicare chiaramente quali condizioni devono essere valutate insieme.
Consideriamo:
(A OR B) AND C
Prima viene valutato:
A OR B
e il risultato viene successivamente combinato con C mediante AND.
Questa espressione non equivale necessariamente a:
A OR (B AND C)
Per esempio, con:
A = 1
B = 0
C = 0
si ottiene:
(1 OR 0) AND 0 = 1 AND 0 = 0
mentre:
1 OR (0 AND 0) = 1 OR 0 = 1
Le parentesi possono quindi cambiare completamente il risultato della logica.
Per questo, quando una condizione contiene più operatori, è utile rendere esplicito il raggruppamento anche quando il linguaggio di programmazione prevede già proprie regole di priorità.
Condizione logica e dispositivo fisico
Una variabile logica non coincide necessariamente con il dispositivo fisico dal quale deriva.
Per esempio, un finecorsa può essere collegato a un ingresso digitale, ma nel programma può essere utilizzata una variabile con un significato più chiaro, come:
PORTA_CHIUSA
Il controllore può quindi leggere fisicamente un ingresso e utilizzare quel valore per determinare una condizione logica.
In forma semplificata:
finecorsa → ingresso digitale → PORTA_CHIUSA
Questo permette di costruire il programma ragionando sul significato della condizione, anziché soltanto sul numero del morsetto utilizzato.
Per esempio:
START AND PORTA_CHIUSA AND PRESSIONE_OK
è più comprensibile di una sequenza costituita soltanto da indirizzi numerici degli ingressi.
Una condizione non è necessariamente un ingresso
Una condizione logica può derivare da:
- un ingresso digitale;
- il confronto di un valore analogico;
- lo stato di un’uscita;
- una variabile interna;
- un temporizzatore;
- un contatore;
- il risultato di un’altra espressione logica.
Per esempio, da una misura analogica di temperatura si può ricavare:
TEMPERATURA_ALTA = temperatura > 80 °C
Il valore della temperatura è analogico, ma il risultato del confronto è logico:
temperatura = 72 °C → TEMPERATURA_ALTA = 0
temperatura = 85 °C → TEMPERATURA_ALTA = 1
Questo risultato può poi essere utilizzato insieme ad altre condizioni:
TEMPERATURA_ALTA OR PRESSIONE_ALTA
La logica booleana non lavora quindi soltanto direttamente con pulsanti e finecorsa, ma con qualsiasi informazione che possa essere ricondotta a una condizione vera o falsa.
Esempio completo
Supponiamo di voler autorizzare il funzionamento di una pompa soltanto quando:
- è presente una richiesta di avviamento;
- il livello minimo è garantito;
- la pressione non è troppo alta;
- non è presente un allarme generale.
Possiamo definire:
START = richiesta di avviamento
LIVELLO_OK = livello sufficiente
PRESSIONE_ALTA = pressione oltre il limite
ALLARME = allarme generale presente
La condizione di comando sarà:
START AND LIVELLO_OK AND NOT PRESSIONE_ALTA AND NOT ALLARME
Se:
START = 1
LIVELLO_OK = 1
PRESSIONE_ALTA = 0
ALLARME = 0
allora il risultato sarà:
1 AND 1 AND 1 AND 1 = 1
e la condizione di funzionamento sarà vera.
Se invece interviene l’allarme:
ALLARME = 1
allora:
NOT ALLARME = 0
e l’intera espressione diventa falsa.
La logica booleana permette quindi di trasformare le informazioni disponibili nel sistema in condizioni precise per prendere decisioni automatiche.
13. Memoria e autoritenuta
Finora abbiamo considerato condizioni che dipendono direttamente dallo stato presente degli ingressi o delle variabili.
In molti automatismi, però, è necessario che il controllore ricordi che un evento è avvenuto, anche quando il segnale che lo ha generato non è più presente.
Un pulsante START, per esempio, viene normalmente premuto solo per un breve istante. Se il funzionamento del motore dipendesse direttamente dallo stato del pulsante, il motore rimarrebbe comandato soltanto finché il pulsante resta premuto.
Serve quindi una memoria dello stato.
Il principio è:
evento momentaneo → memorizzazione → stato mantenuto
Condizione istantanea e condizione memorizzata
Una condizione istantanea esiste soltanto finché rimane vera la causa che la produce.
Per esempio:
START = 1 finché il pulsante è premuto.
Quando il pulsante viene rilasciato:
START = 0
Una condizione memorizzata può invece continuare a essere vera anche dopo che il segnale iniziale è tornato a zero.
Per esempio:
START premuto → MARCIA = 1
Dopo il rilascio del pulsante:
START = 0
ma:
MARCIA = 1
Lo stato MARCIA viene mantenuto fino a quando non si verifica una condizione che ne provoca la cancellazione.
Autoritenuta
Una delle applicazioni più semplici della memoria è l’autoritenuta.
Consideriamo due pulsanti:
START
STOP
Quando viene premuto START, viene attivato lo stato di marcia.
Una volta attivato, lo stato stesso contribuisce a mantenere vera la condizione anche dopo il rilascio del pulsante START.
In forma logica semplificata:
(START OR MARCIA) AND CONSENSO_STOP → MARCIA
Il termine START OR MARCIA significa che la condizione può essere mantenuta vera sia dal comando iniziale START sia dallo stato MARCIA già attivo.
Quando viene meno il consenso di STOP, la condizione diventa falsa e la memoria viene interrotta.
Il funzionamento è quindi:
- START viene premuto;
- MARCIA diventa vera;
- START viene rilasciato;
- MARCIA rimane vera grazie all’autoritenuta;
- viene azionato STOP;
- MARCIA torna falsa.
L’autoritenuta permette quindi di trasformare un comando momentaneo in uno stato che permane nel tempo.
SET e RESET
Un altro modo per realizzare una memoria consiste nell’utilizzare due operazioni distinte:
SET → imposta uno stato a 1;
RESET → riporta lo stato a 0.
Per esempio:
START → SET MARCIA
STOP → RESET MARCIA
Premendo START:
MARCIA = 1
e questo valore rimane memorizzato anche quando START torna a 0.
Premendo STOP:
MARCIA = 0
e il valore rimane a zero fino a un nuovo SET.
SET e RESET permettono quindi di separare chiaramente l’evento che attiva uno stato da quello che lo disattiva.
Autoritenuta e SET/RESET
Autoritenuta e SET/RESET possono produrre un comportamento simile, ma non sono la stessa cosa.
Nell’autoritenuta lo stato viene mantenuto attraverso la stessa logica che lo determina.
Nel SET/RESET, invece, viene modificato direttamente uno stato memorizzato.
In forma concettuale:
autoritenuta → la condizione continua a mantenere se stessa
SET/RESET → eventi distinti scrivono e cancellano uno stato memorizzato
La scelta dipende dal tipo di automazione, dal linguaggio utilizzato e dalla chiarezza che si vuole ottenere nel programma.
Priorità tra SET e RESET
È necessario stabilire cosa deve accadere se SET e RESET risultano veri contemporaneamente.
Le possibilità principali sono:
- priorità al SET;
- priorità al RESET.
Il comportamento non deve essere lasciato implicito.
Per esempio, in una memoria con priorità al RESET:
SET = 1
RESET = 1
produce:
stato = 0
In una memoria con priorità al SET, nelle stesse condizioni:
stato = 1
La priorità deve quindi essere scelta in funzione del comportamento richiesto e della funzione svolta dalla memoria.
Quando lo stato è legato all’arresto o a una condizione che deve impedire il funzionamento, normalmente si progetta la logica in modo che la condizione di arresto abbia la precedenza sul comando di avviamento.
Memoria di stato
La memoria non viene utilizzata soltanto per mantenere una marcia.
Può servire anche per ricordare:
- che un ciclo è iniziato;
- che una determinata fase è stata completata;
- che si è verificato un evento;
- che è stato riconosciuto un allarme;
- quale modalità di funzionamento è stata selezionata;
- quale stato della sequenza deve essere eseguito.
Per esempio:
CICLO_AVVIATO = 1
può indicare che la macchina ha ricevuto il comando di partenza e si trova all’interno di un ciclo automatico, anche se il pulsante START è stato rilasciato da tempo.
In questo modo il programma non dipende soltanto da ciò che sta accadendo nell’istante presente, ma anche da ciò che è accaduto in precedenza.
Memoria volatile e memoria ritentiva
Non tutte le memorie vengono conservate quando il controllore viene spento o riavviato.
Una memoria volatile perde il proprio valore quando viene meno l’alimentazione o quando il controllore viene inizializzato, secondo il comportamento previsto dal sistema.
Una memoria ritentiva conserva invece il proprio valore anche dopo una perdita di alimentazione o un riavvio, entro le modalità previste dal controllore.
Per esempio, potrebbe essere utile conservare:
- un conteggio di produzione;
- un parametro impostato dall’operatore;
- il numero di ore di funzionamento;
- un dato necessario alla ripresa del processo.
Non è invece automaticamente corretto rendere ritentivo uno stato come:
MOTORE_IN_MARCIA
perché, dopo un ritorno dell’alimentazione, il semplice ripristino di quel bit potrebbe non corrispondere alle condizioni reali della macchina.
La ritentività deve quindi essere scelta intenzionalmente in funzione del significato della variabile.
Avviamento, STOP e ritorno dell’alimentazione
Quando un controllore passa in STOP, viene riavviato oppure perde e recupera l’alimentazione, il comportamento delle memorie dipende dalla configurazione e dal tipo di variabile utilizzata.
Alcuni stati possono essere azzerati.
Altri possono essere mantenuti.
Altri ancora possono essere inizializzati dal programma a un valore prestabilito.
Per questo, nella progettazione di un automatismo bisogna stabilire esplicitamente:
- quali stati devono essere persi;
- quali devono essere conservati;
- quali devono essere ricostruiti leggendo nuovamente le condizioni reali della macchina.
La presenza di una memoria interna non garantisce infatti che il mondo fisico si trovi ancora nello stesso stato memorizzato prima dell’interruzione.
Memoria e realtà fisica
Supponiamo che il controllore abbia memorizzato:
VALVOLA_APERTA = 1
Dopo una mancanza di alimentazione la valvola potrebbe essersi chiusa meccanicamente.
Se il controllore conserva semplicemente il bit VALVOLA_APERTA = 1, lo stato memorizzato non corrisponde più necessariamente allo stato reale.
Quando questa distinzione è importante, occorre utilizzare un feedback reale, per esempio un finecorsa o un sensore di posizione.
Si deve quindi distinguere tra:
stato memorizzato → ciò che il programma ricorda
e
stato reale → ciò che viene effettivamente rilevato sulla macchina
Uso della memoria nella logica
Una memoria deve rappresentare uno stato che ha realmente bisogno di essere mantenuto nel tempo.
Non dovrebbe essere utilizzata semplicemente per evitare di costruire correttamente una condizione logica.
Ogni stato memorizzato dovrebbe avere almeno:
- una condizione chiara che lo attiva;
- una condizione chiara che lo disattiva;
- un comportamento definito al riavvio;
- un significato preciso all’interno del processo.
Questo rende il programma più semplice da comprendere e soprattutto permette di sapere sempre perché un determinato stato è rimasto attivo.
Esempio completo
Consideriamo un motore comandato da:
START
STOP
e da un consenso generale:
CONSENSO_OK
Il funzionamento richiesto è:
- premendo START il motore deve iniziare a funzionare;
- rilasciando START deve continuare a funzionare;
- premendo STOP deve arrestarsi;
- se viene meno CONSENSO_OK deve arrestarsi.
Lo stato memorizzato può essere:
MARCIA
La logica concettuale è:
START → attivazione MARCIA
MARCIA → mantenimento della marcia
STOP oppure perdita CONSENSO_OK → disattivazione MARCIA
Il comando dell’uscita motore potrà quindi dipendere dallo stato MARCIA e dalle ulteriori condizioni richieste dal sistema.
La memoria introduce così un concetto fondamentale dell’automazione:
il comportamento del sistema può dipendere non soltanto dagli ingressi presenti in questo momento, ma anche dagli eventi che si sono verificati in precedenza.
14. Temporizzazioni
In molti automatismi non è sufficiente sapere se una condizione è vera o falsa. È necessario sapere anche per quanto tempo rimane vera, oppure attendere un intervallo prima di eseguire un’azione.
Le temporizzazioni permettono quindi di introdurre il tempo nella logica di controllo.
Per esempio, può essere necessario:
- avviare un motore alcuni secondi dopo un comando;
- mantenere una ventola attiva per un certo tempo dopo lo spegnimento;
- generare un impulso di durata definita;
- verificare che un’azione venga completata entro un tempo massimo;
- ritardare una fase di una sequenza.
Il controllore utilizza per queste funzioni dei temporizzatori, o timer.
Un temporizzatore dispone normalmente almeno di:
- una condizione che lo attiva;
- un tempo impostato;
- un tempo trascorso;
- uno stato che indica se la temporizzazione è terminata.
Il principio generale è:
condizione logica → conteggio del tempo → risultato logico
Tempo impostato e tempo trascorso
Il tempo impostato è la durata che il temporizzatore deve raggiungere.
Per esempio:
tempo impostato = 5 s
Il tempo trascorso indica invece quanto tempo è già passato dall’inizio della temporizzazione.
Durante il funzionamento potremmo quindi avere:
tempo impostato = 5 s
tempo trascorso = 3,2 s
Quando il tempo trascorso raggiunge il valore impostato, il temporizzatore modifica il proprio stato secondo il tipo di funzione utilizzata.
TON — ritardo all’attivazione
Il temporizzatore TON introduce un ritardo tra l’attivazione della condizione di ingresso e l’attivazione della propria uscita logica.
Supponiamo di impostare:
TON = 5 s
Quando la condizione di ingresso passa a 1, il temporizzatore inizia a contare.
Durante i primi 5 secondi:
ingresso = 1
uscita timer = 0
Trascorsi 5 secondi, se la condizione è ancora vera:
uscita timer = 1
La sequenza è quindi:
ingresso attivo → attesa → uscita attiva
Per esempio, possiamo utilizzare un TON per avviare una ventola 5 secondi dopo l’avvio di una macchina.
Se la condizione di ingresso torna a 0 prima che sia trascorso tutto il tempo impostato, un normale TON non ritentivo interrompe la temporizzazione e il tempo accumulato viene azzerato.
Per esempio:
tempo impostato = 5 s
la condizione rimane vera per 3 secondi e poi torna falsa.
Il timer non termina e, alla successiva attivazione, ricomincia da zero.
TOF — ritardo alla disattivazione
Il temporizzatore TOF viene utilizzato quando l’uscita deve rimanere attiva per un certo tempo dopo che la condizione di ingresso è diventata falsa.
Quando l’ingresso è vero, l’uscita del temporizzatore è attiva.
Quando l’ingresso passa da 1 a 0, inizia il conteggio del tempo.
Durante la temporizzazione l’uscita rimane ancora attiva.
Trascorso il tempo impostato, l’uscita si disattiva.
Il comportamento è quindi:
ingresso disattivato → attesa → uscita disattivata
Per esempio, una ventola di raffreddamento potrebbe continuare a funzionare per 30 secondi dopo l’arresto della macchina.
Con:
TOF = 30 s
la richiesta della macchina può tornare a 0, mentre l’uscita della ventola rimane attiva ancora per 30 secondi.
TP — temporizzatore impulsivo
Il temporizzatore TP genera un impulso di durata definita.
Quando viene rilevata la condizione che avvia il timer, la sua uscita diventa attiva per il tempo impostato.
Per esempio:
TP = 2 s
al verificarsi dell’evento:
uscita = 1 per 2 s
poi:
uscita = 0
Il comando iniziale può quindi essere molto breve, mentre l’uscita viene mantenuta attiva per una durata stabilita.
Un TP può essere utilizzato, per esempio, per:
- attivare un segnalatore per alcuni secondi;
- comandare un impulso di espulsione;
- generare un comando di durata costante;
- mantenere temporaneamente attivo un dispositivo dopo un evento.
Il comportamento preciso in caso di nuovi eventi durante l’impulso dipende dal tipo di temporizzatore e dall’implementazione utilizzata.
Temporizzatori ritentivi e non ritentivi
Un temporizzatore non ritentivo perde il tempo accumulato quando viene meno la condizione che lo abilita.
Per esempio:
tempo impostato = 10 s
il timer raggiunge:
6 s
la condizione diventa falsa.
Il tempo accumulato viene azzerato.
Alla nuova attivazione il conteggio riparte da:
0 s
Un temporizzatore ritentivo, invece, può conservare il tempo già accumulato.
Nello stesso esempio:
tempo raggiunto = 6 s
la temporizzazione viene interrotta.
Alla ripresa, il conteggio può continuare da:
6 s
anziché ripartire da zero.
Per azzerare il tempo accumulato è normalmente necessario un comando specifico di reset.
La ritentività deve essere scelta in funzione della funzione richiesta. Non è una caratteristica da utilizzare automaticamente.
Esempio di avvio ritardato
Supponiamo che un secondo motore debba partire 3 secondi dopo l’avvio del primo.
La condizione può essere:
MOTORE_1_ATTIVO → TON 3 s
Quando il motore 1 viene attivato, il timer inizia a contare.
Dopo 3 secondi:
TON_TERMINATO = 1
e questa condizione può essere utilizzata per comandare il motore 2.
La catena diventa:
motore 1 attivo → temporizzazione 3 s → comando motore 2
Se il motore 1 si arresta prima della fine dei 3 secondi, il comando del motore 2 non viene generato.
Esempio di arresto ritardato
Supponiamo che un aspiratore debba continuare a funzionare per 20 secondi dopo la fine di un processo.
Durante il processo:
PROCESSO_ATTIVO = 1
l’aspiratore è comandato.
Quando:
PROCESSO_ATTIVO = 0
inizia la temporizzazione TOF.
L’aspiratore rimane attivo ancora per:
20 s
e solo successivamente viene disattivato.
Esempio di impulso temporizzato
Supponiamo che una fotocellula rilevi il passaggio di un pezzo e che un segnalatore debba accendersi per un secondo.
L’evento della fotocellula avvia:
TP = 1 s
L’uscita del timer rimane quindi attiva per un secondo, indipendentemente dalla breve durata del segnale iniziale prevista dalla funzione utilizzata.
La catena è:
rilevamento pezzo → TP → segnalatore attivo per 1 s
Timeout
Un temporizzatore può essere utilizzato anche per controllare che un’azione venga completata entro un tempo massimo.
Supponiamo che, dopo il comando di apertura di una valvola, il relativo finecorsa debba essere raggiunto entro 5 secondi.
Quando viene impartito:
COMANDO_APERTURA = 1
parte contemporaneamente un timer:
TON = 5 s
Se il finecorsa viene raggiunto prima della scadenza, il movimento è avvenuto entro il tempo previsto.
Se invece il timer termina e il finecorsa non è ancora attivo:
TIMER_TERMINATO = 1
VALVOLA_APERTA = 0
può essere generata una condizione di anomalia.
Per esempio:
timeout apertura valvola
Il timer non serve quindi soltanto a ritardare un comando: può anche controllare che un processo non impieghi più tempo del previsto.
Temporizzazione e attesa bloccante
In un sistema di automazione è importante distinguere una temporizzazione da una semplice attesa che blocca l’esecuzione del programma.
Durante una temporizzazione correttamente gestita, il controllore continua a:
- leggere gli ingressi;
- eseguire la logica;
- aggiornare le uscite;
- controllare allarmi;
- gestire altre funzioni.
Il timer misura il tempo senza impedire al resto del programma di funzionare.
Una logica del tipo:
“attendi 5 secondi senza fare altro”
sarebbe invece inadatta in molte applicazioni, perché durante quell’attesa il sistema potrebbe non reagire correttamente ad altri eventi.
Il principio corretto è quindi:
il tempo viene controllato mentre il programma continua a essere eseguito.
Temporizzazioni nelle sequenze
I timer vengono spesso utilizzati all’interno di sequenze automatiche.
Per esempio:
- parte un motore;
- trascorrono 2 secondi;
- si apre una valvola;
- la valvola rimane aperta per 5 secondi;
- viene comandata la chiusura;
- si attende il relativo feedback.
In questo caso i timer contribuiscono a determinare quando una fase può terminare e quando deve iniziare la successiva.
Il tempo, però, non dovrebbe sostituire un feedback reale quando questo è necessario.
Se una valvola dispone di un finecorsa di apertura, è generalmente più affidabile sapere che la valvola è realmente aperta piuttosto che presumere che lo sia soltanto perché sono trascorsi alcuni secondi.
Comportamento in caso di arresto o mancanza di alimentazione
Anche per i temporizzatori è necessario stabilire cosa deve accadere quando il controllore viene fermato, riavviato o perde alimentazione.
A seconda del tipo di timer e della configurazione utilizzata:
- il tempo accumulato può essere perso;
- il timer può ripartire da zero;
- il valore può essere conservato;
- il programma può inizializzarlo esplicitamente.
La scelta dipende dalla funzione.
Un ritardo di avviamento, per esempio, normalmente può essere riavviato da zero.
Un conteggio temporale legato alla durata complessiva di un processo potrebbe invece richiedere un comportamento differente.
Anche in questo caso occorre distinguere tra:
tempo necessario alla logica corrente
e
informazione temporale che deve essere conservata nel tempo
Riepilogo
Le principali funzioni temporali possono essere riassunte così:
TON → ritarda l’attivazione
TOF → ritarda la disattivazione
TP → genera un impulso di durata definita
timer ritentivo → conserva il tempo accumulato secondo la logica prevista
timeout → verifica che un evento avvenga entro un tempo massimo
Le temporizzazioni permettono quindi al controllore di prendere decisioni non soltanto in base allo stato delle condizioni, ma anche in base alla loro durata e alla successione temporale degli eventi.
15. Contatori
Un contatore viene utilizzato quando il controllore deve registrare quante volte si verifica un determinato evento.
A differenza di un temporizzatore, che misura il trascorrere del tempo, un contatore modifica il proprio valore ogni volta che riconosce l’evento previsto.
Può essere utilizzato, per esempio, per:
- contare pezzi prodotti;
- contare cicli macchina;
- registrare scarti;
- contare manovre;
- verificare quante volte è intervenuto un dispositivo;
- eseguire un’azione dopo un determinato numero di eventi.
Il principio generale è:
evento → conteggio → valore numerico → eventuale decisione
Evento di conteggio
Supponiamo che una fotocellula rilevi il passaggio dei pezzi su un trasportatore.
Ogni volta che passa un pezzo, il segnale della fotocellula cambia stato.
Il contatore deve incrementare il proprio valore una sola volta per ogni pezzo.
Per esempio:
0 pezzi
passa il primo pezzo:
1 pezzo
passa il secondo:
2 pezzi
passa il terzo:
3 pezzi
Il contatore non deve quindi incrementarsi continuamente per tutto il tempo durante il quale il segnale rimane attivo.
Rilevamento del fronte
Per distinguere un evento dal semplice mantenimento di uno stato si utilizza spesso il rilevamento del fronte.
Un fronte rappresenta il passaggio da uno stato logico all’altro.
Il fronte di salita è il passaggio:
0 → 1
Il fronte di discesa è il passaggio:
1 → 0
Se il conteggio viene effettuato sul fronte di salita, il contatore incrementa il proprio valore soltanto nel momento in cui il segnale passa da 0 a 1.
Supponiamo che una fotocellula rimanga attiva per mezzo secondo durante il passaggio di un pezzo.
Il controllore esegue il proprio programma molte volte durante quel mezzo secondo, ma il fronte:
0 → 1
si verifica una sola volta.
Il pezzo viene quindi contato una sola volta.
Senza il corretto rilevamento dell’evento, uno stesso segnale mantenuto attivo potrebbe essere contato più volte.
Contatore crescente
Un contatore crescente incrementa il proprio valore a ogni evento riconosciuto.
Viene spesso indicato come CTU, da Count Up.
Per esempio:
valore iniziale = 0
dopo un evento:
1
dopo due eventi:
2
dopo dieci eventi:
10
Il valore presente nel contatore viene normalmente indicato come valore attuale.
Valore prefissato
Un contatore può essere associato a un valore prefissato, cioè al numero di eventi che si desidera raggiungere.
Supponiamo di dover riempire una scatola con 20 pezzi.
Il valore prefissato sarà:
20
Durante il ciclo:
valore attuale = 7
significa che sono stati contati sette pezzi.
Quando:
valore attuale = 20
il contatore può attivare una condizione logica che segnala il raggiungimento della quantità richiesta.
Il sistema potrebbe quindi:
- arrestare il trasportatore;
- comandare il cambio della scatola;
- avviare una fase successiva;
- segnalare che il lotto è completo.
Il contatore non compie necessariamente queste azioni direttamente: mette a disposizione della logica il proprio valore e gli stati associati.
Confronto con il valore prefissato
Non sempre interessa soltanto sapere se il contatore è esattamente uguale al valore impostato.
Il programma può anche verificare condizioni come:
valore attuale < valore prefissato
valore attuale = valore prefissato
valore attuale > valore prefissato
Per esempio, se il sistema deve lavorare fino a 100 cicli:
CONTATORE < 100 → ciclo consentito
Quando:
CONTATORE >= 100
il programma può impedire un nuovo ciclo o richiedere un intervento.
L’uso di un confronto maggiore o uguale evita che un eventuale superamento del valore impedisca il riconoscimento della soglia.
Reset
Dopo aver raggiunto un determinato valore può essere necessario riportare il contatore a zero.
Questa operazione prende normalmente il nome di reset.
Per esempio:
valore attuale = 20
viene completata la scatola.
Dopo il cambio della scatola:
RESET → valore attuale = 0
Il contatore è così pronto per iniziare un nuovo conteggio.
La condizione di reset deve essere definita chiaramente, perché l’azzeramento elimina il valore accumulato.
Contatore decrescente
Un contatore può anche diminuire il proprio valore a ogni evento.
Questa funzione viene spesso indicata come CTD, da Count Down.
Supponiamo di partire da:
10
A ogni evento:
10 → 9 → 8 → 7 → ... → 0
Questo tipo di conteggio può essere utilizzato quando interessa sapere quanti eventi restano prima di raggiungere una determinata condizione.
Per esempio:
pezzi mancanti = 10
dopo tre pezzi:
pezzi mancanti = 7
quando:
pezzi mancanti = 0
la quantità richiesta è stata raggiunta.
Conteggio crescente e decrescente
Alcuni contatori permettono sia di incrementare sia di decrementare lo stesso valore.
Per esempio:
- un sensore all’ingresso di un’area incrementa il conteggio;
- un sensore all’uscita lo decrementa.
Se inizialmente:
PRESENTI = 0
entra una persona:
PRESENTI = 1
ne entra un’altra:
PRESENTI = 2
una esce:
PRESENTI = 1
Lo stesso principio può essere applicato a pezzi, pallet o altri elementi, purché gli eventi di ingresso e uscita siano rilevati correttamente.
Contatori ritentivi e non ritentivi
Come per le memorie e i temporizzatori, è necessario stabilire cosa deve accadere al valore del contatore quando il controllore viene arrestato o perde alimentazione.
Un contatore ritentivo può conservare il proprio valore.
Per esempio:
pezzi prodotti = 12 430
Dopo un riavvio può essere necessario continuare da:
12 430
e non da zero.
In altre applicazioni, invece, il conteggio appartiene soltanto al ciclo corrente e deve essere azzerato alla ripartenza.
La scelta dipende dal significato del dato.
Per esempio:
numero totale di cicli macchina
può avere senso come valore ritentivo.
numero di pezzi presenti temporaneamente su un tratto di trasportatore
potrebbe invece dover essere ricostruito o inizializzato in modo diverso dopo un arresto.
Conteggio di produzione
Un’applicazione tipica è il conteggio dei pezzi prodotti.
Una fotocellula rileva ogni prodotto che attraversa una determinata posizione.
La sequenza è:
passaggio del pezzo → fronte del sensore → incremento del contatore
Se il valore prefissato è:
50
al cinquantesimo pezzo può essere generata la condizione:
LOTTO_COMPLETO = 1
Questa condizione può essere utilizzata per terminare il lotto o avviare una nuova fase.
Conteggio dei cicli
Un contatore può registrare anche il numero di cicli eseguiti da una macchina.
L’evento da contare deve essere scelto con attenzione.
Non è sufficiente utilizzare un segnale che potrebbe presentarsi più volte nello stesso ciclo.
È preferibile individuare un evento che rappresenti in modo univoco il completamento del ciclo.
Per esempio:
CICLO_COMPLETATO → incremento contatore cicli
In questo modo:
1 evento = 1 ciclo
Il contatore può poi essere utilizzato per:
- statistiche di produzione;
- manutenzione;
- sostituzione programmata di componenti;
- controllo del numero di lavorazioni.
Conteggio degli scarti
Lo stesso principio può essere utilizzato per registrare gli scarti.
Ogni volta che il sistema identifica un prodotto non conforme:
SCARTO_RILEVATO → incremento contatore scarti
A fine produzione è quindi possibile conoscere, per esempio:
pezzi prodotti = 1000
scarti = 17
I due valori possono successivamente essere utilizzati per ulteriori elaborazioni.
Conteggio delle manovre
Un contatore può essere utilizzato anche per registrare quante volte un dispositivo è stato azionato.
Per esempio:
- numero di aperture di una valvola;
- numero di avviamenti di un motore;
- numero di manovre di un contattore;
- numero di cicli di un cilindro.
Questo dato può essere utile quando la manutenzione di un componente dipende dal numero di operazioni effettuate e non soltanto dal tempo di funzionamento.
È importante però scegliere quale evento rappresenta realmente una manovra.
Se si vuole contare un avviamento del motore, per esempio, bisogna contare la transizione che rappresenta l’avvio e non ogni ciclo del programma durante il quale il comando rimane attivo.
Conteggi errati
Un conteggio corretto dipende dalla qualità del segnale utilizzato.
Un pulsante meccanico, per esempio, può produrre rimbalzi dei contatti.
Un singolo azionamento fisico potrebbe quindi generare più transizioni elettriche e provocare più incrementi del contatore.
Anche un sensore disturbato può produrre falsi impulsi.
Prima di utilizzare un segnale per il conteggio può quindi essere necessario:
- filtrarlo;
- eliminare i rimbalzi;
- verificarne la durata;
- controllare che ogni evento fisico produca un solo evento logico valido.
Il contatore registra ciò che riceve: se il segnale genera tre eventi, il controllatore non può sapere automaticamente che fisicamente avrebbe dovuto essercene uno solo.
Limiti numerici e overflow
Un contatore utilizza una variabile numerica con una dimensione finita.
Esiste quindi un valore massimo, e in alcuni casi anche un valore minimo, che può essere rappresentato.
Se il conteggio continua oltre il limite previsto dal tipo di dato, può verificarsi un overflow.
Il comportamento dipende dal controllore e dal tipo di variabile utilizzata.
Per esempio, un valore può:
- generare un errore;
- saturare al massimo;
- ripartire da un altro valore;
- produrre un comportamento definito dal sistema.
Per conteggi destinati a crescere molto nel tempo è quindi necessario scegliere un tipo di dato adeguato e prevedere cosa deve accadere quando ci si avvicina al limite.
Contatore software e contatore veloce
Un normale contatore software utilizza gli eventi che il programma riesce ad acquisire durante il normale funzionamento del controllore.
Questo è sufficiente per eventi relativamente lenti, come:
- passaggio di pezzi;
- cicli macchina;
- comandi operatore.
Se invece gli impulsi arrivano a frequenza elevata, il normale ciclo del programma potrebbe non riuscire a rilevarli tutti.
In questi casi si utilizzano gli ingressi veloci e i contatori hardware già introdotti tra gli ingressi speciali.
Il conteggio viene eseguito da circuiti dedicati indipendentemente dal normale ciclo del programma.
Si distingue quindi tra:
contatore software → adatto agli eventi acquisibili dal normale ciclo di controllo
e
contatore hardware veloce → adatto a impulsi rapidi che richiedono acquisizione dedicata
Contatori nelle sequenze
I contatori possono determinare anche il passaggio da una fase all’altra di una sequenza.
Per esempio:
- avvio del trasportatore;
- conteggio dei pezzi;
- raggiungimento di 10 pezzi;
- arresto del trasportatore;
- avvio della fase di confezionamento;
- reset del contatore;
- inizio di un nuovo ciclo.
In questo caso il passaggio alla fase successiva non dipende dal tempo trascorso, ma dal numero di eventi rilevati.
Temporizzatori e contatori rispondono quindi a due domande differenti:
temporizzatore → quanto tempo è trascorso?
contatore → quante volte è avvenuto l’evento?
Esempio completo
Supponiamo che una macchina debba riempire contenitori con 12 pezzi.
Una fotocellula rileva ogni pezzo in ingresso.
All’inizio:
CONTATORE = 0
Ogni fronte valido della fotocellula incrementa il valore:
1, 2, 3, ... 12
Il valore prefissato è:
12
Quando:
CONTATORE >= 12
viene generata la condizione:
CONTENITORE_COMPLETO = 1
Il trasportatore dei pezzi viene arrestato e può essere avviata la sostituzione del contenitore.
Quando il nuovo contenitore è in posizione:
RESET CONTATORE
e:
CONTATORE = 0
Il sistema può iniziare un nuovo conteggio.
Il contatore permette quindi al controllore di conservare una memoria numerica degli eventi avvenuti e di utilizzare quel numero per determinare il comportamento successivo dell’automazione.
16. Sequenze automatiche
Molti automatismi non eseguono una sola azione, ma una serie di operazioni che devono avvenire in un ordine preciso.
Una sequenza automatica suddivide il funzionamento della macchina in più fasi, ognuna delle quali rappresenta una determinata condizione del processo.
Per esempio:
- attendere il comando di avvio;
- avviare un trasportatore;
- attendere l’arrivo di un pezzo;
- fermare il trasportatore;
- azionare un cilindro;
- attendere il finecorsa;
- riportare il cilindro nella posizione iniziale;
- terminare il ciclo.
Il principio fondamentale è:
fase attuale → azioni della fase → condizione di transizione → fase successiva
Il controllore deve quindi sapere in ogni momento in quale fase si trova e quali condizioni devono verificarsi per poter passare alla fase successiva.
Fasi o stati
Ogni parte della sequenza può essere rappresentata mediante una fase o uno stato.
Per esempio:
FASE 0 = attesa
FASE 1 = avanzamento trasportatore
FASE 2 = arresto e posizionamento
FASE 3 = avanzamento cilindro
FASE 4 = ritorno cilindro
FASE 5 = fine ciclo
In ogni momento, in una sequenza semplice, una determinata fase identifica ciò che il sistema deve fare.
La variabile che rappresenta la fase può essere memorizzata come numero, come insieme di bit oppure mediante strutture specifiche messe a disposizione dal controllore.
Il concetto rimane comunque lo stesso: il programma conserva memoria dello stato attuale della sequenza.
Azioni della fase
Ogni fase può determinare una o più azioni.
Per esempio:
FASE 1 = trasportatore acceso
oppure:
FASE 3 = elettrovalvola avanzamento cilindro attiva
Le azioni rimangono normalmente valide finché la sequenza resta nella relativa fase.
Quando si passa alla fase successiva, le azioni vengono aggiornate secondo quanto previsto dal nuovo stato.
Una fase può anche non comandare direttamente alcuna uscita e servire semplicemente per attendere una condizione.
Per esempio:
FASE 0 = attesa del comando START
Transizioni
Il passaggio da una fase alla successiva avviene quando si verifica una determinata condizione di transizione.
Per esempio:
FASE 1 → FASE 2
quando:
FOTOCELLULA_PEZZO = 1
oppure:
FASE 3 → FASE 4
quando:
FINECORSA_AVANTI = 1
Una transizione può dipendere da:
- un ingresso digitale;
- una condizione analogica;
- un temporizzatore;
- un contatore;
- una variabile interna;
- una combinazione di più condizioni logiche.
Per esempio:
FINECORSA_AVANTI AND PRESSIONE_OK
può essere la condizione necessaria per completare una determinata fase.
Ingresso in una fase
Quando una transizione diventa vera, la sequenza abbandona la fase corrente ed entra nella fase successiva.
Questo passaggio può essere rappresentato come:
FASE 2 + condizione verificata → FASE 3
La nuova fase diventa quindi lo stato attivo del sistema.
È importante che una transizione venga valutata nel contesto della fase corretta.
Per esempio, il segnale:
FINECORSA_AVANTI = 1
deve provocare il passaggio alla fase successiva soltanto quando la sequenza si trova nella fase in cui sta effettivamente aspettando quel finecorsa.
Lo stesso ingresso potrebbe infatti essere attivo anche in altri momenti senza dover produrre alcun cambiamento di fase.
Sequenza lineare
La forma più semplice è una sequenza lineare, nella quale ogni fase porta a una sola fase successiva.
Per esempio:
FASE 0 → FASE 1 → FASE 2 → FASE 3 → FASE 4 → FASE 0
Il ciclo procede quindi sempre nello stesso ordine.
Un esempio potrebbe essere:
FASE 0 = attesa
FASE 1 = avanzamento pezzo
FASE 2 = lavorazione
FASE 3 = espulsione
FASE 4 = ritorno
e infine nuovamente:
FASE 0 = attesa
Sequenze con diramazioni
Non tutte le sequenze seguono necessariamente un unico percorso.
Il comportamento può dipendere dal risultato di una verifica.
Per esempio, dopo il controllo di un pezzo:
pezzo conforme → fase di uscita normale
pezzo non conforme → fase di scarto
La sequenza può quindi avere due percorsi differenti.
In forma concettuale:
FASE CONTROLLO
se:
PEZZO_OK = 1
→ FASE USCITA
altrimenti:
→ FASE SCARTO
Dopo aver completato le rispettive operazioni, i due percorsi possono eventualmente ricongiungersi in una fase comune.
Uso dei temporizzatori
Una fase può terminare dopo un determinato intervallo di tempo.
Per esempio:
FASE 2 = riscaldamento
Durante l’ingresso nella fase viene avviato un timer.
Quando:
TEMPO_RISCALDAMENTO_TERMINATO = 1
la sequenza passa alla fase successiva.
Il principio è:
ingresso nella fase → avvio temporizzazione → tempo raggiunto → transizione
Il timer può quindi determinare la durata di una fase.
Uso dei contatori
Anche un contatore può determinare il passaggio da una fase all’altra.
Supponiamo che una fase debba proseguire fino al passaggio di dieci pezzi.
Durante:
FASE RIEMPIMENTO
ogni pezzo incrementa il contatore.
Quando:
CONTATORE >= 10
la transizione diventa vera e la sequenza passa alla fase successiva.
Il passaggio non dipende quindi dal tempo trascorso, ma dal numero di eventi rilevati.
Condizioni multiple
Una fase può terminare soltanto quando sono soddisfatte più condizioni contemporaneamente.
Per esempio:
FINECORSA_RAGGIUNTO AND PRESSIONE_OK AND NOT ALLARME
In questo caso il raggiungimento del finecorsa, da solo, non è sufficiente.
La fase termina soltanto quando tutte le condizioni richieste risultano vere.
Si possono quindi utilizzare all’interno delle transizioni gli stessi operatori logici già introdotti:
- AND;
- OR;
- NOT.
Stato iniziale
Ogni sequenza deve avere uno stato iniziale definito.
Dopo l’avviamento del controllore, un reset o una determinata procedura di inizializzazione, il programma deve sapere da quale fase partire.
Per esempio:
FASE 0 = ATTESA
In questa fase possono essere previste condizioni come:
- uscite principali disattivate;
- cilindri nella posizione prevista;
- nessun ciclo in corso;
- attesa del comando START.
Non è sufficiente assegnare arbitrariamente una fase iniziale: bisogna anche verificare, quando necessario, che le condizioni fisiche della macchina siano compatibili con quello stato.
Reset della sequenza
Il reset permette di riportare la sequenza in uno stato definito.
Per esempio:
RESET → FASE 0
Il reset può essere richiesto:
- dall’operatore;
- dopo un’anomalia;
- al termine di una procedura;
- durante l’inizializzazione del sistema.
Il reset logico della sequenza non significa però necessariamente che tutti gli organi meccanici si trovino automaticamente nelle posizioni iniziali.
Se un cilindro è rimasto avanzato, impostare semplicemente:
FASE = 0
non lo riporta fisicamente indietro.
Il programma deve quindi distinguere tra:
reset dello stato logico
e
ripristino della macchina in una condizione fisica nota
Arresto durante una sequenza
Una macchina può essere arrestata mentre si trova in una fase intermedia.
È quindi necessario stabilire cosa deve accadere alla sequenza.
Le possibilità dipendono dal processo.
Per esempio:
- la fase può essere annullata;
- la sequenza può rimanere sospesa;
- può essere richiesto un ritorno controllato a una posizione iniziale;
- può essere necessario completare una determinata operazione prima dell’arresto;
- può essere necessario impedire una ripartenza automatica.
Il comportamento deve essere definito per ogni applicazione.
Non è corretto presumere che, dopo un arresto, sia sempre possibile riprendere semplicemente dal punto in cui la sequenza era stata interrotta.
Anomalie e timeout
Una sequenza non deve attendere indefinitamente un evento che potrebbe non verificarsi.
Supponiamo che durante una fase venga comandato l’avanzamento di un cilindro.
La sequenza attende:
FINECORSA_AVANTI = 1
Se il sensore non viene mai raggiunto a causa di un guasto, la macchina potrebbe rimanere bloccata permanentemente nella stessa fase.
Per questo può essere associato un timeout.
Per esempio:
tempo massimo avanzamento = 3 s
Se il finecorsa arriva entro tre secondi:
transizione normale → fase successiva
Se invece il timer termina prima del raggiungimento del finecorsa:
timeout → anomalia
La sequenza può quindi:
- interrompere il ciclo;
- disattivare i comandi previsti;
- memorizzare l’anomalia;
- richiedere un intervento o un reset.
Il timeout permette di distinguere tra:
“sto ancora aspettando”
e
“l’evento avrebbe già dovuto verificarsi”
Controllo delle condizioni prima del movimento
Una fase non deve necessariamente partire appena viene raggiunta dalla sequenza.
Prima di comandare un movimento possono essere richiesti determinati consensi.
Per esempio:
FASE_AVANZAMENTO AND PRESSIONE_OK AND RIPARO_CHIUSO → comando cilindro
Se una condizione necessaria non è presente, il movimento non viene eseguito.
Questo evita che la struttura della sequenza venga confusa con i consensi necessari al funzionamento degli attuatori.
La fase indica cosa dovrebbe avvenire; le condizioni di consenso stabiliscono se può effettivamente avvenire.
Ripartenza dopo una perdita di alimentazione
Una perdita di alimentazione può interrompere la sequenza in qualsiasi fase.
Al ritorno dell’alimentazione il controllore deve stabilire come comportarsi.
Le possibili strategie comprendono:
- ripartire dallo stato iniziale;
- conservare la fase precedente;
- ricostruire lo stato osservando sensori e finecorsa;
- richiedere un intervento dell’operatore;
- eseguire una procedura specifica di ripristino.
La scelta dipende dal tipo di processo.
Conservare semplicemente il numero della fase non garantisce infatti che la macchina si trovi ancora nella stessa condizione fisica.
Per esempio:
FASE MEMORIZZATA = cilindro avanti
non garantisce che il cilindro sia realmente ancora avanzato dopo una perdita di energia pneumatica o elettrica.
La ripartenza deve quindi tenere conto dei feedback reali disponibili.
Sequenza e ciclo di scansione
Il controllore esegue continuamente il proprio programma.
La sequenza non viene quindi normalmente eseguita tutta in una volta dall’inizio alla fine.
A ogni ciclo di scansione il programma:
- riconosce la fase attuale;
- esegue le azioni previste per quella fase;
- verifica le condizioni di transizione;
- se necessario, aggiorna lo stato della sequenza;
- esegue la nuova fase secondo l’ordine di elaborazione previsto dal programma.
Una fase può quindi rimanere attiva per moltissimi cicli di scansione prima che si verifichi la condizione necessaria al passaggio successivo.
Esempio completo
Consideriamo un piccolo sistema che deve portare un pezzo in posizione, bloccarlo con un cilindro, mantenerlo fermo per due secondi e poi rilasciarlo.
Sono disponibili:
START
FOTOCELLULA_PEZZO
FINECORSA_CILINDRO_AVANTI
FINECORSA_CILINDRO_INDIETRO
e le uscite:
MOTORE_TRASPORTATORE
CILINDRO_AVANTI
CILINDRO_INDIETRO
La sequenza può essere organizzata nel seguente modo.
FASE 0 — Attesa
Tutto il ciclo è fermo.
Si attende:
START = 1
Quando START viene riconosciuto:
FASE 0 → FASE 1
FASE 1 — Avanzamento del pezzo
Viene comandato:
MOTORE_TRASPORTATORE = 1
La sequenza attende:
FOTOCELLULA_PEZZO = 1
Quando il pezzo raggiunge la posizione:
FASE 1 → FASE 2
FASE 2 — Bloccaggio
Il trasportatore viene fermato:
MOTORE_TRASPORTATORE = 0
Viene comandato:
CILINDRO_AVANTI = 1
La sequenza attende:
FINECORSA_CILINDRO_AVANTI = 1
con un timeout massimo previsto per il movimento.
Se il finecorsa viene raggiunto:
FASE 2 → FASE 3
Se scade il timeout:
ANOMALIA = 1
e il ciclo viene interrotto secondo la logica prevista.
FASE 3 — Permanenza
Il cilindro rimane nella posizione di bloccaggio.
Viene eseguita una temporizzazione:
TON = 2 s
Quando il tempo è trascorso:
FASE 3 → FASE 4
FASE 4 — Ritorno del cilindro
Viene comandato:
CILINDRO_INDIETRO = 1
La sequenza attende:
FINECORSA_CILINDRO_INDIETRO = 1
anche in questo caso con un eventuale timeout.
Quando il finecorsa viene raggiunto:
FASE 4 → FASE 5
FASE 5 — Fine ciclo
Il ciclo viene dichiarato completato.
A seconda del funzionamento richiesto, il sistema può:
- tornare in FASE 0 e attendere un nuovo START;
- iniziare automaticamente un nuovo ciclo;
- incrementare un contatore di produzione prima di tornare allo stato iniziale.
La sequenza completa è quindi:
attesa → trasporto → bloccaggio → permanenza → ritorno → fine ciclo
Ogni passaggio avviene soltanto quando viene verificata la relativa condizione di transizione.
Una sequenza automatica permette quindi di organizzare un processo complesso come una successione ordinata di stati, in cui il controllore sa in ogni momento:
dove si trova il ciclo, cosa deve fare e quale condizione deve verificarsi prima di procedere.
17. Interblocchi, consensi e sicurezze di funzionamento
Un automatismo non deve stabilire soltanto quando eseguire un comando, ma anche quando quel comando deve essere impedito.
Prima di attivare un motore, muovere un cilindro o aprire una valvola può essere necessario verificare che siano presenti determinate condizioni.
Queste condizioni vengono normalmente indicate come consensi e interblocchi.
Il principio generale è:
richiesta di comando + condizioni ammesse → comando eseguibile
Se una condizione necessaria manca, il comando non deve essere eseguito.
Consensi
Un consenso è una condizione che deve risultare valida affinché una determinata azione possa essere autorizzata.
Per esempio, per avviare una pompa potrebbe essere necessario avere:
START = 1
LIVELLO_OK = 1
PRESSIONE_OK = 1
PROTEZIONE_MOTORE_OK = 1
La condizione di comando può quindi essere:
START AND LIVELLO_OK AND PRESSIONE_OK AND PROTEZIONE_MOTORE_OK
Se anche uno solo dei consensi viene meno, la condizione complessiva diventa falsa.
Un consenso può derivare da:
- un ingresso digitale;
- un valore analogico confrontato con una soglia;
- lo stato di un altro dispositivo;
- una variabile interna;
- una condizione di processo;
- un segnale proveniente da un altro controllore o dispositivo.
Interblocco
Un interblocco impedisce che vengano eseguite contemporaneamente azioni incompatibili oppure che un comando venga impartito in una condizione non ammessa.
Un esempio semplice è il comando avanti/indietro di un motore.
Se è attivo:
MARCIA_AVANTI
non deve essere possibile attivare contemporaneamente:
MARCIA_INDIETRO
La logica può quindi prevedere:
COMANDO_AVANTI AND NOT MARCIA_INDIETRO → USCITA_AVANTI
e:
COMANDO_INDIETRO AND NOT MARCIA_AVANTI → USCITA_INDIETRO
Le due funzioni si escludono reciprocamente.
Lo stesso principio può essere applicato a:
- apertura e chiusura di una valvola;
- salita e discesa;
- avanzamento e ritorno di un attuatore;
- riempimento e svuotamento;
- due movimenti che occupano la stessa zona;
- due apparecchiature che non possono funzionare contemporaneamente.
Interblocco logico e interblocco elettrico
Un interblocco può essere realizzato nel programma del controllore, ma in alcune applicazioni può essere previsto anche direttamente nel circuito elettrico.
Per esempio, nel comando avanti/indietro di due contattori, un contatto ausiliario del contattore di marcia avanti può impedire elettricamente l’eccitazione del contattore di marcia indietro e viceversa.
Si possono quindi avere:
interblocco logico → realizzato nel programma
interblocco elettrico → realizzato mediante il circuito di comando
Le due soluzioni non sono necessariamente alternative. In alcune applicazioni vengono utilizzate entrambe.
Condizioni permissive e condizioni di arresto
È utile distinguere tra una condizione che permette l’avviamento e una condizione che provoca l’arresto.
Per esempio, una pompa può essere avviata soltanto se:
LIVELLO_OK = 1
Se durante il funzionamento il livello scende sotto il minimo consentito, occorre stabilire se la perdita del consenso deve:
- impedire soltanto nuovi avviamenti;
- provocare anche l’arresto immediato della pompa.
Le due logiche non sono equivalenti.
Un consenso di partenza potrebbe essere verificato soltanto al momento dell’avviamento.
Un consenso permanente deve invece continuare a essere valido per tutta la durata del funzionamento.
Per questo bisogna stabilire chiaramente se una condizione è:
consenso all’avviamento
oppure:
consenso al mantenimento del funzionamento
Condizioni incompatibili
Un sistema può trovarsi anche in una situazione in cui due segnali che dovrebbero essere mutuamente esclusivi risultano entrambi attivi.
Per esempio, un cilindro con due finecorsa potrebbe fornire contemporaneamente:
FINECORSA_AVANTI = 1
FINECORSA_INDIETRO = 1
In una configurazione normale questo stato può essere fisicamente impossibile.
La logica può quindi riconoscerlo come condizione incoerente.
Lo stesso vale per casi come:
- valvola dichiarata contemporaneamente aperta e chiusa;
- comando avanti e indietro contemporaneamente presenti;
- sensori che descrivono stati fisicamente incompatibili;
- segnale di marcia presente insieme a una condizione che dovrebbe aver provocato l’arresto.
L’interblocco può quindi impedire il comando, mentre la diagnostica può segnalare l’incoerenza.
Interblocchi tra fasi della sequenza
Gli interblocchi diventano particolarmente importanti nelle sequenze automatiche.
Supponiamo che un cilindro possa avanzare soltanto quando il trasportatore è fermo.
La sequenza può trovarsi nella fase corretta per comandare il cilindro, ma il movimento deve comunque essere impedito se:
TRASPORTATORE_FERMO = 0
La condizione effettiva diventa:
FASE_AVANZAMENTO AND TRASPORTATORE_FERMO → CILINDRO_AVANTI
La fase indica ciò che il ciclo vuole eseguire.
L’interblocco verifica che l’azione sia consentita.
Questo evita di affidare tutta la protezione del processo alla sola successione delle fasi.
Consensi provenienti dal processo
Non tutti i consensi sono semplicemente stati elettrici.
Possono essere ottenuti anche elaborando grandezze analogiche.
Per esempio:
PRESSIONE = 5,8 bar
Il programma può stabilire:
PRESSIONE_OK = pressione compresa tra 4 e 7 bar
La condizione:
PRESSIONE_OK
diventa quindi un consenso logico ricavato da una misura analogica.
Lo stesso principio può essere utilizzato per:
- temperatura;
- livello;
- portata;
- velocità;
- posizione;
- tensione;
- corrente.
Isteresi nei consensi analogici
Quando un consenso deriva da una grandezza analogica vicina a una soglia, può verificarsi una continua commutazione tra vero e falso.
Supponiamo di utilizzare:
PRESSIONE_OK = pressione > 4 bar
Se la pressione oscilla attorno a 4 bar:
3,99 → 4,01 → 3,98 → 4,02 bar
il consenso potrebbe cambiare continuamente stato.
Per evitare questo comportamento si può utilizzare una isteresi, cioè due soglie differenti.
Per esempio:
attiva PRESSIONE_OK sopra 4,2 bar
disattiva PRESSIONE_OK sotto 3,8 bar
Tra 3,8 e 4,2 bar viene mantenuto lo stato precedente.
In questo modo piccole oscillazioni della misura non provocano continue commutazioni del comando.
Arresto per anomalia
Una condizione anomala può richiedere la rimozione immediata di uno o più comandi.
Per esempio:
SOVRATEMPERATURA = 1
può determinare:
MOTORE = 0
oppure impedire l’attivazione di una fase successiva.
L’anomalia può inoltre essere memorizzata:
SOVRATEMPERATURA → SET ALLARME
In questo modo il dispositivo può arrestarsi immediatamente, mentre l’informazione dell’evento rimane disponibile anche se successivamente la temperatura ritorna nel campo normale.
Anomalia presente e allarme memorizzato
È utile distinguere tra la condizione che esiste in questo momento e la memoria dell’evento.
Per esempio:
TEMPERATURA_ALTA = 1
indica che la temperatura è attualmente oltre il limite.
Se successivamente torna normale:
TEMPERATURA_ALTA = 0
un allarme memorizzato può invece rimanere:
ALLARME_TEMPERATURA = 1
fino al riconoscimento o al reset previsto.
Si distingue quindi tra:
anomalia presente → stato attuale del processo
e
allarme memorizzato → informazione che l’anomalia si è verificata
Reset di un allarme
Il reset non deve necessariamente cancellare un allarme mentre la causa è ancora presente.
Supponiamo che:
SOVRATEMPERATURA = 1
L’operatore preme RESET.
Se la temperatura è ancora troppo alta, sarebbe normalmente inutile cancellare definitivamente l’allarme.
Una logica possibile è:
RESET AND NOT SOVRATEMPERATURA → cancellazione allarme
In questo modo il reset viene accettato soltanto quando la causa che ha generato l’allarme non è più presente.
Il comportamento effettivo deve comunque essere definito in funzione della macchina e del processo.
Riavvio dopo un’anomalia
La scomparsa di un’anomalia non deve necessariamente provocare il riavvio automatico della macchina.
Per esempio, se un motore viene arrestato perché:
PRESSIONE_OK = 0
e successivamente la pressione torna normale, il programma deve stabilire se:
- il motore può ripartire automaticamente;
- deve essere richiesto un nuovo comando START;
- deve essere eseguito un reset;
- deve intervenire l’operatore.
La scelta dipende dal processo e dai requisiti dell’impianto.
In molte applicazioni è importante distinguere tra:
condizione nuovamente valida
e
autorizzazione alla ripartenza
Interblocchi e feedback
Un interblocco è più affidabile quando utilizza, dove necessario, lo stato realmente rilevato del dispositivo e non soltanto il comando impartito.
Supponiamo che una valvola B possa aprirsi soltanto quando una valvola A è realmente chiusa.
Utilizzare:
COMANDO_CHIUSURA_A = 1
non garantisce che A sia effettivamente chiusa.
Se è disponibile un finecorsa:
A_CHIUSA = 1
questo fornisce un’informazione sul risultato reale del movimento.
La condizione può quindi diventare:
COMANDO_APERTURA_B AND A_CHIUSA → APERTURA_B
Si ritrova la distinzione già vista tra:
comando → ciò che è stato richiesto
e
feedback → ciò che è stato realmente rilevato
Sicurezza funzionale e normale logica di automazione
Non tutte le condizioni che riguardano la sicurezza delle persone possono essere affidate alla normale logica di un controllore standard.
Funzioni come, per esempio:
- arresto di emergenza;
- controllo di ripari mobili;
- barriere fotoelettriche di sicurezza;
- prevenzione di movimenti pericolosi;
- controllo sicuro di determinati azionamenti;
possono richiedere dispositivi, architetture e controllori specificamente progettati e certificati per funzioni di sicurezza.
Un normale ingresso del PLC e una normale istruzione nel programma non diventano una funzione di sicurezza semplicemente perché vengono utilizzati per gestire un pulsante o un sensore legato alla sicurezza.
Bisogna quindi distinguere chiaramente tra:
interblocchi di processo e di funzionamento
e
funzioni di sicurezza destinate alla protezione delle persone
Le seconde devono essere progettate secondo i requisiti applicabili alla macchina e al livello di rischio.
Arresto di emergenza
L’arresto di emergenza non è un normale comando STOP utilizzato per arrestare il ciclo produttivo.
È una funzione destinata a permettere l’intervento in una situazione di emergenza.
Il suo comportamento, l’architettura elettrica, il riarmo e le modalità con cui vengono disattivate le funzioni pericolose non devono essere definiti come semplice logica software ordinaria.
Il comando di emergenza può essere acquisito anche dal sistema di controllo per diagnostica o visualizzazione, ma la funzione di sicurezza deve essere realizzata con l’architettura prevista per tale scopo.
Sicurezza e riarmo
Il semplice ripristino di un dispositivo di sicurezza non deve essere confuso con il comando di riavvio della macchina.
Per esempio, dopo il ripristino di un arresto di emergenza o la richiusura di un riparo, il sistema può tornare in una condizione nella quale il funzionamento è nuovamente consentito.
Il ripristino o il riarmo del dispositivo di sicurezza non deve, di per sé, provocare il riavvio automatico dei movimenti pericolosi.
Si distingue quindi tra:
ripristino della condizione di sicurezza
e
nuovo comando di avviamento
Questa distinzione evita che il semplice ritorno di un consenso provochi movimenti inattesi.
Esempio completo
Supponiamo di avere un motore che può funzionare soltanto quando:
- viene richiesto START;
- è disponibile la pressione necessaria;
- il livello è sufficiente;
- il sistema non è in allarme;
- non è attivo il comando del movimento opposto.
Definiamo:
START
PRESSIONE_OK
LIVELLO_OK
ALLARME
MARCIA_INVERSA
La condizione di avviamento può essere:
START AND PRESSIONE_OK AND LIVELLO_OK AND NOT ALLARME AND NOT MARCIA_INVERSA
Una volta avviato, il motore può essere mantenuto in marcia soltanto finché restano presenti i consensi che il progetto considera necessari durante il funzionamento.
Se:
PRESSIONE_OK = 0
la logica può arrestare il motore.
Se la pressione torna successivamente normale:
PRESSIONE_OK = 1
il sistema può richiedere un nuovo START anziché ripartire automaticamente.
L’interblocco con:
MARCIA_INVERSA
impedisce inoltre che le due direzioni vengano comandate contemporaneamente.
Il sistema non si limita quindi a chiedersi:
“devo comandare il motore?”
ma verifica anche:
“tutte le condizioni necessarie permettono realmente di comandarlo?”
Consensi e interblocchi costituiscono così una parte fondamentale della logica di automazione, perché definiscono non soltanto ciò che il sistema deve fare, ma anche le condizioni nelle quali non deve farlo.
18. PLC: struttura e ciclo di funzionamento
Il PLC, Programmable Logic Controller, è un controllore programmabile progettato per gestire macchine e processi automatici.
Riceve informazioni dagli ingressi, esegue il programma memorizzato e aggiorna le uscite secondo la logica prevista.
In forma generale:
ingressi → elaborazione del programma → uscite
Il PLC non è quindi soltanto un insieme di morsetti: contiene una CPU, memoria, circuiti di comunicazione e moduli destinati a interfacciarsi con i segnali provenienti dal campo.
Componenti principali
Un PLC comprende normalmente:
- alimentazione;
- CPU;
- memoria;
- ingressi;
- uscite;
- interfacce di comunicazione.
Nei sistemi modulari questi elementi possono essere realizzati mediante moduli separati.
Nei PLC compatti, invece, CPU, ingressi e uscite possono essere integrati nello stesso apparecchio.
Alimentazione
Il PLC necessita di una propria alimentazione.
A seconda del modello, può essere alimentato direttamente dalla rete oppure mediante una tensione continua, per esempio 24 V c.c.
L’alimentatore fornisce le tensioni necessarie all’elettronica interna e, nei sistemi modulari, può alimentare anche il bus interno attraverso il quale comunicano i vari moduli.
L’alimentazione della CPU non deve essere confusa con quella dei dispositivi di campo.
Sensori, attuatori e moduli di ingresso o uscita possono richiedere alimentazioni separate o distribuzioni specifiche secondo l’architettura dell’impianto.
CPU
La CPU, Central Processing Unit, esegue il programma di automazione.
Il suo compito comprende, tra le altre funzioni:
- elaborare la logica;
- gestire variabili;
- eseguire timer e contatori;
- controllare le comunicazioni;
- gestire diagnostica ed errori;
- coordinare i moduli del sistema.
La CPU esegue queste operazioni continuamente durante il funzionamento del PLC.
Memoria
Il PLC utilizza differenti aree di memoria per conservare:
- il programma;
- i dati;
- gli stati interni;
- i valori dei timer;
- i valori dei contatori;
- i parametri di configurazione;
- eventuali dati ritentivi.
La struttura esatta della memoria dipende dal controllore utilizzato.
Il programma e i dati non devono quindi essere considerati come un unico insieme indistinto: il PLC dispone di aree e modalità di memorizzazione differenti, con caratteristiche definite dal costruttore.
PLC compatto e PLC modulare
In un PLC compatto CPU, alimentazione e un certo numero di ingressi e uscite sono normalmente integrati nello stesso apparecchio.
Questa soluzione è adatta quando il numero di segnali e le funzioni richieste sono relativamente contenuti.
Un PLC modulare è invece costituito da più elementi collegati tra loro.
Per esempio:
alimentatore → CPU → modulo ingressi digitali → modulo uscite digitali → modulo ingressi analogici → modulo comunicazione
La struttura modulare permette di scegliere e aggiungere i moduli necessari alla specifica applicazione.
Possono quindi essere installati, per esempio:
- moduli digitali;
- moduli analogici;
- moduli per termocoppie;
- moduli per encoder;
- moduli di comunicazione;
- moduli di sicurezza;
- moduli tecnologici dedicati.
PLC locale e I/O distribuiti
Gli ingressi e le uscite non devono necessariamente trovarsi fisicamente accanto alla CPU.
In impianti estesi possono essere utilizzati moduli di I/O distribuiti, installati vicino ai sensori e agli attuatori e collegati alla CPU attraverso una rete industriale.
La struttura può quindi diventare:
sensori e attuatori → I/O remoto → rete → PLC
Questo permette di ridurre il cablaggio verso il quadro principale e distribuire l’acquisizione dei segnali nei diversi punti della macchina o dell’impianto.
Il ciclo di scansione
Durante il funzionamento normale il PLC esegue continuamente una successione di operazioni.
In forma semplificata, il ciclo principale è:
- lettura degli ingressi;
- esecuzione del programma;
- aggiornamento delle uscite;
- ripetizione del ciclo.
Questa successione prende il nome di ciclo di scansione.
Il PLC non esegue quindi il programma una sola volta.
Terminata una scansione, ricomincia immediatamente la successiva.
L’ordine esatto delle operazioni e la gestione delle immagini di processo dipendono dall’architettura e dalla configurazione del controllore.
Lettura degli ingressi
All’inizio della scansione, nella modalità classica di funzionamento, il PLC acquisisce lo stato degli ingressi.
Per esempio:
I1 = 1
I2 = 0
I3 = 1
Questi valori vengono resi disponibili al programma in un’area interna di memoria.
Il programma può quindi lavorare su una rappresentazione dello stato degli ingressi acquisita in quel momento.
Questa rappresentazione viene spesso indicata come immagine di processo degli ingressi.
Immagine di processo
L’immagine di processo permette al programma di utilizzare valori coerenti durante l’elaborazione.
Supponiamo che all’inizio della scansione:
PULSANTE_START = 1
Il programma utilizza normalmente quel valore durante l’esecuzione prevista dal ciclo.
Se il segnale fisico cambia poco dopo, il nuovo stato sarà normalmente acquisito nella scansione successiva, salvo l’utilizzo di funzioni o istruzioni che consentano l’accesso diretto o immediato all’hardware.
Questo evita che diverse parti dello stesso programma lavorino necessariamente su stati acquisiti in istanti differenti.
Esecuzione del programma
Dopo l’acquisizione degli ingressi, la CPU esegue le istruzioni del programma.
Per esempio:
START AND CONSENSO_OK → MARCIA
oppure:
TEMPERATURA > 80 °C → ALLARME_TEMPERATURA
Durante questa fase vengono elaborate:
- operazioni logiche;
- confronti;
- calcoli;
- timer;
- contatori;
- sequenze;
- variabili interne;
- condizioni di comando.
Il risultato delle elaborazioni determina i valori che dovranno essere assegnati alle uscite e agli stati interni.
Immagine delle uscite
Durante l’esecuzione del programma, il PLC prepara normalmente anche lo stato delle uscite.
Per esempio:
Q1 = 1
Q2 = 0
Q3 = 1
Questi valori possono essere conservati in una immagine di processo delle uscite.
Terminata l’elaborazione prevista, il PLC trasferisce questi stati ai moduli di uscita.
Il percorso diventa quindi:
ingressi fisici → immagine ingressi → programma → immagine uscite → uscite fisiche
Aggiornamento delle uscite
Quando viene aggiornata l’uscita fisica, il modulo di uscita trasforma il valore logico nel corrispondente segnale elettrico.
Per esempio:
Q1 = 1
può determinare l’attivazione di un’uscita a transistor che alimenta la bobina di un relè.
Il PLC conclude quindi la parte principale della scansione e inizia il ciclo successivo.
Tempo di scansione
Il tempo necessario a completare un ciclo prende il nome di tempo di scansione.
Può dipendere da numerosi fattori, tra cui:
- velocità della CPU;
- dimensione del programma;
- tipo di istruzioni utilizzate;
- numero di moduli;
- comunicazioni;
- funzioni diagnostiche;
- carico complessivo del sistema.
Per esempio, una scansione potrebbe richiedere alcuni millisecondi.
Se:
tempo di scansione = 5 ms
in condizioni semplificate la CPU completa circa 200 scansioni al secondo.
Il tempo di scansione non è necessariamente sempre identico: può variare in funzione delle operazioni eseguite.
Perché il tempo di scansione è importante
Il PLC può reagire a un evento soltanto dopo che questo è stato acquisito ed elaborato.
Supponiamo che un ingresso cambi stato subito dopo la lettura degli ingressi.
Nella normale elaborazione ciclica quel cambiamento potrebbe essere riconosciuto soltanto alla scansione successiva.
A questo tempo devono inoltre essere aggiunti i tempi propri:
- del sensore;
- del modulo di ingresso;
- dell’elaborazione;
- del modulo di uscita;
- dell’attuatore.
Il tempo di risposta complessivo della macchina non coincide quindi semplicemente con il tempo di scansione della CPU.
Impulsi brevi
Se un impulso dura meno del tempo necessario affinché il normale ciclo lo acquisisca, può non essere rilevato.
Per esempio, un impulso potrebbe iniziare e terminare completamente tra due letture ordinarie degli ingressi.
Per segnali veloci si utilizzano quindi, quando necessario:
- ingressi ad alta velocità;
- contatori hardware;
- interrupt o funzioni evento;
- moduli tecnologici dedicati.
Questo riprende il concetto già visto per gli ingressi speciali.
Scritture multiple della stessa uscita
Durante l’esecuzione del programma una stessa variabile o uscita può, tecnicamente, essere elaborata in più punti.
Per esempio:
all’inizio del programma:
MOTORE = 1
e più avanti:
MOTORE = 0
Se entrambe le istruzioni vengono eseguite nello stesso ciclo, il valore finale dipenderà dall’ordine e dalla logica del programma.
Questo può rendere il comportamento difficile da comprendere.
È quindi importante progettare il programma in modo che sia chiaro quale logica determina realmente lo stato finale di ciascun comando.
Esecuzione ciclica principale
Nei PLC più evoluti il programma non è necessariamente costituito da un solo ciclo.
Possono essere presenti diversi task, cioè gruppi di programma eseguiti secondo modalità differenti.
In molte piattaforme una parte del programma viene eseguita continuamente: terminata un’esecuzione, ne inizia un’altra secondo le modalità previste dal controllore.
Per esempio:
task principale → esecuzione continua
Il tempo tra due esecuzioni dipende dal funzionamento previsto dal controllore e dalla configurazione del task.
Task a intervallo temporale definito
Un task può essere eseguito anche a intervalli temporali definiti.
Per esempio:
ogni 10 ms
oppure:
ogni 100 ms
Questo è utile quando una determinata funzione deve essere elaborata con una periodicità stabilita, indipendentemente dal tempo impiegato dal programma principale entro i limiti previsti dal sistema.
Per esempio:
- regolazioni;
- campionamenti;
- elaborazioni periodiche;
- aggiornamenti specifici.
Task su evento
Alcuni controllori permettono di eseguire determinate parti di programma in seguito a un evento.
L’evento può essere, per esempio:
- un cambiamento su un ingresso;
- il raggiungimento di un valore;
- un evento proveniente da un modulo;
- una condizione generata da una comunicazione.
Questa modalità viene utilizzata quando una funzione deve reagire a determinati eventi senza attendere necessariamente il normale ciclo del programma.
Le modalità precise dipendono dall’architettura del PLC utilizzato.
Priorità dei task
Quando sono presenti più task, il controllore può assegnare loro differenti priorità.
Un task a priorità elevata può interrompere temporaneamente l’esecuzione di un task meno prioritario per eseguire una funzione che richiede una risposta più rapida.
Questo significa che, nei sistemi complessi, il tempo di esecuzione non dipende soltanto dalla lunghezza del programma, ma anche dalla gestione delle priorità.
Una progettazione errata può provocare ritardi, variazioni dei tempi o sovraccarico della CPU.
RUN
In stato RUN la CPU esegue normalmente il programma di automazione.
Durante RUN il PLC:
- acquisisce gli ingressi;
- esegue la logica;
- aggiorna le uscite;
- gestisce comunicazioni e diagnostica secondo la configurazione prevista.
RUN rappresenta quindi lo stato normale di esecuzione del programma.
STOP
In stato STOP la CPU non esegue normalmente il programma ciclico dell’automazione.
Il comportamento delle uscite durante STOP dipende dal controllore e dalla configurazione adottata.
Le uscite possono, per esempio:
- essere portate a uno stato definito;
- essere disattivate;
- assumere un comportamento configurato.
Non bisogna quindi presumere che lo STOP produca sempre lo stesso risultato su qualsiasi PLC.
Il comportamento deve essere verificato nella documentazione e definito durante il progetto.
Passaggio da STOP a RUN
Quando la CPU passa da STOP a RUN può essere necessario eseguire operazioni di inizializzazione.
Per esempio:
- azzerare determinate variabili;
- conservare valori ritentivi;
- verificare lo stato fisico della macchina;
- inizializzare sequenze;
- controllare eventuali anomalie;
- impedire una ripartenza indesiderata.
Il semplice ritorno in RUN non deve essere confuso con il comando di avviamento della macchina.
Il PLC può essere perfettamente in RUN mentre tutte le uscite di movimento restano disattivate in attesa delle corrette condizioni di partenza.
Watchdog
Il PLC deve anche verificare che il proprio programma venga eseguito entro tempi compatibili con il funzionamento previsto.
Per questo viene normalmente utilizzato un watchdog.
Il watchdog controlla che l’esecuzione del programma non superi un limite temporale definito.
Se, per esempio, il programma entra in una condizione anomala e non completa la propria elaborazione entro il tempo previsto, il watchdog può generare un errore e portare la CPU in una condizione controllata.
Il watchdog serve quindi a riconoscere situazioni in cui il programma non sta più procedendo correttamente.
Diagnostica della CPU
Un PLC industriale non si limita a eseguire la logica.
Può controllare e segnalare numerose condizioni interne e di sistema, per esempio:
- errore di un modulo;
- perdita di comunicazione;
- mancanza di alimentazione di una sezione;
- errore di configurazione;
- superamento del tempo massimo di ciclo;
- memoria insufficiente;
- guasti o anomalie delle periferiche.
Queste informazioni possono essere rese disponibili:
- nel software di programmazione;
- attraverso LED di stato;
- mediante HMI;
- attraverso sistemi di supervisione;
- nel programma stesso.
La diagnostica permette quindi di distinguere un problema del processo da un problema del sistema di controllo.
PLC e logica a relè
Prima della diffusione dei PLC molte automazioni venivano realizzate con relè, temporizzatori e contattori cablati fisicamente.
Per modificare una funzione era spesso necessario modificare il cablaggio.
Il PLC mantiene concettualmente molte delle stesse funzioni:
- ingressi;
- condizioni;
- memorie;
- temporizzazioni;
- uscite;
ma gran parte della logica viene realizzata mediante software.
Per esempio, una funzione che in logica cablata richiederebbe diversi contatti ausiliari può essere rappresentata nel programma mediante condizioni logiche.
Questo non significa che il PLC elimini i componenti elettromeccanici.
Relè, contattori, protezioni e dispositivi di potenza continuano a essere utilizzati quando necessari.
Il PLC sostituisce principalmente la logica cablata di controllo con una logica programmabile.
Modifica del comportamento
Uno dei principali vantaggi del PLC consiste nella possibilità di modificare il comportamento dell’automazione senza dover necessariamente ricablare l’intero circuito di comando.
Se, per esempio, una sequenza deve diventare:
A → B → C
anziché:
A → C → B
la modifica può riguardare principalmente il programma, purché l’hardware disponibile sia già adeguato alla nuova funzione.
La flessibilità software non elimina comunque la necessità di verificare:
- compatibilità degli ingressi;
- compatibilità delle uscite;
- potenza disponibile;
- sicurezza;
- cablaggio;
- caratteristiche degli attuatori.
Esempio di una scansione
Consideriamo un semplice sistema con:
START
CONSENSO_OK
e:
MOTORE
All’inizio della scansione il PLC legge:
START = 1
CONSENSO_OK = 1
Il programma esegue:
START AND CONSENSO_OK → MOTORE
Il risultato è:
MOTORE = 1
Al termine dell’elaborazione il PLC aggiorna l’uscita fisica.
La bobina del contattore viene comandata e il motore può essere avviato.
Il PLC inizia immediatamente una nuova scansione.
Se nella scansione successiva:
CONSENSO_OK = 0
la logica produce:
MOTORE = 0
e l’uscita viene disattivata secondo i tempi complessivi del sistema.
La macchina viene quindi controllata attraverso una continua successione di:
lettura → elaborazione → aggiornamento → nuova lettura
Quadro generale
A questo punto il funzionamento essenziale di un sistema controllato da PLC può essere rappresentato come:
sensori → ingressi → CPU → programma → uscite → attuatori
A questo percorso si aggiungono:
feedback → nuovi ingressi → nuova elaborazione
Il processo è quindi ciclico.
Il PLC osserva continuamente lo stato della macchina, applica la logica programmata e aggiorna i propri comandi.
È questa esecuzione continua e deterministica che permette di trasformare ingressi, logica e uscite in un sistema automatico.
19. Linguaggi di programmazione del PLC
Il PLC esegue automaticamente le funzioni descritte nei capitoli precedenti, ma per sapere come comportarsi deve contenere un programma.
Nel programma vengono definite, per esempio:
- le condizioni necessarie per attivare un’uscita;
- le combinazioni logiche tra più segnali;
- le memorie;
- le temporizzazioni;
- i conteggi;
- le sequenze;
- i consensi;
- gli interblocchi;
- i calcoli e le elaborazioni dei valori analogici.
La stessa funzione può essere rappresentata in modi diversi a seconda del linguaggio di programmazione utilizzato.
In ambito PLC il riferimento principale è la norma IEC 61131-3. Nell’edizione corrente sono definiti i linguaggi Structured Text (ST), Ladder Diagram (LD) e Function Block Diagram (FBD); la norma definisce inoltre gli elementi Sequential Function Chart (SFC) per strutturare l’organizzazione interna di programmi e blocchi funzionali.
Nel seguito vengono considerati:
- Ladder Diagram (LD);
- Function Block Diagram (FBD);
- Structured Text (ST);
- Sequential Function Chart (SFC).
Non si tratta semplicemente di modi diversi di rappresentare la stessa cosa. I linguaggi e gli elementi SFC possiedono caratteristiche che li rendono particolarmente adatti a differenti tipi di problema.
Ladder Diagram — LD
Il Ladder Diagram, normalmente abbreviato in LD, è un linguaggio grafico che deriva concettualmente dagli schemi elettrici a relè.
Il programma viene rappresentato mediante linee logiche nelle quali compaiono elementi come:
- contatti;
- bobine;
- timer;
- contatori;
- blocchi funzionali;
- confronti;
- altre istruzioni.
Una condizione molto semplice come:
START AND CONSENSO_OK → MOTORE
può essere rappresentata in Ladder mediante due contatti in serie che comandano una bobina.
In forma concettuale:
START — CONSENSO_OK — (MOTORE)
I due contatti in serie realizzano la funzione AND: entrambi devono risultare veri perché la bobina venga attivata.
Se invece due condizioni vengono disposte su rami paralleli, si realizza una funzione OR.
Il Ladder permette quindi di rappresentare graficamente molte delle funzioni logiche già studiate.
Contatti Ladder e contatti fisici
Un elemento grafico rappresentato come contatto nel programma Ladder non deve essere confuso automaticamente con un contatto elettromeccanico realmente presente nell’impianto.
Il contatto Ladder rappresenta la verifica di una condizione logica.
Per esempio, un contatto può verificare:
START
ma può anche verificare:
MOTORE_IN_MARCIA
TEMPERATURA_OK
CICLO_ATTIVO
TIMER_TERMINATO
Queste condizioni possono provenire da ingressi fisici oppure essere variabili generate interamente dal programma.
Il simbolo grafico serve quindi a stabilire se una determinata condizione logica deve essere considerata vera o falsa nel punto in cui viene utilizzata.
Contatto normalmente aperto nel Ladder
Un contatto Ladder normalmente aperto verifica direttamente il valore della variabile associata.
In forma concettuale:
variabile = 0 → condizione falsa
variabile = 1 → condizione vera
Se il contatto rappresenta:
START
esso risulta logicamente vero quando:
START = 1
Contatto normalmente chiuso nel Ladder
Un contatto Ladder normalmente chiuso esegue invece la negazione logica della variabile.
Se rappresenta:
ALLARME
si avrà:
ALLARME = 0 → condizione vera
ALLARME = 1 → condizione falsa
Il contatto normalmente chiuso nel programma realizza quindi concettualmente una funzione NOT.
Anche in questo caso non bisogna confondere il simbolo Ladder con il tipo di contatto fisico del dispositivo collegato all’ingresso.
Un pulsante fisico NA o NC e un contatto logico NA o NC nel programma sono concetti distinti.
Serie e parallelo nel Ladder
Due condizioni in serie rappresentano una funzione AND.
Per esempio:
START AND CONSENSO_OK
significa che entrambe devono essere vere.
Due rami paralleli rappresentano invece una funzione OR.
Per esempio:
START_LOCALE OR START_REMOTO
significa che è sufficiente una delle due condizioni.
Combinando serie, paralleli e contatti negati è possibile realizzare condizioni più articolate.
Per esempio:
(START_LOCALE OR START_REMOTO) AND CONSENSO_OK AND NOT ALLARME
Il Ladder traduce quindi in una rappresentazione grafica la logica booleana già vista.
Bobina
La bobina Ladder rappresenta normalmente il risultato della rete logica.
Per esempio:
START AND CONSENSO_OK → MOTORE
La bobina associata a MOTORE assume lo stato determinato dalla logica che la precede.
La bobina può rappresentare:
- un’uscita fisica;
- una variabile interna;
- uno stato;
- un comando utilizzato da altre parti del programma.
Anche la bobina Ladder non deve quindi essere identificata automaticamente con una bobina elettromeccanica reale.
Function Block Diagram — FBD
Il Function Block Diagram, abbreviato in FBD, è un linguaggio grafico nel quale le funzioni vengono rappresentate mediante blocchi collegati tra loro.
Ogni blocco riceve determinati ingressi, esegue una funzione e produce una o più uscite.
Per esempio, una funzione AND può essere rappresentata come:
START ──┐
AND ── MOTORE
CONSENSO ─┘
Lo stesso principio può essere utilizzato per:
- operatori logici;
- timer;
- contatori;
- comparatori;
- calcoli matematici;
- regolatori;
- elaborazioni analogiche;
- blocchi funzionali creati dal programmatore.
Il flusso delle informazioni risulta quindi visibile attraverso i collegamenti tra i blocchi.
Quando è utile FBD
FBD è particolarmente intuitivo quando il processo può essere descritto come una catena di elaborazioni.
Per esempio:
misura → scalatura → confronto → regolazione → comando
Una misura analogica può essere collegata a un blocco di conversione, poi a un confronto e infine alla logica che genera un comando.
Per questo FBD viene utilizzato frequentemente nelle elaborazioni analogiche, nelle regolazioni e nelle funzioni costituite da blocchi collegati tra loro.
Structured Text — ST
Lo Structured Text, abbreviato in ST, è un linguaggio testuale.
La logica viene scritta mediante istruzioni anziché mediante simboli grafici.
Una condizione come:
START AND CONSENSO_OK AND NOT ALLARME
può essere espressa, in forma semplificata, come:
MOTORE := START AND CONSENSO_OK AND NOT ALLARME;
L’operatore:
:=
indica l’assegnazione di un valore a una variabile.
In questo esempio il risultato dell’espressione logica viene assegnato alla variabile MOTORE.
Operazioni in Structured Text
ST permette di esprimere in modo compatto:
- operazioni logiche;
- calcoli matematici;
- confronti;
- condizioni;
- selezioni;
- cicli;
- manipolazione di dati;
- algoritmi più articolati.
Per esempio:
IF Temperatura > 80.0 THEN
AllarmeTemperatura := TRUE;
END_IF;
Il significato è:
se la temperatura è maggiore di 80, rendi vero l’allarme temperatura.
Una scelta tra più condizioni può essere espressa attraverso strutture specifiche del linguaggio.
ST risulta quindi particolarmente utile quando la funzione da realizzare contiene molti calcoli, confronti o elaborazioni che diventerebbero poco leggibili in una rappresentazione completamente grafica.
Grafico e testuale
LD e FBD sono linguaggi prevalentemente grafici.
ST è invece testuale.
Non esiste un linguaggio universalmente migliore.
Per esempio:
- una semplice logica di marcia e arresto può risultare molto chiara in Ladder;
- una catena di regolazione può essere facilmente leggibile in FBD;
- un calcolo articolato può essere molto più semplice da scrivere in ST.
La scelta deve favorire soprattutto:
- chiarezza;
- leggibilità;
- manutenzione;
- correttezza;
- adeguatezza alla funzione da realizzare.
Sequential Function Chart — SFC
Il Sequential Function Chart, abbreviato in SFC, viene utilizzato per rappresentare processi costituiti da una successione di fasi.
Il concetto è direttamente collegato alle sequenze automatiche già studiate.
Una struttura semplice può essere:
FASE 0
↓
transizione START
↓
FASE 1
↓
transizione PEZZO_PRESENTE
↓
FASE 2
↓
transizione LAVORAZIONE_COMPLETA
↓
FASE 3
Ogni fase può essere associata a determinate azioni.
Le transizioni stabiliscono invece quando è possibile passare da una fase alla successiva.
Fasi e transizioni in SFC
Una fase rappresenta uno stato della sequenza.
Per esempio:
TRASPORTO
BLOCCAGGIO
LAVORAZIONE
SCARICO
Una transizione contiene la condizione necessaria per procedere.
Per esempio:
PEZZO_IN_POSIZIONE
oppure:
FINECORSA_AVANTI AND PRESSIONE_OK
Quando la fase precedente è attiva e la condizione di transizione diventa vera, la sequenza può avanzare secondo le regole previste.
SFC permette quindi di rappresentare graficamente:
stato → condizione → nuovo stato
Diramazioni in SFC
Una sequenza può contenere anche percorsi alternativi.
Per esempio:
CONTROLLO PEZZO
può portare a:
USCITA NORMALE
se:
PEZZO_OK = 1
oppure a:
SCARTO
se:
PEZZO_OK = 0
SFC consente quindi di rappresentare in modo ordinato anche sequenze con:
- diramazioni;
- percorsi alternativi;
- parallelismi;
- ricongiungimenti.
Lo stesso problema in linguaggi differenti
Consideriamo una condizione semplice:
il motore può funzionare se START è attivo, il consenso è presente e non esiste un allarme.
La logica è:
START AND CONSENSO_OK AND NOT ALLARME → MOTORE
In Ladder viene rappresentata mediante contatti e bobina.
In FBD mediante blocchi logici collegati.
In ST può essere scritta:
MOTORE := START AND CONSENSO_OK AND NOT ALLARME;
Il comportamento richiesto rimane lo stesso.
Cambia il modo con cui il programmatore lo descrive.
Utilizzo di più linguaggi
Un progetto PLC non deve necessariamente essere scritto interamente con un solo linguaggio.
Quando l’ambiente di sviluppo e il controllore lo consentono, differenti parti del programma possono essere realizzate con linguaggi diversi.
Per esempio:
- logica di comando in Ladder;
- elaborazioni analogiche in FBD;
- calcoli in Structured Text;
- gestione della sequenza in SFC.
L’obiettivo non è utilizzare il maggior numero possibile di linguaggi, ma scegliere per ogni funzione una rappresentazione chiara e appropriata.
Organizzazione del programma
Un programma industriale non viene normalmente costruito come un’unica lunga sequenza di istruzioni.
Le funzioni vengono suddivise in parti organizzate.
Per esempio:
- gestione ingressi;
- elaborazione condizioni;
- gestione motori;
- gestione valvole;
- sequenza automatica;
- allarmi;
- comunicazioni;
- diagnostica.
La norma IEC 61131-3 prevede inoltre strutture software che permettono di organizzare il programma e riutilizzare le funzioni.
Tra queste rientrano programmi, funzioni e blocchi funzionali.
Questi elementi verranno approfonditi successivamente.
Simboli e nomi delle variabili
Nel programma è preferibile utilizzare nomi che descrivano il significato delle informazioni.
Per esempio:
Start
Pressione_OK
Valvola_Aperta
Motore_Trasportatore
sono più comprensibili di soli indirizzi hardware come:
I0.0
I0.1
Q0.2
Gli indirizzi fisici continuano a identificare ingressi e uscite reali, ma il programma può associarli a nomi simbolici più significativi.
Per esempio:
I0.0 → Pulsante_Start
I0.1 → Finecorsa_Avanti
Q0.0 → Contattore_Motore
Questo rende più semplice leggere, verificare e modificare il programma.
Dal problema al programma
Prima di scegliere il linguaggio bisogna comunque definire correttamente il comportamento richiesto.
Il programmatore deve sapere:
- quali sono gli ingressi;
- quali sono le uscite;
- quali condizioni devono essere soddisfatte;
- quali stati devono essere memorizzati;
- quali tempi devono essere rispettati;
- quali anomalie devono essere riconosciute;
- quale sequenza deve essere eseguita.
Solo successivamente queste regole vengono tradotte nel linguaggio scelto.
Il linguaggio non sostituisce quindi la progettazione della logica.
La sequenza corretta è:
problema → definizione della logica → scelta della rappresentazione → programma PLC
I linguaggi di programmazione sono gli strumenti con cui la logica dell’automazione viene trasformata in istruzioni eseguibili dal controllore.
Fonti
IEC 61131-3:2025 — Programmable controllers — Part 3: Programming languages.
IEC 60204-1:2016 + AMD1:2021 — Safety of machinery — Electrical equipment of machines — Part 1: General requirements.
ISO 13849-1:2023 — Safety of machinery — Safety-related parts of control systems — Part 1: General principles for design.
ISO 13850:2015 — Safety of machinery — Emergency stop function — Principles for design.
IEC 62061:2021 — Safety of machinery — Functional safety of safety-related control systems.
Siemens — SIMATIC S7-1200 / S7-1200 G2 System Manual: ciclo di scansione, immagine di processo, dati ritentivi, contatori e uscite veloci.
Schneider Electric — Machine Expert / Standard Function Blocks: TON, TOF, TP, CTU, CTD, fronti, memorie SR/RS e configurazione dei task.
Balluff — Electrical wiring of sensors: collegamenti e logica PNP/NPN.
WIKA — Handbook Electronic Pressure Measurement: segnali 0–10 V e 4–20 mA.
Analog Devices — documentazione applicativa sulla misura con termocoppie e condizionamento del segnale.
NIST CSRC Glossary — definizioni di bit e byte.