Programmazione di dispostivi industriali IEC 61131-3 · Premessa I > uso dei PLC grazie al...
Transcript of Programmazione di dispostivi industriali IEC 61131-3 · Premessa I > uso dei PLC grazie al...
Programmazione di dispostivi industriali IEC61131-3
Stefano Miani1
1Dipartimento di Ingegneria Elettrica, Gestionale e MeccanicaUniversita degli Studi di Udine
A.A. 2007-08
Stefano Miani
Premessa
I > uso dei PLC grazie al miglioramento prestazioni eminiaturizzazione tecnologia
I controllo e supervisione di sistemi sempre piu complessi
I differenze di velocita, comunicazione, I/O
Stefano Miani
Desiderata
I Utilizzo simultaneo di diversi linguaggi di programmazione
I Modifica “online” di programmi
I “Reverse documentation” dei programmi
I Riutilizzo di moduli
I Verifica e simulazione off-line del funzionamento
I Documentazione del progetto e verifica della qualita
I Utilizzo di sistemi non proprietari
Stefano Miani
Lo standard IEC 61131-3 cerca di risolvere/ovviare alcuni deiproblemi e differenti sistemi di sviluppo potranno implementarnesolo parte.Perche dovrebbe funzionare?
I Crescita costo formazione personale
I Crescita sviluppo di programmi sempre piu complessi
I Costo sviluppo di sistemi di programmazione piu complessi
Stefano Miani
Vantaggi al produttore
I Possibilita di modifiche della definizione degli standard
I Riduzione dei costi mediante standardizzazione
I Riduzione rischi prodotto inadatto
I Riduzioni time-to-market per nuovi prodotti
Vantaggi all’utilizzatore
I Possibilita di lavorare con sistemi con caratteristiche prevalentisimili
I Facilita nella scelta di sistemi di sviluppo
I Portabilita dei programmi (parte)
Stefano Miani
Certificazione soddisfacimento standard
I Base level: istruzioni fondamentali comuni
I Portability level: costrutti fondamentali portabili su diversisistemi a livello di moduli
I Full level: interscambio totale
Formato di interscambio (certificazione, luogo, produttore, etc.)
Stefano Miani
Le POU (blocchi dei vecchi sistemi di sviluppo), ProgrammingOrganisation Unit, sono le piu piccole unita software di unprogramma. Le POU possono effettuare chiamate ad altre POU.
1. Function (FUN): tempo invarianti, stessi ingressi generanosempre la stessa uscita (function value, valore della funzione);
2. Function Block (FB): dispongono di data record e sonotempo varianti, ovvero permettono di memorizzare dati eriutilizzarli alla chiamata successiva (si veda piu avantil’istanziazione di FB );
3. Program (PROG): in cima alla gerarchia e permettono diaccedere agli I/O del dispositivo e renderli disponibili ad altrePOU;
Stefano Miani
Lo standard stabilisce la struttura delle POU (realizzatedall’utente) e l’interfaccia di I/O di funzioni standard (standardFUN ) e function block standard (standard FB ).
Stefano Miani
Variabili: servono a memorizzare ed elaborare dati di processo.
I Corrispondono a flag o bit dei vecchi sistemi di sviluppo.
I Nel nuovo standard l’allocazione delle variabili non viene fattadall’utente, ma in modo trasparente dal sistema di sviluppo.
I Il tipo di dati (data-type) delle variabili e obbligatorio e fisso.Alcuni tipi sono predefiniti (Bool, Byte, Real, etc.) e c’e lapossibilita di definirne di nuovi (record, array, etc.).
I E possibile associare alcune variabili a specifici I/O e puregarantirne la memorizzazione in caso di caduta di tensione.
Alle variabili viene inoltre associato un tipo (variable type) aseconda che siano dichiarate
I Al di fuori di una POU (globali);
I Come parametro di chiamata di una POU (di interfaccia);
I All’interno di una POU (locali).
Stefano Miani
Dichiarazione di tipo di dati: in modo testuale (mediantelinguaggio) sempre, in modo grafico (parametri di interfaccia) inalcuni casi
VAR INPUT (* ingresso *)ValidFlag :BOOL (*booleano*)
END VARVAR OUTPUT (*uscita *)
RevPM :REAL (*reale*)END VARVAR RETAIN (*locali, backup *)
MotorNR :INT (*intera*)MotorName :STRING[10]EmStop AT %IX2.0 :BOOL (*bit 2.0 I/O*)
END VAR
Stefano Miani
1. Instruction List (IL) (assembler, testuale);
2. Structured Text (ST) (linguaggio alto livello, testuale);
3. Ladder Diagram (LD) (schema a contatti, grafico);
4. Functional Block Diagram (FBD) (blocchi funzionali, grafico);
5. Sequential Function Chart (SFC) (diagrammi di flusso,grafico).
Si vedano figure 2.1 e 2.2 del testo per i diversi linguaggi e lefigure 2.3, Example 2.2 e Example 2.3 per un esempio diprogrammazione elementare.
Stefano Miani
I PLC = + CPU e processori dedicati (risorse);
I ogni programma puo essere eseguito su una o piu risorse;
I i programmi differiscono in priorita e modalita (ciclico,periodico, interrupt);
I i programmi vengono associati ad un task al fine di essere resieseguibili;
Stefano Miani
Il file di configurazione permette di rispondere alle seguentidomande
I Su quale PLC deve essere eseguito il programma?
I Con quali modalita di esecuzione e priorita?
I Si devono associare variabili a indirizzi fisici dell’I/O del PLC?
I Ci sono variabili globali o esterne da condividere con altriprogrammi?
Si vedano l’esempio 2.4 e la figura 2.4 del libro di testo.Un PLC project consiste di POU fornite dal produttore del PLCoppure create dall’utente. Le POU possono essere utilizzate per larealizzazione di librerie (hardware-independent).
Stefano Miani
Tipo di POU keyword funzionalita
PROG PROGRAMProgramma principale, assegnazione I/Ovariabili globali
FB FUNCTION BLOCKRoutine con variabili di ingresso e uscita,con possibilita di memorizzare datitra una call e la successiva
FUN FUNCTION Funzione a piu ingressi e un solo valore
La POU e la piu piccola unita indipendente che puo esserecompilata (necessita di conoscere i parametri di interfaccia) elinkata ad altre POU .Il nome della POU e globale e noto all’intero progetto e non sonopermesse subroutine
Stefano Miani
I Tipo di POU e nome (e valore, per FB );
I Dichiarazioni di variabili;
I Codice.
PROGRAM nome programmaFUNCTION BLOCK nome fnct blockFUNCTION nome funzione tipo funzione
La parte di dichiarazione contiene tutte le variabili necessarieall’esecuzione della POU , di interfaccia e interne. La dichiarazionedi interfaccia puo essere programmata graficamente.Il codice, o corpo del programma, puo essere programmatoutilizzando uno dei linguaggi di programmazione (testuale ografico).Si veda la figura 2.6, l’esempio 2.5 e 2.6 per esempi di definizionedi POU .
Stefano Miani
Variabili dichiarate prima del codice. Variabili caratterizzate da
I tipo di dato (bool, real, etc.), mediante keyword dopo il nomedella variabile
I tipo di variabile, mediante posizionamento in apposite sezioni(VAR INPUT, VAR IN OUT, etc.).
Si veda l’esempio 2.7 e 2.8.
Tipo di variabile PROG FB FUNVAR 1 1 1VAR INPUT 1 1 1VAR OUTPUT 1 1 0VAR IN OUT 1 1 0VAR EXTERNAL 1 1 0VAR GLOBAL 1 0 0VAR ACCESS 1 0 0
Stefano Miani
I Interfaccia di ingresso: parametri formali (sostituiti conparametri attuali all’atto della chiamata);
I Interfaccia di uscita: variabili di uscita o valore della funzione;
I Interfaccia globale: variabili globali (global, external e access).
Tipo di interfaccia Tipo variabile Note
IngressoVAR INPUT per valoreVAR IN OUT per riferimento
anche in forma grafica
Uscita VAR OUT per valore anche in forma graficaGlobali VAR GLOBAL, VAR EXTERNAL, VAR ACCESSLocali VAR (RETAIN) variabili interne
Per variabili con dimensioni consistenti, la chiamata per riferimentoe meno onerosa.La lettura/scrittura di variabili dipende dal tipo. Si veda la tabella2.4.
Stefano Miani
Codice
I Sequential Function Chart: grafo di flusso per la gestione disequenze/operazioni in serie/parallelo;
I Ladder Diagram: schema grafico a contatti per larealizzazione di funzioni logiche. Le POU scritte in LD sonodivise in sezioni dette “reti” (networks);
I FBD: schema grafico a blocchi per operazionilogiche/aritmetiche. Sezioni=reti (networks). Reti booleaneesprimibili in LD e viceversa;
I IL: linguaggio di basso livello (assembler);
I ST: linguaggio di alto livello per il controllo e calcolimatematici complessi;
I Altri linguaggi di alto livello: C, Basic, nel rispetto deglistandard.
Stefano Miani
Istanziazione di FB
I FB devono essere istanziati come le variabili (tipo di dati=tipodel FB , nome della variabile=nome del FB )VAR
Valve: BOOL; (*Valve e istanza di un booleano*)
END VAR
Supponiamo sia dato il FB MotorType, alloraVAR
Motor1: MotorType; (*Motor1 e istanza del FB MotorType*)
END VAR
Le istanze di FB sono visibili all’interno della POU in cui sonodichiarate. Se dichiarate come globali, possono essere accessibili dapiu POU . Le FUN sono invece sempre globali e prive di istanza.Tipo di FB : definisce i parametri di I/O e il comportamentoIstanza (nome) di FB : utilizzo all’interno di altre POU . Contienele variabili memorizzate (contatori, FF, etc.).Il meccanismo di istanziazione permette di implementare in diversimodi la POU corrispondente al FB .
Stefano Miani
VAR
Counter: CTUD; (*Counter e istanza di contatore UP-DOWN*)
END VAR
A seguito dell’istanziazione, la struttura dati del FB Counter puoessere utilizzata (si veda esempio 2.14) con l’interfaccia riportatanell’esempio 2.13.Ad esempio, il valore del contatore UP viene memorizzato nellavariabile Counter.CU (cosı come avviene per le strutture). I valoridel contatore non utilizzati vengono comunque inizializzati.Per ciascuna istanza di un FB le VAR, VAR INPUT e VAR OUTvengono memorizzate in un’area staticaEsiste la possibilita di definire variabile dinamiche (VAR DYN).Le VAR IN (formali) mantengono il valore tra una chiamata al FBe la successiva (non alterati dal FB ). VAR OUT mantengono ilvalore tra una chiamata e la successiva.
Stefano Miani
I Non sono ammessi riferimenti a indirizzi del PLC (%Q, %I,%M). E ammesso l’utilizzo di indirizzi se dichiaratiglobalmente (fuori dal FB );
I Non si possono definire variabili globali o di accesso;
I I dati possono essere passati al FB solo tramite interfaccia(VAR INPUT, VAR INOUT, VAR EXTERNAL).
Un FB puo manipolare blocchi di dati solo tramite l’interfacciaUn FB e una struttura dati indipendente e incapsulata associataad un algoritmo che lavora sui suddetti datiNei sistemi di sviluppo precedenti le FB lavoravano su blocchi dimemoria globali (I/O, flag, memoria condivisa).Un FB puo avere qualsiasi numero di ingressi e uscite. Un FB puoessere dichiarato RETAIN, oppure solo alcune variabili di esso (nonvar IN e OUT). Per VAR IN OUT il RETAIN equivale amemorizzare il puntatore, dunque occorre dichiarare come RETAINanche la variabile puntata.
Stefano Miani
FUN
I La FUN produce sempre la stessa uscita (valore dellafunzione) a parita di ingressi
I Puo essere utilizzata com operatore in IL e operando in ST.
I Le FUN sono globali, ovvero il nome e noto a ciascuna POUdel progetto PLC.
I Esistono funzioni standard predefinite dallo standard.
I Hanno numero arbitrario di ingressi, e una uscita (qualsiasitipo).
I Variabili interne senza memoria: no RETAIN
Stefano Miani
Codice o programma
I FUN e FB =subroutine, PROG =programma principale(main)
I Accesso a indirizzi fisici del PLC (I/O, memoria)
I Definizione variabili globali e di accesso (scambio dati fraprogrammmi)
I Associato ad un task mediante la configurazione, per renderloeseguibile sul PLC
I Non chiamato da altre POU
Stefano Miani
Chiamata di FB e FUN
I PROG ⇒ FB e PROG ⇒ FUN
I FB ⇒ FB e FB ⇒ FUN
I FUN ⇒ FUN
I Ricorsione non ammessa (A chiama se stessa, A chiama B e Bchiama A)
Si veda il testo, Figura 2.7, esempio 2.17 e 2.18 per chiamate nonammesse.I parametri formali devono o meno essere specificati a seconda dellinguaggio usato e della POU
Linguaggio FUN FB PROGIL no sı (tre modi) sıST indifferente sı sıLD e SFC sı sı sı
Si veda l’esempio 2.20 per le regole di chiamata in IL e ST el’esempio 3.18 per LD.
Stefano Miani
I Inizializzazione (per tipo, o dall’utente) delle variabili FB eFUN anche se alcuni parametri vengono omessi. Per FB ,l’inizializzazione avviene solo alla prima chiamata.
I Nel caso di omissione, occorre specificare i parametri formali(vedi esempio 2.21)
I Se sono presenti tutti i parametri formali, l’ordine e irrilevante,se alcuni assenti, lo e.
Stefano Miani
Istanze di FB come parametri attuali di FB e FUN
Istanze di FB e ingressi e uscite di istanze di FB possono essereutilizzate come parametri attuali di altri FB e FUN . Si vedal’esempio 2.22 e la tabella 2.8.Chiamata indiretta
I Se l’istanza e passata come VAR INPUT, l’istanza e le suevariabili di uscita non possono essere alterati o chiamati nellaFB chiamante, ma possono essere lette da questa;
I Come VAR IN OUT non puo essere passata l’uscita (ilpuntatore) di un’istanza di FB (alterazione al di fuori del FB) e neppure l’uscita di una FUN .
Chiamata diretta
I Se passate come VAR EXTERNAL o VAR OUTPUT e solopossibile leggere le variabili.
Si veda l’esempio 2.23.
Stefano Miani
Per le FUN , e possibile passare come ingresso un’istanza di FB ovariabili di essa (l’istanza non viene chiamata, ma vengonoutilizzati i dati)FUN possono esser utilizzate come ingresso ad altre FUN e FB .All’atto del passaggio la FUN viene chiamata e il suo valorepassato come parametro attuale alla FUN oFB .Si veda la tabella 2.9 per un riassunto delle proprieta delle POU .
Stefano Miani
1. Delimitatatori (delimiters);
2. Parole chiave (keywords);
3. Letterali (literals);
4. Identificatori (identifiers).
FUNCTION RealAdd: REALVAR INPUT
Inp1,Inp2; REAL;END VARRealAdd:=Inp1+Inp2+7.456E-3
END FUNCTION
Significato Esempio
DelimitatoriCaratteri speciali condiverso significato
(,),+,-
KeywordParole chiave del linguaggiodi programmazione
RETAIN, VAR INPUT, REAL
Letterali Valori di variabili 12, 3.1415, 1e4, 16#a5Identificatori Nomi di variabili, POU , tipi Out1, Pippo, TipoMotore
Stefano Miani
Keywords
I Non possono essere usate per definire variabili;
I Maiuscole, minuscole, miste (VAR iNpUT);
Sono keywords riservate:
1. Nomi di tipi elementari
2. Nomi di FUN standard (ad esempio, LOG)
3. Nomi di FB standard (ad esempio, SR, CTUD);
4. Nomi di parametri di ingresso a standard FUN e di I/O di FB;
5. Operatori in IL (esempio, LD, CAL, ORN);
6. Elementi del linguaggio ST (ad esempio, FOR, CASE,WHILE);
7. Elementi del linguaggio SFC.
Si veda l’appendice H.1 del testo.
Stefano Miani
Letterali
I Rappresentano i valori di variabili numericheI Booleani: FALSE/TRUEI Byte: 11, 16#0B, 2#000 1101I Double Word: 16#ABCDEF, 16#ab cdefI Interi: 12, 273;I Virgola mobile: 13.4, 27.7, 14e-14;
I Stringhe di caratteri: ’pippo’, ”. Letterali “speciali”richiedono il simbolo $: $$=$, $’=’ (si veda la tabella 3.4).
I Letterali temporali (rappresentano valori temporali, overflowammesso, acronimo o completo, si veda tabella 3.3)
I Durata: t#2d3h4m, time#4s89.4ms, time#1h 22m,time#-1h, TIMe#1h 1m 0s;
I Data: d#2006-10-11, DaTe#2006-10-11;I Ora del giorno: tod#10:30:01.00,
TimE OF daY#hh:mm:ss.cs;I Data e ora: dt#1988-08-08-15:15:00.00,
date AnD timE#aa-mm-gg-hh:mm:ss.cs;
Stefano Miani
Identificatori
Devono iniziare con una lettera o un singolo underscore .Maiuscole=minuscole.
I Label di JUMP (nome routine) o di reti;
I Costanti enumerative (si veda avanti enumeration);
I Configurazioni, risorse etc.;
I Programmi etc;
I Variabili;
I Tipi di dati derivati (Tipi di Dati definiti dall’utente);
I Transizioni e step in SFC.
Lo standard prevede le prime 6 lettere come significative(bravis simo=bravis sima), ma > numero dipende dal sistema disviluppo Si veda la tabella 3.6 per esempi di identificatori ammessi.
Stefano Miani
Variabili dichiarate nella parte dichiarativa di una POU .Dichiarazione indipendente da linguaggio usato. Dichiarazione:nome var:tipo var. LE dichiarazioni di nuovi tipi di dati eglobale;Classica programmazione PLC: accesso diretto alla memoria o I/O(M 3.1, IW 4). Tipo di dato consistente con la cella di memoria,I/O.Soluzione: creazione tabella di simboli per associare nomi a I/O ememoria.IEC-61131-3: utilizzo variabili.
Tabella assegnazione Dichiarazione variabili IEC-61131-3VAR
I 3.4= InpVar InpVar AT %IX3.4: BOOL ;M 70.7= FlagVar FlagVar: BOOL;Q 1.0= OutVar OutVar AT%QX1.0: BOOL;
AT %MX70.6: BOOL;END VAR
Stefano Miani
Nome dela variabile: posizione di memoria assegnata sul PLC(trasparente). Tipo di dati (data type): definisce le proprieta diuna variabile
I Valore iniziale;
I Campo di valori (range);
I Dimensione della variabile.
Ulteriori proprieta associate alla tipo di variabile (IN, OUT, etc.).Type checking in fase di compilazione e funzionamento: riduzioneerrori e individuazione malfunzionamenti mediante avvertimenti(warning).Sistemi di sviluppo classici/ IEC 631: allocazione ”manuale” dellamemoria/allocazione automatica.Assenza errore doppia assegnazione stessa allocazione.
Stefano Miani
Tipi di dati
Portabilita codice: uniformita tipi di dati standard.
Booleani/stringhe bit Interi Interi senza segno Reali Temporali/stringheBOOL INT UINT REAL TIMEBYTE SINT USINT LREAL DATEWORD DINT UDINT TIME OF DAYDWORD LINT ULINT DATE AND TIMELWORD STRING
Dimensione fissa eccetto per temporali (dipende dal sistema disviluppo).Si veda l’appendice D per le proprieta dei tipi di dati.
Stefano Miani
Definizione nuovi Tipi di dati (derivati)
TYPERealeLungo: LREAL; (* nome facile *)FP: RealeLungo; (*definizione basata su nuovo
tipo*)FP I1: LREAL:=1.0; (*nuovo valore iniziale*)tControl: BOOL:=TRUE; (*nuovo valore iniziale*)
END TYPE;
Proprieta SignificatoVal inizialeEnumerativo Valori come da lista (interi)Range Valori nel campo definitoArray Matrice di elementi stesso tipoStruttura Elemento complesso con piu tipi di dati
Stefano Miani
TYPEColore: (ros, gia, ara); (*enumerativo*)Semaforo: Colore;Filamacchine: INT (0..20); (* range, inizializzato
a sx*)Altre file: ARRAY[1:8] of FilaMacchine;Incrocio a 4: (*struttura*)STRUCTSemafori: ARRAY[1..4] OF Semaforo;File: array[1..4] OF FilaMacchine;
END STRUCT;END TYPE
VARFile Persone: Altre File:=[1,3,2(1,4),0,5];
END VAR;Array o strutture di FB non sono al momento permessi (futuraintroduzione).Nesting (annidamento) di array e strutture permesso (senzaricorsione)
Stefano Miani
Tipi di dati generici
Tipi di dati gerarchicizzati. Tipi generici utilizzati per overloadingdi funzioni, vietati nelle dichiarazioni.Lo standard prevede una strutturazione dei tipi di dati:
I BOOL, BYTE, WORD, etc., sono “figli” di ANY BIT;
I INT, SINT, UINT, DINT etc. sono “figli” di ANY INT;
I REAL, LREAL sono “figli” di ANY REAL;
I ANY INT e ANY REAL sono “figli di ANY NUM;
I DATE, TIME OF DAY, DATE AND TIME sono figli di“ANY DATE;
I ANY BIT, ANY NUM e ANY DATE sono figli di “ANY”.
Stefano Miani
Variabili
I Proprieta specificata dal tipo di dato;
I Inizializzazione esplicita variabile;
I Informazioni sulle dimensioni dell’array;
I Tipo di variabile (blocco dichiarativo) e attributo
tipo di variabile︷ ︸︸ ︷VAR OUTPUT
attributo︷ ︸︸ ︷RETAIN
Pippo︸ ︷︷ ︸Nome variabile
: BYTE︸ ︷︷ ︸tipo
:=12︸ ︷︷ ︸Val iniz.
;
END VAR;Enumerazioni, range e strutture non possono essere inizializzati.La dichiarazione di un’istanza di FB equivale a dichiarazione di unavariabile, quella di un FB al tipo (inizializzato qui).
Stefano Miani
I/O e memoria
I Rappresentazione diretta (old style);
I Rappresentazione simbolica (new style);
AT+%+(I,Q,M)+( ,X,B,W,D,L)+v.w.x.y.z=PLC.bus.modulo.word.bit (dipende dal sistema)
%I30 Bit 80, ingresso%IW20 Word 7, ingresso%M3.0 Flag 0 della word 2, memoria%QX5.2.1 Byte 1 della word 1 del modulo 5, uscita
VARAT %IW6: WORD;AT %QD3: DINT;OUT HG AT %QW7: WORD;AD 3 AT %QD3: WORD;
END VAR
Stefano Miani
Array, strutture e inizializzazione
VAR Prova: Incrocio a 4;END VAR;...Prova.Semafori[1]:=ros;Prova.File[2]:=17;
Priorita di inizializzazione:
1. RETAIN (warm restart) >
2. Inizializzazione con variabile (cold restart) >
3. Inizializzazione con tipo (cold restart).
Il valore iniziale di Ingressi e uscite dipende dal sistema.Inizializzazione non permessa per: EXTERNAL e VAR IN OUT
Stefano Miani
Attributi e rappresentazione grafica di variabili
I RETAIN, CONSTANT: associati all’intera sezione (IN, OUT,etc.);
I R EDGE, F EDGE, READ ONLY, READ WRITE: singola variabile(si veda capitolo 5 per R EDGE)
TIPO DI VAR RETAIN CONSTANT R/F EDGE(g) READ ONLY/WRITEVAR 1 1 0 0IN(g) 0 0 1 0OUT(g) 1 0 0 0IN OUT(g) 0 0 0 0EXTERNAL 0 0 0 0GLOBAL 1 1 0 0ACCESS 0 0 0 1
Table: Attributi e possibilita di rappresentazione grafica delle variabili
Stefano Miani
IL
Label: Operatore/Funzione Operand1,(Operando2,..) commentoNome etichetta Operatore o funzione uno o piu operandi (* ...*)
EsempioCND1: LD In1 (* carica in1 su accumulatore *)
AND Out2 (* AND di accumulatore con Out2 *)....
JMPCN CND1 (* se accu=1, salta a CND1
NOTA: ; non ammesso in IL.Risultato intermedio (tipo di dato elementare, derivato, functionblock) memorizzato nell’accumulatore virtuale (Current Result,CR). Vedi esempio in aula. Alcuni operatori possono modificare ilCR: Crearlo (C, es: LD), Elaborarlo (P, es: GT), Lasciarloimmutato (U, es ST),lasciarlo indefinito (-, es: return da FB).
Stefano Miani
Operatori, modificatori
Operatore+N+C+(
I N negazione operando: ANDN, ORN, LDN;
I ( parentesi (anche piu livelli);
I C condizionale (= se CR=TRUE): JMPC;
I Operatori Booleani: LoaD, AND, AND(, OR, OR(,XclusiveOR, XOR(, STore, Set (operando= TRUE seCR=TRUE), Reset (operando=FALSE se CR=TRUE), );
I Operatori generici: LD, ST, ADD, SUB (CR-operando),DIV (CR/operando), GreaterThan (CR>operando), GT(,GE, GE(, EQ, EQ(, NE, NE(, LE, LE(, LT, LT(, );
I Operatori di salto o chiamata: JuMP, JMPC+N(salti/condizionato a label), CALl, CALC+N(esecuzione/condizionata FB ), RETurn, RETC+N(return/condizionato da FB o FUN ), nome funzione;
Stefano Miani
Chiamata di Funzioni e Function Block
FUNLD operando1 (*modificatori (N, C, ( non ammessi*)
nome funzione+spazio+operando2,+operando3,+..FB
I chiamata con nome parametri attuali e formali di ingresso traparentesi: Time1(IN1:=1, IN2:=-1)
I memorizzando i parametri formali negli attuali +CALnome FB:LD 1 (* Attuale *)
ST Time1.IN1 (* Formale *)
LD -1 (*Attuale *)
ST Time1.IN2 (* Formale *)
CAL Time1 (* Chiamata *)
LD Time1.OUT (* formale *)
ST Mio out (* Attuale, POU chiamante *)
Stefano Miani
Esempio IL
1. Tre sensori, S1, S2 e S3, segnalano la presenza in ciascunastazione. La variabile StationStop memorizza il numero distop;
2. Il controllo del motore avviene mediante:Direction (1=avanti, 0=indietro), a tenutaStartStop: (1=start, 0= stop)
3. All’interno della cabina, il controllo dell’apertura della portaavviene mediante il segnale DoorOpenSignal (1=apri,0=chiudi);
4. I motori per l’apertura/chiusura della porta vengono attivatidal fronte di OpenDoor e CloseDoor;
5. L’avvio/stop del sistema avviene mediante il pulsante MrStart,MrEnd.
6. E necessario segnalare con un segnale di pericolo il sistema instato di stop.
Stefano Miani
FUNCTION BLOCK MRCONTROL
VAR INPUT
MRsTart: BOOL R EDGE;
MREnd: BOOL;
S1, S2, S3: BOOL R EDGE;
DoorOpenSignal: BOOL;
END VAR
VAR IN OUT
STartStop: BOOL;
END VAR
VAR OUTPUT
OpenDoor, CloseDoor: BOOL;
END VAR
VAR OUTPUT RETAIN
EndSignal: BOOL;
END VAR
VAR
StationStop: CTU; (*contatore numero di stop*)
DoorTime: TON; (*chiusura ritardata porta*) END VAR
VAR RETAIN
Direction: BOOL; (direzione: su=1, giu=0*) END VAR
(* Prima partenza? Azzera tutte le variabili *)
LD MRstart
R EndSignal
JMPC ResCount
JMP Arrive
ResCount: LD 1
ST StationStop.Reset LD 9999
ST StationStop.pv
CAL StationStop (*FB *)
JMP Closecabin
Stefano Miani
Arrive:LD S1
OR S2
OR S3
R StartStop
CALC StationStop(RESET:=0, CU:=1)
LD S1
XO3 S3
JMPCN NoDirChange
LD Direction
STN Direction
NoDirchange:LD OpendoorSignal
ANDN STartStop
ST Opendoor
LD Mrend
ANDN StartStop
S EndSignal
JMPC Pouend
CloseCabin:LD DoorOpenSignal
STN CloseDoor
LDN DoorOpenSignal
ANDN StartStop
ST Doortime.IN
LD T#10s
ST Doortime.PT
CAL DoorTime
LD DoorTime.Q
S StartStop
PouEnd: RET
END FUNCTION BLOCK
Stefano Miani
ST
Pro: Alto livello, formulazione/scrittura compatta, chiara, potentee strutturata (niente JMP o GOTO)Contro: assenza controllo compilazione, minore efficienza.Istruzioni (statement) separate da ’;’. L’EOL o LF=spazio. Piuistruzioni su una linea o istruzione su piu linee. Commentiall’interno delle istruzioniA:=(*operatore assegnazione *) IN1 (*ingresso*) AND
(*operatore*) IN2;
Stefano Miani
Statement
I assegnazione: a:=10;
I chiamata FB : nome FB(IN1:=10,IN2:=10,mio out);
I terminazione POU ante tempo: RETURN (*a POU chiamante *);Assegnare la variabile di uscita di una FUN prima delRETURN
I selettore binario: IF a<3 THEN g:=4; ELSEIF a=3 THEN g:=7;ELSE g:=0; END IF;
I selettore multiplo: CASE nome var OF 1: g:=11; 2: g:=12; ELSEg:=0; END CASE;
CONTINUA
Stefano Miani
I ciclo (numerato) FOR: FOR nome var:=val ini TO val fin BY passoDO h:=h/2; END FOR;1) nome var, val ini, val fin e passo dello stesso tipo2) non alterare nome var, val ini e val fin all’interno del loop(passo?);
I ciclo (controllo inizio) WHILE: WHILE nome var=TRUE DOh:=h/2; IF h<= 1 THEN nome var:=FALSE; END IF;END WHILE;
I ciclo (controllo fine) REPEAT: REPEAT nome var:=nome var*2;UNTIL nome var¡=100; END REPEAT;
I terminazione ciclo: EXIT; (* esce dal LOOP prima del verificarsidella condizione di fine loop*)
I vuota: ;; (* per migliore leggibilita codice *);
Stefano Miani
Espressioni e operatori
I PROG=lista di istruzioni, istruzione= lista di espressioni,espressioni= operando+operatore+operando
I Operatori: parentesi, chiamata di funzione (nomefunzione+parametri), potenza **, opposto -,NOT, AND, OR,XOR, confronto <, <=, >,>=, =, etc.
I Regole di precedenza classiche (* > + e -, parentesi > altre,etc.), definite da standard (tabella 4.6)
I non utilizzare mai FB all’interno di espressioni (nonproducono un valore come le FUN ).
Stefano Miani
Esempio ST
I Regolazione dei due speaker a seconda del valore delbilanciamento (balance), INT tra -5 e +5, e del volume , INTtra 0 e 10. L’uscita agli amplificatori e un REAL;
I Controllo del volume. Un LED deve segnalare se il volumeeccede un valore di sicurezza per un tempo predefinito e taleevenienza deve essere segnalata al programma chimante;
I Il programma deve essere parametrizzato per due modelli.
L
−5 5
0 0
−10 10
Bal Vol
R
Figure: Diramazioni, crossing e wired-OR
Stefano Miani
FUNCTION BLOCK Volume
VAR INPUT
BalControl: SINT(-5..5); (* bilanciamento, intero da -5 a 5 *)
VolControl: SINT(0..10); (* volume, intero da O a 10 *)
ModelType: BOOL; (* 2 modelli: TRUE o FALSE *)
END VAR
VAR OUTPUT
RightAmplif, LeftAmplif: REAL; (* variabile regolazione ampli dx e sx*)
LED: BOOL; (* LED di allarme on: TRUE; off: FALSE *)
END VAR
VAR IN OUT
Critical: BOOL; (* return value *)
END VAR
VAR
MaxValue: REAL:=26; (* max. amplificazione; se attiva a lungo, LED=ON *)
HeatTime: TON; (* istanziazione FB*)
(* per controllare tempo attivazione max amplif.*)
Overdrive: BOOL; (* stato di allarme *)
END VAR
Stefano Miani
(* Regolazione ampli destro in funzione di bilanciamento e volume*)
RightAmplif:= Norm (LCtrlK := VolControl,Type := ModelType,BIK := BaIControl+5);
(*Regolazione ampli sx*)
LeftAmplif:=Norm (LCtrlK := VolControl,Type := ModelType,BIK:= ABS(BaIControl- 5));
(* Amplificazione troppo alta? *)
IF MAX(LeftAmplif, RightAmplif) >= MaxValue THEN
Overdrive := TRUE;
ELSE
Overdrive := FALSE;
END IF;
(* Amplificazione troppo alta per piu di 2 secondi? *)
HeatTime (IN := Overdrive, PT := T#2s);
LED := HeatTime.Q;
IF HeatTime.Q = TRUE THEN
Critical:= 1;
END IF;
END FUNCTION BLOCK
Stefano Miani
FUNCTION Norm: REAL
VAR INPUT
BIK: SINT;(* bilanciamento *)
LCtrIK:SINT;(* volume *)
Type: BOOL;(* 2 tipi: TRUE o FALSE *)
END VAR
TYPE
CalType : REAL := 5.0; (* nuovo tipo di dato con val. iniz. =5.0 *)
END TYPE
VAR
Calib:CaIType; (* Fattore di scala per l’uscita su ampli *)
END VAR
(* Calcola il valore dell’ampli a seconda di volume, bilanciamento e modello *)
Norm := SINT TO REAL(BIK) + (* bilanciamento *)
Calib + (* + fattore di scala *)
SEL(G := Type, IN0 := 4.0, IN1 := 6.0) + (* + fz. del modello *)
SINT TO REAL(LCtrIK); (* + volume*)
END FUNCTION
Stefano Miani
Struttura FBD e LD
1. Intestazione e conclusione della POU
2. Dichiarazione di variabili
3. Codice: suddiviso in reti (networks), numerate in sequenza inmaniera automatica (0001, 0002 ). Il numero svolge il ruolo di“numero di riga” di un classico linguaggio di programmazione.Ogni rete consiste di
3.1 Etichetta (label): per raggiungere le istruzioni della rete daaltra rete (JUMP). Il nome e locali=visibilita limitata allaPOU in cui si trova.
3.2 Commento3.3 Grafico funzionale (funzionamento della rete)
numerazione automaticaz}|{0010
nome scelto dall’utentez }| {Nome label :
(∗ Commento∗)
grafico funzionale
Stefano Miani
Elemento1
Elemento2
Elemento3
Elemento4
Elemento1 Elemento3
Elemento4Elemento2
Wired OR solo in LD
Figure: Diramazioni, crossing e wired-OR
network_X:
seconda_parte
prima_parte conn1
conn1
schermo
connettore (locale POU)
Figure: Connettori
Stefano Miani
funzione
AND
VarAnd1
VarAnd2 CTUCU
R
PV
Counter_1
Blocco funzionaleistanza
1000
Var_start
Q
CV
VarOut
ab
d
>=1
c&
ab
c d+
*d=c and (a or b) d=c+ab
Figure: Connessione di FUN eFB
a
c d+
*ab
c d+
*d
feedback implicito feedback esplicito
Figure: Feedback
Stefano Miani
Oggetto Nome Significato Esempio
1—<RETURN>RETURN incondizionatoRET
restituisce il controllo alla POU chiamante [0005]
nwp—<RETURN>RETURN condizionatoLD nwpRETC
se nwp==1 termina la POU e ritornaa chiamantese nwp==0, ignora
[0005]
1—>>nome labelsalto incondizionatoJMP nome label
salta a network indicata
nwp—>> nome labelsalto condizionatoLD nwpJMPC nome label
se nwp==1 salta a nome labelse nwp==0, ignora
[0004]
Reti elaborate dall’alto al basso (eventualmente con JUMP).Regole di elaborazione della singola rete: 1) necessariaelaborazione di tutti gli ingressi di un elemento (FUN o FB )prima dell’esecuzione dell’elemento 2) l’elaborazione di unelemento e completata solo quando tutti le uscite sono stateelaborate 3) l’elaborazione di una rete e completata quando tuttigli elementi sono stati elaborati
Stefano Miani
Esempio FBD
FUNCTION BLOCK Volume
VAR INPUT
BalControl: SINT(-5..5); (* bilanciamento, intero da -5 a 5 *)
VolControl: SINT(0..10); (* volume, intero da O a 10 *)
ModelType: BOOL; (* 2 modelli: TRUE o FALSE *)
END VAR
VAR OUTPUT
RightAmplif, LeftAmplif: REAL; (* variabile regolazione ampli dx e sx*)
LED: BOOL; (* LED di allarme on: TRUE; off: FALSE *)
END VAR
VAR IN OUT
Critical: BOOL; (* return value *)
END VAR
VAR
MaxValue: REAL:=26; (* max. amplificazione; se attiva a lungo, LED=ON *)
HeatTime: TON; (* istanziazione FB*)
(* per controllare tempo attivazione max amplif.*)
Overdrive: BOOL; (* stato di allarme *)
END VAR
Stefano Miani
FUNCTION Norm: REAL
VAR INPUT
BIK: SINT;(* bilanciamento *)
LCtrIK:SINT;(* volume *)
Type: BOOL;(* 2 tipi: TRUE o FALSE *)
END VAR
TYPE
CalType : REAL := 5.0; (* nuovo tipo di dato con val. iniz. =5.0 *)
END TYPE
VAR
Calib:CaIType; (* Fattore di scala per l’uscita su ampli *)
END VAR
Stefano Miani
LD
I deriva dagli schemi a contatti elettromeccanici
I principalmente utilizzato per funzioni logiche
I codice ordinato per networks, come in FBD
I ogni network e organizzata tra le “linee di potenza” a sx e dx
I la linea a sx e caricata al valore 1 (alto)
I i vari contatti lungo la linea lasciano passare (o fermano) ilvalore 1
Var1 Var2 Varout
Var3
0001 Prima_rete
Varout=Var1 and (Var2 or Var3)
Figure: LD
Stefano Miani
Contatti e bobineA
= (vsx) AND (NOT A)
AP
AA=vsx
Nota: con la lettera M nellabobina A e’ di tipo RETAIN
A=TRUE se frontedi salita di vsxA= immutato altrimenti
AP
A= (vsx) AND A Contatto aperto/chiuso
AN
= TRUE se
=FALSE altrimenti
= TRUE se
2) vsx=TRUE=FALSE altrimenti
1) fronte salita A
1) fronte discesa A2) vsx=TRUE
AA=NOT(vsx)
AS
A=TRUE se vsx=TRUE immutato, altrimenti
AR A=FALSE se vsx=TRUE
immutato, altrimenti
Contatto rising edge
Contatto falling edge
Bobina
Bobina negata
Bobina set
Bobina reset
Nota: anche SM
Nota: anche RM
Bobina rising/falllingedge
AN
vsx
Figure: LD
Stefano Miani
Controllo del programma
Oggetto Nome Significato Esempio
——<RETURN>RETURN incondizionatoRET
restituisce il controllo alla POU chiamante [0011]
—nwp—<RETURN>RETURN condizionatoLD nwpRETC
se nwp==1 termina la POU e ritornaa chiamantese nwp==0, ignora
[0005]
——>>nome labelsalto incondizionatoJMP nome label
salta a network indicata [0002,4]
—nwp—>> nome labelsalto condizionatoLD nwpJMPC nome label
se nwp==1 salta a nome labelse nwp==0, ignora
[0001,8]
Stefano Miani
Chiamata di FB
Come in FBD, ma almeno un ingresso e un’uscita devono essereBOOL e collegati alle linee di potenza sx e dx.
nwp nwpCTU
CU
R
PV
Counter_1
Blocco funzionaleistanza
Q
CVSetValue
ResVar
Figure: Chiamata FB
Stefano Miani
Chiamata di FUNLe FUN dispongono di ulteriori I/O BOOL: EN e ENO, dacollegare (direttamente o tramite altre reti) alle line potenza.
I Se EN=FALSE, la funzione non viene eseguita eENO=FALSE;
I Se EN=TRUE, ENO viene inizializzato a TRUE;I Durante l’esecuzione della funzione ENO puo essere assegnato;I Se durante l’esecuzione della FUN c’e un errore (vedi
appendice E), ENO=FALSE.
nwp nwpSEL
EN
IN1
SelVar GIN0
Var2
Var1
ENOOutVar
Figure: Chiamata FUN
Stefano Miani
Esecuzione e feedback
Come in FBD, riga per riga da alto verso basso. Per quantoriguarda l’elaborazione della singola rete, dipende dal sistema,tipicamente, da sx a dx. Si vedano figure 4.38 e figura 4.39.In LD e ammesso il solo feedback implicito (nessunaretroconnessione).
Var1 Var2
Var3
0001 Prima_rete
Var1
Figure: Feedback
Si sconsigila l’utilizzo di feedback con variabili di uscita di FB
Stefano Miani
Esempio in LD
FUNCTION BLOCK MRCONTROL
VAR INPUT
MRsTart: BOOL; (*segnale avvio*)
MREnd: BOOL; (* avvio procedura stop*)
S1, S2, S3: BOOL; (* sensori di stazione*)
DoorOpenSignal: BOOL;(switch apertura porta: 1=aperta, 0=chiusa*)
END VAR
VAR IN OUT
STartStop: BOOL; (* movimento cabina: 1=movimento, 0=ferma*)
END VAR
VAR OUTPUT
OpenDoor, CloseDoor: BOOL; (* motori apertura/chiusura porta*)
EndSignal: BOOL; (* segnale avviso sistema spento*)
END VAR
VAR OUTPUT RETAIN
EndSignal: BOOL;
END VAR
VAR
StationStop: CTU; (*FB contatore numero di stop*)
DoorTime: TON; (*FB chiusura ritardata porta*)
Dirswitch: SR; (*FB flip-flop SR per cambio direzione*)
END VAR
VAR RETAIN
Direction: BOOL; (* direzione attuale*)
END VAR
Stefano Miani
0001:
(* Se il sistema viene avviato per la prima volta dopo shut-down, resetta EndSignal*)
0002:
|--------->> Arrive
0003 ResCount:
(*Risetta il contatore di stazioni*)
0004:
|--------->> CloseCabin
0005 Arrive:
(* incrementa il valore del contatore di stazioni se la cabina arriva ad una stazione *)
Stefano Miani
0006:
(* Cambio di direzioni su stazione 1 e 3*)
0007:
(* se sono verificate le condizioni per aprire la porta, attiva OpenDoor *)
0008:
(*se richiesto il poweroff, segnalalo e esci*)
0009 CloseCabin:
(* chiudi la porta quando l’interruttore di apertura porta viene chiuso *)
Stefano Miani
0010:
(* la cabina riparte 10 secondi dopo l’attivazione dell’interruttore porte*)
0011 PouEnd:
(* return a POU chiamante *)
|---------<RETURN>
END FUNCTION BLOCK
Stefano Miani
SFC
I utilizzato per scomporre in sottounita programmi ad elevatacomplessita;
I scomposizione in processi sequenziali e paralleli;
I la temporizzazione delle sottounita dipende da condizionistatiche (variabili funzione del programma) e dinamiche (I/Odel PLC);
I le sottounita sono programmate in uno dei quattro linguaggivisti (LD, IL, ST, FBD);
I SFC deriva dalle reti di PETRI e viene verificato formalmente;
I linguaggio grafico (immediato), ma ammette descrizione informato testuale (interscambio, backup);
I descrizione di funzioni in SFC non permessa
I se una POU e scritta in SFC, allora tutta la POU deve esserestrutturata in SFC
Stefano Miani
Processo chimico
1. Riempimento serbatoio fino a sensore pieno;
2. Chiusura valvola riempimento e attivazione mixer fino araggiungimento mixing desiderato;
3. Interruzione mixer, svuotamento serbatoio mediante aperturavalvolva uscita.
Lavabiancheria
1. Apertura valvola acqua e riempimento serbatoio fino a sensorepieno;
2. Rotazione cestello per intervallo funzione del carico e cicloscelto
3. ...
4. Centrifuga, svuotamento
Stefano Miani
I POU in SFC suddivisa in una o piu reti (networks), ciascunacomposta da passi (step) e transizioni (transitions);
I step: attivo o inattivo. Se attivo, viene ripetuto un set diistruzioni (actions) fino alla disattivazione;
I transition: disattivano gli step a monte e attivano gli step avalle: lo stato di attivo (token) viene passato dai predecessoriai successori;
I i token non possono moltiplicarsi o circolare in manieraincontrollata: strumenti per la verifica formale del correttofunzionamento;
I il verificarsi di una transizione dipende dalla condizione ditransizione=espressione booleana;
I una POU ha sempre uno step iniziale da cui parte;
Stefano Miani
Sequenza singola: ST=⇒ Trans =⇒ SB Se ST e attiva, alverificarsi di Trans, il token viene passato a SB.
Percorso divergente (1/3): selezione di una sola sequenza, conpriorita decrescente da sx a dx (asterisco) Se ST e attiva, letransizioni Trans1, Trans2,.... vengono verificate e la prima diqueste che e vera (l’iesima), disattiva ST e attiva a vallel’iesimo step SB. Anche in formato testo
Percorso divergente (2/3) con priorita assegnata: selezione di
una sola sequenza, con priorita assegnata dall’utente. Solo
grafico.
Stefano Miani
Percorso divergente (3/3) mutuamente esclusivo: come ildivergente, ma senza precedenza e con condizioni di transizionemutuamente esclusive (una sola TRUE per volta). Solo grafico.
Convergenza di sequenze: quando uno degli step STn e attivoe la corrispondente Transn diventa TRUE, STn viene disattivatoe il token passato a SB.
Sequenze simultanee (parallelo): if ST=ACTIVE and Trans=TRUE then stop(ST); start(SB1); start(SB2); end if.
Convergenza di sequenze in parallelo: se tutte le STn sono
attive e Trans =TRUE, allora interrompile tutte e attiva SB.
Stefano Miani
Anello: come il divergente sotto (1/3, 2/3, 3/3), con lapossibilita di ritornare a uno step a monte.
Sequenza di bypass: come il divergente a monte (1/3, 2/3,3/3), step vuoto su un canale.
Stefano Miani
I Rete insicura: token incontrollato;
I Rete irragiungibile: token non puo mai raggiungere alcunistep;
Figure: Rete insicura (sx) e rete irragiungibile (dx)
Stefano Miani
Step
I step=set di istruzioni eseguite fino a che lo step e attivo
I deattivazione tramite transition=condizione booleana ditransizione
I transizioni programmate in IL, FBD, LD, ST
Stefano Miani
Collegamento all’action blockfornisce flag attivazione
nome_step
Nome dello step
(*corpo dello step *)END_STEP
STEP nome_step:
Collegamento all’action blockfornisce flag attivazione
nome_step
Nome dello step
(*corpo dello step *)END_STEP
INITIAL_STEP nome_step:
Figure: Rappresentazione grafica e testuale di uno step
I nome step.X (WP), variabile definita in modo implicito, flagdi attivazione dello step (step flag)=TRUE/FALSE
I nome step.T (WP), tempo di attivazione dello step. =0 se lostep non e mai stato attivo, altrimenti la durata dell’ultimaattivazione. Se e necessario utilizzare tale informazione alciclo successivo: POU di tipo RETAIN
Stefano Miani
Transition
Una transizione attiva gli step a valle se (a) tutti i passi a montesono attivi e (b) la condizione di transizione e vera.Descrizione di una transition:
1. Sintassi immediata: condizione di transizione scritta a fiancodella transizione (ST, LD, FBD). Espressioni booleane consola assegnazione alla variabile di transizione (FUN OK, FBKO);
2. Connettori: condizione di transizione fornita dalla reteassociata al connettore (LD, FBD);
3. Nome della transizione: la transizione viene descrittaseparatamente (LD, ST, FBD, IL). La stessa descrizione puoessere utilizzata per piu transizioni.
Stefano Miani
TRANSITION FROM (stepM 1,..,stepM n) TO (stepV 1,..,stepV n):
LD Var1
AND Var2 (*il CR deve contanere un BOOL alla fine*)
END TRANSITION
TRANSITION FROM (stepM 1,..,stepM n) TO (stepV 1,..,stepV n)
:= Var1 & Var2 (*espressione booelana*)
END TRANSITION
Desiderata non ancora implementati:TRANSITION nome transition FROM (stepM 1,..,stepM n) TO (stepV 1,..,stepV n):
(* condizione di transizione*)
END TRANSITION
Stefano Miani