330 likes | 654 Views
IL Linguaggio per la programmazione del PLC. Ing. Marco Giannini. Architettura e Programmazione dei Microelaboratori Anno accademico 2008/2009. Prof. Giuseppe Mastronardi. Ladder Diagram (Linguaggio a contatti). Linguaggio a contatti.
E N D
IL Linguaggio per la programmazione del PLC Ing. Marco Giannini Architettura e Programmazione dei Microelaboratori Anno accademico 2008/2009 Prof. Giuseppe Mastronardi
Linguaggio a contatti La forma del programma deriva dalla logica a relè, con le due linee verticali laterali (i montanti della scala) rappresentati l’alimentazione e con le linee orizzontali (i pioli o rung) che alimentano una bobina se una certa combinazione di contatti abilita il flusso di energia. I contatti sono associati agli ingressi digitali oppure a condizioni interne al dispositivo (rappresentati entrambi da bit di memoria). Una bobina è associata a un bit della memoria e, col suo tramite, comandare una uscita digitale o segnalare una condizione interna.
Linguaggio a contatti Regola fondamentale: il flusso di energia ha come unico verso quello che va dal montante sinistro al montante destro; la bobina U1 può essere accesa se sono chiusi i contatti I1, I2, I3, I4 e non quando sono chiusi i contatti I7, I5, I2, I3, I4.
Tipi di istruzioni del linguaggio a contatti • Istruzioni di base: contatti e uscite di tipo relè • Istruzioni di temporizzazione e conteggio • Istruzioni per il controllo del programma • Istruzioni per la gestione dei dati • Istruzioni per funzioni speciali (regolatori PID)
Descrizione della memoria RAM di un PLC virtuale Area degli ingressi: 32 word da 16 bit con indirizzi I1-I32; Ix:y indica il bit y della word x; ad ogni ingresso digitale corrisponde un bit; ad ogni ingresso analogico corrisponde una word di 16 bit. Area delle uscite: 32 word da 16 bit con indirizzi U1-U32; si utilizzano le stesse convenzioni dell’area degli ingressi.
Descrizione della memoria RAM di un PLC virtuale Area utente: 512 word da 16 bit indirizzabili con W1-W512; è utilizzata per memorizzare dati, tabelle, risultati parziali dell’elaborazione del programma utente. Area PID: sono previste 4 strutture di tipo regolatore PID indirizzabili con P1-P4. Area dei Temporizzatori sono previste 16 strutture di temporizzazione con indirizzi T1-T16. :
Modalità di esecuzione di un programma scritto in linguaggio a contatti • Lettura degli ingressi e scrittura del loro stato in memoria. • Esecuzione del programma un rung dopo l’altro, procedendo dall’alto verso il basso, da sinistra verso destra. • Scrittura delle uscite, prelevando il loro stato dalla memoria.
Istruzioni di base Contatto normalmente aperto: se il bit ad esso associato è ad 1 (ON) il processore chiude il contatto; se il bit è a 0 (OFF) il contatto rimane aperto. Il bit ad esso associato può appartenere all’area di memoria degli ingressi (Ix:y), delle uscite (Ux:y) e all’area utente (Wx:y). Contatto normalmente chiuso: se il bit ad esso associato è ad 1 (ON) il processore apre il contatto; se il bit è a 0 (OFF) il contatto rimane chiuso. Valgono le stesse considerazioni dell’istruzione precedente.
Istruzioni di base Bobina: è utilizzata per settare il bit ad essa associato che può essere un bit dell’area delle uscite (Ux:y) o un bit dell’area utente (Wx:y). Questa istruzione deve essere sempre inserita all’estrema destra del rung; se le istruzioni che la precedono realizzano la continuità elettrica e logica, il bit ad essa associato assume valore “1”, altrimenti assume valore “0”. Latch bobina: mantiene lo stato ON del bit associato anche quando le condizioni che lo hanno attivato sono diventate false; l’unico modo di portarlo nello stato OFF è utilizzare l’istruzione UNLATCH BOBINA.
Istruzioni di base Unlatch bobina: è l’istruzione duale della LATCH BOBINA e quindi mantiene lo stato OFF del bit associato anche quando le istruzioni precedenti realizzano la continuità elettrica e logica. Per portare allo stato ON il bit associato, si deve utilizzare necessariamente l’istruzione LATCH BOBINA .
Esempi di programmi con istruzioni di base Si vuole memorizzare nel bit U1:1 il risultato della OR tra i bit I1:1 e I1:2.
Annotazione importante L’ordine in cui vengono scritti i rung è molto importante. Nel programma a sinistra tutte le uscite vengono aggiornate in un solo ciclo di esecuzione, mentre nel programma a destra le tre uscite vengono aggiornate in tre cicli successivi una dopo l’altra.
Riconoscimento del fronte di salita Primo ciclo di esecuzione: il primo rung viene abilitato quando I 1:1 = 1, per cui W 1:1 viene portato a 1. Successivamente viene eseguito il secondo rung e quindi anche W 1:2 = 1. Secondo ciclo di esecuzione: W 1:2 era stato portato a 1 per cui W 1:1 va a 0.
Istruzioni di temporizzazione e conteggio Il temporizzatore deve essere sempre posizionato all’estrema destra del rung; Tx è il suo indirizzo con x = 1 - 16; la durata massima è di 360000 centesimi di secondo (un’ora). Se viene stabilita la continuità logica del rung, il temporizzatore inizia il conteggio e la sua locazione di memoria contiene 0; quando termina il conteggio, Tx = 1 fin quando il temporizzatore non viene resettato; se durante il conteggio si interrompe l’alimentazione, si resetta. Temporizzatore a ritenuta: il suo funzionamento è molto simile al temporizzatore semplice; se viene interrotta l’alimentazione, viene conservato il valore raggiunto nel conteggio. Per resettare questo temporizzatore si utilizza l’istruzione -(RES)-. Il valore corrente del conteggio è nell’indirizzo Tx.acc.
Istruzioni di temporizzazione e conteggio Contatore ad incremento: Cx indica l’indirizzo (x = 1- 16), e il massimo numero di eventi contati è 1000. Deve essere sempre posizionato a destra del rung e, se il rung in cui si trova subisce una transizione falso/vero (0- 1), incrementa di uno il suo valore. Quando il contatore raggiunge il n. di eventi impostato, il bit ad esso associato assume 1 e viene resettato automaticamente il conteggio. Per resettare a zero il conteggio da programma, si utilizza l’istruzione -(RES)-; il valore corrente del conteggio è disponibile all’indirizzo Cx.acc.
Istruzioni per il controllo del programma Se alimentata, permette di saltare ad un rung dove è presente l’istruzione di etichetta corrispondente indicata mediante un numero; deve essere posizionata all’estrema destra del rung. Indica la destinazione del salto e deve essere posizionata a sinistra del rung. Permette di controllare, attraverso un solo insieme di condizioni, l’esecuzione di un’intera parte di programma racchiuse tra due istruzioni MCR (Master Control Relay); se la prima viene alimentata, viene eseguita quella parte, altrimenti tutte le bobine di quella parte sono messe a zero. Le due istruzioni sono posizionate alla destra dei rung.
Istruzioni per il controllo del programma Il funzionamento del ZCL (Zone Control Last state) è identico a quello dell’istruzione precedente; l’unica differenza è che, se la prima delle due istruzioni non viene alimentata, le uscite presenti nella parte di programma controllata rimangono nel loro stato. Salto a sottoprogramma: il sottoprogramma è racchiuso tra due istruzioni, una di inizio –I SBR I-, corredata dal numero di sottoprogramma, e l’altra di fine –( RET )-.
Istruzioni per la movimentazione di dati Trasferisce il contenuto di una word di memoria (OP 1) oppure un valore assoluto in OP 2. E’ un’istruzione di uscita e quindi va posizionata a destra del rung. Esegue operazioni aritmetico/logiche tra due operandi; il risultato dell’operazione è memorizzato in RES. Le operazioni sono: ADD, MUL, SUB, DIV, AND, OR. Si posiziona a destra del rung.
Istruzioni per la attivazione dei rung Esegue operazioni di comparazione tra due operandi; il risultato dell’operazione è memorizzato in RES. Le operazioni sono: EQU, NEQ, GEQ, LEQ, GRT, LES. Si posiziona a sinistra del rung.
Istruzioni PID Kp: guadagno proporzionale Kd : guadagno derivativo Ki: guadagno integrale rif: word del riferimento var: variabile da controllare com: valore del controllo
Istruzioni di connessione La coppia di istruzioni di connessione -->zyx> e >zyx>-- viene utilizzata per spezzare un rung troppo lungo:
Programmazione di una XOR U3:15 = (I1:4 AND NOT(I1:7)) OR (NOT(I1:4) AND I1:7)
Esercizio • Tradurre in LD la seguente istruzione in ST