Quale linguaggio PLC tra ladder e blocchi di funzione FBD è più facile da utilizzare? In cosa questi linguaggi si somigliano e quali sono invece gli aspetti che li rendono differenti?
Benvenuto in questa lezione, oggi parliamo ancora di linguaggi per plc, in particolare confronteremo alcune funzioni scritte in ladder (logica di contatti) e in linguaggio a blocchi di funzione FBD.
I linguaggi per PLC non sono molti, principalmente i 5 definiti nella IEC 61131, nel capitolo 3; tuttavia il linguaggio ladder, quello a blocchi di funzione FBD, e quello di testo strutturato ST, oggi sono quelli che più interessano i programmatori sparsi nel mondo, e anche chi si avvicina per le prime volte alla programmazione.
I linguaggi ladder e quello FBD non sono troppo diversi, soprattutto per quanto riguarda l’utilizzo di blocchi funzione; vedremo però che da un punto di vista grafico, il linguaggio a logica di contatti avvantaggia chi sa leggere gli schemi elettrici, sfruttando una certa simbologia.
Il linguaggio ladder è un linguaggio grafico, dove i test dei contatti e delle variabili vengono effettuati mediante dei disegni a forma di contatto aperto, oppure chiuso, di bobina, e così via; per quarto riguarda le operazioni matematiche e di confronto, così come tutte le funzioni di temporizzazione e conteggio, la grafica del linguaggio ladder è rappresentata da un quadrato o da un rettangolo, nel quale si dichiarano gli operandi.
Nel linguaggio a blocchi di funzione invece l’enfasi è posta sulle operazione logiche, infatti la logica booleana possiede dei blocchi chiamati AND; OR, NOT ecc.
Il linguaggio a contatti è adatto a chi conosce gli schemi elettrici ed è abituato a ragionare sui cablaggi, quello a blocchi di funzione invece avvantaggia chi è abituato a svolgere compiti di logica; questo linguaggio è utilizzato per programmare i DCS, e piccoli controllori come il Logo! Siemens.
Vediamo nella prossima immagine la prima parte di una serie di rami di programma ladder; li analizzeremo, e poi vedremo come le stesse funzioni si possono scrivere con i blocchi di funzione, in modo da capire davvero quanto questi due modi di creare software per plc siano diversi.
Sulla prima riga di programma abbiamo due contatti in AND, che tirano su una bobina chiamata “appoggio”; vedremo a cosa questa bobina serve tra poco. Quando i due contatti sono verificati, incrementiamo di 1 il valore della variabile “intero1”, e poi moltiplichiamo questa per due, trasferendo il risultato nella variabile “intero2”.
Nella seconda linea di programma, se il bit “appoggio” non vale 1, allora azzeriamo le due variabili intere.
Come potremmo descrivere queste operazioni ladder se dovessimo raccontarle a qualcuno? Sicuramente diremmo qualcosa tipo “Se bit1 e bit2 sono veri, allora attiva appoggio, incrementa di 1 la variabile intero1, e poi raddoppiala con risultato in intero2. Se invece bit1 e bit2 non valgono 1, metti zero in variabile1 e variabile2”.
Ecco come si scrivono queste istruzioni in linguaggio a blocchi di funzione, lo vediamo nella prossima figura.
Intanto non ci sono simboli di contatti aperti o chiusi, e le operazioni logiche sono eseguite da dei blocchi funzione, a cui portiamo i due operandi.
Notiamo la variabile appoggio che viene posta come uscita del blocco AND; e da un punto di vista grafico, il resto delle istruzioni della prima linea è identico.
Nella seconda linea, il test che veniva effettuato con un contatto chiuso diventa un ingresso negato (pallino vuoto) all’ingresso dell’abilitazione dell’istruzione MOVE.
Per quanto riguarda il timer, vediamo che sostanzialmente è simile a come si scrive in ladder.
Ecco nella prossima immagine la seconda parte del programma:
I rami ladder che vediamo nella figura sopra servono a confrontare il valore della variabile “intero5” con delle costanti, a seconda del valore rilevato viene impostata una stringa con un testo.
Partiamo confrontando il valore della variabile con 1, e se la condizione è vera scriviamo “Il valore è 1” nella variabile “stringa3”.
Nel secondo ramo abbiamo un or per testare i valori 2 e 3, e nella terza linea testiamo i valori tra 4 e 9.
Nell’ultima riga, se la variabile non vale nessuno dei valori testati, scriviamo il testo che ci avvisa.
Ecco come si risolve questa procedura in linguaggio a blocchi di funzione:
Osservando la figura sopra, scopriamo che questo linguaggio non è così differente dal linguaggio a logica di relè, i test con le istruzioni di comparazione sono sostanzialmente gli stessi, così come le assegnazioni con i MOVE.
Quello che salta all’occhio è piuttosto il test finale con i tre bit negati sugli ingressi del blocchetto AND, i quali sostituiscono i tre contatti chiusi messi in serie in ladder.