Quale linguaggio PLC tra ladder e testo strutturato scegliere per un progetto? In cosa questi linguaggi si somigliano e quali sono invece gli aspetti che li rendono molto differenti?
Benvenuto in questa lezione, oggi parliamo di linguaggi per plc, in particolare confronteremo alcune funzioni scritte in due linguaggi: il ladder (logica di contatti) e quello di testo strutturato ST, il più ad alto livello.
I linguaggi per PLC non sono molti, principalmente i 5 definiti nella IEC 61131, nel capitolo 3; tuttavia il linguaggio ladder e quello di testo strutturato, oggi sono quelli che più interessano i programmatori sparsi nel mondo, e anche chi si avvicina per le prime volte alla programmazione.
Questi due linguaggi sono molto diversi tra loro, e potremmo dire che la concezione di ognuno dei due è opposta a quella dell’altro; vedremo il perché negli esempi di programma che ho preparato per questa lezione.
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.
Dal suo canto il linguaggio di testo strutturato non ha grafica, e tutto viene scritto in modo testo; questo rende il linguaggio ST anche il più trasferibile, dato che possiamo tranquillamente copiare e incollare le istruzioni in qualsiasi editor di testo.
Il linguaggio a contatti è adatto a chi conosce gli schemi elettrici ed è abituato a ragionare sui cablaggi, quello di testo strutturato è più familiare per chi sa già programmare i computers; per questo motivo gli “informatici” lo preferiscono.
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 in linguaggio di testo strutturato, 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 entrambi 1, metti zero in variabile1 e variabile2”.
Ecco come si scrivono queste istruzioni in linguaggio di testo strutturato:
IF bit1 AND bit2 THEN
intero1:=intero1+1;
intero2:=intero1 *2;
ELSE
intero1:=0;
intero2:=0;
END_IF
Notiamo che in effetti il linguaggio di testo strutturato è un linguaggio più “pensato” o “parlato”.
Procedendo sulla seconda riga ladder, dove troviamo un timer; semplicemente viene attivato da bit1, e quando finisce di contare attiva il bit chiamato “uscita_timer”. Notiamo che sul timer abbiamo anche dichiarato una variabile dove verrà scritto il valore durante il conteggio del tempo.
Vediamo come si scrive quella riga ladder in linguaggio ST:
timer1(in:= bit1,pt:=T#5S);
timer1_cv:=timer1.ET; //tempo trascorso durante il conteggio
uscita_timer1:=timer1.Q;
Intanto notiamo che in linguaggio ST utilizziamo ben 3 linee di programma, la prima è la dichiarazione del timer stesso, dove passiamo i parametri di attivazione “in:” e il preset di 5 secondi.
Nella seconda linea abbiamo l’assegnazione del valore del tempo trascorso alla variabile timer1_cv; e nella terza riga assegniamo l’uscita di fine conteggio alla variabile apposita.
In linguaggio ST, l’uscita delle istruzioni viene scritta a sinistra; usiamo infatti le assegnazioni per attribuire i risultati delle espressioni alle variabili di destinazione.
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 in linguaggio ST questa funzione:
CASE intero5 OF
1: bit6:=1;
stringa3:="Il valore è 1"; //questa è una WideString e si racchiude tra doppi apici
2,3 :stringa3:="Il valore è 2 oppure 3";
4..9 :stringa3:="Il valore è compreso tra 4 e 9";
ELSE
stringa3:="Il valore non è tra quelli testati";
END_CASE;
Sfruttando la funzione CASE, elenchiamo i test da effettuare e le operazioni da svolgere se quel test risulta valido; in questo caso vediamo che il linguaggio di testo è davvero comodo e semplice da interpretare.