
La programmazione PLC costituisce il fondamento dell’automazione di fabbrica moderna, avendo rimpiazzato i quadri elettrici a relè cablati con logiche software deterministiche ad alta affidabilità. Un PLC (Programmable Logic Controller) opera come elaboratore hard real-time all’interno di contesti industriali gravosi, garantendo immunità a disturbi elettromagnetici, vibrazioni meccaniche ed escursioni termiche elevate. Chi scrive codice per questi controllori mappa lo stato di sensori fisici di campo, elabora routine sequenziali o di calcolo e comanda attuatori industriali con tempi di risposta certi, stabili nell’ordine dei millisecondi.
Come funziona il ciclo di scansione (Scan Cycle) di un PLC?
A differenza di un software per PC che risponde a eventi asincroni o esegue thread paralleli gestiti dal sistema operativo, la CPU di un PLC esegue le istruzioni all’interno di un ciclo deterministico continuo e rigorosamente sequenziale, noto come ciclo di scansione (scan cycle).
1
Lettura Ingressi
Campionamento e aggiornamento Immagine Ingressi (PAI)
2
Esecuzione Programma Utente
Elaborazione logica sequenziale (OB1 / Main Cyclic Task)
3
Scrittura Uscite
Trasferimento dati ai moduli fisici (PAA)
4
Diagnostica e Comunicazioni
Gestione bus di campo, HMI, reset timer Watchdog
↻ Ciclo continuo a tempo deterministico (Scan Time)
Il ciclo si articola in quattro passaggi:
-
Lettura degli ingressi fisici: la CPU interroga i canali di ingresso digitali e analogici collegati alle schede locali o sui nodi remoti. Lo stato dei sensori viene campionato e memorizzato in un’area di memoria interna dedicata, storicamente denominata PAI (Process Image Input, o Immagine di Processo degli Ingressi).
-
Esecuzione della logica utente: il processore esegue riga per riga o rung per rung le istruzioni del programma caricato nella memoria di lavoro. Durante questa fase la logica non legge direttamente i morsetti fisici delle schede, ma fa riferimento ai valori congelati nella memoria immagine campionata all’inizio del ciclo. I calcoli e i cambi di stato delle variabili di uscita vengono salvati temporaneamente nell’area PAA (Process Image Output, o Immagine di Processo delle Uscite).
-
Aggiornamento delle uscite fisiche: terminata l’elaborazione del codice, i valori calcolati nella memoria PAA vengono trasferiti fisicamente ai morsetti dei moduli di uscita per comandare attuatori, bobine di teleruttori, elettrovalvole o azionamenti inverter.
-
Housekeeping, comunicazioni e diagnostica: la CPU gestisce lo scambio dati con i pannelli HMI, i sistemi SCADA, gli altri controllori sul bus di campo ed esegue i controlli di consistenza interna dell’hardware.
La durata complessiva di questa sequenza prende il nome di tempo di scansione (scan time), tipicamente compreso tra 1 e 20 millisecondi a seconda della complessità del codice e della potenza della CPU. A guardia della sicurezza operativa resta sempre attivo il circuito di Watchdog: se un ciclo infinito, un errore matematico non gestito (come un overflow o una divisione per zero) o un guasto hardware bloccano l’esecuzione oltre il tempo massimo configurato (di default spesso impostato tra 100 e 200 millisecondi), il controllore interrompe immediatamente l’elaborazione, porta la CPU nello stato di STOP e disattiva tutte le uscite fisiche per scongiurare collisioni meccaniche o danni all’impianto.
I linguaggi della norma IEC 61131-3: differenze tra logica grafica e testuale
La standardizzazione della programmazione dei controllori industriali è regolata a livello internazionale dal comitato IEC attraverso la norma IEC 61131-3, promossa dall’associazione indipendente PLCopen. Lo standard definisce la sintassi, le strutture dati e la semantica dei linguaggi di programmazione, superando le frammentazioni proprietarie del passato e garantendo portabilità e interoperabilità tra costruttori differenti.
| Linguaggio | Tipologia | Caratteristiche e punti di forza | Ambito applicativo ideale |
|---|---|---|---|
| Ladder Diagram (LD) | Grafico | Rappresentazione a contatti e bobine derivata dagli schemi elettrici; immediato da debuggare online. | Interblocchi digitali, marcia/arresto motori, logiche booleane semplici e diagnostica di linea. |
| Structured Text (ST) | Testuale di alto livello | Sintassi affine a Pascal/C con costrutti condizionali (IF-THEN, CASE) e cicli iterativi (FOR, WHILE). | Algoritmi matematici complessi, manipolazione array e stringhe, gestione ricette e comunicazione dati. |
| Function Block Diagram (FBD) | Grafico | Flusso di segnale tra blocchi funzionali con ingressi a sinistra e uscite a destra; logica modulare. | Regolazioni di processo (PID), filtri analogici, catene di sicurezza e trattamento dati continuo. |
| Sequential Function Chart (SFC) | Grafico sequenziale | Derivato dal Grafcet industriale; divide il processo in passi (*step*), transizioni booleane e azioni associate. | Macchine sequenziali a stati finiti, linee di assemblaggio passo-passo e processi batch ciclici. |
| Instruction List (IL) | Testuale a basso livello | Sintassi basata su accumulatore simile all’Assembler. Deprecato nella terza edizione della norma. | Manutenzione di vecchi impianti legacy (da evitare nello sviluppo di nuovi progetti). |
Nell’automazione contemporanea la scelta del linguaggio non segue canoni rigidi, ma si adatta all’obiettivo della singola routine. Un progetto industriale moderno adotta un’architettura ibrida:
-
Il Ladder Diagram (LD) resta insuperabile per la logica di smistamento booleano e per la rapida interpretazione da parte dei tecnici manutentori in campo durante i fermi impianto. Riconoscere un contatto aperto su una sequenza Ladder in monitoraggio online richiede pochi secondi.
-
Lo Structured Text (ST) ha conquistato il ruolo primario nello sviluppo avanzato. Risulta indispensabile per implementare algoritmi di posizionamento assi, interrogare database relazionali, analizzare stringhe provenienti da lettori ottici, gestire matrici di dati o eseguire calcoli in virgola mobile a doppia precisione (LREAL a 64 bit). Tentare di scrivere un calcolo geometrico o statistico in Ladder creerebbe una serie infinita di rung ingestibili e soggetti a errori.
-
Il Sequential Function Chart (SFC) svolge la funzione di coordinatore ad alto livello: permette di scandire l’avanzamento delle fasi di macchina (attesa carico, bloccaggio morsa, lavorazione pezzo, scarico), richiamando all’interno delle singole azioni blocchi scritti in ST o LD.
Moduli I/O, segnali di campo e bus di comunicazione industriale
Un controllore programmabile riceve ed elabora informazioni dall’impianto tramite moduli di ingresso e comanda i carichi fisici attraverso moduli di uscita. La corretta interpretazione dei segnali elettrici costituisce il presupposto di qualsiasi architettura funzionante.
I segnali industriali standard si suddividono in due categorie principali:
-
Segnali digitali (On/Off a 24V DC): impiegati per fotocellule, sensori induttivi, finecorsa meccanici, pulsanti e selettori. Nei collegamenti hardware occorre distinguere tra circuiti Sink (NPN, l’ingresso chiude il circuito verso massa) e circuiti Source (PNP, lo standard europeo dominante, dove il sensore fornisce il positivo a 24V al morsetto del PLC). Per le uscite si distingue tra contatti a relè puliti (adatti per carichi misti e isolamento galvanico, ma soggetti a usura meccanica) e uscite statiche a transistor (a stato solido, veloci, prive di usura e idonee a frequenze di commutazione elevate per valvole proporzionali o comandi PWM).
-
Segnali analogici (misure continue di grandezze fisiche): utilizzati per sonde di temperatura, celle di carico, trasduttori di pressione e misuratori di portata. I canali analogici acquisiscono correnti standard (4-20 mA, preferite per l’immunità ai disturbi e per il rilevamento istantaneo del cavo tranciato sotto la soglia dei 4 mA) oppure tensioni (0-10V DC, sensibili a cadute di potenziale sulle lunghe distanze). All’interno del PLC un convertitore analogico-digitale trasforma il segnale in valori interi a 16 bit, che il programmatore provvede a normalizzare e scalare nelle unità di misura reali (bar, gradi Celsius, millimetri).
Mentre nei quadri macchina compatti i moduli I/O risiedono direttamente sul rack principale a fianco della CPU, negli impianti complessi si adotta l’architettura a periferia distribuita (I/O remotati o isole di valvole pneumatiche a bordo macchina).
Il collegamento tra CPU e dispositivi di campo non passa più attraverso pesanti fasci di cavi multipolari, ma viaggia su bus di campo deterministici basati su Ethernet industriale:
-
Profinet (Process Field Net): protocollo ampiamente diffuso in Europa e supportato dall’organizzazione PI Italia (Profibus e Profinet), basato su standard Ethernet IEEE 802.3 con classi real-time (RT) e isocrono (IRT) per sincronizzare cinematica ad altissima velocità.
-
EtherCAT (Ethernet for Control Automation Technology): tecnologia sviluppata da Beckhoff e gestita da EtherCAT Technology Group, in grado di elaborare i pacchetti Ethernet al volo (on the fly) senza interruzioni di stack, garantendo tempi di ciclo inferiori al millisecondo per azionamenti brushless e servomotori.
-
EtherNet/IP: lo standard aperto promosso dal consorzio ODVA e adottato come spina dorsale dell’ecosistema Rockwell Automation, basato sul protocollo applicativo CIP (Common Industrial Protocol) su stack standard TCP/IP e UDP.
-
Modbus TCP: protocollo aperto descritto dalla Modbus Organization, impiegato per integrare strumentazione ausiliaria, centraline frigorifere, pompe di calore e inverter generici tramite architettura client/server.
I principali ambienti di sviluppo e software di programmazione sul mercato
L’automazione industriale vede la presenza di marchi di riferimento che forniscono piattaforme software integrate per la configurazione hardware, la scrittura del codice, lo sviluppo di pagine HMI e la diagnostica di rete:
-
Siemens TIA Portal (Totally Integrated Automation Portal): la suite software unificata di Siemens per la gestione dei controllori SIMATIC S7-1200 e S7-1500, comprensiva dell’editor Step 7, dell’ambiente WinCC per pannelli operatore e del modulo Startdrive per la parametrizzazione degli azionamenti.
-
Rockwell Automation Studio 5000 (Logix Designer): ambiente di punta di Rockwell Automation per le famiglie di controllori ControlLogix e CompactLogix. Si caratterizza per una struttura di programmazione interamente Tag-Based (variabili a nomi simbolici allocate liberamente nella memoria della CPU senza mappatura rigida a byte/word), largamente diffusa nel settore automotive e nei mercati nordamericani.
-
Omron Sysmac Studio: ambiente integrato di Omron Industrial Automation calibrato sulla linea Machine Automation Controller (serie NJ/NX), che racchiude in un unico progetto la logica PLC secondo standard IEC, il controllo cinematica multiasse, i sistemi di visione artificiale e la sicurezza funzionale su rete EtherCAT.
-
Schneider Electric EcoStruxure Machine Expert: piattaforma di sviluppo di Schneider Electric per i controllori Modicon, focalizzata su standard aperti, gestione di macchine modulari e connettività verso piattaforme IIoT.
-
CODESYS (Controller Development System): ambiente di programmazione indipendente dall’hardware sviluppato dal gruppo CODESYS. Fornisce il runtime di controllo a centinaia di costruttori di dispositivi (tra cui WAGO, Festo, Eaton, IFM). Rappresenta una piattaforma ideale per la formazione e i test: il pacchetto base è accessibile gratuitamente, rispetta lo standard IEC 61131-3 e integra un simulatore software per eseguire e verificare logiche, task e pannelli virtuali direttamente sul PC senza disporre di un PLC fisico.
Buone pratiche di sviluppo: struttura del codice, blocchi funzione e sicurezza operativa
Un applicativo professionale deve mantenersi leggibile nel tempo, consentire una rapida diagnostica a tecnici terzi durante un fermo di linea ed evitare comportamenti anomali a fronte di comandi operatore scorretti.
I principi cardine per una corretta architettura software comprendono:
-
Modularità e incapsulamento (differenza tra FC e FB): separare le Funzioni (FC) dai Blocchi Funzione (FB). Le FC operano senza memoria interna (stateless): a parità di valori in ingresso restituiscono sempre il medesimo risultato senza conservare dati da un ciclo all’altro. Gli FB possiedono invece memoria (stateful): a ogni richiamo nel flusso di programma generano un blocco dati dedicato, denominato Data Block di Istanza, che preserva lo stato interno di variabili, temporizzatori e conteggi per quel determinato elemento di campo (come un blocco di gestione valvola richiamato per decine di utenze separate).
-
Intercettazione dei fronti di segnale: evitare di condizionare sequenze o passi di avanzamento al semplice stato logico continuo a 24V di un sensore. I comandi vanno agganciati al singolo ciclo di scansione in cui avviene la commutazione da 0 a 1 (fronte di salita
R_TRIG) o da 1 a 0 (fronte di discesaF_TRIG), prevenendo passi doppi indesiderati o accumuli impropri nei contatori. -
Separazione delle aree funzionali: suddividere la struttura del software isolando la lettura e il condizionamento degli ingressi, la logica di marcia automatica, le movimentazioni manuali di collaudo, la gestione degli allarmi (mancato raggiungimento posizione entro un tempo limite, sgancio termico) e il pilotaggio finale delle uscite.
-
Gestione rigorosa delle variabili ritentive (Retain): stabilire fin dall’inizio quali dati devono restare salvati a fronte di un’interruzione di alimentazione (quote pezzo, ricette attive, totalizzatori di produzione) e quali variabili di consenso devono resettarsi immediatamente a zero per ragioni di sicurezza, scongiurando partenze intempestive al ripristino della corrente elettrica.
Il trattamento delle funzioni di sicurezza industriale merita una separazione netta dalla logica di produzione. Il codice utente standard non può gestire pulsanti di arresto di emergenza, barriere ottiche immateriali o ripari mobili a protezione dell’operatore. Un’anomalia nel software, un transistor di uscita in corto circuito o un blocco del microprocessore impedirebbero l’arresto tempestivo delle parti in movimento.
Nei macchinari conformi ai requisiti della Direttiva Macchine dell’Unione Europea la sicurezza si affida a moduli elettromeccanici dedicati oppure a PLC di Sicurezza (Fail-Safe) certificati secondo le norme tecniche internazionali ISO 13849-1 (fino a Performance Level e) e IEC 62061 (fino a SIL 3). Tali apparecchiature integrano microprocessori ridondanti con architettura di controllo incrociato (1oo2D), routine continue di autodiagnosi e canali I/O provvisti di impulsi di test contro cortocircuiti tra conduttori. Il codice di sicurezza viene compilato all’interno di una partizione di memoria protetta da credenziali dedicate e non può essere scavalcato dalla normale logica operativa dell’impianto.
FAQ – Domande frequenti
È possibile caricare modifiche al programma con il PLC in marcia (RUN)?
Sì, le piattaforme industriali moderne supportano il download a caldo (online change) modificando logiche e blocchi senza arrestare il ciclo produttivo dell’impianto.
Qual è la differenza fondamentale tra una Funzione (FC) e un Blocco Funzione (FB)?
La Funzione non possiede memoria tra una scansione e l’altra, mentre il Blocco Funzione alloca un Data Block di istanza che conserva lo stato interno delle variabili.
Cosa succede alle uscite fisiche quando il PLC viene messo in STOP?
Tutte le uscite digitali e analogiche vengono disattivate e portate allo stato di riposo sicuro (0V o disimpegnate) impostato nella configurazione hardware.
Lo standard IEC 61131-3 supporta la programmazione orientata agli oggetti (OOP)?
Sì, la terza edizione della norma introduce classi, interfacce, metodi e concetti di ereditarietà per lo sviluppo di codice modulare in ambienti avanzati.
Perché si preferisce il segnale analogico 4-20 mA rispetto allo 0-10V?
La corrente non risente della resistenza dei cavi sulle lunghe distanze e il valore minimo a 4 mA consente di rilevare immediatamente il guasto per rottura del filo.
