Tutto sui PLC (parte 2)

11 02 2008

SIGNIFICATO DI PROGRAMMA

Un programma è una lista di istruzioni che fa eseguire alla CPU una serie di operazioni che permettono di controllare un processo. La più piccola entità di un programma è l’istruzione che è composta di tre parti: numero di linea, operazione, operando.

Il numero di linea è una posizione fissa nella memoria utente ed è l’indirizzo in memoria dell’istruzione. L’indirizzo è impostato in modo automatico dal controllore.

L’operazione è quella parte dell’istruzione attraverso la quale l’istruzione esegue una determinata funzione.

L’operando è l’elemento su cui l’istruzione deve agire.

Il programma deve avere almeno due istruzioni.

Affinché un programma possa svolgere un ciclo di lavoro deve essere composto da più istruzioni, le quali definiscono un blocco logico, quando assegnano un risultato.

I vari blocchi logici (nel linguaggio ladder saranno dette reti) di un processo saranno interdipendenti tra loro.

L’operazione di programmazione del PLC passa attraverso i seguenti punti fondamentali: studio dettagliato del processo per valutare quante e quali grandezze il PLC deve controllare e quale tipo di controllo esercitare su di esse, determinazione del numero e del tipo di trasduttori e attuatori necessari al controllo (ossia fissare il numero degli ingressi e delle uscite), realizzazione dello schema di controllo utilizzando il metodo preferito (Ladder, schemi e blocchi funzionali, Grafcet), scrittura del programma e verifica della funzionalità. Nell’assegnare gli ingressi e le uscite al PLC bisognerà inizialmente distinguere se questo ha i punti di I / O separati, oppure se ogni morsetto può essere utilizzato sia come Input che come Output previa opportuna immissione di una parola chiave nel registro ad esso dedicato.

 

LINGUAGGI DI PROGRAMMAZIONE

Per poter scrivere il software è necessario uno strumento attraverso il quale vengono stabilite delle regole che definiscono l’insieme delle operazioni utilizzabili: il linguaggio di programmazione. I linguaggi di programmazione si possono dividere in due grandi tipologie: grafici e letterali.

I linguaggi grafici si basano su un set di simboli che identificano il tipo di operazione. Per questo tipo di linguaggio si usano, in genere, dei PC corredati di opportuni software. Esistono diversi linguaggi grafici, il più utilizzato è il ladder, detto anche linguaggio a contatti, perché più si avvicina con lo schema funzionale utilizzato in logica cablata.

Il ladder si basa essenzialmente sull’impiego di alcuni simboli principali che, in funzione della posizione che assumono nel blocco logico, ne definiscono il tipo di operazione, mentre l’operando è scritto sul simbolo stesso.

La rete LADDER è un insieme di righe contenenti i simboli logici delle funzioni di controllo e di comando; ogni rigo si considera terminata se contiene come ultimo simbolo logico una bobina. I simboli più utilizzati sono i contatti NA e NC. Questi due contatti devono essere controllati ciclicamente dal microprocessore al fine di riconoscere lo stato e, in funzione di questo determinare lo stato di uscita o la commutazione di un relè interno; in funzione di questi stati il microprocessore può anche comandare un contatore, un temporizzatore oppure un relè di controllo.

Tutti gli elementi logici vengono collegati mediante linee orizzontali o verticali per formare un blocco logico. Tutti i blocchi logici sono compresi fra due linee verticali che rappresentano le polarità dell’alimentazione.

Un altro linguaggio grafico è il Grafcet, che è un metodo di analisi consistente nella scomposizione degli automatismi in una successione di fasi, alle quali sono associate delle azioni e delle transizioni (è utilizzato dalla Telemecanique). Ogni azione può aver luogo solo se il segnale di transizione si trova in un determinato stato logico; ad ogni azione è associata una fase di lavoro.

Il linguaggio GRAFCET utilizza blocchi che identificano le varie “fasi” del funzionamento del sistema controllato, ad ognuna delle quali corrisponde il compimento di una certa “azione”. Ogni “fase” rappresenta una situazione statica nella quale il sistema svolge una funzione. Il passaggio da una fase all’altra avviene se si verificano certe condizioni, in tal caso nasce una “transizione”. La fase viene indicata con un blocco. Il passaggio tra due fasi avviene solo se la prima è ON e risulta verificata la condizione legata alla stessa transizione. La linea di collegamento che unisce due fasi, e che evidenzia il passaggio dall’una all’altra può essere orientata al fine indicarne il verso. Tale orientamento può essere omesso nel caso che si sottintenda valido quello dall’alto verso il basso.

Esistono due livelli di GRAFCET. Nel primo il funzionamento è scritto in modo esplicito e indipendentemente dai dispositivi di I / O (trasduttori e attuatori). Nel secondo livello il funzionamento del sistema è scritto in funzione dei dispositivi che lo compongono. L’utilizzazione del GRAFCET di primo livello comporta, ad esempio, la descrizione letterale di un’azione (per es.: “comandare il motore”), mentre l’utilizzazione di un GRAFCET di secondo livello permetterebbe la descrizione in modo simbolico con riferimento al simbolo identificatore della bobina di eccitazione dello stesso motore.

 

Un altro tipo di linguaggio è il FUP (utilizzato dai Siemens) che si basa sull’utilizzo di blocchi logici funzionali definiti, a cui vengono inviati i segnali da elaborare per fornire il risultato sull’uscita richiesta.

I linguaggi letterali si basano sull’utilizzo di codici per realizzare una determinata operazione. Il più utilizzato è l’AWL o lista istruzioni. Anche se questi codici non sono standardizzati (ogni casa ha un suo linguaggio) passare da un tipo di PLC ad un altro è abbastanza agevole.

 

RISORSE SOFTWARE

Per poter realizzare il programma è fondamentale conoscere le risorse hardware e software messe a disposizione da un controllore (per risorse software intendiamo ciò che la macchina può fare e non come lo fa).

Le risorse software maggiormente utilizzate sono: inizio di un blocco logico, operazione serie fra due o più segnali, operazione parallelo fra due o più segnali, combinazione serie – parallelo, operazione di negazione, operazione serie fra blocchi di segnali in parallelo, operazione parallelo fra blocchi di segnali in serie, operazione di attivazione uscite, operazione di abilitazione di contatori, operazione di attivazione di un registro a scorrimento, operazione di Set e Reset su uscite, utilizzo dei registri speciali a singolo bit, istruzioni di salto programma.

 

 

IMPIEGO DELLE FUNZIONI DI BASE

Dato che a seconda del tipo di controllore abbiamo un linguaggio di assegnazione diverso utilizzeremo un linguaggio nostro che modificheremo quando opereremo direttamente sul controllore. Per quanto riguarda gli ingressi e le uscite li chiameremo I0, I1, I2, ecc., e U0, U1, U2, ecc. rispettivamente.

Ogni qualvolta si comincia la scrittura di un nuovo blocco logico si deve informare la CPU con l’introduzione della relativa istruzione (nel OMRON e nel TELEMECANIQUE il comando è LD, nel SIEMENS, in realtà questa operazione è automaticamente svolta dal controllore ad inizio programma ed all’istruzione successiva a quella di assegnazione uscita).

Per realizzare un primo blocco logico si deve realizzare in uscita il risultato dell’elaborazione (in OMRON è denominato con la sigla OUT, in TM il simbolo è ST, in SIEMENS è =). Non è ammesso programmare più blocchi logici che abilitano la stessa uscita, mentre in alcuni controllori è ammessa l’attivazione contemporanea di più uscite (in TM comandi MPS e MPP). L’istruzione di fine programma (END) va sempre inserita alla fine della lista di istruzioni o del linguaggio a contatti (alcuni PLC la inseriscono in modo automatico).

Per simulare l’operazione di due segnali in serie si utilizza la funzione logica AND (in OMRON ed in TM è AND, in SIEMENS è U).

Per simulare l’operazione di due segnali in parallelo si utilizza la funzione logica OR (in OMRON ed in TM è OR, in SIEMENS è O).

In un programma è possibile: richiamare un segnale quanto si vuole, utilizzare le uscite come ingressi. In un programma le istruzioni vanno scritte in successione senza interporre nessuna istruzione di fine programma (non verrebbero elaborate le successive). Per il collaudo è necessario: portare gli ingressi nella condizione logica 0 (led di stato spenti); posizionare il selettore di modalità operativa in RUN (led di RUN acceso); collaudare un solo blocco logico per volta aiutandosi con i led di stato presenti sul PLC e confrontando il funzionamento con i diagrammi temporali delle singole istruzioni; eseguire il controllo delle uscite che dipendono da altre uscite e non direttamente dagli ingressi; monitorare attraverso l’unità di programmazione gli stati logici dei segnali.

Consideriamo, adesso, il caso di una combinazione AND – OR. Dobbiamo realizzare l’attivazione di un uscita da due punti separati se è presente un terzo segnale di consenso. Dobbiamo considerare tre ingressi ed un’uscita. Possiamo scrivere: se è chiuso I1 (prima istruzione), oppure è chiuso I2 (seconda istruzione) ed è chiusa I3 (terza istruzione) attiva U1 (istruzione di assegnazione). In linguaggio OMRON diventa: LD I1, OR I2, AND I3, OUT U1, END. In TM è: LD I1, OR I2, AND I3, ST U1, END. In SIEMENS è: U(, O I1, O I2, ), U I3, = U1.

Anche nel PLC è possibile realizzare l’autoritenuta e lo si fa richiamando, in parallelo agli organi di comando, il segnale dell’uscita programmata (nel caso precedente potevamo ottenere ciò fissando al posto di I2 U1).

Nel PLC, quando un solo contatto può avere la necessità di utilizzare la doppia funzione di contatto NC ed NA (è il caso del pulsante di stop e della protezione termica che sono NC nel normale funzionamento, ma le loro segnalazioni sono NA), si ricorre all’operazione di negazione con la quale è possibile invertire il reale stato logico del segnale obbligando la CPU ad elaborarlo come se fosse aperto. In fase di programmazione, richiameremo questi segnali in condizione non negata per il funzionamento dell’uscita derivata e nella condizione negata per quella di segnalazione. Quando si effettua il collaudo, in questi casi è necessario, prima del RUN, portare tali ingressi alla condizione logica 1 (led acceso). Quando siamo in presenza di un segnale negato non bisogna pensare ad un contatto NC ma ad un segnale il cui livello logico sarà invertito dalla CPU.

L’assegnazione è fondamentale per poter realizzare il programma in modo corretto; non sempre i dispositivi vengono utilizzati in configurazione NA; quindi, se viene stabilito che un segnale debba essere di tipo NC, è necessario ricordarsi di posizionarlo in tale condizione già nella fase di collaudo, a livello logico 1. La sua programmazione, se negato o meno, dipenderà solo dalla funzione che quel segnale ha sul funzionamento dell’impianto.

In alcuni casi, per esempio per immagazzinare l’uscita da un temporizzatore, per la scrittura del codice letterale è necessario ricorrere all’uso di istruzioni particolari, attraverso le quali viene utilizzata una memoria intermedia (memoria di merker), che memorizza temporaneamente un risultato.

Consideriamo il caso in cui dobbiamo eseguire le seguenti operazioni: parallelo fra segnali in AND, serie fra segnali in OR. Nel primo caso la procedura sarà: risolvere il primo AND, risolvere il successivo AND, eseguire la OR fra i due blocchi, proseguire con la programmazione. Vediamo come le tre case affrontano il problema.

 

OMRON

SIEMENS

TELEMECANIQUE (TM)

LOD I1

U I1

LD I1

AND NOT I3

UN I3

ANDN I3

LOD I2

O

OR( I2

AND NOT I4

U I2

ANDN I4

OR LD

UN I4

)

OUT U1

= U1

ST U1

 

Nel secondo caso si deve procedere come segue: risolvere il primo blocco OR, risolvere il successivo blocco OR, eseguire la AND fra i blocchi precedenti, proseguire con la programmazione. Vediamo come le tre case affrontano il problema.

 

OMRON

SIEMENS

TELEMECANIQUE

LOD I1

U (

LD I1

OR I2

O I1

OR I2

LOD I3

O I2

AND( I3

OR NOT I4

)

ORN I4

AND LD

U (

)

 

O I3

ST U1

 

ON I4

 

 

)

 

OUT U1

= U1

 

 

È sempre utile vedere se, spostando la posizione dei segnali, si riesce ad ottenere lo stesso risultato con un numero minore di istruzioni.

 

REGISTRI A SINGOLO BIT

In logica programmabile gli elementi che svolgono la funzione di memoria sono i registri interni a singolo bit che vengono identificati, a seconda delle case costruttrici di PLC, attraverso denominazioni diverse: I. R., Merker, Flag, relè interni, uscite interne pur svolgendo la stessa funzione che è quella di memorizzare, attraverso due stati logici 0 e 1 se una qualsiasi operazione è o meno avvenuta. Questi elementi fanno parte della memoria RAM del PLC, quindi in essi è possibile sempre scrivere e leggere. Il numero di registri è variabile a seconda della taglia, ma in generale va da qualche centinaio ad alcune migliaia. L’indirizzamento di questi registri varia da casa a casa e lo potremo leggere sul manuale (per esempio nel Siemens è M 0.0, in TM è M1). Nel proseguo delle operazioni noi useremo la sigla IR. I registri a singolo bit si suddividono in: non ritentivi (non holding – type), ritentivi (holding – type), speciali. I primi perdono il loro contenuto quando il controllore viene portato in modalità operativa STOP oppure quando viene tolta l’alimentazione (vengono utilizzati come memorie temporanee nella gestione dei cicli di lavoro). I secondi non perdono il loro contenuto anche in mancanza di tensione (per esempio per segnalare una condizione di allarme). Questi registri, però, devono essere programmati adeguatamente se no si comportano come quelli non ritentivi; per poter svolgere appieno la loro funzione vanno programmati con le istruzioni di SET (portare a 1) e RESET (portare a 0), presenti su tutti i controllori. I registri programmati con tali istruzioni, se portati nella condizione logica 1, non sono più azzerabili se non con l’istruzione di RESET. I registri speciali vengono definiti tali, poiché contengono delle informazioni molto utili per l’utente e sono gestiti direttamente dal PLC. Nella maggior parte dei casi, in essi non è possibile scrivere. Ogni controllore ha un certo numero di registri speciali. Alcune delle funzioni che si possono compiere con questi registri sono: prima scansione del PLC, errore della batteria, clock a diverse basi dei tempi, registro di azzeramento uscite, errori di sistema in generale.

 

TEMPORIZZATORI

Quando c’è la necessità di introdurre dei ritardi fra diverse operazioni o di avvalersi di una qualsiasi funzione legata al tempo, si ricorre a dei temporizzatori. Ogni controllore è fornito di un numero di temporizzatori (per es. nel PL7 della TM sono tre, nel S7 sono cinque già nell’unità centrale). Considereremo solo il temporizzatore con ritardo alla chiusura che è il più simulato. Anche per i timer è necessario conoscere il codice di riconoscimento (indirizzo), tale codice è generalmente composto da una sigla letterale e da un numero (es. T0). Su qualche controllore l’area dei timer corrisponde a quella dei contatori, per cui per lo stesso indirizzo ci può essere o solo il contatore o solo il timer. Alla condizione logica 1 del segnale in ingresso, il temporizzatore entra in funzione e la sua uscita è a stato logico 0 fin quando non è trascorso il tempo precedentemente impostato, dopo di che andrà in stato logico 1. I timer possono essere a incremento (da 0 a 9999 massimo per alcuni tipi) o a decremento (da 9999, o un altro valore impostato, a 0). È ovvio che la durata del segnale di abilitazione deve essere superiore al tempo impostato, nel caso contrario non attiveremo mai l’uscita del temporizzatore. Occorre impostare il tempo di ritardo desiderato; tale valore può essere espresso in secondi, decimi di secondo o centesimi di secondo in funzione della base dei tempi prevista. Il tempo, espresso in secondi, sarà dato da: secondi = . Impostando, per esempio, un valore pari a 525 ed utilizzando un timer con base dei tempi 10 ms avremo: secondi =  = 5, 25 secondi. Si possono realizzare clock a tempo variabile variando il valore di predisposizione si cambia la frequenza di clock, la durata del segnale ON è pari ad una scansione. Temporizzatore esteso: l’uscita a stato alto di un timer dipende dal tempo impostato per il temporizzatore stesso più quello dovuto per attivare quello di lancio. Si possono ottenere anche clock ON / OFF con tempi variabili impostando per due temporizzatori due tempi diversi.

 

GENERAZIONE DI IMPULSI

In molte applicazioni può risultare eccessiva la durata di alcuni segnali, per esempio un finecorsa azionato poiché potrebbero pregiudicare il corretto funzionamento del ciclo di lavoro. Molti controllori mettono a disposizione un’istruzione in grado di tagliare un segnale fornendone un altro della durata di una scansione, denominata One Shot, Single Output o monostabile. È possibile generare un segnale di tipo monostabile sia quando la transizione del segnale va da 0 a 1 (impulso sul fronte di salita) che quando va da 1 a 0 (impulso sul fronte di discesa). Nell’utilizzo di questa istruzione va considerato che: il segnale di attivazione può essere anche la combinazione di più segnali, l’impulso non si realizza nel passaggio dalla modalità operativa STOP a RUN dato che non viene rilevato il fronte, tale istruzione potrebbe, su alcuni controllori, essere numerata nel qual caso non può essere superato il numero massimo prestabilito e può essere utilizzato una sola volta. Non tutti i controllori mettono a disposizione questa istruzione, in questo caso è necessario realizzare un semplice programma con l’ausilio dei registri interni a singolo bit.

 

CONTATORI

Altri elementi funzionali che trovano largo impiego nella programmazione dei sistemi produttivi sono i contatori, dispositivi che commutano la loro uscita dopo che un determinato evento si è verificato un numero di volte prestabilito. La loro abilitazione avviene in base al tipo di contatore, che può essere: unidirezionale (a incremento o decremento), reversibile. Al primo tipo appartengono quelli che possono funzionare a passo 1 in un’unica direzione (positiva o negativa), portando l’uscita a 1 logico quando è stato raggiunto il valore impostato (caso a incremento) o quando è stato raggiunto il valore 0 (caso a decremento). Per la loro abilitazione è necessario impostare: il segnale di conteggio, il segnale di azzeramento o reset, il numero del contatore, il valore di predisposizione (preset value). Il segnale di conteggio abilita il contatore a incrementare il valore raggiunto a quel momento e funziona solo sul fronte di salita (o di discesa) del segnale. Tale abilitazione può anche provenire dalle abilitazioni di più segnali. Il segnale di Reset permette di azzerare il contatore, ogni qualvolta ve ne è la necessità. All’arrivo di questo segnale anche l’uscita del contatore sarà posta a 0. Tale segnale è predominante su quello di conteggio. I contatori reversibili sono invece quelli che possono operare il conteggio sia in incremento che in decremento, sempre a passo 1. Per la loro abilitazione è necessario impostare il segnale di conteggio in incremento (UP) ed il segnale di conteggio in decremento (DOWN).

Un contatore può simulare l’intervento di un temporizzatore se come segnale di conteggio viene utilizzato uno dei registri speciali di clock preimpostati nella macchina (danno direttamente decimi di secondo, secondi, decine di secondi, minuti).

Anche per i contatori è possibile il funzionamento in cascata, fornendo la possibilità di operare conteggi più estesi rispetto a quello massimo consentito.

 

ISTRUZIONI DI CONTROLLO

Nel caso in cui si vuole far variare la rigidità di funzionamento (l’elaborazione delle istruzioni in modo sequenziale) si utilizzano delle istruzioni di controllo, che consentono all’utente di decidere come e quali parti far elaborare alla CPU. Le istruzioni maggiormente utilizzate sono: MCA (Master Control Set), JMP (Jump o salto condizionato).

L’istruzione MCS, sempre utilizzata in combinazione con l’istruzione MCR (Master Control Reset), consente di subordinare alla condizione logica di un segnale, lo stato delle uscite assegnate nella parte di programma compresa fra le istruzioni stesse. Quando il segnale in ingresso assume livello logico 1, il programma compreso fra MCS e MCR viene normalmente elaborato dalla CPU; dall’istante in cui lo stesso segnale si porta a livello logico 0, è come se tale parte di programma non fosse elaborato e tutte le uscite, temporizzatori e registri vengono azzerati e i contatori non saranno più abilitati al conteggio pur conservando l’ultimo valore raggiunto. L’eventuale programma scritto dopo la MCR sarà svolto regolarmente. In alcuni controllori, questa istruzione può prevedere anche la sua numerazione e questo consente di realizzare programmi più complessi poiché è possibile annidare i cicli e inserire un’istruzione MCS all’interno di un’altra. Nel caso in cui all’interno di due o più parti programma debbano essere assegnate stesse uscite, è necessario utilizzare registri di appoggio e portare fuori dalle istruzioni MCR le uscite interessate.

L’istruzione di salto (JMP) consente, sulla base di un segnale di controllo, di effettuare salti di programma, con conseguente aumento delle prestazioni del PLC. I vantaggi derivanti da questo tipo di programmazione sono: riduzione del tempo di scansione (dato che la velocità di elaborazione dipende dal numero di istruzioni da cui è composto il programma, la CPU, dovendo leggere meno passi, terminerà prima la sua scansione), sviluppo del software per sottoprogrammi. L’istruzione che identifica la fine del blocco da non elaborare è JUMPEND. Il funzionamento dell’istruzione JUMP è il seguente: quando il segnale di controllo è a livello logico 0, la parte di programma compresa fra l’inizio salto e fine salto viene elaborato normalmente; quando il segnale di controllo passa a stato logico 1, tale parte di programma viene ignorata dalla CPU.

 

REGISTRO A SCORRIMENTO

Il registro a scorrimento consente di risolvere problemi di programmazione là dove il ciclo di lavoro è composto da una sequenza ordinata di movimenti (esempio in elettropneumatica). Un registro a scorrimento ha la caratteristica di avere non una sola ma diverse uscite, il cui numero dipende dalle specifiche hardware / software stabilite dal costruttore; inoltre, il livello logico presente su di esse può scorrere a passo 1 in un senso o nell’altro. Quando arrivano i segnali di abilitazione i diversi livelli logici (0 e 1) in cui si trovano le varie uscite vengono fatti scorrere con un passo alla volta. In pratica anche questo circuito si comporta in modo ordinato e noi possiamo sfruttare questa caratteristica secondo le nostre esigenze, assegnando ad ogni bit del registro un’operazione da compiere.

Per l’attivazione e la programmazione del registro a scorrimento è necessario utilizzare tre segnali, che svolgono la seguente funzione: il segnale di reset che serve ad azzerare tutte le uscite programmate dal registro ed è predominante su gli altri due, il segnale di clock che dà il consenso affinché sulla prima uscita del registro venga trasferito il livello logico presente sul segnale di Data (tale abilitazione ha effetto solo sul fronte di salita del segnale), il segnale di Data che è quello che contiene il livello logico da trasferire sul primo bit.

Da ciò si comprende che, per portare la prima uscita del registro a scorrimento a 1 logico, è necessario chiudere il livello di Data dopo di che viene attivato il clock. una volta creata tale condizione, se si impone il segnale di Data sempre a 0, controllando opportunamente il segnale di clock è possibile realizzare dei cicli sequenziali.

Per quanto concerne la sintassi da utilizzare in fase di programmazione è necessario, oltre ai segnali di abilitazione, stabilire altri due parametri: il primo bit da impiegare e quanti bit si intende utilizzare. Per quanto riguarda le uscite, i bit di uscita vengono utilizzati seguendo la sintassi stabilita per tutti gli altri segnali, è solo necessario controllare il codice di riconoscimento utilizzato dal PLC in dotazione.

 

PROGRAMMAZIONE AVANZATA

Con l’introduzione dei trasduttori, cioè sensori in grado di fornire segnali proporzionali alla grandezza fisica su essi agenti, si è passati dal controllo ON / OFF a quello digitale numerico ed a quello analogico, con l’effettiva possibilità di gestire i processi in modo più completo. Per la risoluzione di problemi più complessi e la dove intervengono grandezze di tipo numerico, i controllori mettono a disposizione dell’utente istruzioni che consentono di gestire tali tipi di dati.

Il PLC esegue l’operazione di lettura da tutte le aree specificate (ingressi, uscite, registri dati, temporizzatori, contatori, ecc.) e può immagazzinarne il dato oppure realizzare una sua elaborazione ed immagazzinare questa elaborazione. Per elaborazione si intende tutte quelle operazioni che è possibile realizzare sui dati numerici, quelle maggiormente impiegate sono: le quattro operazioni aritmetiche, incremento e decremento di un registro, scorrimento di un dato, conversione binario / BCD e viceversa, operazioni AND / OR su word, comparazione fra dati.

 

 

 

 

Annunci

Azioni

Information

One response

20 04 2009
piero

ottima descrizione complimenti.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...




%d blogger hanno fatto clic su Mi Piace per questo: