Per prima cosa occorre leggere attentamente il testo e individuare le specifiche:
Consideriamo il testo proposto e proviamo a ricavare le specifiche.
Comando:
Ingressi:
Uscite:
Ipotesi aggiuntive:
Schema a blocchi del sistema acquisizione dati e sua descrizione.
Considerato il funzionamento a soglia verrà utilizzato un sensore di umidità analogico1) con un circuito di condizionamento a comparatore per segnalare il superamento della soglia del 40% con un segnale digitale (livello alto o basso di tensione).
Considerato il campo di temperatura ridotto, la facilità di utilizzo e la linearità si decide di impiegare il sensore di temperatura integrato LM35 con un circuito di condizionamento che adatti il segnale al range di tensione in ingresso del PLC (0-10 Volt).
I due finecorsa meccanici aprono un contatto normalmente chiuso quando attivati.
Le uscite sono tutte digitali:
Caratteristiche dei sensori e loro condizionamento.
L'LM35 ha un'uscita in tensione e fornisce 10mV per ogni grado centigrado. Il segnale può essere condizionato con un circuito con amplificatore non invertente per avere 0V a 0°C e 10V a 50°C (si ipotizza che la precisione sia sufficiente). Il guadagno richiesto è 20 ed è ottenibile con due resistenze da 1k e 19k.
In mancanza di un catalogo da cui scegliere il sensore analogico di umidità si ipotizza di avere un segnale in tensione tra 0 e 10 Volt. Un circuito con comparatore con una tensione di soglia di 4 Volt nell'ingresso non invertente produce un livello alto di tensione quando il tasso di umidità scende sotto il 40%. L'uso di un comparatore con uscita a collettore aperto (ad esempio l'LM311 2) ) permette di fissare il livello alto di tensione al valore richiesto dal PLC (24V producono il valore logico 1).
Usare un operazionale al posto del comparatore complica le cose perché bisogna sceglierne uno che funzioni con alimentazione singola (per motivi pratici e per avere il livello basso a 0V invece che a -Vcc) e adattare il segnale in uscita con un traslatore di livello che porti la tensione a 24V (si può fare con un BJT ma il comportamento è invertente, con un inverter oper-collector, con un comparatore tipo l'LM339… ma a quel punto tanto valeva usarlo subito).
Finecorsa meccanici con contatti normalmente chiusi (in mancanza di corrente comandano l'arresto del motore) da collegare direttamente agli ingressi del PLC.
Algoritmo di gestione dell'impianto.
Si individuano tre comandi indipendenti per lampade, vaporizzatore e riscaldamento/areazione. Il sistema di automazione non è propriamente sequenziale e si può pensare di gestire separatamente, con tre funzioni del programma, lampade, temperatura e umidità.
Per le lampade, usando la variabile che contiene l'ora dell'orologio di sistema, si comandano le uscite con delle istruzioni di comparazione:
Si usa la variabile che contiene il valore della temperatura, ottenuta tramite l'ingresso analogico, con delle istruzioni di comparazione:
La gestione dell'umidità prevede un ciclo più complesso con un contatore all'indietro e dei consensi. Si può fare a stati o con un contatore. Con contatore all'indietro un possibile algoritmo è questo:
L'inversione del motore monofase si fa con due teleruttori come mostrato qui.
In una prova scritta non è possibile ricordare tutte le funzioni, le istruzioni e le impostazioni di un PLC. Probabilmente è preferibile una soluzione generica che consideri le istruzioni comuni a tutti i PLC (contatti, bobine, temporizzatori, ecc.). Per funzionalità particolari (orologio hardware, ingressi analogici, ecc.) si faranno ipotesi aggiuntive che permettano di scrivere una soluzione generica.
Una possibile tabella di indirizzamento per ingressi e uscite è la seguente (questa va certamente indicata, se non altro come legenda per interpretare un eventuale programma in ladder dove si riporteranno solo i nomi simbolici o solo gli indirizzi).
nome | indirizzo | commento |
---|---|---|
FC1 | I0.0 | finecorsa NC inizio guida vaporizzatore |
FC2 | I0.1 | finecorsa NC fine guida vaporizzatore |
B1 | I0.2 | umidità minore del 40% |
TEMP | IW64 | segnale analogico temperatura (int tra o e 24678) |
KM1 | Q0.0 | contattore marcia avanti motore vaporizzatore |
KM2 | Q0.1 | contattore marcia indietro motore vaporizzatore |
KM3 | Q0.2 | contattore motore pompa vaporizzatore |
KM4 | Q0.3 | contattore piastre riscaldanti |
KM5 | Q0.4 | contattore motore ventole |
EL1 | Q0.5 | lampade 1 e 2 |
EL2 | Q0.6 | lampade 3 e 4 |
EL3 | Q0.7 | lampade 5 e 6 |
Questa tabella va completata aggiungendo i merker utilizzati nella propria soluzione. Ad esempio:
nome | indirizzo | commento |
---|---|---|
VENTOLE | M2.0 | attivazione ventole con isteresi |
PIASTRE | M2.1 | attivazione piastre con isteresi |
CNT_EN | M2.2 | merker che abilita il conteggio da 2 a 0 |
CNT_OUT | M2.3 | merker conteggio terminato |
ERR_TIME | MW3 | codice errore lettura orologio HW (int) |
T_NORM | MD5 | temperatura normalizzata 0-1 (real) |
T_GRADI | MD9 | temperatura in gradi (real) |
Si può pensare di affidare il comando dei tre tipi di attuatori a tre funzioni distinte: una per le lampade, una per il vaporizzatore e una per ventole e piastre.
Programma per PLC:
Una possibile soluzione è contenuta in questo file zip.
Una possibile soluzione per la gestione del sistema di umidificazione con un contatore (diversa da quella del progetto zippato) è mostrata in figura:
La logica è questa (in questo esempio i finecorsa sono normalmente aperti per semplicità):
Per la gestione delle lampade e di ventole/piastre non serve usare la programmazione per passi - non c'è una vera e propria sequenzialità nel controllo - ma per la gestione del vaporizzatore potrebbe essere conveniente. Una possibile soluzione con diagramma SFC è la seguente (vedi appunti su SFC):
La codifica in ladder potrebbe non essere nemmeno richiesta; SFC infatti non è solo un formalismo per descrivere automi sequenziali ma anche un vero e proprio linguaggio di programmazione per PLC (per Siemens solo nei modelli S7-1500). Volendo tradurre da SFC a ladder si procede come indicato negli appunti:
Si ricorda che la programmazione per passi, oltre ad essere più robusta, è anche più semplice da implementare.
In ordine sparso:
Torna all'indice.