Vai al contenuto
PLC Forum


Come monitorare una variabile analogica


cicciodandria

Messaggi consigliati

cicciodandria

Buongiorno a tutti,

ho un problema in merito a come monitorare nel tempo il livello di un serbatoio con un PLC S7-1200.

Il serbatoio che devo controllare ha una portata di ingersso sconosciuta e variabile nel tempo; tramite il PLC devo azionare una valvola on/off che devo aprire quando il livello supera un valore di soglia predefinito, oppure quando all'interno del serbatoio cresce oltre un certo valore di velocità (circa 50cm/ora), e poi chiuderla dopo un tempo X nel quale la velocità è scesa sotto questo valore.

Che voi sappiate, c'è qualche blocco dedicato a questo tipo di applicazione? In alternativa, secondo voi come posso fare a monitorare la velocità di variazione del livello?

Grazie a tutti in anticipo per la disponibilità.

Link al commento
Condividi su altri siti


se hai un trasduttore che ti da il livello dell'acqua nel serbatoio basta eseguire la lettura a tempi fissi.

Le modalità possono essere varie.

Io userei un OB a tempo legato ad un interrupt del timer di sistema.

Vista la velocità di soglia potresti legger il livello ogni 10' e verificare:

1 che il livello non abbia superato la valore di soglia.

2 che la differenza tra le due letture non sia maggiore del differenziale corrispondente  alla velcocità massima prevista.

Link al commento
Condividi su altri siti

cicciodandria

Grazie Livio, la soluzione è perfetta per il mio caso, solo che non sono abbastanza esperto, per cui ti dispiacerebbe darmi ulteriori dettagli su quanto hai proposto? Innanzitutto cosa intendi per OB a tempo? E come faccio a legarlo ad un interrupt del timer del sistema?

 

Graze ancora e a presto

Link al commento
Condividi su altri siti

Non conosco il 1200.

Nel 300 si usa l'OB35 che è attivato dalla scadenza del timer di sistema. Questo timer è programmato in sede di configurazione Hw. Se non ricordo male il tempo di default è di 100ms.

 

Basta fare un contatore che conta gli intervalli di tempo. Ad esempio se vuoi effetture la verifica ogni 10' con interrupt ogni 0.1" sono 6000 conteggi. Carichi 6000 in una variabile che ad ogni ingresso nell'oB decrementi. Quando la variabile è 0, ricarichi 6000, leggi il valore di livello e lo confronti con l'eventuale lettura precedente. Memorizzi il nuovo valore per il prossimo calcolo.

 

Se questo ti sembra macchinoso puoi ipotizzare l'uso dell'istruzione che ti da il tempo del PLC, solo che devi leggere in polling.

Ad esempio a fine ciclo leggi il tempo ed il livello; memorizzi entrambi i valori. Ad ogni fine ciclo ripeti le lettura del tempo e del livello, se la differenza con il valore precedente di tempo è significativa (ad esempio >=10') esegui anche la differenza del livello per verificarne la velocità di crescita. Memorizzi questa nuova coppia di valori come riferimenti come riferimento per il nuovo conteggio.

Link al commento
Condividi su altri siti

Per fare un controllo ogni 10 minuti va benissimo anche un clock generato con un timer, oppure un contasecondi utilizzando il merker di sistema con clock di 1 secondo.

Link al commento
Condividi su altri siti

cicciodandria

Grazie mille per le risposte, ho utilizzato il metodo suggerito da Livio e funziona perfettamente. 

Per la cronaca, nel 1200 l'OB dell'interrupt cicilco è l'OB30.

 

Grazie ancora per il supporto e a presto.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...