Programmazione di dispostivi industriali IEC 61131-3 · Premessa I > uso dei PLC grazie al...

89
Programmazione di dispostivi industriali IEC 61131-3 Stefano Miani 1 1 Dipartimento di Ingegneria Elettrica, Gestionale e Meccanica Universit´ a degli Studi di Udine A.A. 2007-08 Stefano Miani

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

Figure: Esempio codice FBD (continua)

Stefano Miani

Figure: Esempio codice FBD (continua)

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

Figure: Esempio codice FBD

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

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

Stefano Miani

Stefano Miani

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