Linguaggio di Programmazione Ladder v E il pi









































- Slides: 41
Linguaggio di Programmazione Ladder v E' il più vecchio linguaggio di programmazione per PLC v Si basa su simboli di provenienza "elettrica": Ø binari di potenza (power rail), contatti elettrici e avvolgimenti magnetici (coil) v Si articola in linee verticali dette “rung” v Ciascun “rung” può contenere contatti, coil, Function Block e Funzioni v Ciascun "rung" deve essere connesso necessariamente al binario di potenza sinistro (left power rail), mentre il collegamento con quello destro è opzionale
Elementi di Base del Linguaggio Ladder v Power Rail v Linee Elettriche Orizzontali v Connessioni ai Power Rail v Contatto Normalmente Aperto v Contatto Normalmente Chiuso v Coil v Negated Coil
Utilizzo dei Contatti v Ad ogni contatto viene associata una variabile binaria. Tale variabile viene solamente letta (può coincidere con un ingresso). v Contatto Normalmente Aperto: la corrente fluisce da sinistra a destra se la variabile IN è 1. La corrente fluisce a destra per qualunque scansione del Programma Ladder fino a quando la variabile IN diviene 0 IN v Contatto Normalmente Chiuso: la corrente fluisce da sinistra a destra se la variabile IN è 0. La corrente fluisce a destra per qualunque scansione del Diagramma Ladder fino a quando la variabile IN diviene 1 IN
Utilizzo dei Coil v Ad ogni coil viene associata una variabile binaria. La variabile viene scritta (può coincidere con una uscita fisica) v Coil: la variabile OUT associata al Coil è posta a 1 se vi è una corrente che fluisce da sinistra. La variabile rimane a 1 per qualunque scansione del Programma Ladder fino a quando la corrente cessa di fluire da sinistra. OUT v Negated Coil: la variabile OUT associata al Negated Coil è posta a 0 se vi è una corrente che fluisce da sinistra. La variabile rimane a 0 per qualunque scansione del Programma Ladder fino a quando la corrente cessa di fluire da sinistra. OUT
Altri Contatti del Linguaggio Ladder v Contatto sensibile alla transizione 0 -1 (Positive Transition-Sensing Contact) IN P v La corrente fluisce da sinistra a destra del Positive Transition-Sensing Contact, se la variabile IN passa da 0 a 1. La corrente fluisce a destra solo per una scansione del Programma Ladder (quella relativa alla transizione). Scansione Valore di IN quando viene valutato il rung Corrente alla Destra 1 2 3 4 5 OFF ON ON ON OFF OFF OFF
Altri Contatti del Linguaggio Ladder v Contatto sensibile alla transizione 1 -0 (Negative Transition-Sensing Contact) IN N v La corrente fluisce da sinistra a destra del Negative Transition-Sensing Contact, se la variabile IN passa da 1 a 0. La corrente fluisce a destra solo per una scansione del Diagramma Ladder (quella relativa alla transizione) Scansione Valore di IN quando viene valutato il rung Corrente alla Destra 1 2 3 4 5 ON OFF OFF
Altri Coil del Linguaggio Ladder v Set Coil OUT S v La variabile OUT associata al coil e' posta a 1 se vi e' una corrente che fluisce da sinistra. La variabile rimane a 1 per qualunque scansione del Diagramma Ladder fino a quando viene utilizzato un coil RESET. v Reset Coil OUT R v La variabile OUT associata al coil e' posta a 0 se vi e' una corrente che fluisce da sinistra. La variabile rimane a 0 per qualunque scansione del Diagramma Ladder fino a quando viene utilizzato un coil SET.
Altri Coil del Linguaggio Ladder v Positive Transition-Sensing Coil OUT P v La variabile OUT associata al Positive Transition-Sensing Coil è posta a 1 se la corrente che fluisce da sinistra passa da un valore FALSE ad una valore TRUE. La variabile rimane a 1 solo per una scansione del Diagramma Ladder (quella relativa alla transizione dello stato della corrente). Scansione Valore della corrente alla sinistra del coil quando viene valutato il rung Valore di OUT 1 OFF 2 ON ON 3 ON OFF 4 OFF
Altri Coil del Linguaggio Ladder v Negative Transition-Sensing Coil OUT N v La variabile OUT associata al Negative Transition-Sensing Coil è posta a 1 se la corrente che fluisce da sinistra passa da un valore TRUE ad un valore FALSE. La variabile rimane a 1 solo per una scansione del Diagramma Ladder (quella relativa alla transizione dello stato della corrente). 1 Valore della corrente alla sinistra del coil quando viene valutato il rung ON Valore di OUT OFF 2 OFF ON 3 OFF 4 ON OFF Scansione
Altri Coil del Linguaggio Ladder v Retentive Memory Coil M v SET Retentive Memory Coil SM v RESET Retentive Memory Coil RM v Hanno lo stesso comportamento del coil, del SET coil e del RESET coil, ad eccezione del fatto che la variabile binaria associata ad essi viene dichiarata in modo automatico di tipo RETENTIVE
Logiche di Base Realizzabili con gli Elementi del Linguaggio Ladder v Logica AND START STOP M FAN v Logica OR START S IN
Regole di Esecuzione dei Rung v Un programma scritto in linguaggio Ladder viene eseguito valutando un rung alla volta v L'ordine di valutazione dei rung è quello che procede dal primo rung in alto verso l'ultimo rung in basso v Quando l'ultimo rung viene valutato, si inizia nuovamente a valutare il primo rung (dopo aver aggiornato le uscite e letti gli ingressi)
Effetti Collaterali delle Regole di Esecuzione dei Rung v L'ordine di valutazione comporta la necessità di riunificare i rung che operano delle modifiche (Write) sulle stesse uscite (Attenzione: vale solo per i coil "normali") v Esempio: 1 1 IN 2 FAN IN 3 . . . IN 4 IN 5 FAN 0 0 0 Ø L'effetto di IN 1, IN 2, e IN 3 sull'uscita reale collegata alla variabile FAN è nullo. L'uscita reale può essere modificata solo da IN 4 e IN 5, a causa della posizione del rung che li contiene
Effetti Collaterali delle Regole di Esecuzione dei Rung v Riunificando i rung, l'uscita reale collegata alla variabile FAN verrà aggiornata solo dopo aver valutato il rung composto dagli ingressi IN 1, IN 2, IN 3, IN 4 e IN 5 IN 1 IN 2 . . . . IN 4 IN 5 FAN IN 3 1 1 IN 2 IN 4 IN 5 0 0 . . . . FAN 1 1 IN 3 FAN
Uso di Istanze di Function Block e di Funzioni v E' possibile connettere contatti con gli ingressi dell'istanza del FB o della funzione, purché essi siano binari v E' possibile connettere coil con le uscite dell'istanza del FB o della funzione, purché esse siano binarie v Nel caso in cui una Istanza di FB o una funzione richieda un ingresso binario sempre TRUE, è possibile collegare tale ingresso direttamente al power rail di sinistra v Eventuali variabili analogiche o valori analogici (interi, reali, temporali, etc. ) possono essere connessi direttamente ai corrispondenti ingressi dell'istanza del FB o della funzione Nome Istanza FB 1 In 2 In 3 x T#1 s In 4 In 5 Out 1 Out 2 y
Function Block di Uso Comune Timer T_ON IN Q PT ET v. IN: BOOL. If a rising edge is detected, the on -delay timing is started v. PT: TIME. Preset time interval for the delay v. Q: BOOL. Output v. ET: TIME. Elapsed time interval IN Q PT PT ET
Function Block di Uso Comune Timer T_OFF IN Q PT ET v. IN: BOOL. If a falling edge is detected, the off-delay timing is started. v. PT: TIME. Preset time interval for the delay v. Q: BOOL. Output v. ET: TIME. Elapsed time interval IN Q PT PT ET
Function Block di Uso Comune v. Bistabili ØSR, RS v. Bitwise Boolean ØAND, OR, NOT, XOR v. Comparison ØEQ, LE, LT, GE, GT, NE v. Counters ØCTD (down), CTU (up) v. Altri (disponibili su alcuni PLC) ØPID
Feedback Paths v E' possibile che un rung presenti dei contatti e dei coil ai quali vengono associate le stesse variabili IN 1 IN 4 FAN IN 2 IN 3 FAN OUT v Il valore della variabile associata al contatto FAN è quello valutato nell'ultima valutazione (rung precedente) v NOTA: L'uso dei Feedback può essere pericoloso, in quanto può portare ad una instabilità delle uscite del PLC. v Ad esempio, l'uscita FAN diviene instabile se inizialmente FAN=0 e nel tempo gli ingressi IN 1, IN 2, IN 3 e IN 4 si mantengono costanti e pari a IN 1=0, IN 2=0, IN 3=1, IN 4=1
Tecnica di Programmazione con il Ladder v Tecnica basata su Relazioni I/O Ø La tecnica di programmazione più istintiva e naturale che è possibile applicare al linguaggio Ladder è quella che permette di esprimere tramite i rung le relazioni causa effetto, che legano le uscite da comandare agli ingressi o a particolari condizioni logiche interne. v Tecnica basata sulla Macchina a Stati Ø Deve essere applicata a problemi più complessi, in cui l'attivazione delle uscite non dipende esclusivamente dagli ingressi (o da variabili interne, quali bits, contatori, timers) ma è legata al concetto di "stato".
Tecnica basata su Relazioni I/O v La scrittura di un programma in Ladder deve prevedere: Ø l'esplicitazione delle relazioni tra le uscite da comandare e gli ingressi o particolari condizioni logiche interne Ø la loro traduzione utilizzando i simboli del linguaggio Ladder. v Nel seguito verranno mostrati due esempi che permettono di comprendere meglio quanto detto.
Tecnica basata su Relazioni I/O Marcia Arresto Motore v Classico problema di gestione dell'accensione/spegnimento di un motore v L'accensione del motore è comandata da un pulsante di Marcia, che deve essere attivato (normalmente aperto). Una volta attivato, la sua posizione non è più rilevante per il mantenimento dell'accensione del motore. v Per la gestione di eventuali emergenze, è previsto l'utilizzo di un pulsante di Arresto (normalmente chiuso). v Infine il motore deve essere interrotto nel caso di surriscaldamento, ossia a seguito dell'intervento della termica (normalmente chiuso). Marcia Motore Arresto Termica Motore Feedback path
Tecnica basata su Relazioni I/O Circuito di Clock v Si supponga di voler realizzare un programma che permetta di fornire in uscita al PLC un segnale periodico ad onda quadra. v Sia T il periodo del segnale. v Sia out la variabile binaria alla quale viene associata l'uscita fisica del PLC per la quale si vuole produrre il segnale periodico. v Si consideri nella soluzione del problema una variabile binaria interna (start), inizializzata a OFF (0). Ø Feedback sulla variabile start v Si considerino, infine, due function block timer TON, denominati T 1 e T 2, ciascuno caratterizzati dal valore del PT pari a T/2 (semiperiodo).
Tecnica basata su Relazioni I/O Circuito di Clock T 2 IN TON Q T 1 Q IN TON start ET T/2 out Scansione start contatto 1. . n n+1 n+2…m m+1 m+2 m+3 0 0 1 0 0 T 1 Q 0 1 1 1 0 T 2 ET <T/2 T/2 0 Q ET 0 0 0 <T/2 1 T/2 0 0 uguale alla scansione 1 stessa sequenza precedente out start coil 0 1 1 1 0 0 1 0
Tecnica basata sulla Macchina a Stati v Esistono problemi in cui l'attivazione delle uscite (ad esempio i comandi agli attuatori) non dipende esclusivamente dagli ingressi (o da variabili interne, quali bits, contatori, timers) ma è legata al concetto di "stato". v Tali problemi sono caratterizzati da soluzioni che prevedono l'evoluzione del sistema da uno stato ad una altro, a partire da uno stato iniziale per far ritorno, spesso, a tale stato. v Per tali problemi, il comando di uno o più attuatori avviene in corrispondenza di uno stato, e può verificarsi che lo stesso attuatore venga attivato in due o più stati differenti anche in corrispondenza di ingressi diversi. v L'evoluzione del sistema da uno stato ad un altro avviene in corrispondenza di valori assunti da particolari ingressi, oppure in base a valori di timers o di contatori, ovvero da valori di opportune espressioni logiche.
Tecnica basata sulla Macchina a Stati v Rappresentare la soluzione del problema con una macchina a stati v Ogni stato viene rappresentato da una variabile binaria v Per ogni stato vengono identificate le azioni da eseguire v Vengono identificati gli eventi che producono il passaggio di stato. v Ciascun evento dovrà essere rappresentato da una variabile binaria v Il programma in Ladder si compone di tre porzioni: Ø Rappresentazione dell’attivazione di un nuovo stato a partire dallo stato corrente a seguito di un determinato evento Ø Rappresentazione della disattivazione dello stato precedente a causa dell’attivazione di un nuovo stato Ø Rappresentazione delle azioni eseguite in ciascuno degli stati
Esempio di Tecnica di Programmazione basata sulla Macchina a Stati home out 1=1 home P 1 P 3 out 3=1 move rotate out 2=1 P 2 P 1 rotate S rotate P 2 move S move P 3 rotate home R home S move rotate R home move R out 1 rotate out 2 move out 3
Esempio: Carroponte
Esempio: Carroponte y Left Right UP Tempo Attesa 15 s SUp Down S 3 SDown x S 1 S 2 Home=(S 1=1, SDown=1)
Esempio: Carroponte SDown==1 && S 1==1 HOME START==1 Down=1 Destra 1 Giù Right=1 SDown==1 && S 2==1 Su SUp==1 && S 1==1 Left=1 SUp==1 && S 2==1 Sinistra Destra 2 TEMPO TRASCORSO==15 s y Left Right=1 SUp==1 && S 3==1 Attesa UP SUp Down S 3 Tempo Attesa 15 s SDown S 1 Up=1 S 2 x
Esercizio: Trapano Automatico START
!Y HOME ROTATE=0 Wait A && START && Y A==1 DOWN=1 ROTATE=1 SCENDI SALI UP=1 ROTATE=1 X==1 && !M DOWN=1 !X &&M==1 B==1 Pezzo_Alto ROTATE=1 DOWN=1 ROTATE=1 M==1 FORO TEMPO TRASCORSO OIL=1 ROTATE=1 LUBRIFICA Pezzo_Alto _Risalita UP=1 ROTATE=1 A==1 START
Esempio di Cattiva Programmazione v La tecnica di programmazione vista prima non funziona quando: Ø La macchina a stati ha solo due stati Ø Gli eventi che determinano il passaggio da uno stato all'altro sono mutuamente esclusivi v Esempio: due stati (home e move) e gli eventi P 1 e !P 1 Ø Se P 1=0, home=1 e move=0 Ø Se P 1=1, home=0 e move=1 P 1 move home !P 1
Esempio di Cattiva Programmazione v Start: P 1=0 e home=1 P 1 home ØCiclicamente home=1, move=0 v Si supponga: P 1=1 Ømove=1 ØCiclicamente home=0, move=1 v Si supponga: P 1=0 Øhome=1 Øhome=0 ØCiclicamente home=0, move=1 !P 1 move home P 1 move S move P 1 home S move home R home move R
Esempio di Buona Programmazione Stato fittizio P 1 home tmp !P 1 move home P 1
Esempio di Buona Programmazione tmp v Start: P 1=0 e tmp=1 ØCiclicamente tmp=0, home=1, move=0 v Si supponga: P 1=1 Ømove=1 Øhome=0 ØCiclicamente tmp=0, home=0, move=1 v Si supponga: P 1=0 Øtmp=1 Ømove=0 Øhome=1 Øtmp=0 ØCiclicamente tmp=0, home=1, move=0 P 1 home P 1 move P 1 home tmp R home move R tmp move R !P 1 home S move S tmp S Stato iniziale tmp !P 1 move home P 1
Esercizio: Distributore di Bibite
Esercizio: Distributore di Bibite SB=0 SA=0 SBLOCCA=1 BLOCCA=0 MONETA = = 1 Bibita_Presa = = 1 home Attesa_Prelie vo Bibita_Presa=0 home. S SB=0 SA=0 SBLOCCA=1 BLOCCA=0 Inizio_Conse gna_Bibite SB=1 SA=0 SBLOCCA=1 BLOCCA=0 APERTO = =1 Fine_Delay_SA = = 1 Inizio_Delay _SA SB=SA=0 SBLOCCA=0 BLOCCA=1 Fine_Consegna_Bibite = = 1 S 1 home Bibita_Presa=1 SB=0 SA=1 SBLOCCA=1 Inizio_Nuova BLOCCA=0 _Bibita Fine_Nuova_Bibita = = 1 Inizio_Delay _SB SB=0 SA=0 SBLOCCA=1 BLOCCA=0 Fine_Delay_SB = = 1
Due Soluzioni: v Realizzazione delle due macchine a stato in un unico Programma con task ciclico ØLimite: Frequenza di campionamento segnale "Aperto" non compatibile con il program scan v Realizzazione delle due macchine a stato con due Programmi controllati da due task ciclici con frequenze diverse ØAttenzione alla codifica della macchina con due stati!
Esercizio: 3 Nastri Nastro 1 Nastro 2 M 1 s 1 OK 1 s 2 OK 2 Go 1 OK 0 Go 0 Home_Robot OK 3 Go 3 s 3 M 3 s 4 Nastro 3
Esercizio: 3 Nastri home_robot s 1 Go 1=1 !s 1 && s 2 Go 2=1 M 1=1 Vai P 2 ok 0 !s 1 home 1 !s 1 ok 1 chiudi Ferma 1 Close=1 home 3 && fine tempo Go 3=1 Close=1 muovi 1 s 1 !s 2 home 2 Vai P 3 Ok 3 M 2=1 !s 2 muovi 2 Apri Vai P 0 Go 0=1 Ferma 2 Fine tempo S 3 && home_robot home 3 muovi 3 !s 4 attesa s 4 M 3=1 s 2