versione 3 - epielettronica.it · realizzare la logica di comando mediante il cablaggio di...

54
Versione 3.X Versione 3.X Ambiente di programmazione a Ladder per schede

Upload: vuminh

Post on 05-Jan-2019

218 views

Category:

Documents


0 download

TRANSCRIPT

Versione 3.X Versione 3.X

Ambiente di programmazione

a Ladder per schede

Manuale di programmazione del PLC

Sommario I

Sommario

INTRODUZIONE..................................................................................................................................................... III

GENERALITÀ .............................................................................................................................................................IIIBreve introduzione al PLC Ladder....................................................................................................................... IVI componenti base del PLC ..................................................................................................................................VI

I nomi degli elementi...........................................................................................................................................................VILa numerazione degli elementi............................................................................................................................................VI

Il PLC virtuale.....................................................................................................................................................VIILocalizzazione degli I/O esterni ........................................................................................................................................ VII

I nomi degli elementi ............................................................................................................................................ IXIngressi digitali....................................................................................................................................................................IXUscite digitali ......................................................................................................................................................................IXIngressi analogici.................................................................................................................................................................IXUscite analogiche ................................................................................................................................................................IXWord interne........................................................................................................................................................................IXWord di sistema (WF) ..........................................................................................................................................................X

Relè speciali .....................................................................................................................................................................XRelè interni (WR) .................................................................................................................................................................XTemporizzatori .....................................................................................................................................................................XContatori..............................................................................................................................................................................XI

CAPITOLO 1..............................................................................................................................................................1

LA PROGRAMMAZIONE................................................................................................................................................1Contatti e Bobine....................................................................................................................................................2Utilizzo di memorie (relè) interne...........................................................................................................................3Rilevare le transizioni: i DIF .................................................................................................................................4SET e RESET..........................................................................................................................................................5Trappole derivanti dalla simulazione dei circuiti ..................................................................................................6Timers e Counters ................................................................................................................................................11I numeri ................................................................................................................................................................14Word e Interi ........................................................................................................................................................15LSB, MSB ed altre comuni suddivisioni ...............................................................................................................15La notazione esadecimale ....................................................................................................................................16

CAPITOLO 2.............................................................................................................................................................19

LE ISTRUZIONI BASE.................................................................................................................................................19Regole di programmazione ..................................................................................................................................20

Circuiti non ammessi...........................................................................................................................................................20Caratteristiche e limiti della tipologia dei circuiti ...............................................................................................................23

Immagine interna e attuazioni esterne .................................................................................................................24Contatti DIF e DIFN ............................................................................................................................................25Bobine di SET e RESET .......................................................................................................................................26Timers e Counters ................................................................................................................................................27

I Timers ...............................................................................................................................................................................27SetPoint variabili .............................................................................................................................................................28

Counters e Clear Counter ....................................................................................................................................................28SetPoint variabili .............................................................................................................................................................28

CAPITOLO 3............................................................................................................................................................29

LE ISTRUZIONI ARITMETICHE....................................................................................................................................29Regole di programmazione ..................................................................................................................................30L'Assegnazione .....................................................................................................................................................31Assegnazioni indicizzate.......................................................................................................................................31

Creazione di un vettore dati.............................................................................................................................................31Addizione e Sottrazione ......................................................................................................................................................33

La gestione dell'Overflow................................................................................................................................................33Moltiplicazione ...................................................................................................................................................................34

WELL-LITE Versione 3.x

SommarioII

Divisione .............................................................................................................................................................................34Incremento e Decremento....................................................................................................................................................34

Le comparazioni................................................................................................................................................... 35Le comparazioni nel Ladder ................................................................................................................................................35SET e RESET di bit singoli.................................................................................................................................................35

Le operazioni logiche........................................................................................................................................... 36Test di bit.............................................................................................................................................................................36

Esempi di programmazione con aritmetiche........................................................................................................ 37

Manuale di programmazione del PLC

Introduzione III

I N T R O D U Z I O N EI N T R O D U Z I O N E

GeneralitàQuesto testo contiene il manuale di programmazione del PLCdi WELL-LITE.Esso descrive le istruzioni utilizzabili per scrivere un programma PLC ecome esse vadano organizzate.Il sistema WELL-LITE fornisce sia il software per eseguire i programmi(runtime) che gli attrezzi necessari a scriverli ed effettuare le prove difunzionamento (sistema di sviluppo).Non chiede al lettore particolari prerequisiti. È vantaggioso tuttaviapossedere una certa familiarità con la logica booleana e con larappresentazione binaria ed esadecimale delle quantità numeriche.Il set di istruzioni PLC di WELL-LITE risponde alle normativeinternazionali IEC 1131.Tali norme tuttavia si limitano ad un elenco ristretto di istruzioni:WELL-LITE oltre a contemplare interamente quelle previste ne rendedisponibili molte altre che aumentano sensibilmente la potenza dielaborazione.Il sistema WELL-LITE viene applicato alle schede EPI modelloEPS-PROG-DA e EPS-PROG LT.

Caratteristiche generaliCaratteristiche generali di utilizzo delle schede EPS-PROG LT eEPS-PROG-DA con sistemaWELL-LITE:

- N° 1900 Istruzioni* max.

- Tempo di esecuzione per singola istruzione* = 7.3 µsec (137.000istruzioni/sec).

- N° 2000 WR max (Word ritentive H7D0)

- N° 6 WF (Word di sistema)

- N° 30 TIMERS (00 ÷ H1D)

- N° 30 COUNTERS (H1E ÷ H3B).

∗ Per “istruzione” Ladder si intende la minima entità che genera codicecompilato. Un’istruzione è, ad esempio, un contatto, un’uscita ecc.

WELL-LITE Versione 3.x

IntroduzioneIV

Breve introduzione al PLC LadderIl nome PLC deriva dalle iniziali di Programmable Logic Controller cioècontrollore a logica programmabile che ne dà una definizione quanto maigenerica. Esso si è storicamente identificato con apparecchiature composteda una CPU di elaborazione e da punti di I/O (a cui vengono collegati isegnali elettrici provenienti dal campo) a cui viene affidato il compito dicontrollare il funzionamento di una macchina o di un processo industriale.Il controllo viene realizzato simulando la logica ed i dispositivi che, primadell'avvento del microprocessore e della tecnologia d'integrazione sulsilicio, erano già adoperati a questo scopo.Il vantaggio dei PLC è consistito nell'aver permesso di non doverrealizzare la logica di comando mediante il cablaggio di componentiesterni poiché è divenuto possibile eseguire i collegamenti a programma(all'interno della CPU) limitando così le connessioni fisiche a quellenecessarie per raggiungere i soli segnali di ingresso e uscita.Nell'esempio elementare della figura si dà un'idea di come si possarealizzare un controllo cablato. Lo schema ricalca esattamente icollegamenti che occorre portare sia agli elementi da controllare (pompa elampada) che a quelli di controllo (relè).Con il PLC si eliminano sia i collegamenti che gli stessi componenti chehanno la funzione di realizzare la logica di controllo (nell'esempio si trattadel solo relè).Altro indubitabile vantaggio dell'avere i componenti necessari alla logica,direttamente simulati all'interno della CPU, è stato che il loro costo èdiventato effimero. Ciò ha naturalmente portato a sviluppare automazionisempre più complesse con un numero di relè, contatori e temporizzatorialtrimenti impensabile.Il questi ultimi 15 anni il PLC ha rivoluzionato il modo di fareautomazione, tuttavia il linguaggio di programmazione più diffuso èrimasto ancora quello che simula il cablaggio (esso è detto comunementeLadder).Ciò è legato senz'altro a motivi storici ma anche al fatto che esso è quelloche più si adatta a descrivere la realtà fisica nel caso del controllo dimeccanismi (una dissertazione su di esso ci porterebbe purtroppo fuoridagli scopi di questo testo, basti qui solo citare che la validità di questoapproccio è stata giustificata anche teoricamente agli inizi degli anni '80).A fianco è riportato un esempio di descrizione a contatti. Essa risultacomprensibile senza che si debbano possedere particolari nozioni diprogrammazione ed è immediatamente evidente anche per gli impiantisti oper coloro che debbano concentrarsi sugli aspetti applicativi (meccanici etecnologici) di una realizzazione.

- La logica Ladder è tipicamente legata al trattamento diinformazioni cosiddette ad 1 bit: ON/OFF o acceso/spento oaperto/chiuso.Le informazioni ad 1 bit vengono descritte in forma graficamediante Contatti o Bobine.

Anche questa terminologia è di derivazione pratica: un relè è infatticomposto da una bobina che quando è attivata permette di chiudere uncontatto. I contatti sono quindi sempre elementi di ingresso e le bobinesolo elementi di uscita.Un contatto ed una bobina appartenenti allo stesso relè sono individuatidallo stesso nome: il nome del relè.Il simbolo di bobina serve a contrassegnare anche le uscite fisiche.Nella figura precedente infatti sia la bobina del relè che l'uscita che attivala pompa sono individuate allo stesso modo. Per questo motivo si dicespesso indifferentemente uscita o bobina.La programmazione del PLC non si ferma a questi componenti elementari,infatti, la possibilità di sfruttare le capacità di elaborazione di unmicroprocessore ha portato presto ad integrare nel Ladder anche il calcolonumerico, introducendo così ulteriori elementi di raffinatezza nelcontrollo.

Logica per il riemp imento di una vasca

Comando RelèVasca Piena

PompaLiquido

LampadaSegnala-zione

Relè

SensoreVasca Piena

Esempio di Controllo realizzato tradizionalmente:

Comando RelèVasca Piena

PompaLiquido

LampadaSegnala-zione

Relè

SensoreVasca Piena

Esempio precedente in logica Ladder

Nota:

Contatto 'normalmente aperto'

Contatto 'normalmente chiuso'

Manuale di programmazione del PLC

Introduzione V

A fianco ne viene dato un esempio molto semplice dove si suppone didisporre di un sensore che dia un valore quantitativo del livello diriempimento del serbatoio.Le istruzioni di calcolo numerico vengono racchiuse in blocchi cosiddettiaritmetici. Il blocco ed i calcoli in esso contenuti, vengono eseguiti quandola logica (i contatti) posta alla sua sinistra lo attiva. Esso, nella logicaLadder, non è altro che un particolare tipo di uscita.Un programma scritto in linguaggio Ladder è costituito da una successionedi circuiti ognuno dei quali realizza un'operazione logica molto semplice.In questo modo è possibile realizzare sia più controlli indipendenti fra diloro che combinazioni la cui cooperazione attua una logica complessa.Il runtime esegue i circuiti nella sequenza in cui essi sono stati scritti e,raggiunta la fine del programma, riparte dall'inizio. Tale operazione vienechiamata Scansione Ciclica del Programma.

Logica per il riemp imento parziale di una vasca

ComandoRelè

Vasca PienaPompaLiquido

LampadaSegnala-zione

Abilitazione

Abilitazione

a metà riempimento

riempimento completo

Relè = Livello > 50

Relè = Livello > 100

WELL-LITE Versione 3.x

IntroduzioneVI

I componenti base del PLCIl PLC deve gestire informazioni di diverso tipo: Bit, Numeri, Tempi eConteggi. Esse sono contenute in elementi che si differenziano sia per latipologia delle informazioni racchiuse che per la diversa funzione svolta.Un loro elenco base è dato dalla lista seguente:� input digitali� output digitali� input analogici� output analogici� relè interni� word interne� timers� counters.Gli elementi chiamati digitali contengono informazioni di un solo bit: uninput digitale conterrà solamente uno 0 o un 1 corrispondenti allo statodel segnale (basso o alto, aperto o chiuso) presente su di un punto diingresso.Gli elementi analogici contengono informazioni numeriche. Ad esempiola temperatura di una caldaia (0-100 °C) o la velocità di motore(0-1000 rpm).I relè sono sempre elementi ad 1 bit.Le word contengono numeri con valore che può variare dal minimo di 0 almassimo di 655535 (senza segno). Poiché le word, in realtà, non sono cheassiemi di bit (16), esse possono essere anche viste come raggruppamentidi relè oltre che come cifre.I temporizzatori ed i contatori sono elementi più complessi checontengono tanto un'informazione ad 1 bit, per fornire lo stato dellatemporizzazione o del conteggio (0 se non è scaduta o 1 se lo è), che ilvalore corrente (intervalli di tempo trascorsi o numero del conteggio).Essi sono delle strutture.

I nomi degli elementiGli elementi del PLC sono individuati sia con simboli grafici diversi cheda nomi particolari.È convenzionale adoperare come prefisso nel nome un identificativo ditipo. Gli elementi dello stesso tipo vengono invece differenziati medianteun indirizzo o numero d'ordine.

- Il nome di un elemento è così individuato univocamente medianteuna stringa di caratteri in cui l'identificativo costituisce la primaparte e l'indirizzo la seconda. Non sono ammessi spaziall'interno del nome.

Il perché si siano imposti nomi così “rozzi” e non si siano adoperati deicriteri più liberali viene chiarito nel paragrafo seguente dove si descrive ilPLC virtuale e l'identificazione degli input e output.Tuttavia il sistema di sviluppo di WELL-LITE consente di sostituire inomi descritti con altri più direttamente esplicativi permettendo così alprogrammatore di individuare mnemonicamente la funzione chel'elemento svolge nel suo programma direttamente dal nome.

La numerazione degli elementiGli elementi sono numerati a partire dall'elemento 0 (zero) in avanti.Tutti gli elementi interni al PLC sono contigui. Ciò invece non èusualmente vero per quelli esterni. La numerazione segue la notazioneesadecimale: vengono utilizzate oltre alle cifre da 0 a 9 anche le cifre daA a F (con A di valore 10 fino a F di valore 15).

Facciamo un esempio� Le word interne sono individuate dal prefisso WR.� La WR23 è seguita, in memoria, dalla WR24 e preceduta dalla WR22.� Nella numerazione dopo la cifra 9 segue la cifra A. La WR1A è

preceduta dalla WR19 e seguita dalla WR1B.� La WR1F è seguita dalla WR20.

Manuale di programmazione del PLC

IntroduzioneVII

Il PLC virtualeWELL-LITE è stato studiato per essere indipendente dall'hardware, essoquindi si presenta come un PLC virtuale.L'idea non è assolutamente nuova: nel caso della programmazionetradizionale su personal computer si ha a che fare con una realtà fisicavirtuale. Ad esempio la gestione del video, della stampante, dei files, ecc.può avvenire senza che il programmatore debba entrare nel merito dicome questi siano effettivamente gestiti poiché li tratta in modo logico eduniforme. Ciò è possibile perché tutti i diversi dispositivi dello stesso tipohanno comunque, dal punto di vista dell'utilizzatore, delle caratteristicheche li accomunano. È così possibile demandare ai drivers di sistema il“lavoro sporco” della traduzione dell'immagine logica vista dalprogrammatore nella effettiva realtà fisica.Il vantaggio indubitabile di questo approccio è che la realtà fisica puòessere cambiata senza che i programmi perdano la loro validità e anche iprogrammi scritti per un determinato ambiente fisico possono esseretrasportati in altri ambienti completamente diversi.Tuttavia, poiché dobbiamo controllare una macchina o un impianto,occorre avere lo stesso uno strumento che ci consenta di individuare inmodo preciso i punti di ingresso ed uscita.La localizzazione degli I/O viene effettuata abbinando in modo biunivocogli I/O fisici a quelli previsti dal PLC Virtuale.Esso è organizzato in modo classico, è cioè composto da una CPU a cuivengono affiancate le diverse schede di I/O.Sono previsti 4 tipi di schede:� ingressi digitali� uscite digitali� ingressi analogici� uscite analogiche.Il nome di un punto ha come prefisso l'indicazione del tipo di scheda:� X per gli ingressi digitali� Y per le uscite digitali� WAX per gli ingressi analogici� WAY per le uscite analogiche.Inoltre, poiché i singoli bit possono essere visti raggruppati a 16 per voltanelle word, gli I/O digitali sono individuati anche dai prefissi:� WX per gli ingressi digitali� WY per le uscite digitali.Il resto del nome è dato dall'indirizzo.Nell'immagine di memoria gli indirizzi sono suddivisi per tipo e sono,all'interno di ogni tipo, contigui.Gli I/O esterni possono, fin qui, essere visti dal programmatore in mododel tutto analogo agli elementi interni.

Localizzazione degli I/O esterniL'immagine virtuale viene tradotta in quella reale dai drivers checontrollano l'hardware di I/O prescelto.Il runtime viene già fornito con il driver appropriato all'hardware adottato.Tuttavia il modo in cui gli I/O sono assortiti può essere molto diverso, adesempio gli I/O possono essere raggruppati in un rack a schede oppuredistribuiti su un Fieldbus. Al programmatore rimane quindi il compito diassegnare le corrispondenze fra elementi virtuali e reali mediante ilConfiguratore.Questa operazione è una prestazione fornita dal sistema di sviluppo ed èindipendente dalla programmazione.Il configuratore è molto flessibile poiché consente di fornire unadescrizione separata per ogni word di I/O (i singoli bit sono quindi riunitiin unità minime da 16) che il driver può adeguatamente utilizzare perpilotare il punto fisico.Le informazioni che occorre immettere durante la configurazionedipendono quindi dal driver e la loro descrizione va ricercata nelladocumentazione del runtime.

Il PLC Virtuale di WELL

CPUIngressiDigitali

UsciteDigitali

IngressiAnalogici

UsciteAnalogiche

WELL-LITE Versione 3.x

IntroduzioneVIII

Scambio dei Dati di I/O fra il PLC e il mondo esterno, Schede e Moduli

Driver

Driver

Driver

Driver

Input Dig.

Outp.Dig.

Input An.

Outp.An.

ProgrammaPLC

Immaginedegli I/O

Manuale di programmazione del PLC

Introduzione IX

I nomi degli elementi

Ingressi digitaliWELL-LITE può gestire fino a 48 punti di ingresso digitali. Essi possonoessere visti sia singolarmente come elementi ad 1 bit che come 3 gruppida 16 bit. I singoli punti di ingresso sono individuati come posizioni di bitall’interno della word. La numerazione all’interno della WX va espressa inesadecimale e varia da 0 a F.Il nome degli ingressi singoli è contraddistinto dal prefisso X, il nomedelle rispettive word dal prefisso WX.

Ad esempioX31.2 corrisponde al bit di posizione 2 nella WX31.

Uscite digitaliWELL-LITE può gestire fino a 48 punti di uscita digitale. Essi possonoessere visti sia singolarmente come elementi ad 1 bit che come 3 gruppida 16 bit.Il nome delle uscite singole è contraddistinto dal prefisso Y, il nome dellerispettive word dal prefisso WY.

Ad esempioWY00.F corrisponde al bit di posizione 16 nella WY00.

Ingressi analogiciWELL-LITE prevede fino a 4 input analogici.Gli input analogici possono essere gestiti solo mediante le word.Il nome degli ingressi è contraddistinto dal prefisso WAX.

Uscite analogicheWELL-LITE prevede 1 uscita analogica.Gli output analogici possono essere gestiti solo mediante le word.Il nome di queste uscite è contraddistinto dal prefisso WAY.

Word interneVi sono circa 2000 word interne, divise in 2 tipi:� WR e WF.Una word permette di rappresentare un numero intero senza segno divalore che va da 0 a 65535 o un numero intero con segno da -32768a +32767.� WR

Le WR possono anche essere viste a bit come bobine o contatti: relèinterni. Le WR sono 2000 (7D0) e sono ritentive.

- All’interno delle schede EPS-PROG LT e EPS-PROG-DAesistono un totale di 2000 word di tipo ritentivo, di cui le prime 30(000 ÷ 01D) sono coincidenti con Timers (WT) e le seconde 30(01E ÷ 03B) con Counters (WC).

� WFSono word di sistema (0 ÷ 6). Esse sono utilizzate per fornireindicazioni sul funzionamento del PLC ed altre utilità.

NOME degli Ingressi Digitali

X

WX

nn.b

nn

Numero del punto: 0-F

Numero della Word: 00-2

Numero della Word: 00-2Prefisso

Prefisso

NOME delle Uscite Digitali

Y

WY

nn.b

nn

Numero del punto: 0-F

Numero della Word: 00-2

Numero della Word: 00-2Prefisso

Prefisso

NOME degli Ingressi Analogici

WAXnnNumero della Word: 00-3Prefisso

NOME delle Uscite Analogiche

WAYnnNumero della Word: 00Prefisso

Layout delle memorie WR

WR000 ÷ WR01DTimers(30)

Counters(30)

(1940)

≈ ≈

WR01E ÷ WR03B

WR03B ÷ WR7D0

WELL-LITE Versione 3.x

IntroduzioneX

Word di sistema (WF)

Relè speciali

, F0.0Questo relè ha sempre il valore 0.

, F0.1Questo relè ha sempre il valore 1.

, F0.2Questo relè ha valore 1 solo all'accensione, o comunque per la primascansione dopo lo start del programma, successivamente rimane sempreOFF. Esso può essere utilizzato per effettuare le operazioni diinizializzazione.

, F0.3 - F0.5Riservati per usi futuri.

, F0.6Va ON per una scansione ogni 100 millisecondi.

, F0.7Commuta ad ogni scansione del PLC.

, F6.0 (Carry)Assume valore 0 o 1 a seguito del risultato delle operazioni aritmetiche.L'addizione scrive 1 se vi è stato riporto altrimenti scrive 0.La sottrazione scrive 1 se non vi è stato riporto altrimenti scrive 0.Gli shift copiano il bit uscente nel LSBit del carry.I rimanenti bit della WF6 non vengono toccati. In questo modo è possibilesfruttarla per effettuare operazioni di addizione e sottrazione su cifrecomposte da più di una word.

Relè interni (WR)Vi sono 31040 relè interni (da 0 a 7D0.F).Sono memorie ad un bit utilizzabili come relè di appoggio per la logicadel PLC.Essi sono numerati esplicitamente come bit inclusi nelle WR e possonoessere assegnati sia a contatti che bobine.Il nome ha sempre il prefisso R.

TemporizzatoriVi sono 30 temporizzatori numerati da 00 a 1D.Sono composti da 3 elementi: Contatto, Valore Corrente e Valore diSetpoint.Il Valore di Setpoint corrisponde ad una word e fornisce il limite ditempo a cui viene impostato il timer.Il Valore Corrente corrisponde ad una word ed è il valore del tempotrascorso dall'abilitazione.Il Contatto, corrisponde ad un bit, ed assume valore 0 o 1 a seconda cheil tempo sia scaduto o meno cioè a seconda che il valore corrente abbiaraggiunto quello setpoint o meno.Il nome ha il prefisso T nelle istruzioni a Ladder classiche, mentre haprefisso WT o WR (0 ÷ 1D) nel caso di istruzioni aritmetiche.L'elemento del timer individuato dal nome dipende volta per volta dal tipodi operazione, questo argomento è trattato nella descrizione del timer.

NOME dei Relè interni

Rnnn.b

Numero della Word: 03D-7D0

Numero del Bit: 0-F

Prefisso

NOME dei Timers

T

WR

nn

nn

Numero del Timer: 00-1D

Numero del Timer: 00-1D

Prefisso

Prefisso

Manuale di programmazione del PLC

IntroduzioneXI

ContatoriVi sono 30 contatori numerati da 00 a 1D.Sono, come i timers, composti da 3 elementi: Contatto, Valore Corrente eValore di Setpoint.Il Valore di Setpoint corrisponde ad una word e fornisce il limite diconteggio.Il Valore Corrente corrisponde ad una word ed è il numero di impulsicontati.Il Contatto, corrisponde ad un bit, ed assume valore 0 o 1 a seconda che ilconteggio sia scaduto o meno.Il nome ha il prefisso C nelle istruzioni Ladder ad un bit, ha prefisso WC oWR (1E ÷ 3B) nel caso di istruzioni aritmetiche.Valgono le considerazioni fatte in precedenza per i timers.

NOME dei Counters

C

WR

nn

nn

Numero del Counter: 00-1D

Numero del Counter: IE-3B

Prefisso

Prefisso

WELL-LITE Versione 3.x

IntroduzioneXII

Questa pagina è stata intenzionalmente lasciata vuota.

Manuale di programmazione del PLC

Capitolo 1 - La programmazione 1

C A P I T O L OC A P I T O L O 1 1

La programmazione

Questo capitolo è un breve corso sulla programmazione Ladder. Esso puòquindi essere tralasciato da chi ne è già esperto.Come già accennato in precedenza la programmazione in Ladder èsostanzialmente una descrizione grafica delle associazioni che formano lalogica per il controllo.

WELL-LITE Versione 3.x

Capitolo 1 - La programmazione2

Contatti e BobineI componenti più elementari sono il Contatto e la Bobina. Introduciamolicon degli esempi comuni. Partiamo con l'accendere una lampadinamediante un interruttore.

X10.0 Y20.2

Qui viene direttamente associata l'uscita Y20.2 con l'ingresso X10.0. Cioèi valori (0 o 1) presenti sull'ingresso vengono immediatamente copiatisull'uscita.Le rappresentazioni grafiche del Ladder sono spesso riconducibili a unaequazione di tipo booleano. Qui abbiamo: Y20.2 = X10.0Nel seguito daremo, volta per volta, la descrizione di come le soluzioniespresse nel linguaggio Ladder possano essere convertite in un linguaggiodi programmazione tradizionale capace di trattare le informazionibooleane. Useremo in particolare la sintassi del C.Se si vogliono avere due ingressi (interruttori) che attivino la medesimauscita si può scrivere

X10.0

X10.1

Y20.2

È evidente che è sufficiente che uno dei due ingressi assuma valore 1perché esso sia attribuito all'uscita.In logica booleana: Y20.2 = X10.0 + X10.1Se vogliamo invece che, per abilitare l'uscita, i due ingressi debbanoessere contemporaneamente attivi si ha

X10.0 X10.1 Y20.2

Questo potrebbe essere il caso in cui esista un interruttore generale ingrado di disabilitare tutti gli altri, o, molto più comunemente, il caso incui per attivare un motore l'operatore debba premere contemporaneamentedue pulsanti posti abbastanza distanti da dover usare sempre entrambe lemani per motivi di sicurezza.In logica booleana: Y20.2 = X10.0 * X10.1Vediamo ora un caso leggermente più complesso ma alquanto comunenell'esperienza quotidiana: si debbano usare i due interruttori peraccendere la lampada in modo indipendente.

X10.0

X10.0

X10.1

X10.1

Y20.2

In logica booleana (indicando il negato con la sottolineatura):Y20.2 = (X10.0 * X10.1) + (X10.0 * X10.1)Questo è un circuito conosciutissimo dagli elettricisti.

Manuale di programmazione del PLC

Capitolo 1 - La programmazione 3

Notate che in esso abbiamo introdotto una variante nel simbolo delcontatto:� il simbolo normale indica che il contatto si chiude quando l'ingresso

assume valore 1 (cioè va ON).� il simbolo barrato indica che si chiude quando l'ingresso assume

valore 0 (cioè è OFF).I due casi vengono indicati rispettivamente con i nomi di:� contatto normalmente aperto (abbreviato NO)� contatto normalmente chiuso (abbreviato NC).Tenendo conto di ciò si può riconoscere che la lampada viene accesa soloquando i due interruttori si trovano nella stessa posizione. Questo producel'effetto comunemente desiderato: se la lampada è spenta è sufficientecommutare uno qualsiasi dei due interruttori per accenderla e viceversa.

Utilizzo di memorie (relè) internePer ottenere lo stesso effetto con tre o più interruttori la complessità delcircuito cresce in modo esponenziale.

Ad esempio con tre interruttori si ha

X10.0

X10.0

X10.0

X10.0

X10.1 X00.3

X00.3

X00.3

X00.3X10.1

X10.1

X10.1

Y20.2

In logica booleana:Y20.2 = (X10.0 * X10.1 * X00.3) + (X10.0 * X10.1 * X00.3) + (X10.0* X10.1 * X00.3) + (X10.0 * X10.1 * X00.3)Esistono per fortuna delle soluzioni che semplificano il problema causatodall'aggiunta di nuovi interruttori. Per descriverle introdurremo ladescrizione di alcuni nuovi strumenti.Supponiamo di disporre di un elemento che memorizzi transitoriamentequando viene premuto un qualsiasi interruttore

R0.0 Y20.2

Y20.2R0.0

Y20.2

Quando R0.0 acquisisce il valore 1 la bobina Y20.2 commuta il suo stato,quando ha valore 0 invece mantiene la sua condizione di acceso o spento.

- Per non dare luogo però ad una commutazione continua occorreche R0.0 vada ON solo per un momento.

Inoltre vogliamo che questo accada in corrispondenza della chiusura di unpulsante.

WELL-LITE Versione 3.x

Capitolo 1 - La programmazione4

Rilevare le transizioni: i DIFPoiché l'eventualità di dover effettuare questo tipo di operazione è moltofrequente nella pratica essa è stata semplificata mediante l'introduzione diun componente speciale detto DIF.Utilizzandolo si ottiene il seguente circuito

X10.0 DIF R0.0

In logica booleana semplice non esiste l'equivalente.Esso si chiude solo nel momento in cui la circuiteria alla sua sinistraregistra una transizione da 0 a 1.Esso semplifica la rappresentazione e permette inoltre di risparmiare unamemoria interna.Vediamo quindi come si può riprodurre il caso iniziale dei tre interruttori(tenendo conto che ora sarà sufficiente utilizzare, al loro posto, deipulsanti)

R0.0 Y20.2

Y20.2R0.0

Y20.2

X10.0 DIF R0.0

X10.1

X00.3

Il primo circuito attiva la memoria interna solo in corrispondenza di unachiusura di uno dei pulsanti permettendo al secondo circuito di lavorarecome desiderato.Con questa soluzione è possibile aumentare il numero dei pulsantiaggiungendone semplicemente i rispettivi contatti in parallelo a quelli giàesistenti (X10.0, X10.1, X00.3) nel primo circuito.In questo caso non possiamo riprodurre fedelmente la logica Ladder, conle sole equazioni booleane, poiché ci mancano le istruzioni di rilevazionedella transizione. Dobbiamo quindi far ricorso alla sintassi ed all'ausilio diuna memoria di supporto aggiuntiva (R0.1):if ((X10.0 ==1 | X10.1==1 | X00.3==1) && (R0.1 == 0))

R0.0 = 1;if (R0.0 == 1 && Y20.2 == 0) Y20.2 = 1;else if (R0.0 == 1 && Y20.2 == 1) Y20.2 = 0;Oltre al DIF esiste il DIFN (DIF NOT) esso si comporta in modo analogoma per la transizione inversa da 1 a 0.

Manuale di programmazione del PLC

Capitolo 1 - La programmazione 5

SET e RESETSupponiamo ora di volere adoperare due pulsanti distinti per attivare edisattivare un'uscita. Questo è un classico caso di marcia e arresto di unmotore (un pulsante verde, X10.0, per la marcia e un pulsante rosso,X10.1, per l'arresto o emergenza).Possono risultare utili altri due componenti detti SET e RESET.

X10.0

Y20.2

Y20.2

X10.1

R

S

Le bobine contraddistinte dalle lettere S e R attivano (SET) e disattivano(RESET) l'uscita Y20.2 quando vengono abilitate. Esse modificano quindiil valore dell'uscita solo nel senso di portarla, rispettivamente, a 1 o a 0 manon realizzano l'operazione inversa come accade nel caso della bobinanormale.Nel linguaggio C scriveremo:If (X10.0 == 1) Then (Y20.2 = 1)If (X10.1 == 1) Then (Y20.2 = 0)Il caso della marcia/arresto è molto comune nell'automazione quindipensiamo sia bene citare il modo molto più elegante con cui vienesolitamente risolto

X10.0 Y20.2

Y20.2

X10.1

Che può essere tradotto stavolta in pura equazione booleana:Y20.2 = X10.1 * (X10.0 + Y20.2)Esso potrebbe indurre a considerare poco utili tali componenti ma nonsempre è possibile o conveniente avere nello stesso circuito sia lacondizione di SET che di RESET, ecco perché le bobine che realizzanoseparatamente queste funzioni possono risultare molto vantaggiose.

WELL-LITE Versione 3.x

Capitolo 1 - La programmazione6

Trappole derivanti dalla simulazione dei circuitiPrima di proseguire è bene chiarire più dettagliatamente come avvienel'esecuzione del programma Ladder.Esso viene scandito (letto ed eseguito) iniziando dal primo circuito eterminando con l'ultimo, quindi vengono effettuate delle operazioni diservizio (fra cui la scrittura delle uscite e la lettura degli ingressi fisicirispetto alle immagini di memoria), e infine il ciclo si ripete.I circuiti non vengono quindi eseguiti contemporaneamente anche se lavelocità di elaborazione solitamente ci impedisce di notare gli effetti diquesta successione.Ovviamente anche all'interno di ogni singolo circuito esiste una regola perl'esecuzione della sequenza di istruzioni:� per prima viene eseguita la parte logica dettata dalla combinazione dei

contatti� quindi il risultato viene impiegato per condizionare l'uscita.Abbiamo usato il termine “condizionare” per evidenziare che (come giàvisto con il SET e RESET) l'operazione non necessariamente si concludein una semplice copia sull'uscita del valore booleano ottenuto.Nella maggior parte dei casi non è importante dover tener conto di questimeccanismi. È tuttavia necessario conoscerli per non incorrere in erroribanali.Prendiamo una coppia di circuiti che realizza l’equivalente di un DIFapplicato a R0.0 che abbiamo adoperato per rilevare la transizione da 0 a1 di un pulsante

X10.0

X10.0

R0.1 R0.0

R0.1

Essa sfrutta il fatto che R0.1 è sicuramente OFF quando viene eseguito ilprimo circuito e che esso sarà visto ON solo alla scansione successiva.Rappresentiamo la sequenza con diagramma temporale

X10.0

R0.1

R0.0

Intervallidi scansione

È quindi evidente che se i due circuiti fossero invertiti di posizione R0.0rimarrebbe sempre a 0.

Circuito 1

Circuito 2

Ultimo Circuito

START

Programma

Servizi

Comunicazione conl’esternoLettura degli ingressiScrittura delle Uscite

Controlli di correttezzadel funzionamento HW

Ecc.

Manuale di programmazione del PLC

Capitolo 1 - La programmazione 7

Esempio 1

Possiamo ora affrontare un primo caso di semplice applicazione: ilcontrollo di un montacarichi.Per prima cosa è opportuno definire quali siano gli ingressi e le uscitenecessari. Occorrono almeno 4 ingressi:� 2 pulsanti di chiamata P0 e P1 che possiamo collegare agli ingressi

X0.0 e X0.1� 2 sensori di presenza che vengono chiusi quando il montacarichi è al

piano (Piano0 e Piano1), collegabili a X0.2 e X0.3e 4 uscite:� 1 comando di salita del motore (M_SU) Y0.0� 1 comando di discesa (M_GIU) Y0.1� 2 comandi per segnalare che il montacarichi è in movimento verso il

piano (L1 e L2) Y10.0 e Y10.1Nel programma faremo riferimento ai nomi simbolici (L1, Piano0, ecc.)anziché ai nomi dei punti di I/O per semplificarne la scrittura einterpretazione (ciò è anche possibile mediante il sistema di sviluppo diWELL-LITE).Affrontiamo il problema per gradi.Per l'attivazione del motore possiamo stabilire le seguenti regole:� deve esistere il comando di uno dei due pulsanti� P0 attiva il movimento verso il basso (indietro)� P1 attiva il movimento verso l'alto (avanti)� P0 e P1 attivano il movimento solo se il montacarichi è già

posizionato al piano opposto.

P0

P1

Piano1

Piano0

M_GIU

M_SU

Notiamo che in questo modo, non appena il montacarichi si muovesse ilcomando verrebbe disattivato, occorre quindi che il comando dimovimento venga mantenuto fino all'arrivo ad uno dei due piani

Piano0

Piano1

M_GIU

M_SU

M_GIU

M_SU

P0

P1

Piano1

Piano0

Non rimane che accendere le lampade di segnalazione: si può farlo inmodo molto semplice modificando i due circuiti precedenti, ponendorispettivamente in parallelo alle uscite M_SU ed M_GIU le bobine di L0 eL1 (non riportiamo il relativo diagramma).L'equivalente in C utilizzando equazioni booleane sarà:M_GIU = (M_GIU | (P0 * Piano1)) * Piano0;M_SU = (M_SU | (P1 * Piano0)) * Piano1;Le due programmazioni sono esattamente identiche: cambia solamentel'esposizione formale. Tuttavia la leggibilità nei due casi è ben diversa, ciòsi evidenzia ulteriormente in fase di debug dove risulta decisamente piùimmediata la visualizzazione dello stato degli ingressi, delle uscite e dellamacchina nel caso della rappresentazione Ladder.

MONTACARICHI

Luce Presenza (Lamp1)

Pulsante Chiamata (P1)

Contatto Presenza (Piano1)

Primo Piano

Piano Terra

Luce Presenza (Lamp0)

Pulsante Chiamata (P0)

Contatto Presenza (Piano0)

ComandoMotore

Su(M_SU)

Giù(M_GIU)

WELL-LITE Versione 3.x

Capitolo 1 - La programmazione8

Esempio 2

Introduciamo ora alcune complicazioni.Per prima cosa vogliamo poter fermare il movimento in un momentoqualsiasi mediante un pulsante di allarme (Alarm) e poterlo riprenderenon appena esso viene disinserito.Occorre quindi memorizzare il movimento in atto. Faremo ciò sostituendoil comando per le due uscite con due relè interni (chiamiamoli R_SU eR_GIU). Si ottiene il seguente programma

Piano0

Piano1

Alarm

Alarm

R_GIU

R_GIU

R_SU

R_SU

R_GIU

R_SU

M_GIU

M_SU

P0

P1

Piano1

Piano0

Supponiamo ora di voler gestire 3 piani invece di 2. Introduciamo quindi irelativi pulsanti e sensori P2 e Piano2 e la lampada di segnalazione L2.Utilizziamo altre tre memorie che indichino il piano di destinazione.Le chiameremo VAI_0, VAI_1 e VAI_2.La loro programmazione può avvenire in modo simile a come si è fattoper R_GIU e R_SU nel caso precedente

Piano0

VAI_0

VAI_0P0 Piano1

VAI_0

Piano2L0

Piano1

VAI_1

VAI_1P1 Piano0

Piano2L1

Piano2

VAI_2

VAI_2P2 Piano0

Piano1L2

Nel programma abbiamo stavolta anche aggiunto il comando perl'accensione delle lampadine che segnalano la prenotazione. Come si vedeciò avviene in modo semplice ed intuitivo.

Manuale di programmazione del PLC

Capitolo 1 - La programmazione 9

Determiniamo ora il movimento del montacarichi:

R_GIU

R_GIU

VAI_0

VAI_2

VAI_1

VAI_1

VAI_1

VAI_1

Piano0

Piano2

Piano2

Piano0

R_GIU

R_SU

Piano1

Piano1

L'abilitazione delle uscite effettive sui movimenti rimane identica al casoprecedente.Fino ad adesso abbiamo fatto uso delle istruzioni elementari della logicaLadder: Bobine, Contatti e Configurazioni di Parallelo (o OR) e Serie (oAND).La logica elementare è sufficiente, dal punto di vista teorico, a risolverequalsiasi problema a prezzo tuttavia di complessità talmente crescenti darisultare di difficile stesura e comprensione anche in Ladder.Vediamo come quest'ultimo caso sia possibile affrontarlo con l'ausilio dialcuni degli strumenti già descritti in precedenza.Riprogrammiamo la selezione del piano di destinazione mediante labobina di SET. Le condizioni si semplificano e si evidenziano, occorreperò definire anche la condizione per cui disattivarle e questo lo si puòfare con delle semplici condizioni di RESET mediante bobine applicate airispettivi elementi.Fatto salvo per l'attivazione effettiva delle uscite che azionano il motore (eche può ancora essere descritto con i circuiti visti in precedenza) ilprogramma può assumere la seguente forma:

WELL-LITE Versione 3.x

Capitolo 1 - La programmazione10

VAI_0P0 Piano1

Piano2R_GIU

VAI_1P1 Piano2

R_GIU

S

S

S

S

VAI_1P1 Piano2

R_GIU

S

S

VAI_2P2 Piano1

Piano0R_SU

S

S

VAI_0Piano0

R

VAI_1Piano1

R

VAI_2Piano2

R

R_GIUVAI_0 Piano1

VAI_2R_SU

R

RVAI_2

Esso può essere così scritto in linguaggio C:if (P0 * (Piano1 | Piano2)) [VAI0 = 1; R_GIU=1; ]if (P1 * Piano2 ) [VAI1 = 1; R_GIU=1; ]if (P1 * Piano0 ) [VAI1 = 1; R_SU=1; ]if (P2 * (Piano1 | Piano0)) [VAI2 = 1; R_SU=1; ]if (Piano0) VAI0 = 0;if (Piano1) VAI1 = 0;if (Piano2) VAI2 = 0;if ((VAI0old * VAI0) || (VAI1old * VAI1) ||(VAI2old * VAI2) ) [R_SU = 0; R_GIU = 0;]VAI0old = VAI0;VAI1old = VAI1;VAI2old = VAI2;

+ NotaLe parentesi quadre sostituiscono legraffe solo per motivi tipografici.

Manuale di programmazione del PLC

Capitolo 1 - La programmazione 11

Nei confronti si è fatto uso della semplificazione formale ammessa daTRUE e FALSE, per cui ad esempio Piano2 == 1 equivale al soloPiano2.Per poter rilevare le transizioni è stato invece necessario dover introdurre3 variabili interne aggiuntive che memorizzassero lo stato precedente.Molte altre soluzioni di programma sono possibili tuttavia questa cisembra una delle più spedite.

Timers e CountersTemporizzatori e contatori sono elementi comuni nella programmazioneLadder. La loro presenza è legata tanto alle origini elettromeccaniche diquesto modo di programmare quanto al fatto che essi sono di indubbiautilità pratica nelle applicazioni più comuni.Possiamo vedere i temporizzatori come dei componenti fisici costituiti daun contatempo e da un contatto che si chiude quando viene raggiunto iltempo impostato. Dal punto di vista della programmazione essi sono dellestrutture che comprendono:� un Valore di Setpoint = Tempo impostato� un Valore Corrente = Contatempo� un Contatto.

T12

Y10.1

X0.0

T12

100

Y10.1

X0.0

Contatto di T12

100Valore Corrente

Valore diSetpoint

TD

Il suo meccanismo è molto semplice, come si vede anche dal diagrammatemporale: l'uscita Y10.1 viene attivata (assumendo una base tempi di0.1 sec) con un ritardo di 10 secondi rispetto alla chiusuradell'ingresso X0.0. Questo non è l'unico tipo di temporizzazione utilizzatonella pratica (la sigla TD ne indica il tipo). Ad esempio ve n'è uno moltocomune che si comporta attivando subito il proprio contatto edisattivandolo al raggiungimento del setpoint.Tuttavia esso, come anche gli altri, può essere derivato facilmente daltipo precedente

T12

R0.0

X0.0

X0.0 T12

100

R0.0

X0.0

Contatto di T12

100Valore Corrente

Valore diSetpoint

TD

come si vede è sufficiente utilizzare R0.0 invece che direttamente T12.I temporizzatori non hanno riscontro immediato nella programmazionetradizionale. Essi vanno costruiti in modo esplicito con strutture odoggetti ma più spesso sono risolti con la programmazione in lineasfruttando variabili locali e le funzioni messe a disposizione dal sistemaoperativo o intervenendo direttamente sui dispositivi hardware.

Contatto

del

Timer

Timer

Abilitazione

+ NotaI Valori di Setpoint e di ValoreCorrente sono con cifre che indicanoil tempo in numero di intervalli base.L'intervallo base è detto “base tempi”del temporizzatore.

WELL-LITE Versione 3.x

Capitolo 1 - La programmazione12

I contatori sono dispositivi analoghi ai temporizzatori per quantoriguardano gli elementi che ne compongono la struttura, dispongonoinfatti di:� un Valore di Setpoint = Conteggio impostato� un Valore Corrente = Contaimpulsi� un Contatto.Essi conteggiano i fronti di salita (passaggio da 0 a 1) della circuiteria cheli abilita

C41

Y10.1

X0.0

C41

3

Y10.1

X0.0

Contatto di C41

3

Valore CorrenteValore diSetpointCU

Esempio 3

Utilizzeremo ora un caso che non ha aderenza pratica ma che in compensoci permetterà di simulare completamente l'esempio precedente anche inassenza di I/O effettivi.Una volta che il movimento del montacarichi sia stato attivato essoimpiegherà un certo tempo a trasferirsi al piano prenotato, simuleremoquesta situazione utilizzando l'elemento timer.Realizzeremo il tutto in forma pedestre.Il tempo sarà differente a seconda che il movimento debba avvenire fradue piani adiacenti o fra il piano 0 e il piano 2; memorizziamo quindi su 3diversi relè interni i tre casi possibili.

P0

P1

P2

P2

P0

P1

Piano1

Piano0

Piano0

Piano1

Piano2

Piano2

S

S

S

TR_01

TR_02

TR_12

I tempi di percorrenza sono diversi: nel caso del trasferimento dal Piano0a Piano2 è doppio rispetto agli altri due. Supponiamo che esso sia di 3secondi a piano, ammettendo una base tempi di 0.1 secondi (come si hausualmente in WELL-LITE), possiamo programmare 3 timers

Manuale di programmazione del PLC

Capitolo 1 - La programmazione 13

TR_01

TR_02

TR_12

TD

TD

TD

T0

T1

T2

30

60

30

Alla loro scadenza deve essere simulata la chiusura del sensore chesegnala l'arrivo del montacarichi al piano da cui è stata effettuata lachiamata

VAI_0

VAI_1

T0

T1

T1

T2

S

S

Piano0

Piano1

VAI_2 T0

T2

S

Piano2

Questa porzione realizza la chiusura dei sensori (nel predisporre lasimulazione si dovranno appoggiare le variabili Piano0, Piano1, Piano2 sudei relè interni infatti il sistema di sviluppo segnala come errori gliingressi programmati sulle bobine).Tuttavia la nostra simulazione non è ancora completa, occorre oraprevedere l'apertura dei segnalatori di presenza al piano.Possiamo farlo aggiungendo questi tre semplici circuiti

VAI_0

VAI_1

VAI_2

DIF

DIF

DIF

R

R

R

R

R

R

Piano1

Piano0

Piano0

Piano2

Piano2

Piano1

WELL-LITE Versione 3.x

Capitolo 1 - La programmazione14

$ OsservazioniIn quest'ultimo esempio non abbiamo riportato l'equivalenza fraprogrammazione classica e quella Ladder poiché la trasformazione(esclusi i timers) dovrebbe ormai risultare banale.Vogliamo invece considerare che siamo d'accordo nel dire che laprogrammazione Ladder non offre alcun vantaggio intrinseco rispetto aquella tradizionale, non fosse per il fatto che qualsiasi programma scrittoin qualsiasi linguaggio è ricodificabile secondo una sintassi classica (losono infatti anche gli assembler).È però alquanto restrittivo considerare tutto solo sotto questo punto divista o da quello dell'efficienza. La potenza di un linguaggio si misuraforse ancora di più nella sua efficacia di rappresentazione, nella suasemplicità d'uso e nella sua capacità di essere anche formalmente di aiutonella corretta impostazione dei problemi da risolvere.Il successo della programmazione Ladder è da attribuire, oltre che allemotivazioni storiche già accennate, anche:� alla sua immediatezza nella rappresentazione visiva dei fenomeni da

controllare, e quindi anche del loro esame durante il funzionamentodel programma

� alla sua abbordabilità anche per chi è digiuno di programmazione� al fatto che impone naturalmente una costruzione del programma che

è basata su proposizioni di tipo logico matematico (equazionibooleane con variabili “VERO FALSO” e proposizioni del tipo “SEALLORA”) che fornisce i medesimi vantaggi intravisti con lacostruzione dei cosiddetti linguaggi di intelligenza artificiale.

Gli svantaggi possono essere individuati invece:� nell'assenza di una sintassi esplicita e comunque di una sua

essenzialità da questo punto di vista� nella scarsissima modularità. Esso fornisce degli strumenti quasi nulli

da questo punto di vista. Ciò non toglie che il programmatore piùavveduto possa costruire moduli, egli deve tuttavia farlo in modoesplicito quasi come se stesse lavorando in assembler.

Essi sono compensati dal fatto che spesso la natura dei problemi daaffrontare mal si presta ad una impostazione ad alto livello (gestione dieventi scorrelati o comunque asincroni) e dal progressivo potenziamentodel linguaggio stesso mediante nuovi strumenti.Uno di questi, indispensabile, è l'introduzione di istruzioni per iltrattamento delle informazioni numeriche e che sarà argomento delprossimo paragrafo.

I numeriLe informazioni che siamo stati in grado di gestire finora sono solo deltipo ON/OFF, acceso/spento, ecc. (fatti salvi timers e counters) e quindiriconducibili alla rappresentazione 0/1. Questa semplice base è abbastanzagenerale da non impedirci di trattare informazioni più complesse tuttaviaciò risulterebbe abbastanza complicato.Per fare un semplicissimo esempio, ammettiamo che un operatore vogliaselezionare 4 possibili funzionamenti, potremmo codificarli utilizzandodue relè interni il cui stato (00, 01, 10, 11) ci fornisca l'informazione cosìda abilitare un'azione differente per ognuna delle combinazioni.Le complicazioni deriverebbero sia dal fatto che ogni cifra dovrebbeessere esplicitata in una astrusa combinazione di relè (sempre piùnumerosi quanto più grande è la cifra) sia dal fatto che dovremmoricostruire con la logica elementare anche operazioni banali come quellearitmetiche e di comparazione.Per agevolare il trattamento delle informazioni numeriche sono statiintrodotti:� degli elementi (word) che raggruppano più relè (16) e quindi nel loro

insieme permettono la rappresentazione di numeri abbastanza grandida essere soddisfacenti per la maggior parte delle applicazioni pratiche

� e un insieme di operatori che gestisce direttamente questi elementi pereffettuare le addizioni, sottrazioni, comparazioni, ecc..

Le word non sono ovviamente associabili a nessun elemento di tipocontatto o bobina esse vengono quindi trattate nei blocchi aritmetici(chiamati nel seguito anche “funzionali”).

R0.0

R0.0

R0.0

R0.0

R0.1

R0.1

R0.1

R0.1

Azione

Azione

Azione

Azione

Manuale di programmazione del PLC

Capitolo 1 - La programmazione 15

L'esecuzione dei blocchi aritmetici può essere condizionata o menomediante una circuiteria di abilitazione. Quando il blocco è attivato tuttele istruzioni comprese in esso vengono eseguite nella sequenza in cui sitrovano scritte.Prima di proseguire apriamo una breve parentesi per meglio definire lequantità numeriche che in tal modo è possibile rappresentare.

Word e InteriOgni word contiene un numero fisso, 16, di elementi semplici. Ognuno diessi è detto bit.Ogni word è scomponibile in relè interni o in singoli ingressi e uscite,anche per questo motivo si dice che i contatti e le bobine contengonoinformazioni di 1 bit.Il bit può assumere solo i valori 0 o 1.Il numero massimo rappresentabile è quindi dato dal numero (massimo-1)di combinazioni realizzabile con 16. Ad esempio con 2 elementi abbiamovisto che si hanno 4 combinazioni e quindi con essi possiamorappresentare i numeri fino al 3 (comprendendo lo 0).Nella figura a fianco sono riportati due esempi che mostrano comeavvenga l'associazione word/bit e quale valore assuma la combinazionerappresentata.Con 16 bit si hanno 65536 combinazioni e quindi i nostri numeri andrannoda 0 a 65535.È importante osservare che questi numeri sono di tipo intero e senzasegno.

LSB, MSB ed altre comuni suddivisioniAll'interno della word i bit sono ordinati dal meno significativocorrispondente, ad esempio, a R0.0 al più significativo R0.F. Essi sonospesso riferiti anche come LSB (Less Significant Bit) e MSB (MostSignificat Bit).Ogni gruppo di 4 bit prende il nome di Digit o Cifra, vi sono così 4 digitin totale. Anche nel loro caso si definiscono il più e meno significativocon l'indicazione LSD e MSD.Infine viene definita l'unità composta da 8 bit detta Byte.Anche all'interno del digit e del byte si definiscono i rispettivi LSB e MSBche sono rispettivamente quelli di “peso” “0 e 3” e “0 e 7”.Queste pedanti suddivisioni sono molto comode nella pratica per benindividuare il modo con cui può esser formato un numero. La loroimportanza risulterà più chiara dopo aver affrontato la notazioneesadecimale.Facciamo qui intanto notare che nel caso del singolo digit possiamorappresentare numeri fino a 15 (16 combinazioni possibili) e nel caso delbyte 255 (256 combinazioni possibili).Se si assegnassero dei simboli per cui le combinazioni ottenibili in ognidigit fossero rappresentabili mediante una sola cifra avremmo un sistemache ci permette di rappresentare in modo immediato le combinazioni di bitnel caso di elementi composti da più digit (Cifre).Questa immediatezza non è possibile se adoperiamo la numerazionedecimale. Infatti per fare qualche esempio:� la combinazione 0000 0000 0000 0101 corrisponde al numero 5� la combinazione 0000 0000 0001 0101 corrisponde al numero 21.

R0.4

0R0.7R0.6R0.5

WR0R0.0R0.1R0.2R0.3

R0.8

R0.9R0.AR0.BR0.C

R0.DR0.E

R0.F

1

11

0

0

0

0

0

0

0

0

0

0

0

0

0

WX22X22.0X22.1X22.2X22.3

X22.8

X22.9X22.AX22.BX22.C

X22.DX22.E

X22.F

11

11

0

0

0

0

0

0

0

0

0

0

0

X22.4X22.5X22.6X22.7

Numero = 50 Numero = 51

R0.5

WR0R0.0R0.1R0.2R0.3

R0.8

R0.9R0.AR0.BR0.CR0.DR0.E

R0.F

R0.4

R0.6R0.7

LSB

MSB

LSD

MSD

Bit Digit Byte

WELL-LITE Versione 3.x

Capitolo 1 - La programmazione16

La notazione esadecimalePer questo semplice motivo è nata la numerazione Esadecimale. Essaassegna ai numeri dallo 0 al 9 gli stessi simboli della numerazionedecimale ma vi aggiunge la A, B, C, D e F per identificare quelli dal 10al 15.In questo modo ogni singolo digit è esprimibile mediante una sola cifra.Gli esempi precedenti in questa notazione diventano:� la combinazione 0000 0000 0000 0101 corrisponde al numero H5� la combinazione 0000 0000 0001 0101 corrisponde al numero H15.Nella rappresentazione metalinguistica (quella che stiamo adoperando inqueste descrizioni) il prefisso o postfisso H indica che si sta adoperando lanotazione esadecimale. Altrimenti si intende che il numero è in decimale.Facciamo degli altri esempi:� la combinazione 0001 0101 0000 0101 corrisponde al numero H1505� la combinazione 0000 1111 1010 0011 corrisponde al numero

H0FA3.Questa simbologia ha il vantaggio di darci uno strumento sintetico per larappresentazione delle combinazioni di bit.Quanto detto dovrebbe inoltre rendere ragione del perché spesso ci siriferisca ad essa chiamandola in modo equivalente come esadecimale obinaria (anche se la notazione binaria identifica propriamente solo lesuccessioni di 0 e 1).Partendo da essa è inoltre molto semplice ricostruire il valore decimale delnumero. Infatti, come avviene nel sistema decimale, la posizione dellacifra corrisponde ad un suo “peso”.In decimale 123 indica il numero dato da 1*100 + 2*10 + 3. Poiché inesadecimale le combinazioni possibili per ogni cifra sono 16 invece didieci, la cifra H123 equivale al numero dato da 1*256 + 2*16 + 3' = 291.Con la pratica si memorizzano facilmente le prime potenze di 16 espressein decimale: 16, 256, 4096, 65536. Che sono quelle in uso nel nostrocaso di interi di 4 digit.Se la conversione da esadecimale a decimale è immediata ed il suo calcoloabbastanza semplice, la conversione inversa è più complessa. La suaesposizione non verrà riportata non essendo di nostro interesse, infatti ledue conversioni sono realizzabili mediante apposite istruzioni presenti nellinguaggio e applicabili alle word nei blocchi aritmetici.Qualcuno avrà senz'altro iniziato a spaventarsi e ad avere le idee un po’confuse. Quindi attenzione:� l'elaborazione avviene sempre in binario o esadecimale� l'impostazione dei numeri e dei calcoli da parte di chi programma può

essere invece fatta sempre pensando in modo decimale poiché glistrumenti di sviluppo effettuano le necessarie conversioni in modoautomatico per noi

� anche la visualizzazione dei valori in fase di ispezione mentre ilprogramma è in esecuzione è trasparente da questo punto di vista.

In linea di principio potremmo quindi anche ignorare il fatto chel'elaborazione avvenga in esadecimale. Tuttavia la sua comprensione oltrea spiegare i limiti della rappresentazione numerica a nostra disposizione cifornisce degli strumenti necessari a realizzare applicazioni più sofisticateed a controllare più agevolmente i dispositivi analogici.

Esempio 4

Vediamo ora come le word e le operazioni possano essere adoperate in unsemplicissimo caso: il controllo con comando ON/OFF della temperaturadi una caldaia.Supponiamo di collegare la resistenza di riscaldamento all'uscita Y10.0 el'ingresso del sensore della temperatura a WAX20 (WAX e WAY sono gliingressi e le uscite previste per gestire i canali analogici).È in pratica una situazione identica a quella dello scaldabagno casalingo.Per quanto riguarda l'attivazione della resistenza di riscaldamento non vi ènulla da osservare: essa va accesa e spenta mediante l'uscita digitale.Per l'ingresso occorre invece conoscere quali valori il sensore fornisce incorrispondenza delle temperature.

Manuale di programmazione del PLC

Capitolo 1 - La programmazione 17

Supponiamo che il sensore ci dia direttamente un segnale in correnteproporzionale alla temperatura. Esso può così essere rilevato da unconvertitore che trasforma l'intensità del segnale in un valore numerico.Non ci soffermeremo su questi dispositivi basti sapere che essi sonocomunemente reperibili.Occorre invece precisare quale sia il rapporto fra le tre scaletemperaturaècorrenteènumero.Facciamo l'ipotesi che per un'escursione da 0° a 150° la corrente vari da 4a 20 mA e che questo venga tradotto in un numero che va da 0 a 4095.Vogliamo che la temperatura sia regolata ad 80°C: occorre quindi che,una volta che essa sia stata raggiunta, la resistenza di riscaldamento vengaspenta.Essa andrà quindi spenta al raggiungimento del valore numericocorrispondente a 80°C, cioè 2184.Il programma di controllo, a questo punto, si riduce ad un circuitosemplicissimo

Y10.0 : WAX20 < 2184

*

L'espressione contenuta nel blocco aritmetico effettua il controllo fra lalettura dell'ingresso analogico e la costante 2184, se la diseguaglianza èverificata il bit Y10.0 (corrispondente all'uscita di riscaldamento) si attivaaltrimenti va OFF.Questo controllo è raramente adoperato nella pratica poiché dà luogo afluttuazioni eccessive ed incontrollabili. Esso è illustrato solo a finiesemplificativi.Il controllo così come è stato programmato rimane sempre attivo. Sevogliamo introdurre anche un interruttore di acceso/spento(poniamo X10.2) dobbiamo apportare le seguenti modifiche

Y10.0 : WAX20 < 2184

X10.2

X10.2

R

Y10.0

Se l'interruttore è aperto (OFF) il blocco aritmetico non viene più eseguitoe l'uscita che pilota il riscaldamento rimane incontrollata, abbiamo quindidovuto aggiungere il secondo circuito che garantisce che, in tal caso, essarimanga spenta.A questo livello, nella pratica, controlli di questo tipo vengono affrontaticon semplici congegni meccanici (o elettromeccanici) tanto più se sonoisolati come appunto accade nel caso del comune scaldabagno domestico.Le regolazioni di temperatura che si debbono affrontare con il PLC sonotuttavia frequenti in automazione (ad esempio controllo di forni e dipresse ad iniezione) e risulta vantaggioso inserirle nel programma perconsentirne l'interazione con tutto la restante logica di controllo dellamacchina. Esse inoltre sono sempre più complesse di quelle illustrate erichiedono una gestione e precisione più raffinate di quella illustrata. Perquesto motivo vengono adoperati classici controlli di tipo PID(recentemente hanno preso piede anche alcuni controlli basati sulla logicamatematica Fuzzy).Per continuare nel nostro esempio sull'utilizzo delle word e delleistruzioni aritmetiche continueremo comunque con il nostro sempliceesempio gestendo una delle complicazioni tipiche dell'applicazioneindustriale: le temperature da gestire sono solitamente ben più elevate diquella fin qui ipotizzata, può accadere di dover controllare forni diriscaldamento di materiali come lo zinco che fonde a circa 700°C, e chenon sono rilevabili mediante sonde capaci di fornire un valore assoluto mabensì riferito alla temperatura ambiente (termocoppie).

WELL-LITE Versione 3.x

Capitolo 1 - La programmazione18

In questo caso occorre adoperare due sensori: uno per rilevare latemperatura ambiente in modo assoluto (solitamente termoresistenze) eduno per la temperatura relativa (termocoppia). Per calcolare la temperaturaoccorrerà sommare i due valori dopo aver uniformato le differenti scaledei due sensori.Per semplicità immaginiamo che quello precedentemente usato sia ilnostro sensore relativo: esso ci fornirà ora una informazione che è ladifferenza fra la temperatura del liquido e quella ambiente.Aggiungiamo un altro sensore esterno, di tipo assoluto, che ci dia latemperatura ambiente e colleghiamolo all'ingresso WAX21. Supponiamoinoltre che esso fornisca una variazione da 0 a 4mA in corrispondenza diuna escursione della temperatura da 0° a 100°.Come prima cosa dobbiamo far quadrare le scale.Nel primo caso leggiamo un valore fra 0 e 4095 che corrisponde ad unascala compresa fra 0° e 150° nel secondo fra 0° e 100°: fra le due scaleesiste quindi un rapporto di 150/100 = 1,5.Per ottenere un valore omogeneo nell'effettuare la somma che ci dia latemperatura assoluta occorre moltiplicare il numero ottenuto dallaseconda sonda per 1,5:Numero di Temperatura Assoluta = WAX20 + (1,5 * WAX21).

$ Osservazione 1La rappresentazione e le istruzioni a nostra disposizione trattano solointeri. Possiamo effettuare l'operazione precedente solo se facciamoun'ulteriore cambiamento di scala “interno” che ci consenta di eliminare idecimali, cioè:Numero di Temperatura Assoluta * 10 = WAX20 + (15 * WAX21)Il numero ottenuto rappresenterà la temperatura con un'escursione divalori da 0 a 40960.

$ Osservazione 2In questo caso non abbiamo altro di cui preoccuparci perché 40960 èinferiore al massimo rappresentabile mediante una word (= 65535), seinvece tale valore potesse essere superato il risultato dell'operazionesarebbe indefinito (in tale eventualità è possibile tuttavia mantenereancora la precisione effettuando il calcolo in modo più complesso erappresentando il nostro valore su più word).Del pari sarà slittato il valore equivalente alla temperatura da controllare(80°C): esso non sarà più 2184 ma 21840.Finalmente possiamo scrivere

Y10.0 : WR0 < 21840

X10.2

X10.2

R

Y10.0

WR0 = WAX21 * 15WR0 = WR0 + WAX20

Il numero della temperatura assoluta è stato appoggiato in WR0 el'operazione di calcolo scomposta (poiché il PLC non consente espressionicon parentesi).Inoltre nel primo caso la nostra unità, rapportata ai gradi, vale150/4096 = 0,036°C e nel secondo 100/4096 = 0,024°C.Con l'operazione precedente ci siamo allineati alle unità da 0,036°C.

Manuale di programmazione del PLC

Capitolo 2 - Le istruzioni base 19

C A P I T O L O C A P I T O L O 22

Le Istruzioni Base

Le istruzioni base sono quelle che manipolano le informazioni ad 1 bitmediante rappresentazione grafica. Le riassumiamo nella seguente tabella.

DIF

DIFN

Inizio Circuito (NO) Bobina

Inizio Circuito (NC)

Contatto (NO)

Contatto (NC)

Rilevatore diTransizione 0->1

Rilevatore diTransizione 1->0

Bobina Negata

Bobina in SET

Bobina in RESET

S

R

WELL-LITE Versione 3.x

Capitolo 2 - Le istruzioni base20

Regole di programmazioneIl programma è composto da più circuiti; ognuno di essi deve iniziare conun contatto speciale di identificazione. Il contatto di inizio circuito sitroverà quindi sempre solo sulla colonna di sinistra.I contatti possono essere messi in parallelo e in serie per realizzare lalogica.Gli elementi di tipo “contatto” possono essere messi in parallelo e in serieper realizzare le combinazioni logiche.

Le attuazioni vanno programmate con le bobine. Le bobine possonorisiedere solo nella colonna più a destra.Fra le combinazioni grafiche ottenibili ve ne sono diverse che non sonoammesse.Ne riportiamo qui i diversi casi.

Circuiti non ammessi

N Non è possibile lasciare un circuito incompleto

N Non è ammesso programmare più di un inizio per ogni circuito

N Non sono ammessi i cortocircuiti

N Non sono ammesse le configurazioni non terminate

Manuale di programmazione del PLC

Capitolo 2 - Le istruzioni base 21

N I circuiti devono avere gli elementi allineati verso l'alto

Esempio 1

Circuito non ammesso

Equivalente ammesso

Esempio 2

Circuito non ammesso

Equivalente ammesso

Esempio 3

Circuito non ammesso

Circuito ammesso

WELL-LITE Versione 3.x

Capitolo 2 - Le istruzioni base22

N Nel caso di circuito con più bobine di uscita non sono ammesseporzioni di circuito riferite a singole bobine

Circuito non ammesso

Va trasformato nei seguenti due

A

A

A

B

B

B

C

C

N Non è possibile programmare circuiti in cui la logica dipendaanche da percorsi a ritroso

Circuito non ammesso

L'esecutore del circuito non è ingrado di interpretare l’eventualitàindicata dalle frecce (‘B’ vienepercorso in modo ‘inverso’ rispettoalla direzione che porta alla bobina)

A

B

C

Circuiti di questo tipo devono essere esplicitati in modo da raddrizzare ipercorsi di attuazione come indicato nelle due figure seguenti

A

A

W

X

X

C

W

W

B

B

B

A

C

Circuito non ammesso

Circuito corretto equivalente

+ NotaL'editor del sistema di sviluppo diWELL-LITE vi permette di scrivere esalvare su disco anche leconfigurazioni descritte comescorrette. Esse tuttavia non possonoessere mandate in esecuzione poichésono intercettate dall'analisi dicorrettezza topologica durante laprima fase della compilazione.

Manuale di programmazione del PLC

Capitolo 2 - Le istruzioni base 23

Caratteristiche e limiti della tipologia dei circuitiDal punto di vista del runtime (cioè dell'esecutore della logica Ladder)valgono le seguenti regole:� il numero massimo di contatti in serie che l'esecutore può eseguire

è di 15. Esso è quindi senza dubbio superiore a quanto è possibilescrivere mediante l'editor del sistema di sviluppo

� non vi sono limiti pratici né teorici al numero di paralleli. L’Editorimpone max 16 paralleli.

� non vi sono limiti alle bobine che possono essere programmate inparallelo come uscite di uno stesso circuito (purché esse sianosemplici: vedi circuito non corretto descritto prima). Anche in questocaso vale la considerazione precedente.

WELL-LITE Versione 3.x

Capitolo 2 - Le istruzioni base24

Immagine interna e attuazioni esterneCome indicato nei capitoli precedenti l'esecuzione del programmafunziona secondo il ciclo:1. lettura degli ingressi fisici nella mappa degli ingressi (IMap)2. scansione del programma con aggiornamento delle uscite rispetto alla

mappa di memoria delle uscite (OMap)3. copia della OMap sulle uscite fisiche4. operazioni di servizio5. il ciclo riprende dal punto 1.Questo modo di operare presenta il vantaggio che:� gli ingressi mantengono un valore uniforme per tutta la durata di ogni

scansione� le uscite sono attuate solo in base al risultato finale della logica

programmataTuttavia esso può creare qualche problema di interpretazione per gli utentinon esperti.Cerchiamo di chiarirlo con un esempio.Ciò che viene letto dalle uscite, quando esse sono viste come contatti, è ilvalore contenuto nella OMap.Il cambiamento apportato da un circuito verrà quindi letto dal circuitosuccessivo.Questo può influenzare l'esecuzione con conseguenze apparentementeincongruenti: nell'esempio riportato infatti, sebbene sia stato programmatoche Y0.1 deve il suo valore a Y0.0, ciò che vedremo sulle uscite effettivesarà invece la Y0.0 a 0 e la Y0.1 a 1.

X10.0 Y0.0

Y0.1

Y0.0

Y0.0

X10.1

Abbia X10.0 valore 1 (ON) e X10.1 valore 0 (OFF)

Y0.0

Y0.1

LetturaIngressi

ScansioneProgramma

Scrittura OMap suUscite

Come già detto, se non si è esperti, occorre fare attenzione alla successionecon cui vengono programmati i circuiti.È bene sottolineare che questo comportamento non costituisceassolutamente un difetto anzi esso si rivela indispensabile alla costruzionedi meccanismi complessi risultato di successioni logiche elementari.

+ NotaOve sia necessario è tuttaviapossibile ottenere un aggiornamentoimmediato delle uscite e degliingressi. Sebbene questa prestazionenon sia fornita nello standard delpacchetto WELL-LITE, l'utenteOEM può facilmente realizzarlasfruttando la possibilità di costruireistruzioni personalizzate (Vedi leistruzioni FUN ).

Manuale di programmazione del PLC

Capitolo 2 - Le istruzioni base 25

Contatti DIF e DIFNSono contatti che rimangono chiusi per il tempo di una scansione quandorilevano una transizione al loro ingresso:� DIF si attiva per una transizione positiva (0è1)� DIFN si attiva per una transizione negativa (1è0)

X10.0 R100.A

Nel caso di transizione di X10.0 R100.A rimane ON fino aquando questo circuito non verrà eseguito nuovamente allascansione successiva

X10.0

R100.A

DIF

$ OsservazioniDIF e DIFN, anche se vengono programmati graficamente e sicomportano come applicati a tutto il circuito posto alla loro sinistra, essiin realtà vengono eseguiti come degli attributi che modificano ilcomportamento del contatto che li precede.Questo impone che essi possano essere programmati solo inconfigurazioni in cui sono posti in serie con un altro contatto.I seguenti sono due esempi di circuiti non corretti

X0.0

X0.1

Y10.0 X0.1

RF.2RF.1

DIFN

DIF

essi possono essere riprogrammati nel modo seguente

X0.0

X0.1

X0.0

Y10.0

R10.0 X0.1

RF.2

R10.0

R10.0

RF.1

DIFN

DIF

WELL-LITE Versione 3.x

Capitolo 2 - Le istruzioni base26

(Il secondo circuito è stato sdoppiato e si è fatto uso di un relè diappoggio -R10.0-).

Bobine di SET e RESETQuando sono abilitate effettuano rispettivamente il solo SET e RESETdell'elemento indicato.Possono essere mescolate in parallelo in uscita fra di loro ed insieme allebobine normali.Quando SET e RESET sono programmati su di uno stesso elemento diuscita e sono entrambi attivi, l'uscita fisica viene sempre attuata comeindicato dall'ultimo circuito (vale lo stesso meccanismo indicato per lebobine normali)

X10.0 Y10.8

X10.0

X10.1

S

X10.0

S

X10.1 Y10.8

R

Y10.8

$ OsservazioniSET e RESET non hanno particolari restrizioni d'utilizzo. Esse sonosottoposte alle stesse regole delle bobine normali.

Manuale di programmazione del PLC

Capitolo 2 - Le istruzioni base 27

Timers e CountersLe Temporizzazioni ed i Conteggi sono gestite mediante delle struttureche contengono sostanzialmente 3 tipi di informazione:� uno stato (valore ad 1 bit) che indica se il tempo od il conteggio sono

scaduti (1) oppure no (0)� un valore corrente (word) che contiene il tempo trascorso

dall'abilitazione o i conteggi effettuati� il Setpoint (word), cioè il valore impostato. Quando esso viene

raggiunto dal valore corrente lo stato va a 1.Anche queste strutture sono gestite, nel programma, mediante bobine econtatti.Nel caso dei contatti l'interpretazione è simile agli altri casi.L'attuazione avviene invece mediante bobine speciali per permetterel'immissione delle informazioni aggiuntive richieste.Nella tabella riportiamo le 3 bobine coinvolte.

Bobina Timer Bobina Counter

Bobina

TM

Tnn xxxx

CU

Cnn xxxx

Cl

Cnn

Clear Counter

Temporizzazioni Conteggi

Le bobine TM e CU dispongono di un campo aggiuntivo di input.Il significato dei campi è il seguente:� Tnn e Cnn

“nn” indica il numero del timer o del counter� xxxx

indica il valore di setpoint.Identificazione:1. nei campi di input delle bobine e dei contatti i timer sono sempre

identificati dal prefisso T e i counters dal prefisso C2. nei campi delle istruzioni aritmetiche i timers sono identificati dal

prefisso WT o WR (0 ÷ 1D) mentre i counters sono identificati dalprefisso WC o WR (1E ÷ 3B).

I TimersEssi iniziano il conteggio del tempo quando ne viene abilitata lacorrispondente bobina. Una sua disabilitazione ha come effetto di portarea 0 il valore corrente e di resettarne lo stato.

T12

Y10.1

X0.0

T12

100

Y10.1

X0.0

Contatto di T12

100Valore Corrente

Valore diSetpointTM

WELL-LITE Versione 3.x

Capitolo 2 - Le istruzioni base28

Il conteggio del tempo avviene secondo la base tempi del sistema che, neisistemi WELL-LITE, è usualmente di 0.01 secondo.Poiché sia il valore di setpoint che quello corrente sono memorizzati inword, il massimo tempo impostabile è di 655,35 secondi. Esso è pari acirca 11 minuti (più che sufficiente per la maggioranza delleapplicazioni).Come si vede dalla figura il valore corrente del timer funziona aincremento (anziché a decremento come avviene in alcuni PLC) el'incremento prosegue anche dopo che lo stato ha assunto il valore di 1.Questo può risultare utile nell'utilizzo del timer con le istruzioniaritmetiche.A seconda che l'indicazione del timer appaia nei contatti, nelle bobine onelle aritmetiche essa identifica un elemento diverso della struttura:� Contatti

“Tnn” indica lo stato del timer “nn”� Bobine

“Tnn” individua il timer “nn” il cui setpoint va impostato nel campoadiacente

� Aritmetiche“WTnn” o WR (0 ÷ 1D) indica il valore corrente del timer “0 ÷ 29”.

SetPoint variabiliFino ad ora abbiamo assunto che esso fosse impostato come costante.Può essere tuttavia comodo poter variare tale valore a programma oriceverlo dall'esterno (ad esempio da un pacchetto MMI).Ciò è fattibile in modo molto semplice impostando nell'apposito campo diinput delle bobine l'indicazione di una word interna.

T12X0.0 WR200

TM

Counters e Clear CounterI Counters contano gli impulsi (transizioni 0è1) applicati alle relativebobine (CU).Le bobine Clear Counters (Cl) resettano lo stato e il conteggio deicounters.A seconda che l'indicazione del counter appaia nei contatti, nelle bobine onelle aritmetiche, essa identifica un elemento diverso della struttura:� Contatti

“Cnn” indica lo stato del counter “nn”� Bobine

“Cnn” individua il counter “nn” il cui setpoint va impostato nelcampo adiacente

� Aritmetiche“WCnn” o WR (1E ÷ 3B) indica il valore corrente del counter “0 ÷ 29”.

Poiché sia il valore di setpoint che quello corrente sono memorizzati inword, il massimo conteggio è pari a 65535.Il clear counter è invece programmabile solo come bobina. Si tratta inrealtà di una bobina fittizia, esso serve a comandare l'operazione di resetdi un counter (stato a 0 e azzeramento del valore corrente).

SetPoint variabiliVale lo stesso discorso fatto a proposito dei timers. È possibileprogrammare un setpoint variabile impostando nell'apposito campo diinput delle bobine l'indicazione di una word interna.

+ NotaSe il valore della WR200,nell'esempio precedente, variasuccessivamente a quando il timer èstato attivato, il nuovo valore nonavrà effetto. Perché esso vengaacquisito, il timer deve prima esseredisattivato (X0.0 OFF) e quindiriattivato (X0.0 ON).

Manuale di programmazione del PLC

Capitolo 3 - Le istruzioni aritmetiche 29

C A P I T O L OC A P I T O L O 3 3

Le Istruzioni Aritmetiche

Le istruzioni aritmetiche operano sulle word e vanno programmate neiblocchi aritmetici.Ogni istruzione esegue una operazione completa.Esse, nella maggioranza dei casi, vanno composte secondo un formalismoche ricalca il modo di scrivere le operazioni nella pratica comune.

WELL-LITE Versione 3.x

Capitolo 3 - Le istruzioni aritmetiche30

Regole di programmazione

X0.0

R0F.2

*

WR0 = WR0 + 1

WR0 = WR0 + 1

WR1A0 = WX10 * 2

WR1A0 = WX10 * 2

WAY12 = WR3 + WR5

WAY12 = WR3 + WR5

Blocco Aritmetico condizionato

Blocco Aritmetico incondizionato

� Ogni istruzione occupa una intera riga del blocco aritmetico.� L'esecuzione del blocco può essere assoggettata o meno al

condizionamento di una circuiteria di abilitazione.� Per eseguire sempre (cioè ad ogni scansione) un blocco aritmetico si

adopera la convenzione di digitare, nel campo di input del contatto diinizio circuito, un asterisco (*) al posto del nome di un elemento.

� In un blocco vi possono essere un numero max di 40 istruzioni.� Il risultato di una operazione può essere assegnato solo a word interne

o di uscita (a doppia word, nei casi di moltiplicazione e divisione).Cioè:WR, WF, WY, WAY, WT e WC.Oppure, nel caso di comparazioni, a relè interni o uscite:R, M, F, Y.

� Gli operandi possono essere tutti i tipi di word (anche quindi WX eWAX) o delle costanti. Nel caso di costanti è ammessa sia lanotazione decimale che esadecimale. Nel secondo caso si devepremettere la lettera H alla cifra (Es. H1004).

� Le costanti possono essere espresse solo in forma positiva (segno “+”implicito).

� Il massimo valore esprimibile nelle costanti è di 65535 (in decimale) eHFFFF (in esadecimale).

+ NotaWT e WC si riferiscono sempre alvalore corrente di timer e counter.

Manuale di programmazione del PLC

Capitolo 3 - Le istruzioni aritmetiche 31

L'AssegnazioneL'assegnazione è individuata dal segno di uguale “=“.

Ad esempioWR100 = WR101indica che nella WR100 deve essere copiato il valore della WR101.

Assegnazioni indicizzatePer la gestione di tabelle e vettori può risultare molto utile potereffettuare assegnazioni mediante una Base e un Indice: la base solitamenteindica il punto di inizio della tabella o del vettore mentre con l'indice siseleziona la word al loro interno.In WELL-LITE tali assegnazioni (dette anche indirette) vengono indicateutilizzando la notazione comune: base(indice). Dove l'indice èriconoscibile dal fatto che viene rappresentato racchiuso fra parentesi.L'assegnazione mediante indice è possibile sia rispetto al sorgente che aldestinatario.Nella figura sono riportate le due possibilità.

X0.0

WR100 = WR210(WR0)

L'indice è sempre espresso in esadecimale: in modo coerente con il modoin cui è espressa la numerazione degli elementi.Di seguito è riportato un esempio di come sia possibile incrementare di 5tutte le WR, dalla H10 alla H64.

R0.0

R0.1

WR1 = 0

WR2 = WR10(WR1)

INC WR1R0.1 : WR1 < 100

WR0 = 2

WR2 = WR2 + 5WR10(WR1) = WR2

Quando R0.0 viene posto a ON l'indice (WR1) è azzerato e viene messoON l'R0.1 (WR0=2), abilitando l'esecuzione del blocco matematicosuccessivo. Essendo l'indice a zero, la prima volta verrà selezionataproprio la WR10.WR2 viene utilizzata come locazione di transito per incrementare il valoredelle word. Incrementando il valore dell'indice WR1 si ottiene che allascansione successiva sarà coinvolta la word posta alla posizione seguente:verranno quindi selezionate le WR11, WR12 ecc. fino a quando l'indicenon raggiunga il valore 100 decimale (pari a H64).L'ultima istruzione del blocco svolge proprio il compito di mettere OFFR0.1 quando tale limite viene raggiunto.

Creazione di un vettore datiSpesso il PLC realizza il controllo del processo sotto la supervisione di unpacchetto di interfaccia operatore (WMOVES).Tali pacchetti forniscono i parametri di lavoro ai singoli controllori e daessi ricevono dati che descrivono la situazione corrente o valori diallarme. Il programma interfaccia operatore si incarica quindi di offrirne lapresentazione in una forma (magari grafica) che ne facilital'interpretazione da parte dell'utente umano.Il difetto più comune è costituito dalla lentezza con cui tali pacchettipossono accedere ai dati di processo; se vi è quindi la necessità di rilevarevelocemente l'andamento di un valore (ad esempio alla stessa velocità concui il PLC effettua il controllo) occorre che sia il PLC ad effettuarne lamemorizzazione in un insieme omogeneo che, nei casi più semplici, èappunto un vettore.

+ NotaIl runtime verifica sempre chel'indice sia corretto. Nel caso in cuivenga puntata una word non esistentel'assegnazione indicizzata non vieneeffettuata e viene segnalato un erroreruntime nella apposita wordRUN_FLT_BIT.

WELL-LITE Versione 3.x

Capitolo 3 - Le istruzioni aritmetiche32

Il supervisore può successivamente prelevare con calma i dati di talevettore per offrine l'opportuna rappresentazione.Questo caso si presenta, ad esempio, quando occorra monitorarel'andamento della pressione e della posizione durante una iniezioneplastica.Supponiamo di voler tracciare tale andamento mediante millecampionamenti effettuati ad ogni scansione: è sufficiente scrivere unprogramma del tipo esemplificato qui di seguito.

X0.0

X0.0

DIF

R0.0X0.0

WR3 = 0

R0.0 : WR3 < 1000

WR100(WR3) = WAX20

INC WR3WR500(WR3) = WAX30

Nell'esempio si presume che:� X0.0 fornisca il comando di partenza dell'iniezione� WAX20 e WAX30 contengano i valori relativi alla pressione nello

stampo e alla posizione del pistone di iniezione� WR100 e WR500 siano le basi dei vettori in cui vengono memorizzati

i valori� WR3 funga da indice.Questi due vettori possono essere prelevati, a fine iniezione, da unsupervisore per essere scalati nelle rispettive unità ingegneristiche evisualizzati in forma grafica.

Posizione

Pressione

Manuale di programmazione del PLC

Capitolo 3 - Le istruzioni aritmetiche 33

Addizione e SottrazioneSono individuate rispettivamente dai due segni “+” e “-”.

Nell'esempio

X0.0

WR1F00 = WAX34 + WT50WC23 = WR234 - WR233

� la somma di WAX34 (ingresso analogico) e WT50 (valore correntedel timer 50) viene copiata in WR1F00

� la differenza di WR234 meno WR233 viene copiata in WC23 (valorecorrente del counter 23).

La gestione dell'OverflowUna word è limitata dal valore massimo rappresentabile (65535) e dal fattoche esprime solo numeri positivi (più avanti è descritto come sia lo stessopossibile gestire anche numeri con segno).Ciò pone dei problemi che vengono superati in modo differente nel caso diaddizione/sottrazione e di moltiplicazione/divisione.In questo caso un superamento del massimo viene segnalato in unaapposita word (Flag di Carry - riporto-) e il risultato riportato nella wordassegnata è diminuito del massimo (65535).Il comportamento risulta evidente se ci rifacciamo ad una rappresentazionecircolare dell'insieme dei numeri di una word.

? La word Carry è la WF6 bit 0.

Questa soluzione consente di trattare numeri superiori al limite altrimentiimposto dalla singola word. Possiamo realizzare somme e sottrazione pervalori che sono rappresentati mediante più word (contigue).Facciamo un esempio utilizzando una rappresentazione estesa a 2 word(con 8 digit anziché 4 si ha che il massimo esadecimale è HFFFF FFFFpari a 4.294.967.295 decimale).

X0.0 WR100 = WR102 + WR104WR101 = WF6;CARRYWR101 = WR101 + WR103WR101 = WR101 + WR105

La somma delle seguenti coppie:(WR100, WR101) = (WR102, WR103) + (WR104, WR105)fa uso del Carry scomponendo la somma delle word nel caso dei valoripiù significativi.

X0.0 WR100 = WR102 - WR104WR101 = WF6;CARRY - 1WR101 = WR101 + WR103WR101 = WR101 - WR105

Per la sottrazione si procede in analogo gestendo però il Carry in modoinverso:(WR100, WR101) = (WR102, WR103) - (WR104, WR105)Da notare che mentre nel caso dell'addizione il Carry va ad 1 quando vi èil riporto, nel caso della sottrazione esso va a 0.

65530

065535

65530

RappresentazioneCircolare dei Numeri:al massimo numerosegue immediatamentelo zero

65530 = 10 - 15

10 = 65530 + 15

15

15

10

10

WF6;CARRY = 1

WF6;CARRY = 0

WELL-LITE Versione 3.x

Capitolo 3 - Le istruzioni aritmetiche34

MoltiplicazioneLa moltiplicazione:� utilizza come operandi delle word singole� depone il risultato in una doppia word (cioè nella word indicata

nell'operazione e in quella immediatamente successiva).Sotto è riportato il comportamento nel caso della moltiplicazione:WR100 = WR102 * WR104

*

WR100 = WR102 * WR104

H0051 H1000

H1000 H0005

WR102 WR100

WR104 WR101H0005 1000

DivisioneLa divisione:� utilizza come dividendo una doppia word� utilizza come divisore una word singola� depone in risultato in una doppia wordSotto è riportato il comportamento nel caso della divisione:WR100 = WR102 / WR104

*

WR100 = WR102 / WR104

H0100

H0005H0033

H0005H0001

WR102

WR103WR100

WR104

WR101H0001 0033

Il resto della divisione va sempre nella WFC.

Incremento e DecrementoNel caso in cui occorra incrementare o decrementare di 1 il valore di unaword esistono due semplici istruzioni INC e DEC la cui sintassi èevidenziata dai seguenti esempi:� INC WR100� DEC WR300.

+ NotaPoiché il risultato di unamoltiplicazione ha un numero di cifrepari alla somma delle cifre deglioperandi, se il risultato è sempredeposto in una coppia di word, nonpuò esservi Overflow. Occorrequindi fare attenzione a questo mododi funzionare per evitare di utilizzareword che, sebbene nonespressamente citate, verrannomodificate dall'operazione.

+ NotaNel caso in cui il divisore sia 0, vienesegnalato l'errore runtime nella wordRUN_FLT_BIT. In tal caso ilrisultato dell'operazione viene forzatoscrivendo nelle due word delrisultato HFFFF FFFF, cioè il valoremassimo esprimibile. Si consiglia digestire questo caso a programmamediante il test dell'apposito bitposto nella RUN_FLT_BIT (bit 5 diWFE).

Manuale di programmazione del PLC

Capitolo 3 - Le istruzioni aritmetiche 35

Le comparazioniVanno programmate all'interno dei blocchi aritmetici.Consentono di comparare il valore di 2 word e di settare lo stato di un relèinterno in base al risultato.Esistono le seguenti istruzioni di comparazione:� maggiore o uguale� minore� minore o uguale� diverso� uguale.

R100 : WR200 >= WR210X0.0R101 : WR200 < WR210R102 : WR200 <= WR210

R104 : WR200 = WR210R103 : WR200 >< WR210

Negli esempi, quando la comparazione è verificata R100 viene impostatoa 1, altrimenti è settato a 0.Essi sono rispettivamente riferiti ai casi prima elencati.

Le comparazioni nel LadderSono comparazioni come le precedenti, esse possono essere programmatedirettamente all'interno dei circuiti e vengono viste come contatti checonducono quando la condizione viene realizzata.

WR200

WR200

X0.0

X0.1

>=

><

WR210

WR210

SET e RESET di bit singoliAll'interno dei blocchi aritmetici è possibile inserire le istruzioni SET eRESET applicate a bit singoli.

R0.0 = 1R0.1 = R0.5R0.2 = NOT R10.0

+ NotaI Blocchi di Comparazione nonpossono essere programmati ad iniziocircuito.

WELL-LITE Versione 3.x

Capitolo 3 - Le istruzioni aritmetiche36

Le operazioni logicheSono istruzioni che consentono di operare sui bit delle word.Vi sono le tre operazioni logiche fondamentali:� AND (bit a bit)� OR (bit a bit)� XOR esclusivo (bit a bit).

WR100 = WR200 AND WR210WR101 = WR200 OR WR210WR102 = WR200 XOR WR210

*

Nell'esempio, supponendo che sianoWR200 = H2356 = B0010 0011 0101 0110WR210 = H33A7 = B0011 0011 1010 0111i risultati sono, rispettivamenteWR100 = H2306 = B0010 0011 0000 0110WR101 = H33F7 = B0011 0011 1111 0111WR102 = H10F1 = B0001 0000 1111 0001Molto utili sono anche le operazioni di shift:� shift Destro� shift SinistroEsse possono essere adoperate anche per effettuare shift su più word:

WF6;CARRY = 0Y10.3SHFR WR100SHFL WR101

Carry = 0 presetta il bit che verrà inserito nella WR100 come MSBit.Se WR100 e WR200 hanno, per ipotesi, entrambe valore H1111, alla finedelle tre operazioni si ottiene cheWR100 = H0888 e WR101 = H8888È possibile anche effettuare rotazioni:

WF6;CARRY = WR100 AND 1Y10.3

SHFR WR100

Se WR100 vale H5431, si ottiene: WR100 = H9A19

Ad esempioSHWR WR100 4Shifta di 1 bit il gruppo costituito dalle WR100, WR101, WR102,WR103.

Test di bitQuesta operazione non necessita di operatori poiché essa è implicita percome sono organizzate le word.Se si vuole testare il terzo bit della WR10 è infatti sufficiente richiamarela R10.2

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Cy

Cy

Word di valore = H53CA

SHFR

SHFL

Il Bit 'uscente' viene copiato nel Bit menosignificativo (Cy) della word WF6(Carry).Il Bit 'entrante' viene prelevato sempreda Cy.

Manuale di programmazione del PLC

Capitolo 3 - Le istruzioni aritmetiche 37

Esempi di programmazione con aritmetiche

Esempio 1: Timer multiplo

Supponiamo di dover abilitare a scadenze successive più azioni. Invece diprogrammare più temporizzatori attivati dalla medesima condizione, macon tempi di scadenza diversi possiamo sfruttare le istruzioni dicomparazione utilizzandone uno solo.Nell'esempio, il timer 10 viene utilizzato per intercettare 5 ritardi:

X23.A

*R20.0 : WT10 > 200

TM

T10 100

R20.1 : WT10 > 300R20.2 : WT10 > 400R20.3 : WT10 > 1200

dopo 10 secondi si attiva la bobina del timer stesso, ma poiché essocontinua a contare il tempo, se permane l'abilitazione di X23 lamatematica successiva intercetterà anche i ritardi di 20, 30, 40 e 120secondi attivando i relè da R20.0 a R20.3.

Esempio 2: Finestra di Watch Dog

Si definisce Watch Dog (cane da guardia) un dispositivo che permette divalutare se un certo evento si svolga nel tempo ed alle condizioni previste.Un esempio classico è dato da eventi che debbano durare un tempoprevisto, cioè né inferiore né superiore a dei limiti prefissati. Ciò vienerealizzato mediante appositi timers o utilizzandone due tradizionali.

X23.A

R20.0

R20.2

R20.1

X10.0

*R20.0 : WT10 > 200

TM

T10 100

R20.1 : WT10 < 300

R20.2

R20.3

S

Nell'esempio sopra si mostra come ciò sia realizzabile mediante un solotimer in combinazione con le istruzioni aritmetiche, supponendo che:� X23.A segnali che esiste l'abilitazione all'evento� X10.0 segnali che l'evento è attivoe che:� esso debba svolgersi nell'intervallo fra 20 e 30 secondi.L'ultimo circuito segnala l'eventuale anomalia su R20.3, infatti R20.2 siattiva solo durante l'intervallo previsto.

WELL-LITE Versione 3.x

Capitolo 3 - Le istruzioni aritmetiche38

Esempio 3: Costruzione di un Up/Down Counter

Un contatore avanti/indietro può servire ad esempio a misurare il numerodi pezzi presenti in un'isola di lavoro quando il rifornimento ed il prelievodipendono da processi asincroni.

X0.0

X0.1 DIF

DIFINC WR200

DEC WR200

Esso, come si vede nell'esempio, è facilmente realizzabile mediante le soleistruzioni aritmetiche, supponendo che X0.0 indichi l'ingresso e X20.1l'uscita di un pezzo da lavorare: WR200 contiene il numero di pezzi.

Esempio 4: Intercettazione di valori negativi

Nell'esempio precedente, se il prelievo è più veloce del rifornimento, laWR200 può assumere valori negativi.

X0.0

X0.1

R200.F

DIF

DIFINC WR200

DEC WR200

WR200 = 0

Come abbiamo visto, il PLC lavora solo con interi positivi posti su unascala circolare in cui l'incremento del massimo numero positivorappresentabile porta di nuovo allo zero. Poiché vale anche l'inverso, cioèdecrementando lo zero si ottiene il numero massimo, è stata adottata laconvenzione di dividere la scala circolare in due mediante il bit piùsignificativo della word: quando esso è a 1 significa che, secondo la scalaassoluta, si è al di sopra del valore H8000 cioè 32767 decimale.Nel caso in cui tale numero positivo fosse più soddisfacente per le nostrenecessità, nel nostro esempio, possiamo intercettare la condizionenegativa mediante il bit R200.F e riparare immediatamente al decrementoerrato.

Esempio 5: Conversione Gray-Binario

Il Codice Gray è un sistema di numerazione binaria spesso utilizzato dagliencoders (rilevatori di posizione) per minimizzare gli errori legati alletransizioni numeriche.Se ricevessimo sugli ingressi X30.0 - X30.7 un valore binario puro che ciindica una posizione, nella transizione dal numero H0F a H10, potrebbeaccadere di leggere erroneamente per un momento H1F poiché i singolibit possono commutare con tempi differenti. Il codice Gray è studiato unmodo da eliminare tali transizioni, tuttavia esso non è tuttavia elaborabiledalle normali istruzioni aritmetiche.Per convertirlo possiamo adoperare la semplice sequenza descritta nellapagina seguente.

Manuale di programmazione del PLC

Capitolo 3 - Le istruzioni aritmetiche 39

Conversione da encoder assoluto codice GRAY a decimale.

L'encoder in oggetto fornisce la lettura sui primi dieci bit della word diingresso WX30.

- WF6 = CARRY.

*WR10 = WX30WR11 = WR10WF6;CARRY = 0SHFR WR11WF6;CARRY = 0WR10 = WR10 XOR WR11SHFR WR11WF6;CARRY = 0WR10 = WR10 XOR WR11SHFR WR11WF6;CARRY = 0WR10 = WR10 XOR WR11SHFR WR11WF6;CARRY = 0WR10 = WR10 XOR WR11SHFR WR11WF6;CARRY = 0WR10 = WR10 XOR WR11SHFR WR11WF6;CARRY = 0WR10 = WR10 XOR WR11SHFR WR11WF6;CARRY = 0WR10 = WR10 XOR WR11SHFR WR11WF6;CARRY = 0WR10 = WR10 XOR WR11SHFR WR11WF6;CARRY = 0WR10 = WR10 XOR WR11SHFR WR11WF6;CARRY = 0WR10 = WR10 XOR WR11

WR11 è una word ausiliaria per il calcolo.WR10 contiene l'equivalente binario normale del valore Gray lettosu X30.0-X30.9.

- L'esempio è valido per il caso di 10 bit.