CORSO PROGRAMMAZIONE PLC MATERIALE DIDATTICO A cura di: Ing. Biase D’Agostino Ing. Giuseppe Picardi M.G.A. Servizi industriali – “Corso di programmazione PLC” CAPITOLO 1 Algebra Booleana 2 M.G.A. Servizi industriali – “Corso di programmazione PLC” Calcolatore come rete logica Il calcolatore può essere visto come una rete logica cioè come un insieme di dispositivi chiamati porte logiche opportunamente connessi. Le porte logiche sono dispositivi capaci di eseguire operazioni logiche su segnali binari. I segnali binari sono livelli di tensione. Il valore esatto della tensione del segnale non è significativo: conta l’appartenenza ad un livello contrassegnato alto e ad un livello contrassegnato basso. Questi livelli sono identificati tramite una coppia di simboli: 0 Low False Open 1 High True Close Algebra Booleana Le tecniche di composizione delle porte logiche in una rete sono derivate da una particolare algebra operante su variabili binarie e chiamata Algebra Booleana (o Switching Algebra). L’algebra Booleana prende il nome dal matematico inglese Gorge Boole (1815-1864). A lui `e legato lo sviluppo della logica simbolica e degli operatori binari. Nel 1938 Shannon ha dimostrato come l’algebra booleana potesse essere presa a fondamento per la progettazione di circuiti logici digitali. Elementi dell’algebra booleana Vengono definiti i seguenti concetti: • variabili booleane • operatori booleani • funzioni booleane • porte logiche • circuiti logici - combinatori - sequenziali Una variabile booleana è una variabile binaria che può assumere esclusivamente due valori logici che saranno denotati con 0 e 1. Se x è una variabile booleana, vale quindi la seguente definizione formale: x = 0 se x è diverso da 1 x = 1 se x è diverso da 0 Si definiscono gli operatori booleani o logici fondamentali: NOT Negazione Logica AND Prodotto Logico OR Somma Logica 3 M.G.A. Servizi industriali – “Corso di programmazione PLC” Negazione o Complementazione Definizione informale Trattasi di un’operazione unaria che restituisce il valore logico opposto a quello della variabile di ingresso. Rappresentazione come operatore Per rappresentare il complemento di una variabile x sono usate varie notazioni. Fra le più comunemente usate ricordiamo: • not(x) • x • x’ • -x Rappresentazione dell’operazione not(x) con la tavola della verità: x 0 not(x) 1 1 0 Proprietà not(not(x)) = x 1=1 0=1=0=1 Prodotto Logico (AND) Definizione informale L’operazione di prodotto logico fra due (o più) variabili fornisce il valore logico 1 se e solo se tutte le variabili assumono valore logico 1. Rappresentazione come operatore Per rappresentare il prodotto logico di due variabili x e y si usa la notazione: • • • x and y x*y xy Rappresentazione dell’operazione x * y con la tavola della verità: x 0 0 1 1 4 y 0 1 0 1 x*y 0 0 0 1 M.G.A. Servizi industriali – “Corso di programmazione PLC” Proprietà: x*0=0 x*1=x x*x=x x*x=0 Somma Logica (OR) Definizione informale L’operazione di somma logica fra due (o più) variabili fornisce il valore logico 1 se e solo se almeno una delle variabili assume valore logico 1. Rappresentazione come operatore Per rappresentare la somma logica di due variabili x e y si usa la notazione: • • x or y x+y Rappresentazione dell’operazione x + y con la tavola della verità: x 0 0 1 1 y 0 1 0 1 x+y 0 1 1 1 Proprietà: x+0=x x+1=1 x+x=x x+x=1 Porte Logiche Le porte logiche sono dispositivi elettronici capaci di eseguire operazioni logiche su variabili booleane. 5 M.G.A. Servizi industriali – “Corso di programmazione PLC” Porta AND Alcune proprietà della porta AND: A*0=0 A*1=A A*A=A A*A=0 6 M.G.A. Servizi industriali – “Corso di programmazione PLC” Porta OR Alcune proprietà della porta OR: A+0=A A+1=1 A+A=A A+A=1 Proprietà dell’algebra Booleana Le proprietà degli operatori logici NOT, AND e OR, permettono di stabilire le seguenti proprietà: • Idempotenza x + x= x x* x = x • Elemento nullo (forcing function) x + 1=1 x * 0=0 7 M.G.A. Servizi industriali – “Corso di programmazione PLC” • Proprietà Commutativa x + y = y+x x* y= y*x • Proprietà Associativa x + (y + z) = (x + y) + z = x + y + z x * (y * z) = (x * y) * z = x * y * z Le proprietà che valgono per l’operatore + valgono anche per l’operatore * purchè si scambino gli 1 con gli 0 (e viceversa). Teoremi dell’algebra Booleana • Distributività La proprietà distributiva vale sia rispetto alla somma di prodotti (come nell’algebra ordinaria) che rispetto al prodotto di somme. x * y + x * z = x * (y + z) (x + y) * (x + z) = x + y * z Verifica dei teoremi di distributività mediante la tavola della verità. x 0 0 0 0 1 1 1 1 • y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 xy 0 0 0 0 0 0 1 1 xz xy+xz 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 y+z x(y+z) x+y 0 0 0 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 x+z 0 1 0 1 1 1 1 1 De Morgan x*y=x+y x+y=x*y Operazione di NAND Logico Definizione informale L’operazione di nand logico `e l’operazione negata dell’operazione and. Il simbolo nand è una contrazione di not and. 8 x+y*z 0 0 0 1 1 1 1 1 M.G.A. Servizi industriali – “Corso di programmazione PLC” Quindi l’operazione di nand logico fra due (o più) variabili fornisce il valore logico 1 se almeno una delle variabili assume il valore logico 0. Rappresentazione come operatore Per rappresentare il nand logico non esiste un simbolo specifico. x nand y Rappresentazione dell’operazione x nand y con la tavola della verità: x 0 0 1 1 y 0 1 0 1 x nand y 1 1 1 0 Proprietà: x nand 0 = 1 x nand 1 = x x nand x = x x nand x = 1 x nand y = x * y Con il solo operatore NAND, si possono rappresentare gli operatori NOT, AND e OR. 9 M.G.A. Servizi industriali – “Corso di programmazione PLC” Operazione di NOR logico Definizione informale L’operazione di nor logico è l’operazione negata dell’operazione or. Il simbolo nor `e una contrazione di not or. Quindi l’operazione di nor logico fra due (o più) variabili fornisce il valore logico 1 se nessuna delle variabili assume il valore logico 1. Rappresentazione come operatore Per rappresentare il nor logico non esiste un simbolo specifico. x nor y _ Rappresentazione dell’operazione x nor y con la tavola della Verità: x 0 0 1 1 y 0 1 0 1 x nor y 1 0 0 0 Proprietà: x nor 0 = x x nor 1 = 0 x nor x = x x nor x = 0 x nor y = x + y Con il solo operatore NOR, si possono rappresentare gli operatori NOT, AND e OR. 10 M.G.A. Servizi industriali – “Corso di programmazione PLC” Operazione di OR Esclusivo (xor) Definizione informale L’operazione di or esclusivo (xor) fra due (o più) variabili fornisce il valore logico 1 se il numero delle variabili che assumono valore logico 1 `e dispari. Rappresentazione come operatore Per rappresentare l’operatore xor si usa comunemente la seguente notazione: x y x xor y _ _ Rappresentazione dell’operazione x xor y con la tavola della Verità: 11 M.G.A. Servizi industriali – “Corso di programmazione PLC” x 0 0 1 1 y 0 1 0 1 x xor y 0 1 1 1 Proprietà: x x x x x 0=x 1=x x=0 x=1 y=x y= x* y+x*y l’operatore xor può essere visto come un • comparatore di uguaglianza: IF X = Y • THEN ELSE X X Y =0 Y=1 X X Y=Y Y=Y invertitore controllato: IF X = 0 THEN ELSE Funzioni Logiche Le funzioni logiche sono ottenute dalla composizione di operazioni logiche. Una funzione di variabili logiche X, Y , Z, … = F(X; Y; Z; …) ha come dominio il prodotto cartesiano delle sue variabili, e come immagine una variabile logica. è una variabile logica {0; 1} Tavola della verità di funzioni logiche La tavola della verità di una funzione logica si ottiene valutando il valore di verità della funzione in corrispondenza di tutte le possibili combinazioni delle sue variabili. Se la funzione dipende da n variabili logiche, la tavola della verità avrà 2n righe. x 0 … 1 12 y 0 … 1 z 0 … 1 … … … … F(x y z…) {0,1} {0,1} {0,1} M.G.A. Servizi industriali – “Corso di programmazione PLC” Minterm di funzioni logiche Il minterm di ordine i di una funzione di n variabili `e una funzione prodotto delle n variabili in forma diretta o in forma negata che vale 1 in corrispondenza alla sola combinazione i delle variabili. Nel minterm di ordine i compaiono in forma diretta le variabili il cui valore `e 1 nella tavola della verità e compaiono in forma negata le variabili il cui valore `e 0 nella tavola della verità x 0 0 1 1 y 0 1 0 1 minterm xy xy xy xy Forma canonica SP La forma canonica Somma di Prodotti (SP) di una funzione logica si ottiene sommando i minterm in corrispondenza dei quali la funzione vale 1. ESEMPIO: Data la funzione F espressa dalla seguente tavola della verità: x 0 0 0 0 1 1 1 1 y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 F 1 0 0 1 1 0 1 0 minterm x y z x y z x y z x y z F(x,y,z) = x y z + x y z + x y z + x y z Logica a due livelli Se si trascura l’operatore not (cioè si suppone che ogni variabile sia disponibile in forma diretta e in forma negata), qualunque funzione logica può essere rappresentata con una rete logica a due livelli. Esempio: Date tre variabili a, b e c, si definisce funzione di maggioranza F(a; b; c) la funzione che vale 1 quando la maggioranza delle variabili vale 1. La funzione di maggioranza ha la seguente forma canonica SP: 13 M.G.A. Servizi industriali – “Corso di programmazione PLC” a 0 0 0 0 1 1 1 1 b 0 0 1 1 0 0 1 1 c 0 1 0 1 0 1 0 1 F 0 0 0 1 0 1 1 1 minter a b c a b c a b c a b c F(a; b; c) = a b c + a b c + a b c + a b c La rete logica corrispondente alla funzione di maggioranza in forma canonica SP ha la seguente struttura: 14 M.G.A. Servizi industriali – “Corso di programmazione PLC” CAPITOLO 2 Introduzione al PLC 15 M.G.A. Servizi industriali – “Corso di programmazione PLC” L’automazione L'automazione dei processi industriali L'automazione industriale può essere definita come la disciplina che studia le metodologie e le tecnologie che permettono il controllo dei flussi di energia, di materiali e di informazioni necessari alla realizzazione di processi produttivi,senza che sia richiesto l'intervento dell’uomo. Il termine “automazione" fu utilizzato per la prima volta nel 1946 dalla Ford motori negli USA per qualificare il suo ciclo di produzione dei motori. Un'automazione molto flessibile, come quella moderna, è necessaria per le attuali condizioni di produzione, che spingono verso ciò che si può definire una "personalizzazione di massa". Prima dell'era industriale la produzione era artigianale e come tale risultava essere molto personalizzabile. L'avvento dell'industrializzazione e della produzione di massa rese necessariamente i prodotti uniformi (si ricordi la celebre frase di Henry Ford: "Voi potete avere qualsiasi colore preferiate, a patto che sia nero"). Si è poi passati a una fase in cui alla produzione di massa si è affiancata una varietà maggiore delle caratteristiche dei prodotti, per giungere alla fase attuale, in cui si vuole avere una notevole varietà delle caratteristiche realizzando, appunto, la "personalizzazione di massa". L’importanza dell’automazione nei processi produttivi moderni deriva, inoltre da una molteplicità di altri fattori, non solo economici, tra cui si ricordano: • Il miglioramento della qualità dei prodotti; • La possibilità di utilizzare lo stesso impianto per più prodotti (concetto di flessibilità della produzione); • L'abbreviamento dei tempi di produzione; • La possibilità di ridurre i magazzini in ingresso e in uscita; • La drastica riduzione degli scarti di lavorazione; • Il minor costo della produzione; • La necessità di conformarsi a leggio regolamenti che impedirebbero una produzione manuale (soprattutto nell'industria farmaceutica e alimentare); • La possibilità di ridurre l'impatto ambientale e di risparmiare energia; • Il miglioramento della competitività dell'azienda nel suo complesso. Si vuole adesso cercare di definire meglio cosa si intende per "sistema,di controllo" nell',ambito dell'automazione industriale. In generale, in un sistema automatizzato possono essere individuati il processo fisico e il sistema di controllo. Un processo fisico può essere definito come una combinazione di operazioni che agiscono su entità appartenenti al mondo fisico cambiandone alcune caratteristiche. Le azioni di movimento, le lavorazioni meccaniche, le reazioni chimiche, lo scorrere di flussi energetici sono alcune delle operazioni che soddisfano tale definizione e che possono essere considerate, quindi, dei processi fisici; conte tali, sono dunque oggetto dell'automazione. Il puro trattamento di informazioni, d'altra parte, non apporta cambiamenti al mondo reale e non può quindi essere considerato un processo fisico. 16 M.G.A. Servizi industriali – “Corso di programmazione PLC” Modello di un sistema automatizzato Un processo fisico riceve in ingresso dei materiali, sotto forma di prodotti grezzi, e dell'energia; riceve, inoltre, dal sistema di controllo delle informazioni sotto varie forme, quali valori di tensione o di corrente elettrica, di pressione di un fluido, oppure sequenze di valori binari codificati. Il processo produce in uscita materiali sotto forma di prodotti finiti scarti, ed energia; invia inoltre delle informazioni al sistema di controllo. Anche i disturbi provenienti dall'ambiente che agiscono sul processo si possono considerare conte ingressi del processo, ovviamente non modificabili a piacere. Le informazioni in uscita sono fornite da appositi dispositivi formati da un componente detto sensore, il quale trasforma la variabile da misurare nel tipo di grandezza che si adotta per la misura, e da un componente detto trasduttore, il quale accetta un'informazione sotto forma di variabile fisica o chimica e la converte in una grandezza di differente natura, tipicamente elettrica, adatta a essere trasmessa. Molto spesso sensore e trasduttore coincidono nello stesso elemento, e questa è la ragione per cui si parla genericamente di "sensore" (o di "trasduttore") per indicare un dispositivo che misura una grandezza dando in uscita un segnale, generalmente di tipo elettrico, a essa relazionato. Le informazioni in entrata sono utilizzate dagli attuatori per alterare il valore di variabili di controllo per il processo. Di solito gli attuatori veri e propri, detti anche elementi finali di controllo, sono preceduti dai pre-attuatori, i quali provvedono a realizzare le conversioni delle informazioni e le amplificazioni di potenza. Per esempio, una valvola è il dispositivo finale di controllo per la portata di un fluido in un tubo mentre il motore elettrico che la movimenta, insieme al suo azionamento, è il pre-attuatore. I sensori, gli attuatori e i pre-attuatori possono essere considerati come facenti parte del processo fisico e ne costituiscono l'interfaccia verso il sistema di controllo. Il sistema di controllo, quindi riceve informazioni sullo stato del processo tramite i sensori, le elabora secondo algoritmi specificati, e invia agli attuatori le informazioni relative alle azioni da mettere in atto per realizzare il controllo del processo fisico. A tale scopo esso riceve anche informazioni da una o più entità esterne, le quali possono essere degli operatori umani o altri sistemi di controllo gerarchicamente superiori; inoltre è in grado di fornire a queste entità esterne informazioni sul suo stato e su quello del processo controllato. Risulta quindi evidente, nella rappresentazione che si è fatta del sistema di controllo, che esso riceve, elabora e invia informazioni, pertanto deve essere considerato come un sistema per il 17 M.G.A. Servizi industriali – “Corso di programmazione PLC” trattamento delle informazioni, ossia un sistema informatico. Un sistema di controllo è, quindi, un'applicazione di quella che oggi è definita tecnologia dell'informazione e della comunicazione (ICT, Information and Comunication Technology) Sistema di controllo e misura di un processo industriale Una definizione più rigorosa di ciò che si intende con "sistema per il controllo di processi e di acquisizione dati" è presente in una proposta di standard internazionale per l'automazione distribuita. Secondo tale proposta, un sistema di controllo di misura di un processo industriale può essere descritto come un insieme di dispositivi interconessi e comunicanti tra loro attraverso una o più reti di comunicazione. Tali reti di comunicazione possono eventualmente avere una relazione gerarchica tra loro. Una funzionalità espletata da un tale sistema è modellata come un'applicazione che può risiedere in un singolo dispositivo, come l'applicazione C in figura, o essere distribuita tra diversi dispositivi, come le applicazioni A e B nella stessa figura. Per esempio, un' applicazione può consistere nella chiusura di, uno o più anelli di controllo dove l'acquisizione delle misure è realizzata da un dispositivo, l'algoritmo di controllo da un altro, e l'invio dei comandi per il controllo da un altro ancora. Modello di un sistema di controllo Il dispositivo è definito come un'entità fisica indipendente capace di realizzare una o più applicazioni, o parti di applicazioni, ed è limitato dalle sue interfacce, ossia dai componenti hardware e software che gli permettono di comunicare con l'esterno. Come illustrato in Figura, un dispositivo deve contenere almeno una risorsa e almeno un'interfaccia, intesa o verso il processo (interfaccia di processo) o verso la rete di comunicazione (interfaccia di comunicazione). Una risorsa può essere considerata una suddivisione logica della struttura software (ed eventualmente hardware) di un dispositivo il quale abbia un controllo indipendente delle sue operazioni. Una risorsa può quindi essere creata, configurata, parametrizzata, fatta partire, cancellata senza condizionare altre risorse nello stesso dispositivo. Si noti che tale definizione comprende il caso di elaborazione multitasking su sistemi con uno o più processori. 18 M.G.A. Servizi industriali – “Corso di programmazione PLC” La funzione di una risorsa è di accettare dati e/o eventi dal processo e/o dalla rete di comunicazione, di processarli, di restituire dati e/o eventi al processo e/o alla rete di comunicazione, così come specificato dall'applicazione che la sta utilizzando. In una risorsa devono essere presenti: una o più applicazioni locali, o parti di applicazioni distribuite, che processano dati ed eventi interni; funzioni che collegano i dati e gli eventi da e verso il processo e/o la rete di comunicazione con quelli interni; una funzione di pianificazione delle attività (per esempio ciclica) per il coordinamento tra queste funzionalità. Modello di un dispositivo I dati sono delle rappresentazioni di fatti o concetti espresse in una maniera formalizzata adatta alla comunicazione, all'interpretazione o al trattamento da parte della risorsa; un esempio di dato è il codice binario corrispondente a una misura. Gli eventi rappresentano l'occorrenza di particolari condizioni come, per esempio, il raggiungimento di una determinata temperatura o la segnalazione di una fotocellula. Un'applicazione specifica le operazioni che devono essere svolte sui dati come conseguenza degli eventi e, come si è detto, può essere distribuita tra molte risorse nello stesso o in differenti dispositivi. Una risorsa determina le risposte a eventi interni, di processo o di comunicazione mediante le relazioni causali specificate dall' applicazione, o dalla parte di applicazione, che la utilizza. Esempi di risposte possono essere: l'esecuzione di operazioni, la pianificazione di operazioni, la modifica di variabili, la generazione di eventi addizionali, l'interazione con le interfacce di processo c di comunicazione. Un'interfaccia di processo mette in relazione le risorse contenute nel dispositivo con il processo fisico, comunicando con i sensori e gli attuatori. È costituita dall'insieme dei dispositivi hardware (schede di ingresso/uscita analogiche, schede di ingresso/uscita digitali ecc.) e dal software per la loro gestione. Le informazioni scambiate con il processo fisico sono presentate alle risorse come dati del processo e/o come eventi associati al processo. Un'interfaccia di comunicazione mette in relazione le risorse con quelle appartenenti ad altri dispositivi, per lo scambio di informazioni attraverso una rete di comunicazione. Essa è costituita dall'insieme dei dispositivi hardware (schede di rete, schede modem ecc.) e dal software per la loro gestione. Attraverso questa interfaccia, alla risorsa possono essere presentate le informazioni, come dati o eventi, e forniti servizi addizionali, tra i quali il supporto alla programmazione, la configurazione del sistema, la diagnostica. 19 M.G.A. Servizi industriali – “Corso di programmazione PLC” Un moderno sistema di controllo e misura per processi industriali risulta quindi essere costituito da un insieme di dispositivi di elaborazione connessi tra di loro. Questi saranno di natura molto diversa, a seconda delle funzionalità che realizzano o che contribuiscono a realizzare: • Alcuni saranno collegati direttamente a macchine che dovranno controllare, quindi avranno bisogno di requisiti specifici, come sistemi operativi real-time multitasking, interfacce di processo notevolmente sviluppate, costruzione robusta per poter funzionare in ambienti come i capannoni industriali per esempio, sono queste le caratteristiche che posseggono i controllori a logica programmabile o PLC (Programmable Logic Controllers); • Altri saranno dedicati all'interfaccia uomo-macchina e avranno quindi bisogno di buone capacità grafiche e di comunicazione con altri dispositivi, ma non di interfaccia di processo, non essendo direttamente connessi a sensori e attuatori (potranno perciò essere dei normali personal computer); • Altri saranno dedicati al controllo di macchine complesse, come un robot industriale; • Altri ancora dovranno gestire delle basi di dati. La programmazione dei dispositivi di controllo Come si è visto, un moderno sistema di automazione industriale può essere schematizzato come un insieme di dispositivi i quali sono tutti dei calcolatori, anche se diversissimi tra di loro, a seconda delle funzionalità che devono espletare. Si comprendi quindi l'importanza che assume la loro programmazione. Molti di questi dispositivi si programmano con i comuni linguaggi di programmazione, eventualmente con l'aggiunta di istruzioni specializzate come possono essere quelle di movimento per un robot. Altri hanno dei linguaggi altamente specializzati alla loro funzionalità, come il linguaggio con cui si descrive il profilo da realizzare con un tornio a controllo numerico. Un dispositivo molto comune che si utilizza nelle applicazioni di automazione industriale è, per esempio, il controllore a logica programmabile o PLC. Esso ha una notevole flessibilità di utilizzo ed è specializzato per le applicazioni di automazione industriale, in particolar modo per le funzioni di controllo logico/sequenziale La sua diffusione è dovuta anche al fatto che normalmente esso coordina varie macchina. Il PLC, attualmente, non adotta i linguaggi più diffusi dell'informatica, pertanto appare necessario presentare in dettaglio le modalità della sua programmazione. Allo stato attuale esistono diversi linguaggi per PLC e, anzi, ognuno di essi può a sua volta essere visto come un insieme di dialetti, diversi da macchina a macchina, a volte anche tra macchine dello stesso produttore. Convivono, inoltre, macchine di nuova generazione con macchine più vecchie, ma pienamente funzionali, che però non presentano alcune caratteristiche introdotte solo di recente. Gli svantaggi dei linguaggi di programmazione attuali e della mancanza di una loro standardizzazione si possono così riassumere: Si utilizzano principalmente linguaggi di basso livello, orientati alla macchina piuttosto che all'utilizzatore; • I programmi possono essere solo debolmente strutturati, rendendo difficile una programmazione di tipo top-down o bottom-up e ardua la loro manutenzione; • Manca la possibilità di nascondere i dati su cui opera un modulo di un programma (data encapsulation) in modo che altri moduli non possano erroneamente alterarli; • Non e facile riutilizzare i moduli sviluppati o trasportarli su altre macchine; • 20 M.G.A. Servizi industriali – “Corso di programmazione PLC” • E’ difficile intervenire su un programma già scritto per introdurre ulteriori funzionalità; • I dati sono debolmente strutturati, il che rende complicato il trattamento e la comunicazione di dati complessi; • E’ difficile definire sequenze logiche ed operazioni da svolgere in parallelo; • Vi è una mancanza di determinismo nel tempo di esecuzione dei cicli di controllo; • E’ difficile definire operazioni aritmetiche; • E’ necessario istruire i programmatori su diversi linguaggi e dialetti, aumentando così i costi di formazione; • Non è, in generale possibile scrivere un programma utilizzando diversi linguaggi contemporaneamente, scegliendo di volta in volta il linguaggio più adatto per ogni specifica funzionalità da implementare. L'introduzione di uno standard per la programmazione, il 1131-3 del Comitato elettrotecnico Internazionale, nasce proprio per ovviare ai problemi sopra elencati. Si tenga presente che lo standard è in ogni caso frutto anche di interessi commerciali e, quindi, non è esente da ambiguità e incongruenze. Inoltre, un costruttore non deve necessariamente adeguarsi a tutto lo standard per dichiararsi conforme a esso; l’esistenza di uno standard di riferimento rappresenta, in ogni modo, un notevole passo avanti nella giusta direzione. 21 M.G.A. Servizi industriali – “Corso di programmazione PLC” CAPITOLO 3 Hardware del PLC 22 M.G.A. Servizi industriali – “Corso di programmazione PLC” Il controllore a logica programmabile Un dispositivo di controllo che potrebbe essere considerato per applicazioni generiche ma che ha un alto grado di specializzazione è il controllore a logica programmabile (o plc, Programmable Logic Controller), il più diffuso dispositivo di controllo per l'automazione industriale, che sarà presentato in dettaglio in questo capitolo. Si tratta di un dispositivo molto flessibile, di concezione modulare con architettura a bus, specializzato soprattutto per il controllo logico/sequenziale. Di solito prevede la possibilità di trattare fino a migliaia di punti dì ingresso/uscita con interfacce che accettano segnali di varia natura, è dotato di sistemi operativi proprietari real-time multi-tasking molto efficienti ed è di costruzione molto robusta. In questo capitolo non si descriveranno i soli sistemi di nuovissima generazione, poiché si ritiene necessario che la trattazione possa essere applicata anche a sistemi di qualche decina di anni fa, i quali contano numerosissime installazioni funzionanti e, in alcuni casi, sono ancora commercializzati. Cenni storici La possibilità di far eseguire in maniera automatica processi di lavorazione o loro parti è sempre stato uno degli obiettivi della tecnica, fin dalla sua nascita. Prima della scoperta dell'elettricità automatismi funzionanti con controlli di tipo meccanico erano già diffusi; tra i più comuni si ricordano l'orologio a pendolo, l'orologio ad acqua, il regolatore di velocità di Watt. Con il diffondersi dell'utilizzo dell'elettricità, si cominciarono a utilizzare dispositivi elettromeccanici, come relé e temporizzatori, per le applicazioni di automazione. Tali dispositivi permettevano effettivamente di realizzare, con relativa facilità, dei sistemi di controllo che però presentavano diversi svantaggi: non avevano un'elevata velocità di elaborazione dei segnali, erano molto costosi, erano riconfigurabili con difficoltà. La loro progettazione, inoltre, era lunga e complessa così come la loro installazione e la successiva manutenzione. L’avvento dell'elettronica, con l'introduzione del transistore prima e dei circuiti, integrati poi, risolse molti di questi problemi ma non permise ancora di realizzare automatismi flessibili, che avessero, cioè, la capacità di essere adattati., in tempi brevi, a svolgere nuove funzioni. L'introduzione del calcolatore elettronico, con la sua caratteristica di avere un comportamento programmabile, non poteva non avere ripercussioni per le aziende che si occupavano di automazione industriale. Vari autori concordano nel fissare la data di nascita del primo controllore a logica programmabile nell'anno 1968, quando la General Motors negli Stati Uniti specificò le caratteristiche desiderate per una nuova generazione di controllori da destinare ai propri impianti di produzione. Essi avrebbero dovuto: • essere facilmente programmati e riprogrammati, eventualmente sul luogo di funzionamento; • essere di facile manutenzione, e perciò di concezione modulare; • essere abbastanza robusti da poter funzionare senza problemi in un ambiente industriale hi presenza di interferenze elettromagnetiche, polvere, vibrazioni; • occupare meno spazio rispetto ai sistemi allora utilizzati; • essere competitivi nei costi. Altri criteri secondari erano la possibilità di espandere la memoria, di comunicare con altri sistemi per la registrazione dei dati, di accettare segnali in media tensione alternata. Il risultato fu lo sviluppo della prima generazione di plc, i quali non erano altro che dei sequenziatori riprogrammabili. Nella metà degli anni Settanta l'Allen-Bradley introdusse il primo plc basato su un microprocessore (era 1'8080) e da allora la loro evoluzione è 23 M.G.A. Servizi industriali – “Corso di programmazione PLC” continuata progredendo in parallelo con quella dell'informatica classica. Attualmente un plc di alta classe è basato su un sistema multiprocessore, integra possibilità di connessione in rete informatica, è capace di eseguire funzioni molto complesse. È, in sostanza, basato sulle stesse tecnologie di un calcolatore convenzionale ma è adattato al suo utilizzo principale, il controllo di processi industriali. PLC e sistema PLC Cosa si intende per "controllore a logica programmabile" o plc? Per rispondere in modo esauriente a questa domanda viene in aiuto lo standard 1131-1 del Comitato Elettrotecnico Internazionale, che lo definisce come un: • sistema elettronico a funzionamento digitale, destinato all'uso m ambito industriale, che utilizza una memoria programmabile per l'archiviazione interna di istruzioni orientale all'utilizzatore per l'implementazione di funzioni specifiche, come quelle logiche, di sequenziamento, di temporizzazione, di conteggio e di calcolo aritmetico, e per controllare, mediante ingressi e uscite sia digitali sia analogici, vari tipi di macchine e processi. Viene inoltre definita come sistema controllore a logica programmabile o sistema PLC: • la configurazione realizzata dall'utilizzatore, formata da un controllore a logica programmabile e dalle periferiche associate, necessaria al sistema automatizzato previsto. Nell'uso comune il termine PLC denota, indifferentemente, sia il PLC vero e proprio, vale a dire la scheda processore, sia l'intero sistema completo delle sue schede di interfaccia. La configurazione minima di un PLC (Figura 1), che risulta essere un control-lore con architettura basata su un bus proprietario, è composta dai seguenti cinque elementi fondamentali: l’armadio, il modulo processore, i moduli di ingresso/uscita, il modulo alimentatore, il terminale di programmazione. L’Armadio o cestello o rack, contiene e racchiude tutti gli altri moduli, assicurandone Figura 1 - Controllore a logica programmabile (PLC). la connessione meccanica e il collegamento elettrico. Ha in genere la forma di un parallelepipedo aperto su di un lato per permettere l'inserimento dei moduli che sono collegati elettricamente tra loro grazie alla presenza, sul lato opposto, di un circuito stampato con dei connettori- Di solito è realizzato in metallo e deve essere connesso elettricamente a terra, sia per ragioni di sicurezza sia per meglio schermare i moduli alloggiati. Il modulo processore è il vero e proprio PLC ed è costituito essenzialmente da una scheda a microprocessore con un'architettura simile a quelle dei calcolatori convenzionali; controlla e 24 M.G.A. Servizi industriali – “Corso di programmazione PLC” supervisiona tutte le operazioni eseguite all'interno del sistema, attraverso l'esecuzione delle istruzioni contenute nella memoria. I moduli di ingresso/uscita, o moduli I/U, sono delle schede che permettono l'interfacciamento tra la microelettronica del PLC e il mondo esterno, e devono perciò provvedere al condizionamento dei segnali e all'isolamento. Il modulo alimentatore è una scheda che alimenta tutti gli altri moduli presenti nell'armadio. Connesso alla rete di alimentazione elettrica, tale modulo fornisce una o più tensioni stabilizzate con un massimo di corrènte erogabile. Il terminale di programmazione è oggi un personal computer e serve per la programmazione del PLC che non ha, usualmente, dispositivi di interfaccia con l'uomo. Il terminale di programmazione viene connesso al PLC solo quando viene utilizzato tramite una porta seriale e/o una rete informatica. Esistono alcuni piccoli sistemi PLC che non sono modulari (e rientrano quindi nella categoria dei controllori monolitici), non prevedono il rack, e racchiudono in un unico dispositivo alcuni o tutti gli elementi sopra descritti (Figura 2). Figura 2 - PLC non modulare. Il modulo processore Il modulo processore rappresenta il cuore del sistema PLC e racchiude una scheda con uno o più microprocessori, che eseguono i programmi del sistema operativo e quelli sviluppati dall'utente, e la memoria dove questi programmi sono conservati, oltre a tutti i componenti necessari al suo funzionamento. Praticamente tutti i PLC moderni utilizzano microprocessori come unità di processo centrali; alcuni sono basati su microprocessori appositamente realizzati per interpretare direttamente le istruzioni sul bit che sono le più diffuse nel controllo logico/sequenziale. Un tipico modulo processore potrebbe contenere tre microprocessori: uno specializzato per operare sul singolo bit, uno per le istruzioni di tipo aritmetico/logico, uno dedicato alle comunicazioni con i moduli di ingressi/uscita e con dispositivi esterni. La modalità di funzionamento più diffusa del modulo processore, così come realizzata dal sistema operativo, è quella ciclica, che prevede un ciclo composto dalla seguente sequenza di operazioni: • • • • aggiornamento dell'area di memoria a tal scopo riservata con i valori provenienti dagli ingressi fisici; esecuzione del programma (o dei programmi) utente operando sui valori della memoria e conservando i risultati sempre in memoria; esecuzione di programmi di gestione del sistema (per esempio per la diagnostica); scrittura sulle uscite fisiche dei loro valori conservati nell'area di memoria a ciò riservata. 25 M.G.A. Servizi industriali – “Corso di programmazione PLC” Il ciclo sopra descritto è talvolta indicato come "ciclo a copia massiva degli ingressi e delle uscite". Esso permette un'ottimizzazione delle comunicazioni con i moduli di ingresso/uscita, e garantisce che i valori memorizzati degli ingressi restino inalterati durante l'esecuzione dei programmi. Si vuole sottolineare che la lettura degli ingressi e la scrittura delle uscite è gestita interamente dal sistema operativo, il che consente all'utilizzatore di concentrarsi sul programma applicativo. Una prima conseguenza del ciclo a copia massiva è che il PLC, dopo aver letto gli ingressi, rimane "cieco" fino alla prossima lettura. Ciò può comportare un ritardo nella rilevazione del cambiamento di un ingresso, ritardo che nel caso peggiore è circa uguale al tempo necessario per eseguire il ciclo; inoltre, se per esempio un ingresso binario varia due volte il suo stato durante il ciclo di scansione, queste variazioni di stato non saranno mai rilevate. Un'altra conseguenza del ciclo a copia massiva è che il ciclo non ha una durata prefissata ma dipende dalla lunghezza del programma e dalla sua natura (presenza o meno di cicli interni, di esecuzioni condizionate di istruzioni ecc.). Ciò fa sì che il PLC, almeno nel suo nodo di funzionamento standard, non sia da ritenersi adatto alla realizzazione di anelli di controllo classici. Molti PLC offrono delle alternative al ciclo a copia massiva dei dati. Per particolari situazioni in cui non è tollerabile l'attesa della fine del ciclo per leggere un ingresso o scrivere un'uscita, è prevista la possibilità di eseguire delle operazioni con accesso immediato ai punti di ingresso/uscita. Non si deve abusare, in ogni modo, nel loro utilizzo, perché allungano in maniera non trascurabile i tempi di scansione del programma; per tale ragione esse sono solitamente riservate alla gestione di emergenze. Altra eccezione al ciclo di funzionamento può essere rappresentata dalla gestione degli interrupt temporizzati (per realizzare, per esempio, algoritmi di controllo numerico) o collegati allo stato di uno dei segnali di ingresso. Si noti che, nei nuovissimi sistemi che aderiscono allo standard della programmazione, la scelta della modalità di funzionamento è definita dall'utente nella descrizione delle risorse e della configurazione, ma tali modalità devono essere poi previste e implementate dal sistema operativo del PLC. La velocità di elaborazione del modulo processore viene solitamente descritta dal tempo di scansione, definito come il tempo che intercorre tra due attivazioni successive della stessa porzione del programma applicativo nella modalità di funzionamento ciclico, compreso quindi il tempo necessario per effettuare l'aggiornamento degli ingressi e delle uscite. Il tempo di scansione da un'indicazione dei tempi necessari a effettuare le fasi del ciclo dì funzionamento prima descritto ed è quindi strettamente legato al numero di ingressi e di uscite da aggiornare e alle dimensioni e alla complessità del programma utente. Esso viene di solito indicato dal produttore come valor medio per programmi di media complessità e varia da qualche unità a qualche decina di millisecondi per Kiloword (1 Kiloword = 1024 parole) di programma, a seconda della classe del PLC. Il tempo di scansione non deve essere confuso con il tempo di risposta del sistema, definito come il massimo intervallo di tempo che passa ira la rilevazione di un certo evento e l'esecuzione dell'azione di risposta programmata. Tale tempo, infatti, deve tener conto anche dei ritardi introdotti dai moduli di ingresso/uscita. La relazione tra tempo di scansione e tempo di risposta, sempre nella modalità ciclica, può essere così espressa: dove Tr è il tempo di risposta, circa uguale a due volte il tempo di scansione Ts (per tener conto del caso peggiore nella rilevazione degli ingressi) più il ritardo Ti/u, introdotto dai moduli di ingresso/uscita. Il sistema operativo di un PLC è costituito da un insieme di programmi di supervisione che sono memorizzati in maniera permanente e costituiscono, in pratica, una parte essenziale dei PLC stesso. Essi sono dedicati al controllo delle attività, all’elaborazione dei programmi utente, alla comunicazione e ad altre funzioni. Tra queste ultime sono da ricordare le funzioni di diagnostica interna, quali watchdog timer sulle funzioni principali (per esempio, sul tempo di scansione), controlli di parità sulla memoria e sulle linee di comunicazione, controllo della 26 M.G.A. Servizi industriali – “Corso di programmazione PLC” tensione di alimentazione e dello stato delle batterie tampone. Tali funzioni possono limitarsi ad attivare indicatori dello stato (memoria OK, batteria OK, processore OK. ecc.) oppure possono avviare l'esecuzione di routine di emergenza programmabili dall'utente; in genere viene inoltre previsto l'aggiornamento di bit interni di stato che possono essere utilizzati dai programmi utente. Le modalità operative tipiche di un PLC, spesso attivabili attraverso una chiave hardware per prevenire commutazioni accidentali, sono quelle di esecuzione, di convalida e di programmazione. Nella modalità di esecuzione, i programmi utente vengono eseguiti e l'aggiornamento degli ingressi e delle uscite viene effettuato. Nella modalità di convalida vengono eseguiti i programmi ma l'aggiornamento delle uscite è disabilitato; ciò permette di provare la correttezza del codice sviluppato senza preoccuparsi delle possibili conseguenze di errori di programmazione. La modalità di programmazione è utilizzata per caricare nella memoria del PLC il programma sviluppato; in alcuni casi la modalità di programmazione on-line prevede la scrittura del programma direttamente nella memoria del PLC. Il fatto che in passato fosse necessario programmare il PLC direttamente nella sua memoria, insieme all'utilizzo di microprocessori non standard, ha fatto si che, ancora oggi, in molti PLC esistenti il programma venga interpretato; ogni istruzione viene cioè convertita in codice macchina immediatamente prima di essere eseguita. La maggior diffusione di architetture basate su processori convenzionali (come gli Intel e i Motorola), insieme all'utilizzo di personal computer come terminali di programmazione, ha portato alla realizzazione di PLC per i quali è prevista una fase di compilazione prima dell'esecuzione del programma. La memoria di un PLC è solitamente organizzata per aree distinte. Una possibile ripartizione della memoria è la seguente: • • • • • area sistema operativo, riservata alla memorizzazione permanente dei programmi del sistema operativo e che deve essere di tipo non volatile a sola lettura; area di lavoro del sistema operativo, riservata alla memorizzazione di dati intermedi da parte dei programmi del sistema operativo e che, come tale, deve permetterne la lettura e la scrittura (realizzata con memorie RAM, Random Access Memory); area ingressi/uscite, riservata alla memorizzazione degli stati degli ingressi e delle uscite (memorie RAM); area programmi utente, riservala alla memorizzazione dei programmi utente, che deve essere necessariamente di tipo RAM durante lo sviluppo dei programmi mentre può essere sostituita da una PROM (memoria programmabile a sola lettura) una volta che il programma è stato realizzato e verificato; area dati utente, riservata alla memorizzazione dei dati dei programmi utente e che deve essere quindi di tipo RAM. Le aree di memoria realizzate con RAM possono essere in parte o tutte aumentate da batterie tampone per evitare perdite di informazioni nel caso di mancanza di alimentazione. Per questa ragione, tali aree sono solitamente realizzate in tecnologia CMOS, per limitare il consumo. In caso di mancanza di alimentazione, il sistema operativo o i programmi utente possono, attraverso i bit di stato, gestire la modalità di ripristino del funzionamento: nuova inizializzazione del sistema o ripartenza dall'ultima istruzione effettuata. Quando un produttore indica la memoria disponibile su un PLC non sempre è chiaro a quali aree si riferisca: secondo logica dovrebbe indicare le dimensioni delle sole aree utente, ma la logica non sempre coincide con gli interessi commerciali. Le dimensioni di memoria offerte variano da mezzo Kiloword a qualche centinaio di Kiloword a seconda della classe del PLC considerato, con word di 8 o 16 bit. I PLC di nuova generazione cominciano ad avere memorie dell'ordine delle Megaword. Sono poi generalmente dati dei limiti sul numero e sul tipo di ingressi e uscite gestibili, sul numero delle strutture speciali (timer, contatori) e sul numero di word a disposizione per altri dati. Altre caratteristiche del modulo processore sono la possibilità di espandere la memoria, il numero di armadi di I/U gestibili direttamente, il numero di armadi gestibili in modalità remota con i relativi tempi per la scansione (si veda anche il paragrafo sui moduli speciali), il numero e la qualità di porte di comunicazione disponibili (seriali, parallele, di rete), il tipo di 27 M.G.A. Servizi industriali – “Corso di programmazione PLC” linguaggi supportati e la complessità dell'insieme delle istruzioni, la possibilità di multitasking, la possibilità di gestire routine di interruzione. Come ultimo punto si vuole segnalare l'esistenza di alcuni moduli processore particolari, detti PLC di sicurezza, progettati per essere impiegati in applicazioni che richiedono gradi di sicurezza molto elevati, come nell'automazione dì presse. Questi moduli processore prevedono una ridondanza di unità di elaborazione, le quali eseguono lo stesso programma e abilitano le uscite solo se vi è pieno accordo tra loro. Sulla questione della sicurezza, di importanza fondamentale in molte applicazioni dell'automazione, si veda anche più avanti, il paragrafo sui moduli speciali. I moduli di ingresso/uscita I moduli di ingresso e uscita, sia digitali sia analogici, sono i moduli attraverso cui il PLC comunica con il processo fisico, rilevando eventi e dati dai sensori e comandando azioni agli attuatori. Dal punto di vista elettrico, essi devono realizzare l'interfaccia tra i livelli di tensione TTL o CMOS con cui opera l'elettronica del PLC e le tensioni (o correnti) usate per la trasmissione dei segnali, che possono andare da qualche decina di volt a centinaia di volt sia in continua sia in alternata. Questo permette, nella maggior parte dei casi, di connettere il PLC direttamente ai vari dispositivi presenti sul campo riducendo al minimo la necessità di ulteriori condizionamenti del segnale. Inoltre, molto spesso gli ingressi e le uscite sono isolati galvanicamente, attraverso fotoaccoppiatori o trasformatori, dall'elettronica interna del PLC, in modo da evitare che eventuali impulsi di tensione possano danneggiare il sistema. La modularità prevista per i moduli di ingresso e uscita e la disponibilità di molti differenti tipi rendono possibile una realizzazione del sistema PLC tagliata su misura per il particolare problema che si sta affrontando. Il loro indirizzamento da programma, vale a dire gli indirizzi delle parole di memoria dove vengono memorizzati gli stati degli ingressi e delle uscite, dipende da dove fisicamente il modulo viene posto nell'armadio, o negli armadi, del PLC. Per questa ragione sono dì solito presenti accorgimenti meccanici per evitare che un modulo possa essere installato in una posizione diversa da quella prevista. I moduli di ingresso digitali sono generalmente fomiti di circuiti di filtraggio contro il rumore e 1 rimbalzi, che, si noti, introducono un ritardo nel rilevamento di una transizione di stato dell'ordine di qualche millisecondo, e di indicatori di stato prima e/o dopo l'isolamento. Le informazioni tecniche per tali moduli devono prevedere il numero di ingressi gestibili, le tensioni di riferimento, il ritardo di segnalazione introdotto. Valori comuni per le tensioni di riferimento per gli stati ON e OFF sono 0-24 V e 0-220 V in corrente continua o alternata, 05 V in corrente continua (livelli TTL), 0-50 V in corrente continua. Le uscite digitali, di solito protette da fusibili, sono realizzale attraverso transistori - per corrente continua -, TRIAC o SCR - per corrente alternata-, oppure relè - per corrente continua e alternata. Nel caso di uscite in corrente continua realizzate tramite transistori deve essere specificato anche se la corrente è fornita al carico o assorbita da esso, per permetterne il corretto collegamento. I moduli di ingresso/uscita analogici sono moduli che realizzano le conversioni digitali/analogiche o analogiche/digitali richieste per interfacciare direttamente segnali analogici (continui nel tempo e nei valori) con il PLC il quale, essendo un calcolatore, lavora con stringhe di bit di lunghezza finita nel tempo discreto. Questi moduli trattano un'ampia gamma di segnali, possono avere intervalli di lavoro e caratteristiche filtranti selezionabili via software, possono realizzare la scalatura automatica del dato in unità ingegneristiche, sono anch'essi optoisolati e possiedono indicatori del loro stato. Le informazioni solitamente disponibili per questi moduli riguardano i valori dei segnali trattati, la possibilità di accettare ingressi single-ended o differenziali, la risoluzione di conversione, la rappresentazione dei dati fornita, la velocità di conversione. Valori tipici dei segnali trattati sono ±5 V, ±10 V, 0-5 V per segnali in tensione, e 4-20 mA per segnali in corrente. Per i segnali analogici è comune pensare a una trasmissione dell'informazione come livello di tensione. Tuttavia nell'automazione industriale è spesso utilizzata la trasmissione in corrente 28 M.G.A. Servizi industriali – “Corso di programmazione PLC” dell'informazione perché meno sensibile ai disturbi elettromagnetici e alle cadute resistive in collegamenti molto lunghi; essa permette, inoltre, di risparmiare un cavo per ogni collegamento, poiché quello che ai fa variare è l'assorbimento di corrente sulle linee di alimentazione. I moduli di ingresso utilizzano di solito, per ragioni economiche, un solo convertitore analogico/digitale e un multiplexer per collegarvi i vari canali di ingresso. Alcuni moduli di uscita hanno la caratteristica di poter fare assumere alle uscite uno stato predefinito se non hanno nuove informazioni dal PLC entro un tempo fissato (hanno un watchdog timer che deve essere azzerato periodicamente dal modulo processore, altrimenti deducono che c'è stato un malfunzionamento). Data la loro diffusione, esistono moduli di ingressi previsti per l'utilizzo diretto di sensori di temperatura come i resistivi a metallo (RTD) e le termocoppie che altrimenti comporterebbe l'utilizzo di particolari circuiti per il rilevamento della loro informazione. Il modulo alimentatore Il modulo alimentatore fornisce, attraverso l’armadio l'alimentazione elettrica stabilizzata necessaria al funzionamento di tutti gli altri moduli, in altre parole, tale modulo deve assicurare una tensione di alimentazione costante anche in presenza di microinterruzioni o fluttuazioni della fornitura elettrica. Sarà quindi composto da un trasformatore, un circuito rettificatore, un filtro, un circuito stabilizzatore e un circuito per la protezione da sovracorrenti o cortocircuiti. Tra le sue caratteristiche peculiari vi sono la potenza massima fornibile, la possibilità di connessione in parallelo (per aumentare la potenza disponibile o per ottenere una ridondanza di sicurezza), la possibilità di inviare al PLC una segnalazione di shutdown se l'alimentazione in ingresso scende sotto certi limiti (il PLC potrebbe usare tale segnalazione per attivare delle procedure prima dell'effettivo spegnimento), la presenza di indicatori del suo stato. Ogni modulo componente di un sistema PLC assorbe una determinata potenza, pertanto il dimensionamento dell'alimentatore deve essere realizzato considerando la somma delle potenze richieste dai moduli previsti, aumentata di una certa percentuale per tener conto di eventuali espansioni future. L'armadio L'armadio, o cestello o rack, deve contenere i moduli componenti di un sistema PLC e assicurarne la connessione elettrica e meccanica, oltre che la schermatura. Come già detto, l'architettura di un sistema PLC è di tipo a bus: la connessione elettrica si realizza attraverso il bus, un insieme di linee elettriche, raggruppate per funzioni (linee indirizzo, linee dati, linee di controllo, linee di alimentazione) e dei protocolli associati, attraverso le quali un modulo può comunicare con gli altri. A differenza delle architetture a bus per scopi generici, il bus di un PLC è proprietario, il che rende impossibile l'utilizzo di moduli di costruttori differenti. Le caratteristiche dell'armadio sono essenzialmente di tipo meccanico, come il numero di slot, le dimensioni di ingombro, le modalità di fissaggio. Il terminale di programmazione Il PLC non prevede tastiere e schermi per la comunicazione con il programmatore, quindi la sua programmazione deve avvenire per il tramite di dispositivi particolari. I terminali a tastiera, ancora utilizzati per i piccoli PLC, si connettono direttamente al PLC attraverso una porta di comunicazione (per esempio, seriale) e presentano all'operatore una tastiera per l'inserimento delle varie istruzioni, un piccolo display a cristalli liquidi per il controllo del programma, e delle limitate funzioni di composizione. In questo caso la programmazione avviene direttamente nella memoria del PLC. Oggi si utilizzano veri e propri sistemi di sviluppo basati su personal computer i quali facilitano molto la programmazione e la configurazione del PLC, che possono essere 29 M.G.A. Servizi industriali – “Corso di programmazione PLC” effettuate anche off-line. Essi presentano funzionalità di composizione dei programmi molto complesse e hanno la capacità di memorizzazione permanente dei programmi sviluppati. Sono connessi al PLC o direttamente o attraverso una rete informatica; in quest'ultimo caso un solo personal computer può realizzare lo sviluppo e il caricamento dei programmi per tutti i PLC connessi in rete. Sono inoltre tipicamente previste funzioni di monitoraggio dell'esecuzione del programma e delle aree di memoria del PLC, eseguibili anche durante il normale funzionamento del dispositivo. I moduli speciali Nell'ambito di un sistema PLC di un determinato costruttore può esistere poi una vasta gamma di moduli che realizzano delle funzionalità speciali in maniera da rendere il sistema ancora più flessibile e più adeguato a rispondere a diverse esigenze. Moduli di I/U remoto. Se il numero di punti di ingresso e uscita è elevato ed essi sono inoltre disposti su una superfìce molto estesa, è conveniente realizzare il cosiddetto I/U remoto. In questo caso, vi sono armadi di I/U sparsi nell'impianto che sono poi collegati al PLC attraverso un modulo di I/U remoto che provvede a inviare lo stato degli ingressi informatica. Moduli per la connessione in rete. Sono moduli che gestiscono i protocolli di comunicazione per le diverse tipologie di reti informatiche che possono coinvolgere un sistema PLC (bus di campo, reti proprietarie, Ethernet). Moduli coprocessore. Sono moduli che contengono un vero e proprio calcolatore convenzionale che può accedere direttamente ai dati contenuti nella memoria del PLC. Con tali moduli è possibile eseguire elaborazioni anche complesse attraverso programmi scritti in linguaggi di programmazione classici come il Basic o il C; essi possono comprendere unità di memorizzazione di massa e comunicare direttamente con l'esterno attraverso interfacce classiche come la seriale RS-232, la parallela Centronics, lo standard PCMCIA. Moduli PID. Se la regolazione PID (Proporzionale-Integrale-Derivativa) non è disponibile, o non può essere eseguita direttamente dal PLC a causa della lunghezza del ciclo di scansione, tale modulo permette di avere a disposizione alcuni anelli PID cui il PLC deve limitarsi a fornire i riferimenti. Oltre alle funzionalità tipiche del regolatore PID, tali moduli possono essere auto-sintonizzanti e permettere un passaggio neutro tra modalità di regolazione manuale e automatica. Moduli di servo. Sono moduli che realizzano direttamente, e in maniera autonoma, l'asservimento di uno (o più) motori a passo, motori idraulici, motori m corrente continua con encoder incrementali. Moduli encoder. Realizzano mite le funzionalità necessarie per utilizzare uno o più encoder incrementali o assoluti. Sono essenzialmente moduli con contatori ad alta velocità e delle uscite dell'armadio in cui è montato attraverso una linea seriale o una rete Moduli interfaccia operatore. Rendono possibile il colloquio di un operatore con i; PLC attraverso tastiere e display alfanumerici. Attualmente questo tipo di funzionalità viene sempre più spesso realizzato con calcolatori tradizionali connessi in rete con i PLC. Moduli di backup. Sono moduli che inseriti negli armadi di due PLC differenti e collegati tra loro, permettono di avere una funzionalità di backup. In un sistema a massima disponibilità il modulo processore di riserva, attraverso tali moduli, viene informato costantemente sullo stato del modulo processore principale, esegue lo stesso programma e può, in caso di malfunzionamento di quest'ultimo, sostituirlo in tempi brevissimi nella gestione degli ingressi e delle uscite; eventualmente si può avere una duplicazione degli altri moduli che compongono il sistema. Un'altra modalità di backup, detta a sicurezza intrinseca, prevede che i due moduli processore siano concordi nel decidere lo stato che deve assumere un'uscita prima che ciò sia effettivamente eseguito. Tra gli altri tipi di moduli ricordiamo i lettori di codici a barre, i sistemi di visione per ispezione automatica, i moduli per la connessione a bus VME. 30 M.G.A. Servizi industriali – “Corso di programmazione PLC” Classificazione dei PLC Data la diversità delle offerte dei produttori per quanto riguarda i controllori a logica programmabile, si ritiene utile proporre una loro classificazione in quattro categorie: micro PLC, piccoli PLC, medi PLC e grandi PLC. I micro PLC sono dei PLC che trattano fino a 64 punti di ingresso/uscita, generalmente tutti di tipo digitale, con memorie di 1 o 2 Kword. Non hanno, di solito, una struttura modulare ad armadio (si veda la Figura 8.2) anche se possono prevedere delle espansioni degli I/U. Sono di solito programmabili con un solo linguaggio di programmazione, per esempio il linguaggio a contatti, e l'insieme di istruzioni, funzioni, e blocchi funzionali disponibili è limitato. Sono principalmente utilizzati in sostituzione di logiche a relé in applicazioni come il controllo di macchine operatrici, di ascensori, di lavatrici. I piccoli PLC trattano da 64 a 512 punti di ingresso/uscita, in predominanza digitali, ma vi possono essere capacità di I/U analogiche. Hanno una struttura modulare ad armadio e una memoria che arriva fino a 4 Kword. Possono avere capacità di connessione in rete e di gestione di I/U remoto. La programmazione può avvenire con differenti linguaggi e con un insieme di funzioni e blocchi funzionali più completo rispetto ai micro. I medi PLC possono arrivare a trattare da_256 a 2048 punti di ingresso/uscita e avere una memoria che arriva a qualche decina di Kword. Hanno una struttura modulare ad armadio, gestiscono l'I/U remoto e sono arricchibili con moduli speciali. Hanno elevate capacità di comunicazione in rete informatica, Le loro possibilità di programmazione sono molto evolute. I grandi PLC sono caratterizzati dalla capacità di tratture numerosi punti di ingresso/uscita, di solito qualche migliaio, e dalla disponibilità di centinaia di K di memoria. Hanno una notevole capacità di trattamento delle informazioni e sono di solito utilizzati come supervisori di celle automatizzate e come interfacciamento tra i PLC di minori prestazioni e i calcolatori i gestione. Linguaggi di programmazione Come vedremo in questo testo, lo standard IEC 61131 definisce proprio la standardizzazione dei linguaggi di programmazione per un controllore a logica programmabile. Lo standard, però, e più un modello di riferimento verso cui tenderanno le aziende costruttrici piuttosto che un vincolo attuale. Infatti, ancora oggi, vengono immessi sul mercato PLC che non lo rispettano pienamente. Bisogna tener conto, inoltre, dell'esistenza di famiglie di PLC introdotte sul mercato prima della pubblicazione dello standard e già installate e, a ogni modo, ancora commercializzate (anche perché si tratta spesso di ottimi dispositivi). Attualmente, il linguaggio più diffuso nei controllori a logica programmabile resta il linguaggio a contatti, o meglio un insieme di "dialetti" del linguaggio, nel senso che ogni costruttore ne realizza una particolare implementazione. Un altro linguaggio molto diffuso è la lista istruzioni (e anche qui si può parlare più propriamente di dialetti). Si stanno diffondendo anche il testo strutturato e il Sequential Functional Chart. In alcuni PLC, soprattutto sui micro, è possibile utilizzare: un solo linguaggio, in altri combinazioni di più linguaggi. In pochi è possibile utilizzare il Sequential Functional Chart, cioè il linguaggio che, come si e visto, è da ritenersi il migliore per la programmazione di algoritmi di controllo logico/sequenziale tipici dell'automazione industriale. 31 M.G.A. Servizi industriali – “Corso di programmazione PLC” CAPITOLO 4 Linguaggi di Programmazione 32 M.G.A. Servizi industriali – “Corso di programmazione PLC” Linguaggi di programmazione Verranno ora illustrati i principali linguaggi di programmazione nelle loro caratteristiche generali,fatta eccezione per il sequential functional chart,che verrà trattato in seguito Testo strutturato Il testo strutturato è il linguaggio di programmazione più vicino ai linguaggi informatici attuali, in particolar modo al Pascal, e come tale sarà presentato per primo, in modo da agevolare la presentazione delle unità di programmazione previste dallo standard. Il testo strutturato è, dunque, un linguaggio di programmazione testuale, di alto livello, sviluppato per le applicazioni di automazione. L'assegnazione, che è già stata utilizzata per le inizializzazioni delle variabili e dei tipi, è programmata con il simbolo :=. Assegnazioni valide, sono le seguenti: A := 2.5; abilitazione := TRUE; conteggio := 350; stato_tornio := funzionante; termometro 7 := 30.0; termocoppia_l.valore := 554.0; termocoppia_l.ultima_calibrazione := 2004-03-30; termocoppia_l.intervallo_calibrazione := T#120d; termocoppia_2 := termocoppia_1; forno_1[4] := termocoppia_1; Si noti che il carattere ; rappresenta il terminatore di un’istruzione. Sono inoltre disponibili: • • • • I classici operatori aritmetici:+ per la somma, - per la differenza, *per il prodotto, / per la divisione. MOD per il resto di una divisione intera, ** per l’elevamento a potenza; gli operatori di relazione:< per minore, <=- per minore o uguale, > per maggiore, >= per maggiore o uguale, <> per diverso; gli operatori sul bit: & oppure AND per la funzione di prodotto logico, OR per la funzione di somma logica , XOR per la funzione di somma logica esclusiva, NOT per la negazione; le parentesi (e ) per cambiare l’ordine di esecuzione delle operazioni con le note regole sulla precedenza delle valutazioni. Esistono poi i consueti costrutti per le istruzioni condizionate: • • • IF…THEN…END_IF per eseguire solo se è verificata una condizione logica; IF...THEN...ELSE...END_IF per eseguire istruzioni diverse a seconda del valore di una condizione logica; IF...THEN…ELSIF...THEN…ELSE…END_IF per definire delle decisioni multiple, usando più ELSIF; 33 M.G.A. Servizi industriali – “Corso di programmazione PLC” • CASE…OF...ELSE...END_CASE per definire decisioni multiple che dipendono dal valore di una variabile interna. Le istruzioni seguenti ne mostrano, a titolo di esempi, l'utilizzo: IF abilitazione & (conteggio<100) THEN conteggio := 100; stato_tornio := fermo; END_IF IF abilitazione THEN termocoppia_1.valore :=termocoppia_2.valore; ELSE termocoppia_1.valore:= 0,0; END_IF IF conteggio<100 THEN A := 1.0; ELSIF conteggio<500 THEM A := 2.0; ELSIF conteggio<800 THEM A := 3.0; ELSE {* conteggio maggiore o uguale a 800 *) A := 4.0; END_IF CASE conteggio OF 1 : stato_tornio := fermo; 2,3,4,5 : stato_tornio :- funzionante; 6...50 : stato_tornio ;= attesa; ELSE stato tornio := guasto; END_CASE Per la programmazione di cicli esistono i costrutti: • • • • FOR... TO... BY ... DO... END_FOR per l'esecuzione di cicli basati sul valore di una variabile intera, la quale viene incrementata di un certo passo da un valore iniziale a uno finale; WHILE...DO…END_WHILE per l'esecuzione di cicli fintantoché un'espressione logica rimane vera (la verifica viene fatta prima dell'esecuzione delle istruzioni che compongono il ciclo); REPET…UNTIL...END_REPEAT per l'esecuzione di cicli fintantoché un'espressione logica rimane vera (la verifica viene fatta, dopo l'esecuzione delle istruzioni che compongono il ciclo); EXIT per uscire da cicli in maniera immediata. Le istruzioni seguenti ne mostrano, a titolo di esempio, l'utilizzo: FOR conteggio=10 TO conteggio=6 BY -1 DO forno1[conteggio] := forno1[conteggio-5]; IF forno1[conteggio].valore = 100.0 THEN EXIT; END_IF END_FOR WHILE termometro_7 > 100.0 DO conteggio := conteggio + 1; END_WHILE 34 M.G.A. Servizi industriali – “Corso di programmazione PLC” REPEAT conteggio := conteggio - 1; UNTIL termometro_7 < 30.0 END_REPEAT Infine, con la parola chiave RETURN è possibile interrompere anticipatamente l'esecuzione di funzioni e blocchi funzionali. Linguaggio a contatti Il linguaggio a contatti, meglio conosciuto con il nome inglese di Ladder Diagram (la cui traduzione letterale è "diagramma a scala", dalla forma che assume il programma) è attualmente il più diffuso linguaggio di programmazione per i controllori a logica programmabile. Le prime applicazioni di automazione industriale venivano realizzate utilizzando dispositivi elettromeccanici come i relé, i temporizzatori, i contatori, i sequenziatori a cilindro. Quando cominciarono a essere disponibili i primi controllori a programma memorizzato, fu naturale sviluppare un linguaggio per la loro programmazione che fosse il più vicino possibile a quel tipo di tecnologia e che potesse, quindi, essere compreso e utilizzato anche dai tecnici dell'epoca, i quali possedevano scarse o mille conoscenze informatiche. Le prime istruzioni disponibili nel linguaggio a contatti furono quindi proprio quelle che rappresentavano il contatto normalmente aperto o normalmente chiuso di un relé, la sua bobina di eccitazione, il temporizzatore e il contatore. Anche la forma che assume il programma deriva dalla logica a relé, con le due linee verticali laterali (i montanti della scala) rappresentanti l'alimentazione e con le linee orizzontali (i pioli della scala, in inglese rung) che alimentano una bobina se una certa combinazione di contatti abilita il flusso di energia. I contatti possono essere associati agli ingressi digitali provenienti dal processo, o meglio al loro stato rappresentato in particolari bit della memoria, oppure a condizioni interne al dispositivo, sempre rappresentate da bit di memoria; la bobina può essere associata a un bit della memoria e, per suo tramite, comandare un'uscita digitale o variare una condizione interna. La migliore applicazione del linguaggio a contatti si ha nella definizione di operazioni logiche booleane, nelle quali la forma grafica è di notevole ausilio alla comprensione del significato delle istruzioni programmate. Una cosa da tenere presente è che, in una rete in linguaggio a contatti, il flusso di energia può andare sempre e solo da sinistra verso destra, senza possibilità di inversione. Inoltre, l'esecuzione delle istruzioni avviene dall'alto verso il basso e da sinistra verso destra. Un esempio di rete è rappresentato in Figura 1 dove, anche se non si sono ancora definite formalmente le istruzioni, si può riconoscere che sono implementate le funzioni booleane e = a AND b (la bobina e viene alimentata se sono chiusi entrambi i contatti a e b, permettendo il flusso di energia) e f = d OR e (la bobina f viene alimentata se è chiuso almeno uno dei contatti d ed e). Nel terzo rung, la bobina contrassegnata con u potrebbe essere alimentata attraverso le sequenze di contatti i1-i2-i3-i4, i1-i5-i6-i4, I7-I6-I4, ma non attraverso la sequenza i7-i5-i2-i3-i4 che pure potrebbe rappresentare una continuità elettrica. Come già detto, una rete in linguaggio a contatti è delimitata a sinistra e a destra da due linee verticali che rappresentano le barre di alimentazione; la barra di destra può anche essere omessa. Lo stato della barra di sinistra può essere supposto sempre a ON, a indicare la presenza di un flusso di energia. Il contatto è un elemento che permette il flusso di energia verso destra in dipendenza dello stato di un bit cui esso è associato. I contatti disponibili sono i seguenti • Il contatto normalmente aperto — | | — al quale deve essere associata una variabile 35 M.G.A. Servizi industriali – “Corso di programmazione PLC” booleana (un bit) il cui valore, se vero, causerà la chiusura del contatto assi curando la continuità logica (elettrica) nel rung in cui l'istruzione si trova. Se il valore della variabile e falso il contatto rimarrà aperto, impedendo il flusso di energia. Figura 1 - Esempio di rete in linguaggio a contatti. • • • Il contatto normalmente chiuso —I / I— al quale deve essere associata ima variabile booleana il cui valore, se falso, rende chiuso il. contatto assicurando la continuità logica (elettrica) nel rung in cui l’istruzione si trova. Se il valore della variabile è vero il contatto si aprirà, impedendo così il flusso di energia. Il contatto a fronte di salita, simbolo —I P I— , il quale si chiude, permettendo il flusso di energia, solo quando il valore della variabile .booleana associata passa, tra due successive esecuzioni della stessa istruzione, da falso a vero. Il contatto a fronte di discesa, simbolo — I N I — , il quale si chiude, permettendo il flusso di energia, solo quando il valore della variabile booleana associata passa, tra due successive esecuzioni della stessa istruzione, da vero a falso. I contatti sono quindi elementi di valutazione dello stato di variabili booleane (bit) e servono per permettere o no il flusso di energia sul rung dove si trovano. Le bobine sono invece elementi per operare sul bit le quali, se aumentate dal flusso di energia, agiscono sul valore della variabile booleana associata. Le bobine disponibili sono: • • • • 36 bobina semplice, simbolo — ( ) — , la quale, quando le condizioni di alimentazione sono verificate, assegna alla variabile booleana associata, il, valore uno, altrimenti il valore zero; bobina negata, simbolo —( / ) — , la quale opera in maniera duale, assegnando alla variabile booleana il valore uno se non è alimentata, altrimenti il valore zero; bobina a memorizzazione , (SET) o aggancio bobina, simbolo — (S) — , la quale, se alimentata, assegna il valore uno alla variabile booleana associata: tale valore viene conservato anche quando la bobina è disalimentata; bobina a memorizzazione, (RESET) o sgancio bobina, simbolo — (R) — . la quale, M.G.A. Servizi industriali – “Corso di programmazione PLC” • • • • se alimentata, assegna il valore zero alla variabile booleana associata: tale valore viene conservato anche quando la bobina è disalimentata; bobina a fronte di salita, simbolo — (P) —, la quale assegna il valore uno alla variabile booleana associata solo quando la sua alimentazione, tra due successive esecuzioni, passa da assente a presente (generando quindi un impulso rettangolare di durata pari all’intervallo tra le due successive esecuzioni); bobina a fronte di discesa, simbolo — (N) — , la quale assegna il valore uno alla variabile booleana associata solo se la sua alimentazione, tra due successive esecuzioni, passa da presente ad assente; Si segnala, inoltre, che lo standard prevede ulteriori tre istruzioni di tipo bobina: le bobine a ritenuta — (M) — , — (SM) — e — (RM) —, le quali corrispondono, rispettivamente, a — ( ) —, — (S) — e — (R) — . ma implicitamente definiscono che la variabile booleana associata deve essere mantenuta in caso di mancanza di alimentazione (equivalente a utilizzare la parola chiave RETAIN nella definizione delle variabili), Figura 2 - Funzione XOR. In Figura 2 è riportata una rete in linguaggio a contatti con a fianco un cronogramma di esempio per i valori (delle variabili booleane interessate: si riconosce che tale rete implementa la funzione XOR. Per migliorare la comprensione si riporta l'equivalente istruzione in testo-strutturato; c := (a AND NOT(b)) OR(NOT(a) AND b) ; In Figura 3 è mostrata una rete che implementa la memorizzazione dello stato di una variabile booleana (flip-flop SET/RESET) attraverso la cosiddetta auto alimentazione della bobina: si noti che per una corretta interpretazione di ciò che fa la rete si deve supporre che essa venga eseguita in modalità ciclica o periodica. L'equivalente in lesto strutturato è: u := NOT(r) AND (s OR u) ; dove la u al secondo membro dell'assegnazione è il valore relativo all'esecuzione precedente. In Figura 4, la rete rappresentata implementa il riconoscimento di un fronte di salita (equivalente al contatto a fronte). L'equivalente in testo strutturato è fr__a := NOT(aux) AND a; aux := a; La Figura 5, infine, realizza un flip-flop a commutazione di cui l'equivalente è fr_i := NOT(i_precedente) AND i; i precedente : i; il fr_i THEN 37 M.G.A. Servizi industriali – “Corso di programmazione PLC” if u THEN u := FALSE; ELSE u := TRUE; END_IF END_IF Figura 3 - Flip-flop SET/RESET. Figura 4 - Riconoscitore di fronte di salita. Si noti che le prime due istruzioni realizzano il contatto sul fronte e che, a differenza della rete in figura, non vi è bisogno della variabile ausiliaria, avendo .utilizzato un'esecuzione condizionata per l'assegnazione del valore alla variabile u. Il controllo del flusso del programma è realizzato con il salto che si ottiene ponendo in un rung il costrutto ---»xxxx, dove xxxx è una stringa che indica dove si deve saltare (la stringa è poi ripetuta, prima del rung cui si vuole saltare). In Figura 6 è proposto un esempio di salto condizionato: se a è vera e b è falsa si salta l'esecuzione del rung successivo. L'istruzione --<RETURN>~- è utilizzata per la terminazione di funzioni e blocchi funzionali. Figura 5 - Flip-flop a commutazione. 38 M.G.A. Servizi industriali – “Corso di programmazione PLC” Figura 6 - Salto condizionato. La coppia di istruzioni di connessione —>yyyy> e >yyyy>-- , dove yyyy è una stringa, viene utilizzata per spezzare un rung troppo lungo in più rung (Figura 27). Figura 7 – Connettori . Diagramma a blocchi funzionali Il diagramma a blocchi funzionali (Functional Block Diagram) è un linguaggio grafico che prevede la costruzione dì reti di componenti m analogia a un circuito elettronico in cui un flusso di segnale scorre sempre da sinistra verso destra. La sua applicazione migliore consiste nella rappresentazione grafica di funzioni logiche booleane e operazioni aritmetiche; tale linguaggio permette inoltre con semplicità di costruire programmi complessi connettendo opportunamente blocchi funzionali e funzioni, magari sviluppali in altri linguaggi. Una rete in diagramma a blocchi funzionali è una rete in cui le uscite di funzioni o blocchi funzionali sono connesse all’ingresso di altre. Non vi sono quindi elementi intrinseci del linguaggio. L'ingresso di una funzione o di un blocco funzionale può anche essere direttamente il valore di una variabile o un valore costante. Le uscite possono anche essere valori di variabili. 39 M.G.A. Servizi industriali – “Corso di programmazione PLC” La negazione di una variabile booleana può essere indicata con un cerchietto posto prima dell'ingresso del blocco grafico in cui entra la linea del segnale, anziché mediante la funzione NOT. E permessa la creazione di anelli chiusi, cioè l'utilizzo dell'uscita di una funzione come ingresso di un'altra funzione che la precede a sinistra nell'anello. Un anello chiuso è interpretato in questo modo: il valore di uscita calcolato viene conservato e utilizzato come valore di ingresso nella successiva valutazione della rete. Poiché in una rete che contiene un anello chiuso il valore delle uscite può dipendere dall'ordine in cui sono valutati i blocchi che compongono l'anello, bisogna prestare attenzione al modo in cui l'ordine di valutazione è realizzato nel particolare dispositivo che si utilizza.È possibile utilizzare anche connettori grafici (simili a quelli definiti nel linguaggio a contatti) per trasferire il flusso del segnale da una parte all'altra della rete.In Figura 8 è riportalo un esempio di rete in diagramma a blocchi funzionali, in cui si è supposta l'esistenza delle tre funzioni o blocchi funzionali FI, F2 e F3. Si noti l'utilizzo di un connettore che collega una delle uscite di F3 a uno degli ingressi di F2, realizzando un ciclo chiuso. Lista istruzioni La lista istruzioni è un linguaggio di basso livello, di tipo assemblativo , composto da sequenze di istruzioni, ognuna su un rigo diverso. Ogni istruzione è composta da un operatore, eventualmente accompagnato da un modificatore, e da un operando. Un'istruzione può essere preceduta da un'etichetta, composta da un nome seguito dal simbolo :. Nell’interpretazione degli operatori si deve considerare che essi fanno sempre riferimento a un accumulatore, oltre che all'operando indicato. Figura 8 - Esempio di rete in diagramma a blocchi funzionali. Gli operatori predefiniti sono: • • • • • 40 LD per assegnare all'accumulatore il valore dell'operando, che può essere un valore assoluto o una variabile di qualunque tipo; ST per porre il valore dell'accumulatore nella variabile indicata dall'operando; S per porre una variabile booleana a 1, nel caso che il valore nell'accumulatore sia pari a uno; R per porre una variabile booleana a O, nel caso che il valore nell'accumulatore sia pari a uno; AND oppure &, OR e XOR per realizzare operazioni logiche su variabili booleane; M.G.A. Servizi industriali – “Corso di programmazione PLC” • • • • • ADD, SUB, MUL, DIV per realizzare le quattro operazioni aritmetiche; GT, GE, EQ, NE, LE, LT per realizzare operazioni di comparazione (rispettivamente maggiore, maggiore o uguale, uguale, non uguale, minore o uguale, minore); JMP per saltare all'etichetta indicata nel campo operando; CAL per realizzare la chiamala di un blocco funzionale; RET per realizzare il ritorno da una funzione o da un blocco funzionale. La chiamata di una funzione, invece, si effettua semplicemente indicandone il nome (e il suo risultato sarà posto nell’accumulatore). Gli operatori possono essere seguiti da modificatori: • il modificatore N indica una negazione booleana dell'operando, utilizzabile con LD, ST, operatori booleani; • il modificatore parentesi aperta ( indica che la valutazione dell'operatore deve essere fatta solo quando si trova la corrispondente parentesi chiusa ), utilizzabile con gli operatori booleani, aritmetici e di comparazione; il modificatore C, utilizzabile solo per gli operatori JMP, CAL e RET, significa che l'esecuzione dell'operatore è condizionata al fatto che il valore corrente dell'accumulatore sia 1 (o 0 se si usa anche il modificatore N). • A titolo di esempio, le istruzioni per realizzare la XOR tra due variabili booleane sono: LD ANDN OR( ANDN a b b a (* inetti il valore di a nell'accumulatore *) (* AND dell'accumulatore con il negato di b *) (* OR dell'acc. col risultato dell'espressione *) ) ST c (* conserva il valore dell'accumulatore in e *) mentre quelle per realizzare un flip-flop a commutazione sono: LD i ANDN i_precedente JMPCN ava (* salta se non c'è' il fronte di salita *) LD u STN ava: ST u (* conserva il valore negato dell'accumulatore *) LD i i_precedente 41 M.G.A. Servizi industriali – “Corso di programmazione PLC” CAPITOLO 5 Blocchi Funzionali 42 M.G.A. Servizi industriali – “Corso di programmazione PLC” Unità di organizzazione della programmazione Per l'organizzazione del software, lo standard introduce alcuni elementi comuni, i quali prescindono dall'effettivo linguaggio, o insieme di linguaggi, che sarà utilizzato per la programmazione. Essi sono, oltre alle variabili di cui si è già parlato: • • • le funzioni, unità di organizzazione della programmazione che, quando vengono eseguite, forniscono valori in uscita dipendenti dai soli valori in ingresso; i blocchi funzionali (o function blocks), unità di organizzazione della programmazione le quali, quando vengono eseguite, forniscono valori in uscita dipendenti dai valori in ingresso e dallo stato attuale delle variabili interne (in altre parole, le uscite dipendono, oltre che dagli ingressi attuali, dagli ingressi passati e dalle condizioni iniziali del blocco); i programmi, che rappresentano l'insieme logico degli, elementi e dei costrutti di programmazione necessari al corretto trattamento dei dati. Le funzioni, i blocchi funzionali e i programmi rappresentano nel loro complesso le unità di organizzazione della programmazione (POU, Program Organization Units). Una POU è composta da tre elementi: • • • la definizione del tipo di POU: del suo nome (e nel caso di funzioni anche del tipo di dato associato al nome); la parte dichiarativa delle variabili e dei loro attributi; il corpo con le istruzioni nei linguaggi dello standard. Oltre alle unità di organizzazione della programmazione vi sono poi: • i compiti (o task ), ossia gli elementi che controllano l’esecuzione di' programmi e blocchi funzionali su base periodica, ciclica o al verificarsi di eventi particolari; • • le risorse, che corrispondono a entità in grado di eseguire programmi; la configurazione, l'elemento del linguaggio corrispondente a un dispositivo che comprende una o più risorse. Le funzioni Le funzioni sono unità di organizzazione della programmazione riusabili, che a partire dai valori in ingresso calcolano un solo dato di uscita ( quest’ultimo può essere anche a più elementi). Il dato in uscita è rappresentato dal nome della funzione stessa, che può essere direttamente usato all'interno di espressioni. Il risultato dell'esecuzione di una funzione non deve dipendere dallo stato di variabili interne; in altre parole, agli stessi ingressi deve corrispondere sempre lo stesso dato di uscita. Le funzioni possono essere definite in maniera sia testuale sia grafica. La definizione testuale è costruita secondo il seguente schema: FUNCTION nome_funzione : tipo (* tipo delia funzione *) VAR_INPUT ……..; (* definizione dalle variabili di ingresso *) END_VAR ….. (* altre definizioni di variabili *) 43 M.G.A. Servizi industriali – “Corso di programmazione PLC” ….. (* corpo della funzione che deve prevedere *) (* l'assegnazione di un valore a *) (* nome_funzione *) END_FUNCTION Il corpo della funzione può essere scritto in uno dei linguaggi definiti dallo standard, tranne il Sequential Functional Chart. Nelle funzioni non possono essere definite variabili di uscita, di ingresso/uscita, direttamente rappresentate, esterne, globali e accessibili. Non possono essere definite, inoltre, variabili a ritenuta. La definizione grafica si ottiene utilizzando sempre le parole chiave FUNCTION ed END FUNCTION, ma ricorrendo per la definizione dell'interfaccia esterna a un blocco rettangolare, a sinistra del quale si pongono i parametri d’ingresso e a destra del quale si mettono quelli di uscita; si provvede poi alla specificazione dei nomi e dei tipi delle variabili interne, quindi alla scrittura del corpo della funzione in uno dei linguaggi possibili (Figura 1). Alcune funzioni possono essere "sovraccaricate", nel senso che possono essere utilizzate con variabili di ingresso di diverso tipo. Esempi classici sono le funzioni numeriche, come l'addizione, che sono utilizzabili con qualsiasi variabile di tipo numerico. Alcune funzioni possono poi essere estendibili, nel senso che il numero dei loro ingressi non è specificato; ancora una volta l'esempio: Figura 1 - Definizione grafica della funzione soglia_satura. classico è la funzione di addizione che può essere estesa a un generico numero di addendi. Lo standard prevede la presenza di funzioni predefinite per le principali operazioni, altre funzioni possono essere definite dall'utente. Le funzioni predefinite sono le seguenti. • • 44 Funzioni di conversione di tipo di variabili (con sintassi generica nella forma TIPO1_TO_TIPO2 (variabile) - per esempio, se x è una variabile intera e y una reale, y : = INT_TO_REAL ( x ) ) - e di troncamento (TRUNC). Funzioni numeriche: valore assoluto (ABS), radice quadrata (SQRT), logaritmo naturale (LN) e decimale (LOG), esponenziale naturale (EXP), seno (SIN) e arcoseno (ASIN), coseno (COS) e arcocoseno (ACOS), tangente (TAN) e arcotangente (ATAN). M.G.A. Servizi industriali – “Corso di programmazione PLC” Funzioni aritmetiche standard, tutte applicabili a variabili numeriche generiche (ANY_NUM): addizione (ADD o +) e moltiplicazione (mul o *) estendibili, sottrazione (SUB o -), divisione (DIV o /), divisione intera (MOD), assegnazione (MOVE o : =), elevamento a potenza (EXPT o * *). • Funzioni applicabili a stringhe di bit (ANY_BIT): spostamenti a sinistra (3HL) e a destra (SUR) di N bit con riempimento di zeri, rotazioni circolari di N bit (a destra, ROR, o a sinistra, ROL), prodotto logico estendibile (AND o &), somma logica estendibile (OR. o >=1 nei linguaggi grafici), OR esclusivo estendibile (XOR, o =2K+1 nei linguaggi grafici), negazione (NOT) applicabile solo a una variabile booleana. • Funzioni di selezione, sovraccaricate a tutti i tipi di dati: selezione tra due (SEL), multiplexer (selettore tra molti) estendibile (MUX), massimo estendibile (MAX), minimo estendibile (MIN), saturazione (LIM). • Funzioni di comparazione, sovraccaricate ed estendibili: maggiore (GT o >), maggiore o uguale (GE o >=), minore (LT o <), minore o uguale (LE o <==), uguale (EQ o ;-), diverso (NE o <>, non estendibile). • Funzioni sulle stringhe di caratteri: lunghezza (LEN), estrazione di N caratteri a destra, a sinistra o in mezzo (LEFT, RIGHT, MID), concatenazione estendibile (CONCAT), inserzione di una stringa in un'altra (INSERT), cancellazione di caratteri da una stringa (DELETE), sostituzione di caratteri all'interno della stringa (REPLACE), presenza di una sottostringa (FIND). • Funzioni relative a operazioni su variabili di tipo temporale. Nel caso in cui le funzioni siano utilizzate in un linguaggio grafico, vale a dire nel linguaggio a contatti o nel diagramma a blocchi funzionali, è possibile controllare che la funzione sia eseguita attraverso un ingresso implicito di tipo booleano chiamato EN. Allo stesso modo esiste, per ogni funzione, un'uscita implicita di tipo booleano, chiamata ENO, che diventa vera quando la funzione è eseguita senza errori. Un utilizzo tipico si ha nella realizzazione di catene di funzioni, in cui si vuole essere sicuri che ne sia eseguita una prima di procedere con l'altra: allo scopo basta collegare l'uscita. ENO della prima all'ingresso EN della seconda. Una funzione può contenere al suo interno solo chiamate ad altre funzioni, non a blocchi funzionali o programmi. Si noti che non è previsto che una funzione possa chiamare se stessa (ricorsione).Come esempio di definizione di funzione si consideri il seguente: • FUNCTION soglia_satura : REAL VAR_INPUT dato, lim_soglia, lim_sat : REAL; END_VAR IF ABS{dato) < lim_soglia THEN soglia satura := 0.0; ELSE soglia_satura :" MIN (MAX (dato,-lim_sat) ,lim_sat) ; END_IF END_FUNCTION il cui scopo è facilmente comprensibile. Si noti che: • • • per la definizione del corpo della funzione si è usato il testo strutturato; si sono utilizzate, nel colpo della definizione, delle funzioni matematiche predefinite; la funzione sarebbe anche potuta essere definita graficamente, come in Figura 1. Come altro esempio, si supponga di dover sottrarre un offset a una variabile che viene fornita da un sensore in formato BCD. Una possibile funzione che realizza questa specifica è la seguente: 45 M.G.A. Servizi industriali – “Corso di programmazione PLC” FUNCTION correggi_sensore : WORD (* codifica BCD *) VAR_INPUT correggi : BOOL; ingresso : WORD; (* codifica BCD*) offset : INT; END_VAR IF correggi THEN Correggi_sensore:=INT_TO_BCD(BCD_TO_INT( ingresso ) -offset); END_IF END_FUNCTION in cui il corpo è stato espresso in testo strutturato. In Figura 2 la stessa funzione è definita graficamente e il suo corpo è espresso in linguaggio a contatti. Si noti l’utilizzo delle variabili implicite EN ed ENO. I blocchi funzionali I blocchi funzionali (function blocks) sono delle unità di organizzazione della programmazione nelle quali i valori delle uscite non dipendono solo dai valori degli ingressi ma anche dal valore delle variabili interne. Figura 2 - Definizione grafica della funzione correggi_sensore. Ciò significa che i valori delle variabili interne e di uscita devono persistere tra due esecuzioni successive del blocco funzionale. La definizione di un blocco funzionale avviene con il costrutto: FUNCTION_BLOCK esempio VAR_INPUT ………….; (* definizione dalle viiriabili di ingresso *) END_VAR VAR OUTPUT ………….; (* definizione della variabili di uscita *) END_VAR (* altre definizioni di variabili *) …. (* corpo del blocco funzionale *) END_FUNCTION_BLOCK Il corpo del blocco funzionale può essere scritto in uno dei cinque linguaggi definiti dallo standard, compreso il Sequential Functional Chart. 46 M.G.A. Servizi industriali – “Corso di programmazione PLC” La definizione grafica di un blocco funzionale si ottiene utilizzando sempre le parole chiave FUNCTION_BLOCK ed END_FUNCTION_BLOCK ma ricorrendo per la definizione dell’interfaccia esterna ad un blocco rettangolare: a sinistra si mettono i parametri di ingresso, a destra quelli d’uscita; si provvede poi alla specificazione dei nomi e dei tipi delle variabili interne e, infine, alla scrittura del corpo della funzione in uno dei linguaggi possibili. Un blocco funzionale può contenere chiamate ad altri blocchi funzionali o funzioni. Non è prevista la ricorsione, vale a dire la possibilità che un blocco funzionale chiami se stesso. Per usare i blocchi funzionali, all’atto della loro definizione è creata un'istanza del blocco, con un nome identificativo e una struttura dati univoca. Per l'utilizzatore solo i parametri di ingresso e di uscita devono essere accessibili, non le variabili interne. Un'istanza di un blocco funzionale si definisce a tutti gli effetti come una variabile, e in fondo essa corrisponde alla definizione di una struttura dati. L'istanza di un blocco funzionale ha la stessa visibilità della definizione di una variabile, e come una variabile può anche essere data quale ingresso a un'altra pou. Per esempio, se si è già definito il blocco funzionale esempio, due sue istanze valide si ottengono con il costrutto: VAR istanza_1, intanza_2 : esempio; END_VAR Si potevano anche utilizzare le parole chiave VAR RETAIN, per indicare che i valori dovevano essere conservati in caso di mancanza d’alimentazione, o VAR_GLOBAL per indicare che le due istanze dovevano avere visibilità globale ecc. Anche per i blocchi funzionali lo standard prevede che ve ne siano alcuni predefiniti. Data la loro importanza, essi saranno presentati in dettaglio a livello sia di definizione sia di utilizzo. I flip-flop, cioè i blocchi funzionali per memorizzare una condizione logica, sono due, definiti in questo modo: FUNCTION_BLOCK SR (* priorità del SET *) VAR_INPUT SI, R : BOOL; END__VAR VAR_OUTPUT Ql : BOOL; END_VAR Ql := SI OR (Ql AND NOT R) ; END__FUNCTION_BLOCK FUNCTION_BLOCK RS (* priorità del RESET *) VAR^INPUT S, Rl : BOOL; END_VAR VAR_OUTPUT Ql : BOOL; END_VAR Ql := NOT Rl AND (Ql OR S) ; END_FUNCTTON_BLOCK 47 M.G.A. Servizi industriali – “Corso di programmazione PLC” I due flip-flop differiscono per come viene gestita la contemporanea presenza del valore vero per i due ingressi. Nella definizione del corpo del blocco si è usato il testo strutturato, ma si sarebbe potuto usare anche il linguaggio a contatti, ottenendo: per il flip-flop SR e: per il flip-flop RS. Se questi due blocchi funzionali vanno utilizzati in un linguaggio grafico, le loro definizioni grafiche sono quelle rappresentate in Figura 3. Figura 3 - Definizione grafica dei blocchi funzionali SR e RS I rilevatori di fronte sono due, uno per il fronte di salita e uno per il fronte di discesa: FUNCTION_BLOCK R_TRIG (* fronte di salita *) VAR_INPUT CLK : BOOL; END__VAR VAR_OUTPUT Q : BOOL; END_VAR VAR RETAIN AUX : BOOL :- 0; END_VAR LD CLK (* corpo in lista istruzioni *) ANDN AUX ST Q LD CLK ST AUX END_FUNCTION_BLOCK FUNCTION_BLOCK F_TRIG (*fronte di discesa*) VAR_INPUT 48 M.G.A. Servizi industriali – “Corso di programmazione PLC” CLK : BOOL; END__VAR VAR_OUTPUT Q : BOOL; END_VAR VAR RETAIN AUX : BOOL := 1; END VAR END_FUNCTION_BLOCK La prima volta che questi due blocchi funzionali sono chiamati si può avere il riconoscimento di un fronte, se la variabile d'ingresso è alta (o bassa, rispettivamente). Si noti che il valore della variabile ausiliaria è ritenuto anche in mancanza di alimentazione. In Figura 4 sono mostrate le loro definizioni grafiche. I riconoscitori di fronte possono essere anche utilizzati implicitamente sulle variabili di ingresso di altri blocchi funzionali: basta definire tali variabili con il tipo BOOL esteso con i qualificatori R EDGE (per il fronte di salita) oppure F EDGE (per il fronte di discesa). In caso di definizione grafica, sulle linee di ingresso possono essere posti i simboli > (fronte di salita) oppure < (fronte di discesa). I contatori sono blocchi funzionali che segnalano il raggiungimento di un valore di conteggio. Esistono il contatore a incremento, quello a decremento e il bidirezionale. In Figura 5 sono mostrate le loro definizioni grafiche (si noti la definizione implicita dei riconoscitori di fronte su alcune variabili di ingresso). I significati delle variabili di ingresso e di uscita sono i seguenti: • CU è l'ingresso sui cui fronti di salita il contatore viene incrementato; • CD è l'ingresso sui cui fronti di salita il contatore viene decrementato; • R è il reset (porta a zero il valore di conteggio); • PV è il valore di conteggio di ingresso; • LD carica il contatore con il valore PV; Figura 4- Definizione grafica dei blocchi funzionali R_TRIG e F_TRIG. 49 M.G.A. Servizi industriali – “Corso di programmazione PLC” Figura 5 - Definizione grafica dei blocchi funzionali ctu, ctd e ctud. • Q segnala che il contatore ha finito il conteggio, in pratica ha raggiunto il valore di conteggio nel caso del contatore ad incremento oppure il valore zero nel caso del contatore a decremento; • QD segnala che il contatore bidirezionale ha raggiunto lo zero; • QU segnala che il contatore bidirezionale ha raggiunto il valore PV; • CV è il valore raggiunto dal contatore. Vediamo in dettaglio il comportamento del contatore a incremento che viene impostato al valore PV. A ogni fronte di salita di CU incrementa il valore di CV partendo da zero; quando arriva al valore impostato mette l'uscita Q a 1 e non conta più. Il contatore può essere resettato con l'ingresso R. La sua definizione è: FUNCTION_BLOCK CTU (* contatore a incremento *} VAR_INPUT CU : BOOL R_TRIG; (* definizione implicita del fronte *) R : BOOL; PV : INT; END_VAR VAR_OUTPUT Q : BOOL; CV : INT; END_VAR IF R THEN CV :- 0; ELSIF CU AND (CV<PV) THEN CV := CV + 1; ENDIF Q := (CV = PV); END__FUNCTION_BLOCK Naturalmente, la particolare implementazione dovrà prevedere un limite massimo per il valore di conteggio PV assegnabile a un contatore. Questo limite può essere superato ponendo i contatori in cascata tra loro. Per esempio, per i contatori a incremento, l'uscita QU del primo può essere utilizzata come ingresso CU del secondo e come ingresso di reset R del primo; l'uscita QU del secondo diventerà alta quando i fronti di salita sull'ingresso CU del primo avranno raggiunto un numero pari al prodotto dei valori di conteggio PV. 50 M.G.A. Servizi industriali – “Corso di programmazione PLC” Un altro gruppo di blocchi funzionali predefiniti molto importanti sono i temporizzatori o timer. In Figura 6 sono definiti il timer a impulso (TP), il timer on-delay (TON) e il timer off-delay (TOF) insieme a dei cronogrammi che ne chiariscono il funzionamento. I significati delle variabili di ingresso e di uscita sono: • IN è l'ingresso che fa partire le funzioni di temporizzazione; • PT è il valore di tempo da contare; Figura 6 - Definizione grafica dei blocchi funzionali tp. ton e tof e relativi cronogrammi. • Q è l'uscita booleana su cui il temporizzatore agisce; • ET è il tempo trascorso. In particolare, il timer a impulso genera una finestra rettangolare di durata prestabilita sulla sua uscita quando l'ingresso diventa vero. Un timer on-delay alza la sua uscita dopo che è trascorso il tempo impostato da quando l'ingresso è diventato alto (se si mantiene alto, altrimenti il timer si resetta). Il timer off-delay implementa un ritardo di spegnimento: l'uscita diventa alta quando l'ingresso è vero e si abbassa dopo il tempo impostato quando l'ingresso diventa falso. Anche per i temporizzatori si può superare il limite massimo di conteggio utilizzandone vari in cascata (realizzando un valore di conteggio pari alla somma dei singoli valori) o mettendo un contatore in cascata a un temporizzatore (e in tal caso il valore di conteggio è dato dal prodotto del valore impostato per il temporizzatore e del valore impostato per il conteggio). Possono essere poi presenti blocchi funzionali predefiniti per realizzare comunicazioni tra dispositivi diversi, per i quali non è stata ancora definita una standardizzazione. Come esempio di blocco funzionale creato dall'utente, si presenta la definizione di un blocco funzionale per gestire una risorsa comune (semaforo) il cui scopo è segnalare se una risorsa è già occupata. FUNCTION_BLOCK semaforo VAR_INPUT richiesta, rilascio : BOOL; END__VAR VAR_OUTPUT impegnata : BOOL; END_VAR VAR aux : BOOL := 0; END_VAR impegnata := aux; IF richiesta THEN aux : - 1 ; 51 M.G.A. Servizi industriali – “Corso di programmazione PLC” ELSEIF rilascio THEN impegnata := 0; aux := 0; END_IF END_FUNCTION_BLOCK La definizione grafica di questo blocco funzionale è mostrata in Figura 7. Un altro esempio di function block è quello per la realizzazione di un'onda quadra su una variabile booleana, a partire dal valore falso, quando un'altra varia bile booleana è vera. Figura 7 - Definizione grafica del blocco funzionale semaforo. La definizione di un possibile function block che implementa tale funzionalità è: FUNCTION_BLOCK ondaquadra VAR_INPUT abilita : BOOL; durata_ON, durata_OFF : TIME; END_VAR VAR_OUTPUT uscita : BOOL; END_VAR VAR (* si utilizzano due istanze *) timer1, timer2 := TON; (* di timer on-delay *) END_VAR (* corpo del blocco funzionale *) END_FUNCTION_BLOCK Il corpo del blocco funzionale in linguaggio a contatti, è rappresentato in figura 8. il corpo scritto in testo strutturato è il seguente; timer1(IN := NOT(timer2.Q) AND abilita, PT :=durata_OFF); timer 2(IN := timer1.Q, PT :=durata_ON); uscita := timerl.Q; 52 Figura 8 - Corpo del blocco funzionale ondaquadra espresso in linguaggio a contatti. Figura 9 - Corpo del blocco funzionale ondaquadra espresso in diagramma a blocchi funzionali. dove si notino le chiamate dei blocchi funzionali di temporizzazione. Il corpo scritto in diagrammi a blocchi funzionali è rappresentato in Figura 9, mentre quello scritto in lista istruzioni è il seguente: LDN AND ST LD ST CAL CAL LD ST timer2.Q abilita timer1.IN durata__OFF timer1.PT timer1 timer2(IN:=timerl.Q, PT:=durata_OFF) timerl.Q uscita dove si notino i due diversi modi utilizzati per assegnare i parametri di ingresso ai blocchi funzionali. Una possibile chiamata di questo blocco funzionale in testo strutturato è: ondaquadra( abilita:=ing, durata_ON:=t#2s, durata_OFF:=t#3s, uscita :=led) ; mentre in Figura 10 la stessa chiamata A rappresentata graficamente. Un ulteriore esempio di function block è quello per realizzare una specifica di antirimbalzo: si vuole cioè valutare un valore booleano solo se è rimasto costante per almeno un certo tempo. In 53 Figura 11 vi è la definizione di questo blocco con il corpo espresso in linguaggio a contatti; m Figura 12 il corpo è descritto in diagramma a blocchi funzionali. Figura 10 Figura 11 Figura 12 54 CAPITOLO 6 Sequential Functional Chart 55 Il Sequential Functional Chart Il Sequential Functional Chart (SFC) o diagramma funzionale sequenziale è un linguaggio di programmazione efficace per la progettazione di algoritmi di controllo. Nel 1975 in Francia fu istituita una commissione con lo scopo di cercare un mezzo per descrivere i sistemi complessi di automazione industriale in modo innovativo rispetto alle tecniche allora utilizzate. Il risultato della commissione fu la definizione del GRAPHe de Coordination Etapes Transitions (GRAFCET) che è stato adottato come standard internazionale dal Comitato Elettrotecnico Internazionale nel 1987 e poi recentemente compreso tra i linguaggi di programmazione definiti dallo standard IEC 1131-3 con il nome di Sequential Functional Chart. Il Sequential Functional Chart è un linguaggio grafico finalizzato alla descrizione del comportamento dei sistemi ad eventi discreti, cioè di quei sistemi in cui variazioni dello stato non sono legate al trascorrere del tempo ma all’occorrenza di situazioni particolari. Nella categoria dei sistemi ad eventi discreti rientrano certamente i sistemi di controllo dei processi industriali e quindi l’SFC può essere impiegato con profitto nella progettazione di algoritmi di controllo. Se il dispositivo che deve realizzare il controllo lo accetta come linguaggio di programmazione non vi è bisogno di ulteriori operazioni; se invece, come accade spesso, il controllore non lo supporta occorre tradurre quanto progettato in un programma scritto in un altro linguaggio di programmazione. Gli elementi di base Gli elementi di base dell’SFC sono : • la fase, con le azioni ad essa associate; • la transizione, con l’azione ad essa associata; • l’arco orientato. La fase può essere definita come una condizione invariante del sistema che può essere modificata solo dall’occorrenza di un determinato evento che generando una transizione porta il sistema in una nuova fase. Essa è individuata univocamente da un numero (quella iniziale è contraddistinta da una doppia cornice) e ad una fase può essere associata una o più azioni. fase 5 apri valvola 3 azione Figura 27:Esempio di programmazione SFC Una fase può trovarsi in una condizione attiva in cui vengono attivate le azioni associate (tipicamente indicata da un pallino nel suo simbolo), o inattiva in cui non viene svolta alcuna azione. In un SFC, alla generica fase n deve venire associata una variabile booleana Xn detta marker di fase, che assume valore 0 se la fase è inattiva e 1 se attiva. La transizione viene indicata con una barretta e con la sigla Tn, dove n è il numero che la identifica. Alla sua destra viene posta la sua condizione espressa come funzione booleana di variabili booleane. 56 (ok AND T>20) OR NOT abilita T32 Figura 28:Esempio di programmazione SFC Gli archi orientati collegano tra di loro le fasi, stabilendone la sequenza, e sono interrotti dalle transizioni le quali determinano le condizioni da soddisfare affinché si possano avere attivazioni e disattivazioni delle fasi. L’orientamento degli archi viene indicato con una freccia e può essere evitata nel caso che l’arco sia orientato verso il basso e quando non c’è possibilità di ambiguità. Due regole importanti per la costruzione di un SFC sono quelle che affermano che: • tra due fasi collegate da un arco orientato vi deve essere sempre una transizione • tra due transizione vi deve essere sempre almeno una fase. Se più fasi convergono in una stessa transizione o se ad una stessa transizione succedono più fasi, è consigliabile utilizzare una doppia linea orizzontale al fine di evitare di inserire archi obliqui e di mettere in evidenza la fine e l’inizio di sequenze che devono evolvere i parallelo. 13 25 T22 41 51 61 71 Figura 29: Esempi di programmazione SFC Le regole di evoluzione Si definisce condizione di un SFC l’insieme delle sue fasi attive. Un SFC può cambiare la sua condizione attraverso il superamento delle transizioni. Affinché una transizione sia superabile si devono verificarsi entrambe le seguenti condizioni: 57 T1 tutte le fasi a monte della transizione devono essere attive, in questo caso la transizione si dice abilitata; la condizione ad essa associata è vera. T1 2 2 T2 T2 3 3 Figura 30 Ad esempio nella Figura 31 a transizione 22 è abilitata essendo le fasi a monte, 13 e 25, entrambe attive. La transizione sarà superabile se e solo se la variabile logica ok è vera e la variabile t è maggiore di 20 13 25 T22 ok AND t >20 Figura 31 La regola di evoluzione dell’SFC afferma che: se una transizione è superabile essa viene effettivamente superata: tutte le fasi a monte della transizione vengono disattivate e tutte le fasi a valle vengono attivate. Le variabili di ingresso e quelle temporali Se si utilizza l’SFC per progettare sistemi di controllo, esso rappresenta il comportamento della parte di comando del sistema automatizzato. Tale parte deve comunicare con la parte operativa, cioè con il sistema fisico da controllare, attraverso valori comunicati dai sensori e i valori da inviare agli attuatori . segnale Si ha un ingresso semplice quando la variabile dell’SFC assume lo stesso valore (binario) del sensore. Si ha un ingresso a fronte quando la variabile dell’SFC assume il valore 1 solo quando il segnale del sensore varia da 0 a 1 (fronte di salita) o da 1 a 0 (fronte di discesa). variabile sul fronte di salita sul fronte di discesa t Figura 32 Nei sistemi di controllo si deve ricorrere molto spesso, per le transizioni di fase, a variabili legate al tempo. 58 Nell’SFC la variabile temporale si indica con la notazione: t / Xn / d dove: • t identifica la temporizzazione, • Xn è il marker associato alla fase che fa partire la temporizzazione, • d è la durata della temporizzazione. • La variabile temporale assume il valore 0 quando la fase n a cui è legata diventa attiva, assume il valore 1 quando è trascorso il tempo d dall’ultima attivazione di Xn, ritorna al valore 0 se la fase è disattiva. Ad esempio quando la fase 33 diventa attiva viene inizializzato un timer la cui uscita risulterà vera e renderà la transizione T33 superabile solo dopo 20 secondi. L’effetto à quello di aver attivata l’azione di riscaldamento per tale tempo prima di avviare la partenza del motore. 33 T33 scalda motore t / X33 / 20 s 34 parti Figura 33 Le strutture classiche Le strutture classiche nella programmazione mediante SFC sono essenzialmente cinque: La scelta si ha una scelta tra più attività quando una fase è seguita da più transizioni. 1 T1 COND1 2 T2 COND2 3 Figura 34: Esempio di struttura ( La scelta ) Se la fase1 è attiva e la COND1 è vera e la COND2 è falsa sarà attivata la fase2; se la fase1 è attiva e la COND1 è falsa e la COND2 è vera sarà attivata la fase3. Per assicurarsi un’univocità nell’interpretazione del programma è consigliabile effettivamente realizzare una scelta imponendo che le due condizioni siano mutuamente esclusive: COND1 AND COND2=0 59 La convergenza si ha una convergenza tra più attività quando le sequenze terminano nella stessa fase attraverso transizioni diverse: 1 2 T2 T1 3 Figura 35: Esempio di struttura ( La convergenza ) In questo esempio si ha l’attivazione della fase3 sia attraverso il superamento della transizione1 che attraverso il superamento della transizione2 Si noti che se la fase3 è attiva per il superamento della T1 e successivamente si ha il superamento di T2 la fase3 continuerebbe ad essere attiva. Il parallelismo si ha un parallelismo, o concorrenza, tra più attività quando una transizione è seguita da più fasi: 5 T1 11 21 31 Figura 36: Esempio di struttura ( Il parallelismo ) Se diventa superabile T1 saranno attive contemporaneamente le fasi 11, 21, 31, dando luogo a diverse sequenze che evolveranno indipendentemente. 60 La sincronizzazione si ha la sincronizzazione tra più attività quando più fasi precedono la stessa transizione: 11 21 31 T31 32 Figura 37: Esempio di struttura ( La sincronizzazione ) Condizione necessaria affinché quest’ultima sia superabile è che tutte le sequenze parallele siano terminate e che quindi tutte le fasi siano attive. Con riferimento all’esempio affinché la fase32 sia attiva dovranno essere attive le fasi 11, 21, 31 e la transizione T31 superabile. La mutua esclusione la mutua esclusione viene realizzata attraverso una particolare struttura detta a semaforo che controlla l’attività di zone del diagramma: 25 35 T25 T35 26 36 90 T26 T36 27 T27 28 37 T37 38 Figura 38: Esempio di struttura ( La mutua esclusione ) Questa struttura è fondamentale quando una stessa risorsa è condivisa da più attività. In tal caso occorre garantire che la risorsa non riceva ordini contraddittori. 61 Nell’esempio la struttura a semaforo è realizzata dalla fase90 e affinché sia realizzata la mutua esclusione occorre che le due transizioni T25 e T35 siano mutuamente esclusive; in tal caso soltanto una delle due sequenze potrà essere attivata. (Si noti che la fase del semaforo deve essere sempre compresa tra le fasi iniziali.) La forzatura E’ possibile progettare la struttura di controllo mediante SFC gerarchici ciò significa dire che possono esistere SFC, di livello gerarchicamente superiore, che condizionano l’evoluzione di altri. Un esempio classico è quello della gestione di un impianto handling di produzione con la gestione degli allarmi di zona o più semplicemente, come nel precedente esempio, la movimentazione di una zona di produzione condizionata da un deviatore di gestione del funzionamento in automatico. Affinché tale metodologia possa essere applicata ad una struttura di controllo basata su una progettazione che utilizzi gli SFC occorre definire il concetto di forzatura. La forzatura permette ad un SFC di livello gerarchico superiore di forzare quelli di livello inferiore ad assumere una certa condizione (insieme di fasi attive) a prescindere dalle regole di evoluzione 11 11 a 2 Forza G2:{12} Azione A 12 a X4 b Azione B 13 c Azione A 12 b X4 Azione B 13 c Figura 39: Esempio di forzatura La sintassi dell’azione è FORZARE X:{Y} dove X è il nome dell’SFC da forzare e Y è la condizione in cui deve essere forzato. Dall’esempio precedentemente riportato si può interpretare la forzatura come una particolare azione; il suo effetto sull’SFC forzato è equivalente all’aggiunta di una transizione superabile in uscita da tutte le fasi che non devono diventare attive, e di una all’ingresso alle fasi che lo devono diventare. Nell’esempio la forzatura è intesa valida per tutta la durata della fase a cui è associata; potrebbe anche essere associata ad un solo istante di attivazione della fase (forzatura impulsiva). 62 Se la condizione indicata nell’azione di forzatura è l’insieme vuoto si parla di sospensione di un SFC. Il suo effetto è quello di disattivate tutte le fasi dell’SFC forzato. 11 11 a 2 Forza G2:{ } a Azione A 12 b Azione B 13 c Azione A 12 b X4 X4 Azione B 13 c X4 Figura 40: Esempio di forzatura 63 CAPITOLO 7 Scansione del PLC 64 La scansione del PLC Il PLC ha un funzionamento ciclico di tipo sequenziale; è in grado di eseguire le funzioni programmate con ripetitività, da quando viene alimentato e messo in stato di RUN fino a quando o lo si porta in stato di STOP e si toglie alimentazione oppure si presentino condizioni che generino situazioni di guasto o di errore, con conseguenti malfunzionamenti e fermate del ciclo. Il ciclo che compie è denominato ciclo di scansione, mentre il tempo che impiega a compierlo si chiama tempo di scansione. Ciascun PLC è costruito per operare secondo uno dei seguenti tipi di scansione: • sincrona di ingresso e di uscita; • sincrona di ingresso e asincrona di uscita; • asincrona di ingresso e di uscita. La scansione sincrona di ingresso e di uscita è schematizzata LETTURA DELLO STATO DI TUTTI GLI INGRESSI nella figura 18. Questo ciclo si configura in una lettura dello stato di tutti gli Memorizzazione nel registro immagine ingressi ingressi presenti, con successiva elaborazione sequenziale delle istruzioni del programma precedentemente stabilito; solo ELABORAZIONE SEQUENZIALE alla conclusione di questa fase avviene l’ attivazione delle ISTRUZIONI uscite. Memorizzazione risultati nel La CPU acquisisce tutte le informazioni riguardanti lo stato dei registro immagine uscite moduli di ingresso, una dopo l' altra, con una certa gerarchia ATTIVAZIONE SEQUENZIALE data dall' indirizzamento dei punti di input; lo stato logico di DI TUTTE LE USCITE questi input viene memorizzato nella parte di memoria dedicata (memoria dati), formando quindi una sorta di immagine dello stato logico di tutti gli ingressi. Fig. 18 - Scansione sincrona di ingresso Segue poi l' elaborazione del programma da parte della CPU; e di uscita durante questa fase gli stati delle uscite che man mano si determinano sono assegnati al registro immagine delle uscite, senza che siano inoltrati ai moduli di output. Solamente dopo l’ esecuzione dell’ ultima istruzione del programma tutte le uscite vengono effettivamente aggiornate, in modo sequenziale con gerarchia data dall’ indirizzamento dei punti di output. Terminato un ciclo, la scansione riprende dal primo passo, ripetendosi in continuazione; questo vale, ovviamente, finché il PLC è mantenuto in stato di RUN. Se durante lo svolgimento del ciclo appena descritto si verifica una variazione degli ingressi, è quasi certo che questa non potrà essere rilevata che all' inizio di una nuova scansione. Bisogna infatti considerare che la maggior parte del tempo di scansione è riservato all’ esecuzione delle istruzioni del programma, ed è quindi molto probabile che una modifica degli ingressi avvenga proprio durante questa fase; di conseguenza la CPU non potrà tenere conto di questo evento durante l’ elaborazione in corso. Il tempo di risposta, ovvero il tempo che passa tra la variazione degli ingressi e la corrispondente variazione delle uscite, è quindi di solito sempre superiore al tempo di scansione. L' inconveniente non si dimostra particolarmente grave per molte applicazioni, dato l' ordine di grandezza molto piccolo di questo tempo; è infatti di solito compreso tra 5 e 45 msec. a seconda della quantità di istruzioni contenute nel programma e del tipo di CPU. La scansione sincrona di ingresso ed asincrona di uscita é schematizzata in figura 19. 65 LETTURA DELLO STATO DI TUTTI GLI INGRESSI Memorizzazione nel registro immagine ingressi ELABORAZIONE SEQUENZIALE CON EMISSIONE PRIMO RISULTATO Memorizzazione risultato nel registro immagine uscite ATTIVAZIONE USCITA CORRISPONDENTE ELABORAZIONE SEQUENZIALE CON EMISSIONE SECONDO RISULTATO Memorizzazione risultato nel registro immagine uscite ATTIVAZIONE USCITA CORRISPONDENTE ELABORAZIONE SEQUENZIALE CON EMISSIONE ULTIMO RISULTATO Memorizzazione risultato nel registro immagine uscite ATTIVAZIONE USCITA CORRISPONDENTE Fig. 19 - Scansione sincrona di ingresso e asincrona di uscita Questo tipo di ciclo è sincrono di ingresso in quanto tutti gli input vengono letti contemporaneamente, ed asincrono di uscita poichè l' invio dei risultati alle uscite viene fatto in tempi diversi. Gli ingressi vengono letti tutti ed una sola volta all' inizio della scansione; le uscite vengono invece trasmesse all' esterno via via che maturano i risultati durante lo svolgimento del programma: ogni uscita viene perciò attivata nel momento in cui è stata elaborata la funzione logica ad essa assegnata. Con questo tipo di scansione si ha un aggiornamento delle uscite più rapido di quello che consente il ciclo precedente. Il terzo modo di operare è quello asincrono di ingresso e di uscita ed è schematizzato nella figura 20. Gli ingressi sono aggiornati ogni volta che durante lo svolgimento del programma la CPU incontra un’ istruzione che la obbliga a acquisirne lo stato. Se un bit del registro immagine delle uscite viene modificato durante l’ elaborazione, si ha un immediato invio dello stato logico risultante al modulo di output corrispondente. Questo modo di funzionamento di un PLC, molto simile a quello di un computer, consente di ottenere un tempo di risposta notevolmente ridotto rispetto ai primi due casi. 66 LETTURA DELLO STATO DI INPUT DELLA PRIMA SEQUENZA Memorizzazione nel registro immagine ingressi ELABORAZIONE DELLA PRIMA SEQUENZA Memorizzazione risultato nel registro immagine uscite ATTIVAZIONE USCITA CORRISPONDENTE LETTURA DELLO STATO DI INPUT DELLA SECONDA SEQUENZA Memorizzazione nel registro immagine ingressi ELABORAZIONE DELLA SECONDA SEQUENZA Memorizzazione risultato nel registro immagine uscite ATTIVAZIONE USCITA CORRISPONDENTE Si prosegue fino all' ultima sequenza Fig. 20 - Scansione asincrona di ingresso e di uscita La scansione non è che una delle attività svolte dalla CPU dal momento in cui viene alimentata; questa e tutte le altre funzioni possono essere effettuate grazie ad un sistema operativo, memorizzato su ROM, residente nella scheda processore. La figura 21 mostra un diagramma di flusso delle operazioni sequenziali che vengono compiute dalla CPU di un PLC OMRON Sysmac C20H; da notare che la fase di inizializzazione viene eseguita soltanto alla messa in tensione del PLC, mentre le altre operazioni sono svolte ciclicamente in modo ripetitivo. Generalmente i PLC hanno un timer di macchina, denominato watchdog (cane da guardia), che viene regolato ad un certo valore (tipicamente 150 msec.); questo congegno ha la funzione di fermare il ciclo se la scansione supera tale tempo massimo, onde evitare che si generino dei cicli di programmi ripetitivi (loop) dovuti a malfunzionamenti. Nel processo di scansione è piuttosto interessante definire la differenza esistente tra una situazione di errore e una di allarme; questa varia tra macchina e macchina, e ad essa si può risalire esclusivamente consultando il relativo manuale di funzionamento. Nel modello C20H una situazione di errore si verifica, ad esempio, nel caso di: - interruzione dell’ alimentazione per più di 10 msec.; - errore nella CPU, con watchdog timer superiore a 30 msec.; - errore nella memoria, derivante o da DIP switch male impostati o da EPROM non installata nel modo corretto; - mancanza dell’ istruzione di fine programma; - errore sul bus di collegamento con gli altri moduli; - errore di sistema, come tempo di scansione maggiore di 130 msec. Una situazione di allarme si verifica, ad esempio, nel caso di: - batteria scarica; - errore nell’ area di registrazione del setup; 67 - superamento del tempo di scansione a causa di errori nel programma. È importante che il tempo di scansione sia il più breve possibile, principalmente per due motivi: - avere un tempo di risposta del PLC il più ridotto possibile (indipendentemente dal tipo di scansione implementata sulla macchina); - evitare malfunzionamenti (per esempio alcuni timer rapidi non funzionano al meglio con tempi di scansione superiori ai 10 msec.). Nel ciclo di scansione vi sono delle operazioni precostituite sulle quali l’ operatore non può intervenire, e altre che invece hanno una durata variabile, a seconda del numero di moduli di I/O da scrutare e della lunghezza del programma. Al fine di aiutare l’ operatore nella scrittura di programmi compatti e veloci, i costruttori forniscono delle tabelle che riportano i tempi richiesti da ogni operazione che costituisce il ciclo di scansione. Cicli monotask, bitask, multitask INIZIO (Alimentazione ON) In genere un PLC è equipaggiato con un Inizializzazione microprocessore che gestisce il ciclo di scansione della macchina; in gergo Processi comuni questo tipo di logica programmabile viene denominata monotask poiché risulta essere uno solo il lavoro Esecuzione del (programma) da programma eseguire. TEMPO DI SCANSIONE DEL PLC Si sono sviluppate recentemente anche Controllo del tempo di scansione macchine bitask che possono lavorare su due programmi, che vengono Rinfresco I/O immagazzinati in due ipotetici contenitori chiamati task master e Gestione dispositivi periferici task fast. La task master contiene il Fig. 21 - Diagramma di flusso della scansione di un PLC lavoro che il PLC deve eseguire correntemente; OMRON C20H la task fast (rapida) è invece destinata alle elaborazioni di breve durata con tempi di risposta brevi ( < 2 msec.), e viene attivata su eventi esterni oppure interni al PLC o ancora in modo periodico. La comparsa di una situazione particolare (per esempio input su ingressi rapidi, raggiungimento valore di preselezione di contatore rapido o del temporizzatore rapido), interrompe la normale scansione in task master e attiva la task rapida; il PLC esegue il piccolo programma custodito nella task fast, per poi tornare al punto in cui si era interrotto nella task master e proseguire il AZZERAMENTO AREE DATI TEST DI TUTTE LE UNITA' DI I/O RESET WATCHDOG TIMER TEST HARDHARE E MEMORIA DI PROGRAMMA TEST = OK ? SET FLAG DI ERRORE ACCENSIONE LED SEGNALAZIONE ALL. ERRORE O ALLARME ? RESET WATCHDOG TIMER E PROGRAM COUNTER ERR. ESECUZIONE PROGRAMMA NO FINE ESECUZIONE ? SI CALCOLO TEMPO DI SCANSIONE E ATTESA RESET WATCHDOG TIMER RINFRESCO I/O GESTIONE INTERFACCIA RS232C GESTIONE DISPOSITIVI PERIFERICI 68 ciclo normale1. Questa architettura è dunque in grado di intervenire in modo opportuno rispetto a problematiche diverse, anche se la gestione delle due task è affidata a un unico processore. Se la modalità bitask può essere sufficientemente apprezzabile per risolvere determinate situazioni, risulta insufficiente per livelli di gestione più complessi; non è in grado, infatti, di risolvere i problemi che intervengono qualora dovessero essere gestiti contemporaneamente più avvenimenti di carattere diverso. Rimane comunque validissima l' applicazione dei sistemi a interrupt per la gestione di situazioni di allarme, dove la task master viene interrotta momentaneamente per eseguire il programma (in task fast) che risolve o semplicemente segnala l’ anomalia. A livelli di gestione di automazioni medio - alte, l' architettura monotask o bitask non è più in grado di svolgere le operazioni complesse necessarie, ed ecco allora una evoluzione ulteriore dei PLC: la struttura multitask, progettata per una gestione dei sistemi automatici più integrata e completa. La sua configurazione vede da una parte la presenza di più task, ognuna dedicata a funzioni diverse, che possono essere eseguite simultaneamente, grazie a un' architettura hardware multiprocessore. La struttura multitask prevede una serie di task indipendenti governate da una. task principale; tra queste si possono ricordare: - task master, - task di interrupt, - task rapida, - task ausiliaria, - task sistema. In ciascuna task si potranno dichiarare dei moduli di I/O non configurati in altre task; in questo modo si potranno avere scansioni molto più veloci in quanto ogni task scandirà solo gli I/O che gli interessano e non tutti quelli presenti, abbreviando notevolmente i tempi di risposta. RIASSUMENDO: LETTURA DELLO STATO DI TUTTI GLI INGRESSI Memorizzazione nel registro immagine ingressi ELABORAZIONE SEQUENZIALE ISTRUZIONI Scansione sincrona di ingresso e di uscita Memorizzazione risultati nel registro immagine uscite ATTIVAZIONE SEQUENZIALE DI TUTTE LE USCITE Da questo diagramma di flusso possiamo vedere e sopratutto capire come funziona o come “ragiona” un PLC 1 Questa modalità di funzionamento è quindi del tutto simile a ciò che avviene in un microprocessore quando è chiamato a gestire una richiesta di interrupt. 69 Una cosa scontata ma fondamentale è che il plc esegue il ciclo di scansione solo quando il suo modo di funzionamento è su RUN o su PROGRAM, mai quando è su STOP. Questi stati , a seconda del plc , sono selezionati da un selettore fisico posto sul plc o da un comando impartito tramite il computer direttamente collegato al PLC per la programmazione. La prima operazione che compie è la lettura degli ingressi, e con questo intendiamo proprio tutti , digitali , analogici, on board o su bus di campo (su schede remotate ovvero collegate al plc tramite una rete di comunicazione). Dopo aver letto tutti gli ingressi , il loro stato viene memorizzato in una memoria definita REGISTRO IMMAGINE DEGLI INGRESSI. A questo punto viene elaborato il programma. Le istruzioni di comando vengono elaborate in Sequenza dalla cpu. Al termine dell'elaborazione, il risultato viene memorizzato nel REGISTRO IMMAGINE DELLE USCITE. Infine , il contenuto dell'immagine delle uscite viene scritto sulle uscite fisiche ovvero le uscite vengono attivate. Poichè l'elaborazione delle istruzioni si ripete continuamente, si parla di elaborazione ciclica, Il tempo che il controllore impiega per una singola elaborazione delle istruzioni del programma, è denominato tempo di ciclo . Quest'ultimo è costantemente controllato da un apposito sistema definito watchdog, che al superamento del tempo massimo preimpostato causa un allarme che pone il plc nello stato di STOP. MODALITÀ CICLICA LETTURA RETE INGRESSI AGGIORNAMENTO USCITE TEMPO DI ATTESA ESECUZIONE PROGRAMMA IN SEQUENZA •LETTURA INGRESSI •ESECUZIONE PROGRAMMA •TEMPO DI ATTESA •AGGIORNAMENTO USCITE •GESTIONE DELLA RETE TEMPO DI SCANSIONE INTERVALLO DI TEMPO NECESSARIO PER ESEGUIRE UN CICLO DEL PROGRAMMA 70 LETTURA DELLO STATO DI TUTTI GLI INGRESSI Memorizzazione nel registro immagine ingressi ELABORAZIONE SEQUENZIALE CON EMISSIONE PRIMO RISULTATO Memorizzazione risultato nel registro immagine uscite ATTIVAZIONE USCITA CORRISPONDENTE ELABORAZIONE SEQUENZIALE CON EMISSIONE SECONDO RISULTATO Scansione sincrona di ingresso e asincrona di uscita Memorizzazione risultato nel registro immagine uscite ATTIVAZIONE USCITA CORRISPONDENTE ELABORAZIONE SEQUENZIALE CON EMISSIONE ULTIMO RISULTATO Memorizzazione risultato nel registro immagine uscite ATTIVAZIONE USCITA CORRISPONDENTE LETTURA DELLO STATO DI INPUT DELLA PRIMA SEQUENZA Memorizzazione nel registro immagine ingressi ELABORAZIONE DELLA PRIMA SEQUENZA Memorizzazione risultato nel immagine uscite ATTIVAZIONE USCITA CORRISPONDENTE LETTURA DELLO STATO DI INPUT DELLA SECONDA SEQUENZA Scansione asincrona di ingresso e di uscita Memorizzazione nel registro immagine ingressi ELABORAZIONE DELLA SECONDA SEQUENZA Memorizzazione risultato nel immagine uscite ATTIVAZIONE USCITA CORRISPONDENTE Prosecuzione fino all' ultima sequenza 71 CAPITOLO 8 Linguaggio AWL 72 Linguaggio AWL Linguaggio a lista di istruzioni La lista di istruzioni (AWL) è un linguaggio di programmazione in cui ogni istruzione include un'operazione che usa un'abbreviazione mnemonica per rappresentare una funzione del controllore programmabile. La combinazione di queste operazioni in un programma utente produce la logica di controllo per la propria applicazione. Se il vostro programma è stato scritto nel linguaggio di programmazione KOP, il dispositivo di programmazione crea una lista corrispondente delle operazioni in AWL necessarie a realizzare lo schema a contatti. Nella figura 1 è riportato l'esempio di un programma, scritto in lista di istruzione, nel quale sono evidenziate le caratteristiche principali. Ogni commento inizia con due barrette oblique // //Programma per trasportatore NETWORK 1 LD I0.0 AN I0.1 = Q0.0 //Avvio motore; //Se I0.0 è attivo (on) //E se I0.1 non è attivo (off) //Inserisci motore del trasportatore NETWORK 2 LD I0.1 O I0.3 R Q0.1 //Stop di emergenza per trasportatore: //Se I0.1 è attivato (on) //O se 10.3 è attivato (on) //Disinserisci motore del trasportatore Fig. 1 Programma in lista di istruzioni. Per creare il programma in lista di istruzioni occorre conoscere come le CPU S7-200 adoperano lo stack a nove bit per risolvere la logica. Lo stack, rappresentato nella figura 2, si può immaginare come un vettore monodimensionale di celle i cui valori contenuti (0 e 1) corrispondono agli stati logici intermedi di un segmento corrispondente in linguaggio a contatti. Lo stack logico ha una profondità di nove bit ed una larghezza di un bit. Tutte le operazioni lavorano con il primo o con il secondo bit dello stack. I nuovi valori possono essere introdotti (o aggiunti) nello stack. Se i due bit più alti dello stack vengono combinati, viene prelevato dallo stack il valore più alto e collocato al suo posto il valore successivo.La figura 3 mostra lo stack a nove bit di una cpu S7-200; 73 Fig. 2 Fig.3 La maggior parte delle operazioni AWL sono di sola lettura dei valori dello stack logico, ma vi è un discreto numero di esse che modificano altresì i valori memorizzali nello stack logico. Di seguito vi sono alcuni esempi di utilizzo dello stack logico da parte di istruzioni AWL. In questi esempi, le sigle da "aw0" ad "aw8" identificano i valori iniziali dello stack logico, la sigla "nw" identifica un nuovo valore fornito dall'istruzione, mentre "SO" identifica il valore calcolato che è memorizzato nello stack logico. Le operazioni booleane standard utilizzate in questi esempi sono le operazioni AND (moltiplicazione logica) ed OR (somma logica). Operazione LD L'operazione di caricamento (LD) carica il valore di un contatto nella sommità dello stack logico. Nella figura 4 è rappresentata la logica di funzionamento dell'istruzione. Carica un valore nuovo (nw) nello stack. I valori iniziali vanno da aw0 ad aw8. 74 PRIMA DOPO Fig.4 N.B.:aw8 va perso! Operazioni A,O,ALD,OLD e di assegnamento(=) Le operazioni "Combina il valore dì bit tramite AND" (A) e "Combina il valore di bit tramite OR" (O) combinano il valore di un contatto con il valore della sommità dello stack. Il risultato diventa il nuovo valore alla sommità dello stack. Le operazioni "Combina il primo ed il secondo livello tramite AND" (ALD) e "Combina il primo ed il secondo livello tramite OR" (OLD) combinano i due valori alla sommità dello stack. Il risultato della combinazione logica diventa il nuovo valore alla sommità dello stack. L’operazione "Assegna" (=) copia il valore alla sommità dello stack nel bit di destinazione specificato.Nella figura 5 sono rappresentati alcuni esempi di queste istruzioni. A ( oppure U) O Combina il valore nuovo(nw) con il valore Combina i valori del nuovo(nw) con il Della sommità dello stack tramite AND valore della sommità dello stack tramite I valori iniziali vanno da aw0 ad aw8 OR .I valori iniziali vanno da aw0 ad aw8 PRIMA DOPO PRIMA DOPO S0= aw0 * nw 75 ALD (oppure ULD) PRIMA DOPO OLD PRIMA DOPO S0 = aw0 * aw1 N.B. X può essere 0 o 1! = Copia il valore alla sommità dello stack nella specificata. Tramite questa operazione lo stack rimane immutato destinazione Le operazioni “Duplicazione logica” (LPS), “Copiatura logica” (LRD) e “Prelevamento logico”(LPP), eseguono operazioni speciali con il valore superiore dello stack.L'operazione di duplicazione logica duplica e colloca il valore alla sommità dello stack. L'operazione di copiatura logica copia aw1 in aw0 senza spostare lo stack. L'operazione dì prelevamento logico preleva aw0 e sposta lo stack. Nella figura 6 sono rappresentati alcuni esempi di queste istruzioni. LPS Duplicazione logica PRIMA DOPO 76 LRD Copiatura logica PRIMA DOPO LPP Prelevamento logico PRIMA DOPO Operazioni di stack: NOT, EU, ED Le operazioni "Negazione del valore superiore" (NOT). "Rilevamento del fronte di salita" (EU) e "Rilevamento del fronte di discesa" (LPP) eseguono operazioni speciali con il valore superiore dello stack. L'operazione di negazione del valore superiore invece (nega) il valore superiore dello stack. L'operazione di rilevamento del fronte di salita rileva una transizione da 0 a 1 da un ciclo di scansione all'altro e imposta ad 1 il valore alla sommità dello stack quando tale transizione viene rilevata. L'operazione di rilevamento del fronte di discesa rileva una transizione da 1 a 0 da un ciclo di scansione all'altro e imposta ad 1 il valore alla sommità dello stack quando tale transizione viene rilevata. La CPU S7-200 memorizza ogni operazione di rilevamento di fronte in un bit. In questo bit viene immagazzinato il valore che nel ciclo precedente, prima dell'operazione di rilevamento di fronte, si trovava alla sommità dello stack. Nella figura 7 è rappresentato il funzionamento logico dell’istruzione NOT. PRIMA DOPO Fig 7 Confronto tra linguaggio AWL e KOP Nelle figure 8 e 9 sono riportati due semplici esempi realizzati in linguaggio KOP ed in AWL. Ne primo esempio se l'ingresso I0.0 si attiva. la bobina di uscita Ql.O viene eccitata. Nel secondo, l’eccitazione della bobina Q 1.0 è determinata sia dalla presenza del segnale di ingresso I0.0. sia dalla presenza contemporanea dei segnali I0.1 ed I0.2. KOP AWL Fig.8 LD I 0.0 Carica I0.0 nello stack =Q1.0 Copia aw0 in Q1.0 77 DOPO DOPO KOP AWL LD I 0.0 LD I0.1 DOPO DOPO LD I0.2 S0=I0.1*I0.2 DOPO OLD =Q1.0 S0’=S00+I00 DOPO DOPO Principali istruzioni AWL L'utente ha la possibilità di selezionare la visualizzazione del programma nel linguaggio KOP o AWL. Non essendoci una corrispondenza uno a uno tra i programmi AWL e KOP, la 78 visualizzazione KOP può variare per taluni aspetti dalla originaria visualizzazione AWL. Ogni segmento AWL che non può essere convertito in una visualizzazione KOP viene definito "Segmento non ammesso" nella stessa visualizzazione KOP. Le principali istruzioni AWL sono riassunte negli esempi seguenti. 1. Combina il valore di bit tramite AND. L'operazione "Combina il valore di bit tramite And" (A) esegue una combinazione logica tramite And del valore bit dell'indirizzo n con il valore superiore dello stack logico. Il risultato diventa il nuovo valore superiore dello stack. Esempio: LD I0.1 A I0.2 = Ql.0 2. Combina il valore di bit negato tramite And. L'operazione "Combina il valore di bit negato tramite And" (AN) esegue una combinazione logica tramite And negato del valore bit dell'indirizzo n con il valore superiore dello stack logico. Il risultato diventa il nuovo valore superiore dello stack. Esempio: LD I0.1 AN I0.2 = Ql.0 3. Carica il valore del bit negato. L’operazione “Carica il valore del bit negato”(LDN) carica il valore del bit negato all’indirizzo n alla sommità dello stack logico.Gli altri valori bit dello stack discendono di un livello. Esempio: LDN I0.1 AN I0.2 = Q1.0 4. Combina il valore di bit negato tramite OR. L’operazione “Combina il valore di bit negato tramite OR” (ON) esegue una combinazione logica OR NOT del valore di bit dell’indirizzo di ingresso n con il valore superiore dello stack logico. Il risultato diventa il nuovo valore superiore alla sommità dello stack. Esempio: LD I1.1 ON I1.2 = Q1.1 5. Resetta ed imposta L’operazione “Resetta ed imposta”,resetta un campo di valori bit. I valori bit di 0 vengono scritti in un campo che inizia da S_BIT per il numero di uscite specificato da N. Se S_BIT viene indicato come un bit T o Z. vengono resettati a 0 sia il bit di temporizzazione e di conteggio che il valore attuale di temporizzazione e di conteggio. L'operazione "Imposta" (S) setta un campo di valori bit.I valori bit di 1 vengono scritti in un campo che inizia dall'indirizzo S_BIT per il numero di uscite specificato da N. Esempio: 79 LD = S R R I0.0 Q2.0 Q2.1,1 Q2.2,1 Q1.0,3 //Setta S_Bit,N //Setta S_Bit,N Esempi con le istruzioni di base Nella figura10 è riportato un esempio di impiego dell'istruzione AND. La combinazione logica AND è caratterizzata dalla contemporanea esecuzione di condizioni diverse in modo tale che, se due contatti sono collegati in serie tra loro, l'uscita sarà attiva soltanto quando entrambi saranno nello stato logico alto (on). LD A = I0.0 I0.1 Q0.0 Fig.10 Nella figura11 è riportato un esempio di impiego dell’istruzione OR. La combinazione logica OR verifica se è soddisfatta una, due o pi condizioni.E’ il tipico caso di più contatti collegati in parallelo che azionano un uscita. LD O = I0.2 I0.3 Q0.1 Fig.11 Nella figura 12 è riportato un esempio di impiego dell’istruzione AND prima di un istruzione OR.E’ il tipico caso di circuiti che prevedono lochi di contatti in serie da collegarsi in parallelo. Nella figura i due contatti I0.0 ed I0.1 ed i due contatti I0.2 ed I0.3, sono collegati in serie. I due blocchi sono poi collegati in parallelo ed attivano l’uscita Q0.2. 80 LD A LD A OLD = I0.0 I0.1 I0.2 I0.3 Q0.2 Fig.12 Nella figura 13 è riportato un esempio di impiego dell’istruzione OR prima di un istruzione AND.E’ il tipico caso di circuiti che prevedono contatti in parallelo (OR) da collegarsi in serie (AND) con altri blocchi di contatti. LD O LD O ALD = I0.0 I0.2 I0.1 I0.3 Q0.3 Fig.13 Nella figura 14 è riportato un esempio di realizzazione di una marcia con autoritenuta eseguita con le istruzioni AWL. Nell'esempio, l'ingresso I0.0 è quello di start, mentre lo stop è rappresentato dall'ingresso I0.1. L'uscita attivata è la bobina Q0.4. LD O A = I0.0 Q0.4 I0.1 Q0.4 Fig.14 Nella figura15 è riportato un esempio di impiego delle istruzioni di set e reset. La funzione di autoritenuta della figura 14 è svolta, in questo esempio, con le funzioni di set e reset. Con l'ingresso I0.2 si setta l'uscita, con l'ingresso I0.3 si resetta l'uscita. In questo caso è la funzione di 81 reset ad avere il predominio sul set della bobina in caso di segnali che giungano dai due ingressi contemporaneamente. LD S LDN R Fig.15 82 I0.2 Q0.5,1 I0.3 Q0.5,1 CAPITOLO 9 Piramide CIM 83 Piramide CIM Quando si parla di automazione industriale o di controllo di processo,nelle loro accezioni più semplici,ci si riferisce alla presenza di celle di lavorazione automatizzate dedicate all’esecuzione di singole lavorazioni, le quali risultino essere ripetitive e/o pericolose per l’uomo. Tale presenza, permette inoltre,di avere qualità superiore e costi inferiori per quei prodotti. Questo tipo di approccio, però, porta alla realizzazione di isole di automazione non integrate tra di loro,in quanto si affrontano ogni volta i problemi specifici alla singola lavorazione; tali isole vengono realizzate, inoltre,mediante dispositivi di controllo eterogenei tra di loro,con protocolli di comunicazione spesso incompatibili. Questo modello di automazione assicura comunque l’ottenimento di numerosi vantaggi tra i quali l’aumento di produttività generale,la flessibilità,una qualità più uniforme del prodotto. E’ intuitivo prevedere che un miglioramento di tale situazione si possa ottenere attraverso una maggiore integrazione tra i sottosistemi a livello aziendale,realizzata attraverso una progettazione metodica dell’intero sistema informatico,che comporti l’utilizzo di dispositivi di controllo,il più possibile standardizzati,la gestione dei flussi di informazione tra i vari dispositivi, e il coordinamento tra tutti i fattori di produzione,compreso l’uomo stesso. L’essere umano,infatti,non viene eliminato dalla produzione,ma è utilmente impiegato nel ruolo di gestore,supervisore e manutentore dei sistemi automatizzati. I vantaggi che si possono ottenere da questa diversa impostazione dell’automazione,che prevede l’integrazione fra i sottosistemi di produzione,sono molteplici. Tra i più importanti ricordiamo: • il migliore utilizzo delle risorse,pianificando anche in tempo reale i processi produttivi; • la massima flessibilità di produzione,essendo il sistema adeguabile a nuove lavorazioni in tempi brevi; • la riduzione dei tempi di produzione; • il miglioramento della progettazione dei prodotti,fornendo alle macchine informazioni non ambigue; • l’identificazione,il riutilizzo delle informazioni relative ai prodotti; • il miglioramento dei controlli sulla produzione e della qualità degli stessi controlli,permettendo di controllare ogni prodotto invece di alcuni campioni; • la riduzione degli scarti di lavorazione; • la riduzione delle scorte di materie prime e dei magazzini per i prodotti finiti,gestendo la cosiddetta produzione “Just in time” Ciò che è stato appena descritto è quello che di solito viene indicato con la sigla CIM(Computer Integrated Manufacturing,produzione integrata tramite elaboratori) La logica CIM: Definizione Impiego articolato e cooperante della tecnologia informatica nei processi di: • progettazione, • produzione, • distribuzione, per acquisire un durevole vantaggio competitivo. Ambito Tutte le funzioni dell’impresa che possono: • essere assistite dall’elaboratore, 84 • • essere automatizzate e quindi eseguite e controllate dall’elaboratore, con un alto livello di integrazione. La piramide CIM Livello 0: sensori, attuatori, tools legati al processo esecutivo Livello 1: sistemi industriali che comandano direttamente i processi al livello 0 (comando individuale delle macchine e del processo – controllo di macchina) Livello 2: workshop computer (comando centralizzato delle macchine e del processo – controllo di cella) Livello 3: high performance computer per il management e la supervisione delle unità di processo (gestione della produzione – controllo di area) Livello 4: mainframe per il governo del management, gestione commesse e amministrazione centrale delle attività di fabbrica (pianificazione della gestione globale) Livello 0: sensori/attuatori E’ costituito dall’insieme dei sensori e degli attuatori, ossia dai dispositivi di campo che vengono interfacciati direttamente all’impianto industriale costituendo la sezione di ingresso – uscita del sistema di controllo. La funzione del livello 0 è quella di riportare al livello sovrastante le misure di processo e di attuare i comandi ricevuti da esso. Il livello di intelligenza richiesto ai dispositivi di campo è limitata, dovendo essi soltanto trasdurre grandezze fisiche di varia natura (es. temperatura, pressione, tensione, ecc.) a segnali tipicamente di tipo elettrico (corrente e tensione) e viceversa. E’ bene notare come sia crescente la tendenza di dotare sensori ed attuatori di intelligenza dedicata anche alla gestione di una interfaccia di comunicazione digitale e seriale. Livello 1: Controllo di macchina E’ costituito dai controllori, solitamente di tipo automatico o semiautomatico, interfacciati con i sensori e gli attuatori dei dispostivi meccanici facenti parte di una stessa unità operatrice. Le apparecchiature del livello 1 sono i controllori a logica programmabile (PLC, Programmable Logic Controller), semplici sistemi di controllo distribuito (DCS, Distributed Control System), centri di lavorazione a controllo numerico (CNC, Computer Numeric Controller). Le funzioni cui il controllo di macchina è preposto sono la regolazione diretta delle variabili e la realizzazione sequenziale di operazioni; tali operazioni non sono in genere molto complesse, ma devono essere coordinate con quelle fatte eseguire alle altre macchine attraverso l’operato del livello superiore. 85 Livello 2: Controllo di cella I controllori costituenti questo livello regolano il funzionamento di tutte le macchine operatrici costituenti una cella di lavoro attraverso la comunicazione con i relativi controllori; le operazioni svolte a questo livello sono analoghe a quelle del livello 1 risultando soltanto più complesse e a maggior spettro in varietà e dimensioni. In modo analogo i controllori PLC e DCS del livello 2 sono più potenti in termini di capacità elaborativa, memoria, comunicazione, ecc.; crescente interesse, soprattutto dal punto di vista economico, rivestono le moderne soluzioni di automazione basate su Personal Computer (PC). Livello 3: Controllo di area E’ costituito dal sistema di supervisione, controllo e acquisizione dati (Supervisory Control And Data Acquisition SCADA); le apparecchiature su cui sono implementate le piattaforme software sono tipicamente Work Station o PC nelle applicazioni più semplici. Le funzioni svolte a livello 3 sono quelle legate alla gestione dell’intero processo controllato: gestione operativa intesa come impostazione del lotto da produrre o dei cicli di lavorazione, gestione delle situazioni di allarme, analisi dei risultati, ecc. Il controllo di area differisce sostanzialmente da quello di macchina e di cella, in quanto i requisiti di elaborazione real-time sono fortemente ridotti; le funzioni infatti che devono essere svolte a questo livello sono fortemente dipendenti dall’operatore eventualmente coadiuvato da sistemi automatici di tipo gestionale che però lavorano su orizzonti temporali e con obiettivi completamente differenti. Restano invece molto importanti i tempi di risposta dell’intero sistema per quanto concerne la rilevazione e segnalazione di eventuali situazioni di allarme in cui l’operatore può e deve essere in grado di prendere provvedimenti. Livello 4: Gestione globale E’ quello della gestione azienda, potendo l’azienda essere composta da più stabilimenti. In questo livello sono raccolte le informazioni dal livello inferiore per realizzare sistemi di supporto alla decisione che aiutino gli amministratori a pianificare i flussi fisici (materiali) e finanziari (investimenti) necessari al mantenimento dei livelli di produzione e al loro eventuale miglioramento. 86 CAPITOLO 10 Reti di Comunicazioni 87 Reti per l'automazione Le reti informatiche, rispetto agli altri possibili metodi, hanno il vantaggio di poter far colloquiare tra loro apparecchiature diverse sia per tecnologia costruttiva (hardware) sia per funzionalità espletate (software), e di poter aggiungere o rimuovere apparecchiature al sistema senza dover necessariamente interrompere la produzione. È quindi opportuno richiamare i concetti principali su cui si basano le reti informatiche, descrivendone le varie funzionalità anche rispetto ai possibili impieghi. Un tecnico che lavori nel settore dell'automazione ha, infatti, la necessità di utilizzare le reti piuttosto che quella di progettare i dispositivi hardware e software che le fanno funzionare; egli le saprà utilizzare al meglio, in ogni modo, solo se avrà compreso i concetti che ne regolano il funzionamento. Il modello OSI Il modello di riferimento per le reti informatiche è il modello OSI (Open System Interconnection) elaborato dalla ISO {International Standards Organization). Bisogna tener presente che esso è un modello di riferimento per i produttori di reti informatiche piuttosto che la descrizione di una rete reale. Con riferimento alla Figura 1, in tale modello ogni nodo della rete è visto come una successione gerarchica di sette livelli. Ogni livello comunica direttamente solo con il livello immediatamente sottostante (richiedendo dei servizi) e immediatamente sovrastante (fornendo dei servizi) per mezzo dì interfacce. Lo standard definisce quindi i servizi che ogni livello deve fornire e quelli che può richiedere, e non come questi vengono poi effettivamente implementati. Il primo che incontriamo partendo dal basso è il livello 1, o livello fisico, che si occupa della trasmissione di sequenze binarie tra due nodi. Esso comprende la definizione Figura 1 dei collegamenti meccanici ed elettrici trai nodi insieme ai driver software per le porte di comunicazione (per esempio, i collegamenti meccanici ed elettrici potrebbero uniformarsi allo standard RS232). La definizione di questo livello fissa quindi alcuni parametri della rete, come la velocità e le modalità di trasmissione dei bit. Questo è l'unico livello in cui vi è un'effettiva connessione tra due nodi. 88 Il secondo livello è il livello del collegamento dati ed è, come quelli che seguono, realizzato via software. In questo livello viene verificato il corretto passaggio tra i nodi delle sequenze di bit organizzate in strutture standard dette frame. Tali frame sono composti in partenza, aggiungendo dei codici di controllo all'informazione da trasmettere, e verificati in arrivo; in caso di errore è possibile recuperare le sequenze correggendole, quando possibile, o eventualmente richiedendone la ritrasmissione. Il compito di questo livello è quello di assicurare ai successivi una trasmissione dei dati senza errori tra i nodi interconnessi. In questo livello viene anche definito come i differenti nodi possono accedere al mezzo di trasmissione senza interferire tra loro (metodo di accesso). Il terzo livello, il livello di rete, garantisce un sentiero logico anche tra due nodi non direttamente connessi. In tale livello vengono quindi definite le caratteristiche della rete dal punto di vista della sua gestione e vengono implementate le funzioni di instradamento e di interconnessione tra i nodi. Il livello successivo, livello 4 o livello di trasporto, permette di realizzare funzioni di trasporto dell'informazione che siano indipendenti dalla struttura della rete. Questo livello assicura il trasferimento dei messaggi in maniera affidabile, accertandosi dell'integrità del messaggio ricevuto, composto da più sequenze di bit (pacchetti), e ritrasmettendolo in caso di necessità. Esso realizza l'interfaccia tra la rete e il software applicativo dei successivi tre livelli. Passando al livello 5, o livello di sessione, si entra nell'area utente. Questo livello gestisce lo scambio ordinario dei dati e il sincronismo tra i nodi, rendendo possibile la connessione remota. Questo livello comprende quindi le funzioni necessarie a supportare lo scambio di informazioni tra differenti macchine, permettendo l'apertura, la gestione e la chiusura di un canale di comunicazione. Il livello 6, o livello di presentazione, è quello in cui avviene la codifica delle informazioni e la loro conversione: i dati binari in sequenza sono collegati al loro significato e rappresentali in forma di testi, figura o altro. L'ultimo livello, il livello 7 o livello di applicazione, fornisce interfacce e servizi ai programmi applicativi come il trasferimento di file tra nodi, la possibilità di operare su database distribuiti, la capacità di controllo remoto delle macchine. È importante ricordare che l’effettiva connessione fisica tra i nodi esiste solo al livello fisico; per tutti gli altri livelli si può comunque supporre l'esistenza di una connessione virtuale. Ogni livello può quindi interagire direttamente con il precedente e il successivo sullo stesso nodo e virtualmente con l'omologo livello situato su altri nodi (attraverso i livelli sottostanti in ambedue i nodi). Le principali caratteristiche che differenziano tra loro le differenti realizzazioni delle reti informatiche locali, cioè quelli in cui lutti i nodi sono fisicamente connessi tra dì loro, sono la topologia, il mezzo di trasmissione e il protocollo di accesso. La topologia La topologia definisce l’architettura fisica della rete,ossia come i vari nodi sono collegati tra loro. Un primo esempio di topologia è quella bus,o ad anello aperto, che non comporta problemi per l’aggiunta o l’eliminazione di nodi, poiché le informazioni viaggiano in maniera indipendente;lo svantaggio principale è che esiste un unico instradamento possibile tra i nodi. Un altro esempio è il rung, o anello chiuso,in cui i messaggi attraversono i nodi;questi ultimi devono essere n grado di identificare a chi è stato trasmesso il messaggio ed eventualmente rispedirlo. Altra tipologia è quella a stella,in cui c’è un nodo primario connesso direttamente a tutti gli altri nodi; tutti i messaggi tra i nodi devono necessariamente passare per il nodo primario. Sono comunque possibili tipologie ibride. 89 Possibili tipologie di reti Il mezzo di trasmissione Il mezzo di trasmissione definisce il supporto fisico attraverso cui passano le informazioni ed è quindi chiaro come le sue caratteristiche possano influenzare direttamente le prestazioni della rete. Il mezzo di trasmissione più semplice è il doppino intrecciato, o twisted pair, formato da due conduttori isolali e che può essere schermato o no. L'utilizzo del doppino limita la massima distanza di collegamento a qualche centinaio di metri e la velocità di trasmissione a qualche Mbit/s: esso presenta, intatti, un'impedenza elettrica irregolare e una scarsa immunità ai disturbi. Risulta però molto conveniente per la facilità di installazione e l'economicità. Il cavo coassiale, un conduttore centrale con uno schermo, risolve i problemi del doppino ma costa di più ed è di più difficile installazione. Esso può anche sostenere più canali di trasmissione modulati a frequenze diverse, data la sua larghezza di banda passante. La fibra ottica, che permette la trasmissione di informazione utilizzando segnali luminosi, è il mezzo di trasmissione migliore soprattutto nei riguardi della velocità di trasmissione, dell'immunità ai disturbi e della possibilità di avere canali multipli. Essa però è molto costosa e la sua installazione è laboriosa e riservata a personale altamente specializzato. Il metodo di accesso Il metodo di accesso è una delle funzioni implementate al livello 2 collegamento dati, e deve definire due aspetti nell'utilizzo della rete: 1. in ricezione, determinare a quali nodi è effettivamente destinato il messaggio e quale nodo lo ha generato; 2. in trasmissione evitare confìitti tra più nodi che vogliano contemporaneamente utilizzare il canale di trasmissione. Per la risoluzione del primo problema, il metodo di accesso definisce un indirizzo univoco a livello mondiale, che viene scritto in una memoria non volatile dal costruttore dell'interfaccia di rete. È a volte possibile definire un indirizzo custom. Il metodo di accesso passerà alle altre funzioni di livello 2 il messaggio presente sul canale solo se riconosce il suo indirizzo. Per la risoluzione dei conflitti in trasmissione esistono varie tecniche; nel seguito si descriveranno le più diffuse. 90 Un metodo di accesso centralizzato, o polling o master/slave, prevede l'esistenza di un nodo principale (master) che interroga sistematicamente gli altri nodi (slave). Si tratta di un metodo deterministico e affidabile ma non consente alte velocità di trasmissione ne la possibilità di dare priorità di accesso; è comunque un metodo semplice da gestire e implementare Un metodo di accesso a gettone prevede l'esistenza di una particolare stringa di bit, il token o gettone, che viene passata in sequenza tura tutti i nodi della rete: quando una stazione riceve il token può trasmettere ma, in ogni caso, non lo può trattenere oltre uno specificato periodo di tempo. Si tratta di un metodo di accesso deterministico, nel senso che è calcolabile il tempo massimo necessario affinchè due nodi possano comunicarsi un messaggio. Altro metodo di accesso è il CSMA/CD (acronimo di Carrier Sense, Multiple Access/Collision Detection). Secondo questo metodo ogni nodo, prima di trasmettere, ascolta la portante presente sul mezzo di trasmissione per essere sicuro che il canale sia libero. Questo non assicura che più nodi non cerchino di trasmettere contemporaneamente e, quindi, durante la trasmissione, il nodo che trasmette rimane in ascolto per rilevare eventuali collisioni; se ve ne sono state, il nodo ritrasmette il messaggio dopo un periodo di tempo variabile determinato casualmente. Il problema principale di questo tipo di metodo di accesso è di non essere deterministico; inoltre la sua efficienza dipende dalla probabilità che si verifichino collisioni e,perciò, dal numero di nodi collegati. Il metodo di accesso CSMA/BA (acronimo di Carrier Sense, Multiple Access/Bit Ar-bitration) prevede anch'esso che i nodi, se rilevano libero il canale di trasmissione, possano accedervi indipendentemente, potendo quindi generare dei conflitti. Il meccanismo di risoluzione dei conflitti non è però distruttivo del messaggio: ogni trasmissione inizia con una fase di arbitraggio (sequenze particolari di bit) che permette, in caso di collisione, di riservare il canale al nodo a priorità maggiore. Un ulteriore metodo di accesso è quello a divisione di tempo. In questo metodo a ogni nodo viene concesso ciclicamente un intervallo temporale in cui può trasmettere le informazioni. E’ un metodo che assicura il pieno determinismo ma è di più difficile implementazione per la necessità di avere una sincronizzazione temporale tra tutti i nodi. Si noti che al nodo viene concesso un intervallo temporale per la trasmissione anche se non ha comunicazioni da effettuare. Una variante del metodo di accesso a divisione di tempo è quello del produttore/consumatore. In questo metodo uno dei nodi è l'arbitro della rete; vengono identificati i nodi che sono produttori di un certo tipo di informazioni e quelli che ne sono consumatori. L'arbitro della rete, piuttosto di abilitare o meno i singoli nodi alla trasmissione, consente la comunicazione di una certa informazione, implicitamente abilitando il suo produttore a trasmetterla e i suoi consumatori a riceverla. La sequenza con cui le informazioni sono abilitate ad essere trasferite fissa anche i tempi di aggiornamento dell'informazione, assicurando il determinismo della rete. in questo metodo non vi è bisogno di trasmettere indirizzi, oltre al messaggio utile, quindi aumenta l'efficienza di utilizzazione del canale di trasmissione. Si noti che possono anche esserci metodi di accesso ibridi. Per esempio, è possibile pensare a un metodo di accesso di tipo token solo tra un sottoinsieme di nodi principali; quando uno di questi ha il token può poi anche interrogare (polling) un nodo secondario. Standard per i livelli osi Si parla di rete locale o LAN (Locai Area Network) se Ì primi due livelli del modello OSI sono gli stessi per tutti i nodi connessi. Esistono varie realizzazioni di reti locali proprietarie, ma si sono anche affermati alcuni standard come la Ethernet, la token bus e la token ring. 91 La rete locale Ethenet fu sviluppata alla fine degli anni Settanta dalla Xerox e poi implementata da Digital e Intel; è descritta dallo standard IEEE 802.3. Ne esistono diversi tipi: qui si descriverà la Full Ethernet, caratterizzata da una topologia a bus, con cavo coassiale schermato come mezzo di trasmissione. La velocità massima di trasmissione è di 10 Mbit/s, con una distanza massima di collegamento di 500 m per segmento (con al più 5 segmenti connessi da ripetitori). Il numero massimo di nodi che vi possono essere connessi è 1024. La rete lavora in banda base, quindi permette un solo canale di trasmissione. Non è previsto un segnale di temporizzazione (clock); le informazioni vengono codificate in formato Manchester (ogni bit è seguito dal suo negato) e i nodi riceventi si sincronizzano sulla sequenza di bit in arrivo. La cella, il bit con il suo negato, dura 100 ns e questa durata determina la velocità. Un messaggio completo è chiamato frame ed è composto da un numero di byte variabile tra 72 e 1526. Un frame contiene vari campi: il campo 1 è un preambolo di 8 byte per il sincronismo; il campo 2, che contiene 6 byte rappresentanti l'indirizzo del destinatario o del gruppo di destinatari, viene esaminato da tutti i nodi per stabilire se il messaggio è loro diretto; il campo 3 rappresenta con 6 byte l'indirizzo del mittente; il campo 4 descrive tramite 2 byte il tipo di protocollo usato nel campo dati; il campo 5 contiene i dati e può variare da 46 a 1500 byte; nel campo 6 vi sono 4 byte utilizzati per il controllo della corretta ricezione del messaggio. Il metodo di accesso utilizzato è il CSMA/CD. La rete locale token bus, descritta dallo standard IEEE 802.4, prevede una topologia a bus e il cavo coassiale o il doppino intrecciato come mezzo di trasmissione, con una velocità di trasmissione variabile da 1 a 10 Mbit/s. Il metodo di accesso utilizzato è quello a gettone che circola tra i nodi attivi; vi possono essere infatti dei nodi passivi che rispondono a una chiamata diretta da parte di quelli attivi. Rispetto alla rete Ethernet, la rete token bus ha il vantaggio di essere deterministica; il ritardo massimo si ha quando un nodo, per trasmettere, deve aspettare che il gettone circoli tra tutti gli altri nodi e che ognuno di questi lo trattenga per il tempo massimo consentilo. Nella rete locale token ring, introdotta dall'IBM e descritta dallo standard IEEE 802.5, il principio di funzionamento è simile a quello della rete token bus ma è previsto un anello fisico che fissa l'ordine di passaggio del gettone. La velocità massima di trasmissione è di soli 4 Mbit/s ed è più onerosa da implementare. Anche per i livelli 3, livello di rete, e 4, livello di trasporto, del modello osi/iso si sono sviluppate alcune standardizzazioni. La realizzazione più diffusa attualmente è il TCP/IP (Transmission Control Protocol/Internet Protocol) il quale è costituito da un insieme di protocolli per la gestione di rete. Tali protocolli sono stati sviluppati prima della definizione del modello osi ma, essendo incorporati nella maggior parte delle versioni del sistema operativo UNIX, si sono trasformati in uno standard defacto. Un'altra realizzazione abbastanza diffusa per il livelli 3 e 4 del modello OSI è il DECNET, sviluppato dalla Digital Equipment per i suoi sistemi VAX. Integrazione tra reti Molto importante è anche l'integrazione tra reti che viene realizzata per il tramite di dispositivi particolari. I ponti, o bridge, connettono le reti al livello 2; essi consentono la segmentazione del traffico, gestendo localmente l'indirizzamento e unendo i vari segmenti in un'unica rete locale. Non li si deve confondere con i ripetitori, che sono semplici rigeneratori di segnale necessari per collegamenti molto lunghi; i bridge prima di ritrasmettere dei dati ne controllano l'indirizzo per vedere se appartengono all'altro segmento o meno. 92 Gli instradatori, o router, connettono le reti al livello 3; essi stabiliscono come un pacchetto di dati debba essere instradato per giungere a destinazione scegliendo, eventualmente, il migliore tra più percorsi possibili. I convertitori, o gateway, realizzano l'integrazione ai livelli 5, 6 e 7 traducendo messaggi tra reti eterogenee. Reti per l'automazione Con riferimento alla struttura a livelli del CIM, ci si può rendere conto della necessità dell'utilizzo di reti informatiche per permettere lo scambio di informazioni tra i dispositivi dello stesso livello o di livelli contigui. D'altra parte, come già accennato, le esigenze di comunicazione da soddisfare sono notevolmente diverse ai vari livelli. Nei livelli inferiori ci si trova alla prese di un notevole numero di informazioni semplici, da trasferire frequentemente entro intervalli dì tempo piccoli e certi. Ai livelli superiori l'esigenza è di trasferire informazioni complesse entro intervalli di tempo di durata maggiore e non necessariamente determinata. La Figura successiva riassume le differenti caratteristiche delle comunicazioni tra i vari livelli CIM. • • • Le dimensioni delle informazioni trasmesse aumentano dal basso verso l'alto (per esempio, l'informazione generata da una fotocellula può essere rappresentata da un solo bit, mentre un piano di produzione può richiedere qualche Megabyte). La frequenza con cui sono trasmesse le informazioni aumenta dall'alto verso il basso (per esempio, un sensore di posizione va interrogato ogni 20 ms mentre un piano di produzione viene trasmesso una volta ogni 6 h). La necessità che la trasmissione avvenga entro tempi certi (determinismo) aumenta dall'alto verso il basso. È possibile comprendere, quindi, come in un sistema di produzione integrato si renda necessario adottare reti informatiche di tipo diverso, ognuna specializzata per il compito cui è dedicata. In linea di principio, sì possono identificare tre categorie di reti: la rete per le informazioni, la rete per il controllo e la rete per il campo. La rete per le informazioni e quella che assicura le comunicazioni tra i dispositivi dedicati al controllo e quelli dedicati alla gestione dello stabilimento e dell'azienda (livelli 4, 5 e 6 della 93 piramide CIM). È una rete che deve garantire il trattamento di informazioni di tipo complesso, composte da molti byte; queste informazioni vengono inviate con frequenze non molto elevate e non vi è bisogno di assicurare il trasferimento del messaggio entro intervalli di tempo determinati. Una delle più frequenti realizzazioni per tale rete è quella che prevede lo standard Ethenet per i livelli 1 e 2 osi. Molto spesso vengono utilizzati dei bridge per segmentare la rete, in maniera tale da riunire sullo stesso segmento i nodi che più necessitano di comunicare tra loro, migliorando in tal modo l'efficienza della rete. La rete per il controllo deve assicurare le comunicazioni tra i dispositivi dedicati al controllo e alla supervisione degli impianti (livelli 2, 3 e 4 della piramide CIM). In questo caso, le informazioni inviate non sono molto complesse, ma diventa importante assicurare la loro trasmissione entro tempi certi e a frequenze più elevate. Molto spesso le realizzazioni esistenti di reti per il controllo sono di tipo proprietario, vale a dire sviluppate dallo stesso costruttore dei dispositivi di controllo, e possono integrare tra loro i dispositivi di quel costruttore e personal computer che siano dotati di schede e programmi appositi per l'interfacciamento. Per tali reti i livelli 1 e 2 sono usualmente basati su un metodo di accesso a token, dovendo assicurare il determinismo della trasmissione. Tutto il software per la gestione di rete è di solito integrato nel sistema fornito dal costruttore;l’utilizzatore molto spesso si può limitare alla configurazione della rete (collegamenti fisici tra i vari nodi e assegnazione degli indirizzi logici) e all' utilizzo di apposite istruzioni per il trasferimento dei messaggi che fanno parte del linguaggio di programmazione. Ultimamente si sta affermando la tecnica di utilizzare lo standard Ethernet anche come rete per il controllo, prevedendo la connessione tra i nodi tramite uno switch. In questo modo in ogni segmento della rete è presente solo un nodo e lo switch rendendo, molto improbabile il rischio di collisioni. È poi lo switch ad instradare i dati tra i diversi segmenti che vi afferiscono. Un ulteriore tendenza recente è quella di utilizzare le reti per il campo anche come rete per il controllo. Le reti per il campo o bus di campo, come sono comunemente denominate, sono state introdotte recentemente per realizzare le comunicazioni tra i dispositivi di controllo e sensori e attuatori "intelligenti", vale a dire dotati di un interfaccia di rete e dì un minimo dì capacità di elaborazione (livelli 1 e 2 della piramide CIM). Nella prossima figura è rappresentato un possibile schema concettuale per una realizzazione di automazione integrata in cui sono state evidenziate le tre reti prima definite. Il protocollo MAP Nel mondo dell' automazione si sente spesso parlare di MAP (acronimo di Manufacturing Automation Protocol, protocollo per l'automazione della produzione), un protocollo che è nato dall'esigenza di unificazione e normalizzazione all'interno del processo di produzione. Con il MAF si è tentato, in pratica, di definire uno standard per le reti informatiche per l'automazione, definendo ognuno dei livelli OSI. A titolo di esempio, la parte LAN del MAP, definita dai livelli 1 e 2, era prevista essere una token bus a multifrequenza in modo da consentire allo stesso mezzo di trasmissione di portare più canali. Un’altra sigla che si incontra spesso è la specifica MMS (acronimo di Manufacturing Message Specification, specifica per i messaggi di produzione),definita come lo standard per il livello 7 del MAP.Essa risponde all’esigenza di dover utilizzare simultaneamente,all’interno dello stesso 94 stabilimento,apparecchiature diverse come tipo e/o come fornitore (PLC,sensori,robot,computer etc.). Si basa sul paradigma cliente/servente, in cui il dispositivo cliente richiede al dispositivo servente di eseguire un compito specifico, come, per esempio, fornire dati, leggere un sensore o aprire una valvola. Il servente è rappresentato da un VMD (Virtul Manufacturing Device, dispositivo di produzione virtuale), quindi con un elevato grado di astrazione rispetto ai dispositivi effettivamente esistenti. Tra i benefici che si ricavano dal suo utilizzo vi è la portabilità dell' applicazione sviluppata, anche perché la MMS, isolata dal MAF, può essere usata come livello 7 per altre reti (ed è usata, come si vedrà, in alcuni bus di campo). Il tentativo di standardizzazione non ha avuto pieno successo, pertanto il concetto di MAP come rete informatica per l'automazione non si è molto diffuso, anche a causa della complessità che esso introduce. Si sono avuti dei tentativi di realizzazione di MiniMAP, in cui non è richiesta la realizzazione di tutti i 7 livelli osi; il livello 7 è comunque reso conforme al MAP utilizzando la MMS. Reti di campo Le reti di campo, comunemente chiamate bus di campo, sono delle realizzazioni di reti informatiche per il collegamento tra dispositivi di controllo - come i controllori a logica programmabile - e i sensori e gli attuatori presenti sul piano officina o campo. La situazione tipica attuale è quella in cui i sensori e gli attuatori sono collegati al controllore o direttamente, attraverso i moduli di ingresso/uscita presenti nel suo armadio, oppure tramite una linea seriale da armadi di ingresso/uscita remoti. Utilizzando una rete di campo, invece, tali dispositivi diventano a tutti gli effetti dei nodi di una rete informatica; ciò richiede naturalmente che i dispositivi siano dotati di un minimo di capacità di elaborazione che permetta loro di comunicare tramite la rete. Le differenze principali di questo tipo di reti rispetto alle altre reti informatiche analizzate si individuano nelle diverse esigenze che esse devono soddisfare, e cioè: la maggiore brevità dei messaggi scambiati, la loro maggior frequenza, la possibilità di assicurare una tempistica rigorosa, la possibilità di avere messaggi diretti a molti nodi contemporaneamente (per esempio, un ordine di chiusura di tutte le valvole). Queste caratteristiche portano alla realizzazione di reti "snelle", per così dire, dove sono definiti solo i livelli Ì, 2 e 7 del modello osi. lasciando vuoti i livelli intermedi; eventualmente, alcune funzionalità svolte da questi livelli e necessarie al funzionamento della rete sono inglobate nei livelli previsti. Tra i vantaggi che si riescono a ottenere con l'utilizzo delle reti di campo si ricordano: • • • • • • la semplificazione delle architetture di controllo, in quanto tali reti sono facilmente espandibili e riconfìgurabili; la riduzione del cablaggio, con una conseguente diminuzione dei costi di installazione e manutenzione dei cavi; la possibilità di trasmettere informazioni più complesse e bidirezionali, in quanto i dispositivi intelligenti possono operare delle elaborazioni locali del segnale per linearizzarlo o convertirlo in unità ingegneristiche, possono segnalare il proprio stato al controllore, possono chiudere anelli di regolazione locali. la diminuzione della criticità dei tempi di risposta, essendo molte delle operazioni necessarie, compresa la chiusura di anelli di regolazione, demandate al dispositivo che possiede una capacità di elaborazione locale; la, possibilità di calibrare tutti i vari sensori e attuatori via software da un solo terminale connesso alla rete; una maggiore robustezza delle tasmissioni, in quanto la trasmissione digitale è intrinsecamente meno sensibile ai disturbi di quella analogica e permette, inoltre, di 95 • implementare tecniche per il riconoscimento e la correzione degli errori di trasmissione; un'ulteriore riduzione del cablaggio, visto che alcune implementazioni di reti di campo prevedono che nel livello fisico di connessione l'alimentazione necessaria ai dispositivi passi nelle stesse linee su cui viaggiano i dati. Uno dei maggiori ostacoli alla diffusione di tali reti è la necessità di avere sensori e attuatori che siano interfacciabili.Tali dispositivi non sono ancora molto diffusi sia per il loro costo, sia per il salto qualitativo che richiedono alle aziende che li producono, sia perché non si è ancora affermato un unico standard per tali reti, Nonostante tutti i dispositivi interessati a questo tipo di reti si trovino al livello più basso della gerarchia CEM - il piano officina-, essi possono richiedere l'implementazione di differenti tipi di comunicazione. Ciò ha portato alla nascita di tre differenti classi di reti di campo: 1. i sensorbus (bus di sensori) che operano a livello del bit; 2. i devicebus (bus di dispositivi) che operano a livello del byte; 3. i fieldbus (bus di campo) che operano a livello dei blocchi di byte; I bus di sensori realizzano di solito unicamente i primi due livelli osi (fisico e di link dati) e il loro scopo primario è la riduzione del cablaggio. La lunghezza tipica dei messaggi che sono trasmessi è inferiore a un byte. Di solito i dispositivi già fruìbili vengono connessi alla rete tramite un multiplexer, per cui non vi è bisogno di dispositivi "intelligenti" realizzati ad hoc. Tra i più diffusi bus di sensori attualmente esistenti si ricordano l'ASI e il Seriplex. Un esempio di dispositivo connesso potrebbe essere un sensore di prossimità induttivo senza diagnostica interna. 1 bus di dispositivi permettono Il trasferimento di messaggi di lunghezza fino a 16-32 byte e, oltre ai primi due livelli osi, realizzano alcune funzionalità appartenenti al livello 7, di applicazione. Possono esservi connessi dispositivi tradizionali, mediante adattatori, o dispositivi intelligenti, basati o no su di un microprocessore. Permettono anche la comunicazione di una diagnostica semplice.Tra i bus di dispositivi più diffusi troviamo l'Interbus-S, il DeviceNet e l'SDS, presentati nel seguito. Un esempio di dispositivo connesso potrebbe essere un sensore di temperatura con delle funzionalità di diagnostica interna oppure una fotocellula che sia anche capace di contare e comunicare i suoi cambiamenti di stato e di segnalare una riduzione del suo guadagno dovuta a una lente sporca. I bus di campo propriamente detti permettono la comunicazione di blocchi di byte (fino a un migliaio di byte) e realizzano i primi due livelli OSI e il livello 7, oltre a un livello aggiuntivo che viene detto livello 8 o di utente. I dispositivi sviluppati per la connessione a un bus di campo includono algoritmi predefiniti che vengono configurati via rete per adattarsi alla specifica applicazione. Essi includono, inoltre, un sistema di gestione in tempo reale di una base dati il quale verifica e aggiorna tutti i dati in maniera continua e li rende disponibili a tutti gli altri dispositivi presenti sulla rete. Un esempio di dispositivo connesso potrebbe essere una valvola intelligente con un regolatore di portata incluso e con possibilità di autodiagnostica e di configurazione avanzate. Un altro esempio è rappresentato da un motore elettrico. Un motore tradizionale sarebbe cablato in maniera normale e prevederebbe lo scambio di semplici informazioni: "sono alimentato", "sono in sovraccarico", "devi metterti in movimento". Un motore "intelligente" potrebbe fornire molte più informazioni (costruttore, data di installazione, periodo di manutenzione, stato, velocità, direzione di movimento, coppia applicata, potenza assorbita, temperatura, stato dei cuscinetti, informazioni sul carico derivate dalle relazioni coppia/fase ecc.) e realizzare localmente un controllo in velocità o coppia, partenza e frenata dolce, piccole funzioni di controllo logico, essere capace di comunicare in rete. 96 A livello di bus di campo, si sono affermate due realizzazioni conosciute con i nomi Profibus e Foundation Fieldbus (in questo momento è in corso un tentativo di unificare questi due standard) che saranno analizzate in dettaglio nel seguito. Un impianto di controllo distribuito potrebbe impiegare tutte e tre le reti di campo fin qui presentate, singolarmente o collegato tra loro: una rete del tipo bus di sensori potrebbe rappresentare, per esempio, un nodo di una rete del tipo bus di dispositivi, come illustrato in Figura. ASI La rete ASI (Actuator Sensor Interface, ossia interfaccia per sensori e attuatori) è una realizzazione di un bus di sensori che può connettere fino a 31 nodi, ognuno a sua volta connesso a 4 dispositivi di ingresso/uscita binari, per un totale di 124 dispositivi. Il protocollo di comunicazione è basato su un chip particolare, il chip ASI, che deve essere contenuto in ogni dispositivo connesso oppure in ogni nodo usato per connettere dispositivi tradizionali. Il protocollo è di tipo master/slave a sequenza ciclica: tutti gli slave vengono interrogati in successione e ricevono 4 bit di dati, che possono servire per il controllo delle uscite, e rispondono con 4 bit, che possono rappresentare gli stati degli ingressi. Il tempo di ciclo massimo è inferiore a 5 ms con una velocità di trasferimento di 167 Kbit/s, e la lunghezza massima è di 100 m. I dispositivi che hanno bisogno di più di 4 bit per comunicare lo fanno in cicli successivi, non rallentando il tempo di ciclo. Il bus ASI richiede un'alimentazione di 24 V in corrente continua che viene distribuita attraverso due conduttori non schermati e non intrecciati; gli stessi conduttori trasportano anche l'informazione. Seriplex Il bus di sensori seriplex può connettere fino a 512 dispositivi in una configurazione sia master/slave sia peer-to-peer.Ogni dispositivo deve contenere un chip ASIC con 32 funzioni logiche che sono usate per realizzare il protocollo di comunicazione;dispositivi tradizionali possono essere connessi tramite adattatori che contengono il chip ASIC. I cavi di alimentazione e i cavi di comunicazione sono separati e la lunghezza dei collegamenti può arrivare a 1500m. Interbus-S Il bus di dispositivi Interbus-S può gestire fino a 256 dispositivi, per un totale di 4096 ingressi digitali e 4096 uscite digitali o combinazioni di ingressi e uscite digitali e analogiche. La velocità di trasmissione raggiunge i 500 Kbit/s, la lunghezza i 400 m per segmento (fino a 32 segmenti). Il bus prevede diversi mezzi trasmissivi (doppino, fibra ottica, trasmissione a infrarossi) per adattarsi a diverse necessità di collegamento; la topologia è ad anello. 97 La rete è gestita con un protocollo master/slave e utilizza la tecnica correttezza dei messaggi CRC per il controllo della Reti basati sul Bus CAN (DeviceNet e SDS) Esistono dei bus di dispositivi che sono basati sul bus CAN, originariamente sviluppato per i collegamenti dei dispositivi elettronici all'interno delle autovetture. Il bus CAN è un protocollo aperto che prevede messaggi di lunghezza variabile (fino a 8 byte), un metodo di accesso di tipo CSMA/BA con priorità non distruttivo (Ì messaggi non vengono mai perduti a causa di collisioni), e un avanzato sistema per il controllo degli errori di trasmissione. Esso prevede l'impiego di 4 conduttori intrecciati (due per l'alimentazione e due per la trasmissione dei dati) schermati. La velocità di trasmissione è variabile e dipende in maniera inversa dalla lunghezza della rete. Il bus di dispositivi DeviceNet appartiene alle reti basate sul bus CAN. Può gestire fino a 64 nodi per un totale di 2048 punti di ingresso/uscita digitali con una velocità massima di 500 Kbit/s. Il bus di dispositivi SDS è anch'esso basato sul bus CAN e può supportare 64 nodi, che possono diventare 126 utilizzando delle tecniche particolari di multiplexing degli indirizzi. La velocità di trasmissione massima può arrivare a 1 Mbit/s. Foundation Fieldbus Il bus di campo Foundation fieldbus è basato sul modello OSI in cui si definiscono il livello 1(livello fisico),il livello 2(collegamento dati) ed il livello 7(applicazione). Viene inoltre definito un ulteriore livello, il livello utente, che fornisce molte funzioni importanti come blocchi funzionali, servizi di descrizione dei dispositivi e servizi per la gestione della rete. Per il livello 1 - il livello fisico - ci sono due possibilità. La prima prevede l'impiego di un bus a bassa velocità, denominato H1, con una velocità di 31,25 Kbit/s, una lunghezza massima dì 1900 m, e la possibilità di collegare fìno a 32 dispositivi, se non devono essere alimentati dal bus, sino a 12 dispositivi, se devono essere alimentati dal bus, e sino a 6 dispositivi se devono essere alimentati dal bus in una modalità sicura, a bassa energia, che permette l'utilizzo del bus anche in ambienti pericolosi. Per il bus H1, i due conduttori trasportano sia l'alimentazione che i dati. La seconda possibilità prevede l'utilizzo di un bus ad alta velocità, denominato HSE (high Speed Ethernet), basalo sullo standard Ethernet, con velocità fino a 2,5 Mbit/s, lunghezza massima di 750 m, e tino a 127 dispositivi collegabili. Le due soluzioni possono coesistere attraverso l'utilizzo di un bridge di collegamento. Il livello 2 - il collegamento dati -, gestisce il bus attraverso un dispositivo particolare, il pianificatore attivo, il quale implementa un metodo di accessi deterministico e centralizzato che prevede due modalità di comunicazione-, ciclica e aciclica. Nella modalità ciclica, il dispositivo pianificatore controlla lo stato della rete e concede agli altri dispositivi, a istanti prefissati, il permesso di inviare messaggi. Gli altri dispositivi possono ascoltare la rete e ricevere i messaggi loro diretti (produttore/consumatore). Una porzione del tempo viene riservata per comunicazioni acidi-che sollecitate dal dispositivo pianificatore attraverso l'invio dì un token. Il livello 7 - il livello applicazione - contiene la FMS {Fieldbus Messaging Speci-fication), derivata dalla MMS del MAP, che codifica e decodifica i comandi del livello addizionale utente. Inoltre, contiene il dizionario degli oggetti, che permette ai dati di essere referenziati .sia per la loro etichetta sia per la loro chiave identificativa. Il livello addizionale 8 - il livello utente - implementa la strategia di controllo distribuito del Fieldbus e definisce il modello software con cui l'utente della rete interagisce. Il livello prevede 98 dei blocchi funzionali che sono delle funzioni predefinite per realizzare varie operazioni, tra le quali le operazioni di lettura e scrittura di dati, di controllo del dispositivo, di manipolazione dell'informazione, di funzioni aritmetiche. È inoltre possibile per l'utente scrivere un blocco funzionale ad hoc per particolari applicazioni. I blocchi funzionali possono anche essere contenuti nei dispositivi: per esempio, un sensore di temperatura potrebbe contenere un blocco funzionale per la lettura di dati analogici, mentre una valvola potrebbe contenere un blocco funzionale che realizza un regolatore PID, oltre a un blocco funzionale per l'uscita analogica. Vi sono inoltre servizi di descrizione dei dispositivi che permettono a un nodo di ricevere informazioni da altri dispositivi, come il nome del costruttore, i blocchi funzionali disponibili per quel dispositivo e le sue capacità diagnostiche; tutti i dispositivi connessi a un bus devono avere una loro descrizione. Infine, questo livello comprende servizi per la gestione della rete come l'assegnazione degli indirizzi e la pianificazione dell'esecuzione dei blocchi funzionali (per esempio, potrebbe collegare assieme i blocchi funzionali del sensore di temperatura e della valvola visti prima e stabilire che essi debbano essere eseguiti una volta ogni secondo,realizzando così un anello di controllo locale tramite il bus. Profibus Profibus è un bus di campo proposto sia per il collegamento di un controllore master con dispositivi slave, sia per comunicazioni peer-to-peer. In realtà, Profibus è piuttosto un insieme di reti, pensate per applicazioni diverse, con protocolli compatibili tra loro. Il livello 1 -il livello fisico ' prevede diverse implementazioni (RS485, RS485-IS, MBP e fibra ottica), gestendo fino a 126 dispositivi collegabili con velocità che arrivano fino a 12 Mbit/s. Anche il livello 2 -il collegamento dati - prevede varie implementazioni: DP-V0 che essenzialmente realizza un metodo di accesso centralizzato in cui il master interroga ciclicamente i vari slave; DP-V1 che vi aggiunge, tra l'altro, un metodo di accesso a token tra più master; DP-V2 che aggiunge un metodo di accesso a divisione di tempo del tipo produttore/consumatore tra gli slave. Il livello 7 implementa la specifica FMS, offrendo vari servizi per la comunicazione dei dati. Sopra Il livello 7, Profibus definisce i cosiddetti profili, che sono le specifiche definite dai costruttori o dagli utenti finali che riguardano proprietà, caratteristiche e comportamento dei dispositivi connessi. Ci possono essere profili per applicazioni generali e profili per applicazioni particolari. Secondo la combinazione di elementi scelta nella rete si parlerà di differenti. implementazioni del Profibus, tra le quali le più note sono: • Profibus-DP, più orientato all'automazione industriale, usa RS-485 come livello 1, uno dei protocolli DP per il livello 2, e uno o più profili tipici dell'automazione industriale (come quelli esistenti, tra gli altri, per i sistemi di identificazione materiale e per macchine a controllo numerico); • Profibus-PA, più orientato al controllo di processo, usa MBP come livello 1, DP-V1 come livello 2, un profilo specializzato per il controllo di processo; • Motion Contrai with Profibus, orientato al collegamento di controllori per motori elettrici, usa RS485 come livello 1, DP-V2 come livello 2, e un profilo specializzato (PROFIdrive). 99 CAPITOLO 11 Sistemi SCADA 100 Sistema di supervisione ( SCADA ) Uno SCADA è un sistema che consente di verificare il funzionamento di un dispositivo che si trova rispetto all’operatore, in un’altra stanza, in un altro edificio o a centinaia di chilometri di distanza. Pertanto è necessario l’uso di dispositivi di comunicazione per trasportare l’informazione in maniera bidirezionale dal dispositivo all’operatore, e dall’operatore al dispositivo. Tali informazioni sono memorizzate da un calcolatore sotto forma di quadri sinottici, o serie storiche, che ne evidenziano la variazione di stato. L’uso del calcolatore è fondamentale per rispondere in maniera automatica al verificarsi di particolari eventi, quindi l’operatore ha il solo compito di controllare che non si verifichino eventi anomali , e nel caso, di intervenire di conseguenza. Il software di supervisione SCADA, utilizza le informazioni provenienti dai controllori a logica programmabile ( PLC ) per permettere lo sviluppo e l’esecuzione di applicazioni che richiedono il monitoraggio e il controllo in tempo reale. Il software ha un suo sistema di run-time che permette di aggiornare la base dati di processo mentre si sorvegliano gli allarmi, si visualizzano sinottici, o si presentano tendenze. Permette, inoltre, di progettare e animare le presentazioni grafiche e fornire tutti gli strumenti necessari a configurare la base dati, attivare allarmi, costruire tendenze, riconoscere eventi, registrare i dati e definire dati derivati. Il concetto di supervisione nasce dall’esigenza di sostituire il controllo umano con un sistema completamente automatizzato al fine di garantire un risultato più efficace e più veloce, infatti tramite un sistema di supervisione si possono effettuare, anche nello stesso istante, diverse tipologie di controllo: per esempio, si può verificare l’integrità di un dispositivo, il malfunzionamento di alcuni suoi componenti o, ancora più importante, lo stato degli allarmi dell’oggetto controllato. In definitiva un sistema di supervisione garantisce il dialogo tra utente e macchina tenendo conto, sia delle esigenze dell’azienda che possiede la macchina (affidabilità, e comunicazione col sistema gestionale), sia delle esigenze dell’operatore (facilità di utilizzo e immediata comprensione). Un sistema SCADA prevede sia una struttura software, sia una architettura hardware. Il telecontrollo La gestione di decine di impianti sparsi in tutto il mondo richiede dispendio di risorse sia fisiche che economiche. Inoltre spesso non si è in grado, magari in maniera telefonica con un operatore locale, di capire quale possa essere la possibile causa del guasto e si parte non conoscendo a cosa si va incontro.E’ qui che entra in gioco il telecontrollo,ovvero la possibilità di pilotare, sorvegliare e supervisionare a distanza le installazioni tecnologiche nelle più disparate applicazioni. Telecontrollare significa, inoltre, ottimizzare il rendimento delle installazioni, aumentare la loro efficienza e sicurezza, ridurre drasticamente i costi. Un adeguato controllo permette un più corretto utilizzo delle risorse del territorio, evitando inutili sprechi, prevedendo eventi naturali pericolosi, difendendo l'ambiente dalle innumerevoli forme di inquinamento esistenti. 101 E' infatti evidente l'interesse che riveste per l'amministrazione comunale il poter tenere sotto costante controllo visivo la quantità disponibile di acqua ed il suo consumo, come pure poter accedere immediatamente sul PC ai dati storici di consumi nel passato per poter fare previsioni per il futuro e quindi poter gestire il patrimonio idrico in maniera ottimale. Il telecontrollo di un sistema di immagazzinamento e distribuzione di riserve idriche può prevedere anche la utilizzazione di telediagnosi di guasti in zone non facilmente accessibili come anche applicazioni di supervisione e monitoraggio, oltre alla telegestione, cioè il comando a distanza di utenze e apparecchi (pompe, valvole ecc.) Un innovativo sistema di telecontrollo integra le caratteristiche della migliore tecnologia dei sistemi di acquisizione dati e supervisione presenti sul mercato, con le logiche di elaborazione diagnostica dei Sistemi .Il Sistema Esperto di Telecontrollo così realizzato, risulta in grado di utilizzare, non solo i dati on-line provenienti dal campo, ma anche la conoscenza e l'esperienza degli esperti di gestione processo. Sotto il nome di telecontrollo si raggruppano diversi tipi di servizi e tecnologie e una vastissima serie di applicazioni. Si può intendere la sola lettura a distanza del dato, o la sola modifica a distanza dello "stato del sistema" (attraverso relè e attuatori );in entrambi i casi con la possibilità di registrare le variabili di interesse su diverse scale temporali ed ottenerne indicatori per vari scopi. Il costo dei sistemi di telecontrollo, peraltro, è andato progressivamente riducendosi, via via che si presentavano soluzioni sempre più complesse ed integrate, grazie ai progressi dell'elettronica di controllo e dei sistemi di comunicazione dei dati a distanza. Ciò consentirà presumibilmente l'utilizzo di tale tecnologia in settori sempre più ampi, con beneficio per chi si occupa della gestione dell'energia, che può giovarsi di un numero consistente di dati già predisposti per le analisi richieste, può effettuare studi di fattibilità su interventi di razionalizzazione energetica più precisi e può ridurre le spese di manutenzione e gestione dell'impianto. Allo stato attuale non sono state proposte dall'Autorità schede per la valutazione standardizzata di interventi nel settore del telecontrollo. Più comunemente con telecontrollo si intende un sistema con entrambe le caratteristiche e con la supervisione di un programma che gestisce automaticamente tutta una serie di funzioni. Il monitoraggio continuo del funzionamento dei vari componenti, inoltre, permette di avvisare automaticamente quando è il momento di eseguire manutenzioni preventive o straordinarie e sostituzioni di componenti, con benefici economici e gestionali. La possibilità di utilizzare sistemi di telecontrollo è stata già abbondantemente sviluppata e realizzata in altri settori. Si pensi alla gestione delle acque o al controllo di impianti che per la loro essere richiedono un immediato intervento in caso di anomalie. Il controllo on-line sarà basato fondamentalmente sull'utilizzo "sintomatico" di strumentazione tradizionale di misura alla quale saranno associate logiche diagnostiche esperte. Le procedure di consultazione del Sistema Esperto di Telecontrollo sono riassumibili nei seguenti punti: • Acquisizione dei dati relativi alle indagini preliminari. Il Sistema utilizza le informazioni relativi alle ispezioni visive, misurazioni in campo, ecc., che vengono eseguite giornalmente dalla maggior parte dei gestori, attraverso l'acquisizione dati da files ASCII o digitati direttamente su tastiera; • 102 Monitoraggio con relativa spiegazione diagnostica dei possibili malfunzionamenti. Il Sistema sulla base delle informazioni pervenute dal data-entry e/o da un modulo di supervisione è in grado di individuare le eventuali anomalie di funzionamento del processo depurativo fornendo un quadro diagnostico di primo livello e attribuendo automaticamente un giudizio complessivo di priorità di emergenza al relativo impianto in esame. Consultazione. A partire dalla segnalazione di priorità di emergenza sul quadro di monitoraggio, il Sistema prevede che si possa procedere alla fase di consultazione vera e propria del Sistema Esperto. • Pertanto è necessario rendere congruenti tutte le informazioni disponibili in archivio (indagini ispettive, misure in campo di parametri di funzionamento, misure di laboratorio ed eventuali analisi microscopiche sul fango attivo), le quali oltre a costituire ciascuna un contenuto informativo differenziato nella quantità e nella qualità, vengono necessariamente rilevate in maniera temporalmente differente. • Acquisizione dei dati. L'acquisizione dei dati sono trasferite nel Sistema attraverso file e/o data-entry. • Diagnosi. La diagnosi generata dal sistema esperto viene presentata in forma di messaggio strutturato. • Rimedi (Azioni Correttive). A valle della diagnosi, il Sistema Esperto - sulla base dello stato di consistenza dell'impianto - individua le azioni correttive più appropriate a rimuovere le cause della disfunzione segnalata nella diagnosi. Il Sistema Esperto è in grado di produrre un report cartaceo sia dell'intera consultazione effettuata relativamente a ciascun impianto, sia di parti di essa. Trend Grafico dei Dati Storici. Il Sistema Esperto è in grado di produrre il trend grafico delle variabili preimpostate relative ai dati storici che si vuol tenere sotto controllo. Segnalazione delle situazioni di emergenza in forma grafica-alfanumerica e per via telefonica attraverso comunicazione vocale o SMS sul GSM degli operatori di turno. Comunque per alcuni impianti specie quelli pubblici le norme UNI impongono come vincolo il controllo visivo dell’impianto prima di una eventuale riaccensione da anomalia. Ecco perché l’impiego è ancora poco diffuso. La collocazione di un sistema webcam potrebbe in qualche modo aggirare la norma e permettere un utilizzo mirato di questo sistema. 103 CAPITOLO 12 Normative 104 Lo standard IEC 1131 Lo standard IEC 1131 definisce i linguaggi di programmazione per sistemi di controllo, in generale, e per i controllori a logica programmabile, in particolare. Tale standard dovrebbe far progredire verso una normalizzazione della sintassi dei linguaggi di programmazione che conduca a metodi moderni per lo sviluppo di applicazioni (programmazione strutturata, modularità del software), aiuti la portabilità dei codici tra macchine diverse, faciliti la verifica dei codici, permetta di riutilizzare codice già sviluppato, riduca i costi ed il tempo di sviluppo. La norma si divide in: • IEC 1131-1 Informazioni generali (1992) • IEC 1131-2 Specifiche dei test sui prodotti (1992) • IEC 1131-3 Linguaggi di programmazione (1993) • IEC 1131-4 Raccomandazioni e consigli per l'utilizzatore • IEC 1131-5 Specifiche dei servizi di comunicazione La norma IEC 1131-3 definisce i Linguaggi di Programmazione e, per ciascun linguaggio: La sintassi e la simbologia degli oggetti di programmazione. La struttura dei programmi. La definizione delle variabili di programmazione. I linguaggi normalizzati sono: • Ladder Diagram o diagramma a contatti (LD): è un linguaggio che prevede l’utilizzo di elementi tipo contatto aperto, chiuso e bobina, tipici degli schemi a relè. • Instruction List o lista di istruzioni (IL): è un linguaggio simile a quelli assemblativi per computer. • Structured Text o testuale strutturato (ST) è un linguaggio ad alto livello simile al Pascal. • Sequential Function Chart o diagramma funzionale in sequenza (SFC): è un linguaggio gerarchicamente superiore agli altri che permette di formulare applicazioni di tipo sequenziale usando concetti di fase (azioni da compiere) e transizione (condizioni da soddisfare per passare da una fase ad un’altra) • Function Block Diagram o diagramma a blocchi funzionale (FBD): è un linguaggio basato su logica binaria, esso consiste in una rappresentazione grafica di elementi logici quali AND, OR e NOT. La norma IEC 1131 si applica ai Controllori programmabili (e alle periferiche associate) e in particolare la Parte 3, tradotta in Norma Italiana 65-40 (CEI EN 61131-3), specifica le regole sintattiche e semantiche dei linguaggi di programmazione, le quali soddisfano in genere le necessità di qualsiasi operatore che si avvicini a tale ambiente. Tale filosofia di adattabilità è sostenuta dal fatto che l'introduzione del PLC nelle aziende deve avvenire nel modo più naturale possibile, senza sconvolgere le metodologie di impiego delle apparecchiature che vanno a sostituire; infatti, se nelle fabbriche di nuova concezione e costruzione il PLC è elemento essenziale nella gestione dei processi, molti sono ancora i reparti lavorativi e le macchine dove potenzialmente il PLC può essere impiegato per rimpiazzare vecchie apparecchiature con logica a relè. Sono di seguito analizzate alcune caratteristiche salienti estratte dalla normativa. Due elementi importanti della programmazione dei PLC sono rappresentati dalle variabili e dalle unità di organizzazione di programma. Una variabile può essere dichiarata come appartenente ad uno dei tipi elementari o ad un tipo derivato, inoltre essa viene rappresentata simbolicamente con degli identificatori. 105 E’ necessario che il costruttore del PLC specifichi la corrispondenza tra la rappresentazione diretta delle variabili di I/O e la locazione fisica dell'elemento indirizzato in ingresso o in uscita alla quale la variabile fa capo. Se degli interi sono separati da punti, la rappresentazione deve essere letta come un indirizzo gerarchico fisico o logico, nel quale la parte a sinistra indica il livello più elevato della gerarchia, mentre quella destra l'inferiore. Per esempio, la variabile: %IW1.4.6.1 indicherà il primo canale (parola) del sesto modulo del quarto rack del primo bus di I/O di un sistema a controllore programmabile. L'uso dell'indirizzamento gerarchico che permette al programma l'accesso ai dati di un secondo controllore programmabile si deve considerare un'estensione di linguaggio. Le variabili rappresentate direttamente sono consentite solamente nei programmi (vale a dire quegli insiemi logici composti da tutti gli elementi e costruzioni del linguaggio di programmazione che permettono di gestire ed elaborare i segnali per il comando di una macchina o di un processo mediante un PLC), nelle configurazioni (in altre parole negli elementi di linguaggio che corrispondono ad un sistema a controllore programmabile) e nelle risorse (cioè in quegli elementi di linguaggio che corrispondono ad una funzione di trattamento di segnale, alle sue funzioni di interfaccia uomo-macchina e alle eventuali funzioni di interfaccia di sensori e attuatori). Le variabili a molti elementi sono invece rappresentate da: • array, insieme di elementi di dati che appartiene allo stesso tipo di dato, indicizzati da uno o più indici racchiusi tra parentesi e separati da virgole; • strutture, un tipo di dato formato da un insieme di elementi nominati, rappresentato da almeno due identificatori separati da un punto (.) il primo dei quali indica il nome dell'elemento strutturato, mentre i successivi rappresentano la sequenza di nomi che permettono l'accesso ad un elemento particolare nella struttura di dati. Le unità di organizzazione di programma (POU), invece, sono costituite dalle funzioni, dai blocchi funzionali e dai programmi. Esse si possono trovare precostituite (dal costruttore) o possono essere programmate dall'utilizzatore. Le unità di organizzazione di programmi non possono invocare altre unità dello stesso tipo (cioè non devono essere ricorsive). I tipi di dati elementari previsti dalla Norma sono elencati nella successiva tabella e rappresentano un insieme strutturalmente completo per soddisfare le esigenze di programmazione di ogni utente PLC. Ad ognuna di queste zone è possibile accedervi con un determinato formato. Il formato è la quantità di bit che viene presa in considerazione dall'istruzione che stiamo componendo. Ad esempio se vogliamo utilizzare una memoria come se fosse un relè (on-off) utilizzeremo il formato a BIT, ovvero un singolo bit può contenere gli stati 0 - 1 . Se dobbiamo elaborare un valore avremo bisogno di unire più bit la cui codifica sarà il nostro valore, quindi, in base alla grandezza del valore da contenere dovremo scegliere quanti bit ci servono. Parola chiave BOOL SINT INT 106 Tipo di dato Booleano Intero corto Intero Bits 1 8 16 DINT LINT USINT UINT UDINT ULINT REAL LREAL TIME DATE TIME\_OF\_DAY (TOD) DATE\_AND\_TIME (DT) STRING BYTE WORD DWORD LWORD Intero doppio Intero lungo Int. corto senza segno Intero senza segno Int. doppio senza segno Int. lungo senza segno Reale Reale lungo Durata Data Ora del giorno Data e ora del giorno Stringa 8 bit 16 bit 32 bit 64 bit 32 64 8 16 32 64 32 64 8 16 32 64 Insieme dei tipi di dati elementari previsti dalla norma EIC La Norma prevede inoltre l'utilizzo di dati “generici” contraddistinti dal prefisso “ANY “ e che vengono utilizzati per generare funzioni o operatori sovraccaricati (overloaded) che cioè accettano tipi diversi come parametri. Tale implementazione rappresenta in pratica la possibilità di dichiarare una variabile indipendentemente dal tipo e quindi di mantenere una certa compatibilità con la rappresentazione interna dei dati che, in molti PLC, sono identificati con semplici locazioni di memoria. Nei PLC Allen Bradley, ad esempio, la memoria programmi è organizzata nei cosiddetti program files di dimensioni massime fissate dal Sistema Operativo e numerati da 0 a 999. I primi tre sono dichiarati di default come dati di uscita, di ingresso e di stato processore; agli altri possono essere associate strutture dati di tipo contatore, variabili binarie, temporizzatori, variabili reali in virgola mobile, caratteri, strutture PID, ecc... Gli identificatori delle variabili a singolo elemento, cioè quelle comunemente impiegate in ogni PLC, per la Norma devono rispettare la sintassi descritta dalla Tabella La rappresentazione diretta deve essere provvista di uno speciale simbolo, formato dalla concatenazione di un segno di percentuale %, un prefisso di locazione e un prefisso di taglia e da uno o più interi senza segno, separati da punti (.). Locazione di ingresso I Q M X Nessuno B W D L Locazione di uscita Locazione di memoria Taglia di un solo bit Taglia di un solo bit Taglia di un byte (8 bit) Taglia di una parola (16 bit) Taglia di una parola doppia (32 bit) Taglia di una parola lunga (64 bit) 107 Sintassi operatori Il costruttore deve specificare la corrispondenza tra la rappresentazione diretta e la locazione fisica o logica per gli elementi indirizzati in ingresso o in uscita. Quando una rappresentazione diretta è estesa con delle zone di interi separati da punti, essa deve essere interpretata come un indirizzo gerarchico fisico o logico, con il campo più a sinistra che rappresenta il livello più alto della gerarchia. Per esempio la variabile %IW2.5.7.1 può rappresentare il primo canale (word) del settimo modulo nel quinto rack del secondo bus di I/O di un sistema a controllore programmabile. L'utilizzazione di un indirizzamento gerarchico per permettere ad un programma in un sistema PLC di accedere a dati di un altro PLC deve essere considerato come una estensione di linguaggio. L'utilizzo di variabili direttamente rappresentate è consentito solo nei Programmi, nelle Configurazioni e nelle Risorse. Il numero massimo di livelli nella gerarchia è un parametro proprio dell'implementazione. Ad esempio: %IW53 %MW30 %MX41 %MD48 %MW4:8 %MW0:X4 %QX21 parola della zona degli ingressi parola della zona della memoria bit della zona della memoria doppia parola della zona della memoria tabella di 8 parole bit di rango 4 della parola interna \%MW0 bit della zona delle uscite Parametri di implementazione Un altra possibilità che offre la Norma è di dichiarare una variabile o addirittura una intera sezione di programma con l'attributo retained o a valore ritenuto. Ciò comporta che, nel cosiddetto riavvio a caldo (quando la unità di organizzazione di programma viene richiamata non per la prima volta), i valori della variabile o delle variabili contenute all'interno della POU vengono conservati tra un'attivazione e la successiva. Non tutti i linguaggi PLC consentono una dichiarazione del genere perché ciò vuol dire gestire i tasks in modo dinamico, il che appesantirebbe il compito del kernel del sistema operativo che invece lo si vuole più stabile e compatto possibile. Concetto molto importante è pure la visibilità delle variabili all'interno dei programmi. La Norma dice che la visibilità delle variabili dichiarate deve essere locale alla POU che la contiene. L'unica eccezione è per le variabili globali accessibili alle altre POU grazie ad una dichiarazione di un blocco di tipo VAR\_EXTERNAL compatibile con la dichiarazione fatta altrove. La visibilità nei processori è un concetto quasi inesistente per quelli che utilizzano programmazione a basso livello (ladder), ed incompleto per quelli più avanzati dove in genere più che di visibilità si potrebbe parlare di protezione. 108 La Norma impone ancora che ogni dichiarazione di programma, funzione o blocco funzionale deve contenere all'inizio almeno una parte dichiarativa che specifica i tipi delle variabili utilizzate in nelle unità organizzative di programma (POU). Tale parte dichiarativa deve avere forma testuale con le parole chiave VAR, VAR\_INPUT, VAR\_OUTPUT come definiti nella Tabella \ref{var_decl}, e seguite eventualmente dai qualificatori RETAIN o CONSTANT e nel caso di VAR\_OUTPUT da nessuno o un occorrenza del qualificatore RETAIN, seguiti da una o più dichiarazioni separate da virgole e terminare con la parola chiave END\_VAR. La maggior parte dei sistemi sviluppati per la programmazione dei PLC o non consente la dichiarazione di variabili potendo il programmatore sfruttare solo quelle predichiarate dal costruttore, oppure stabilisce una corrispondenza di Simboli/Indirizzi (identificativo variabile rappresentazione diretta) in una tabella di DataBase al fine di rendere più agevole la comprensione dei programmi che sfruttano le variabili altrimenti direttamente rappresentate. 109 Bibliografia Tecnologie Informatiche per l’Automazione 2° ed. – Chiacchio, Basile –McGraw-Hill Manuale di programmazione dei PLC 2° ed. – Bergamaschi – Hoepli Tecnologie e Disegno per la progettazione elettronica 3° vol – Portaluri, Bove – Tramontana Risorse su internet 110