Vai al contenuto
PLC Forum


Priorità Per Scrubber


mcdue

Messaggi consigliati

Ho appena finito un corso che mi ha dato qualche rudimenti di programmazione plc S7-300, mi manca però qualcosa per portare quest'esperienza dalla carta all'impianto, quindi chiedo qui agli esperti del settore così da imparare qualcosa e far fruttare il tempo speso.

Devo fondamentalmente capire come dare priorità ad un istruzione (o forse blocco?) piuttosto che un'altra.

Faccio una piccola tabella per identificare ingressi ed uscite di modo da descrivere il sistema in maniera univoca, ma prima identifichiamo cosa ci serve:

  • Nr. 3 interruttori di livello on/off in ingresso
  • Nr. 2 valvole a sfera in uscita
  • Pompa con il suo bel motore

La logica di funzionamento di questo particolare serbatoio per lavaggio vapori (scrubber) prevede un cambio dell'acqua ogni 8 ore secondo queste modalità: allo scadere del tempo viene aperta la valvola di scarico dell'acqua, e viene scaricata completamente l'acqua nello scrubber , il sensore galleggiante di minimo cambia il suo stato e viene chiusa la valvola di scarico. Quando l'acqua raggiunge di nuovo il livello di lavoro viene chiusa la valvola di reintegro e quindi il sistema mantiene il livello compreso tra il sensoore di massimo e quello di lavoro.

Si noti che la pompa non smette mai di funzionare questo perché è lei a fare il ricircolo di testa dell'acqua (la valvola di scarico, quando si apre, determina lo scarico dell'acqua).

So come fare scaricare l'acqua e come mantenere il livello tra i due sensori (sensore intermedio di lavoro e il massimo), ma non come dire "ogni 8 ore scarica tutto e poi riparti a lavorare" pur conoscendo i contatori, voi cosa consigliate?

Modificato: da mcdue
Link al commento
Condividi su altri siti


Leggo in un altro posto quanto segue:

"Le indicazioni fornite nel manuale sono corrette: gli OB con priorità alta possono interrompere gli OB con priorità più bassa, ma non vieceversa.

OB1 ha priorità 1, mentre OB40 ha priorità 16.

Questo significa che OB40 (interrupt) può interrompere l'elaborazione di OB1.

In altre parole, se sopraggiunge un evento che scatena l'interrupt, viene immediatamente interrotta l'elaborazione di OB1 ed avviata l'elaborazione di OB40. Terminata l'elaborazione di OB40 il controllo ritorna ad OB1.

Se OB40 non fosse in grado di interrompere l'elaborazione di OB1, l'interrupt non funzionerebbe.

E non funzionerebbe nemmeno se fosse OB1 ad interrompere OB40. In questo caso infatti, OB40 verrebbe continuamente interrotto da OB1 (che è elaborato in continuo), e non potrebbe compiere il suo lavoro." (cit. Batta)

Potrebbe funzionare per risolvere il mio problema? Blocco OB1 per la logica di lavoro e blocco OB40 per lo scarico ogni 8 ore...

Link al commento
Condividi su altri siti

Da quanto leggo mi sembra che il funzionamento del tuo impianto sia vincolato a 3 ingressi e 3 uscite....

Sei sicuro di voler usare S7-300 visto il suo costo??

Guarda che la logica di un impianto cos'ì è fattibile anche con un logo della siemens contenendo i prezzi...

Ciao...

Link al commento
Condividi su altri siti

Come ha scritto trentaluca il 300 per questo tipo di impianto è regalare inutilmente danari a Siemens. Se proprio non vuoi usare il logo, ma vuoi usare un qualche cosa di più professionale, puoi sempre rivolgerti alla serie 200 o anche alla nuova 1200. Se non ci sono imposizioni da parte del cliente io andrei sun un piccolo PLC nostrano che sarebbe l'ideale.

A parte queste considerazioni generali ammettendo di farlo con il 300 hai un modo molto semplice per scaricare e ricaricare ogni 8 ore: l'orologio di sistema. Quando carichi lo scrubber leggi l'ora con l'apposita istruzione in OB1 e memorizzi il valore. Ad ogni ciclo di OB1 (ma anche ogni 10) leggi l'ora e compari con il valore iniziale: se la differenza è >=8 ore lanci la funzione che scarica e ricarica lo scrubber.

Link al commento
Condividi su altri siti

Non è regalare nulla, sono stato impreciso io: considerate che io ho fatto l'esempio su nr. 1 scrubber, ma in impianto ne abbiamo nr. 11 da automatizzare + 1 cisternetta + 3 demister con funzionamenti pressoché identici. Inoltre il cliente ha un accordo quadro con SIEMENS ed ha buoni prezzi sul materiale crucco.

Quali vantaggi ha il metodo di Livio rispetto ad usare OB40? Sicuramente funziona, non lo metto in dubbio, ma perché fare in questo modo piuttosto di temporizzatori e funzione OB40? Quali vantaggi? (Cercate di capirmi, sono un neofita e non ho grandi conoscenze in materia ancora, alcune domande possono sembrare scontate o stupide, ma per me in questo momento è importante capire).

Inoltre mi sfugge un altra cosa: io dico al plc che quando la differenza tra valore orologio interno e ora in memoria è >= di 8 ore parte il ciclo di scarico, ma una volta che arriva al sensore di lavoro questo chiude la valvola perché l'istuzione di lavoro gli dice di farlo non scaricando tutta l'acqua, quindi non credo di risolvere il mio problema... sbaglio? Sono stato poco chiaro e volete uno schema di funzionamento?

Modificato: da mcdue
Link al commento
Condividi su altri siti

sbaglio?
Si!

Se devi scaricare tutta l'acqua tieni aperta la valvola di scarico sino a che raggiungi il livello minimo.

Usare l'OB40 non ha senso, semmai l'OB35 che è lanciato dall'interrupt del timer di sistema, timer che viene configurato in fase di configurazione Hw. Se wuoi controllare 11 scrubbers devi farti 11 temporizzatori. Tieni presente che la temporizzazione del timer di sitema va da pochi ms a qualche secondo (se ricordo correttamente).

Usando l'orologio l'operazione è semplicissima: leggi l'ora a caricamento avvenuto, sommi 8 ore e metti in memeoria; ad ogni lettura dell'orolo confronti, se hai superato le otto ore lanci la FB di scarico. Addirittura ne puoi fare una sola a cui passi il parametro indicante lo scrubber interessato.

Link al commento
Condividi su altri siti

Potrebbe funzionare per risolvere il mio problema? Blocco OB1 per la logica di lavoro e blocco OB40 per lo scarico ogni 8 ore...

Le priorità dei vari OB non servono per questo tipo di lavori.

Queste priorità servono per avviare dei processi con il minor ritardo possibile. Infatti, un eventuale interrupt viene lanciato immediatamente, interrompendo eventuali routines in corso ma con priorità più bassa. Se viene lanciato un interrupt quindi non si attende la fine della scansione. Questo è lo scopo di questi OB.

Nel tuo caso questa priorità non ti aiuterebbe minimamente a risolvere il tuo problema, perché non puoi lanciare OB40 e rimanere in OB40 fino a quando hai finito tutto lo scarico.

Questi OB devono terminare e lasciare ancora il controllo a OB1.

Questo per almeno due motivi: il primo è che se continui a ciclare in OB40 (per esempio con un salto all'indietro all'interno dello stesso OB fino al termine dello scarico, tipo ciclo "while") interviene il "watchdog" che ti manda in stop la cpu; secondo, perché in una logica PLC non ti puoi permettere di occuparti di una sola funzione ignorando tutto quello che succede al di fuori di questa funzione.

Voglio dire, se tu gestisci il ciclo di scarico con una routine ed elabori solo questa routine, come fai ad accorgerti di qualsiasi evento esterno alla routine di scarico?

Oltre a questo, quello che tu definisci "priorità" (credo tu intendessi dare priorità allo scarico, in modo da iniziare il carico solo a scarico ultimato) non ha nulla a che vedere con la priorità. Si tratta in realtà solo di creare un "interblocco": se sto facendo lo scarico non posso aprire la valvola di carico.

Per avviare il ciclo di scarico poi, puoi usare due metodi: i timer (non però il timer tipo "SE" o simili, con preset massimo di 9990 secondi), o l'orologio.

Se scegli la strada dei timer potresti usare "SFB4 TON", con preset in formato TIME (millisecondi su doppia word), che gestisce tempi fino a 596 ore circa.

Per usare l'orologio puoi invece chiamare le funzioni SFC0 SET_CLK e SFC1 READ_CLK rispettivamente per impostare e per leggere l'ora del PLC.

SFC1 READ_CLK ti restituisce l'ora del PLC in formato DAY_AND_TIME. Con le funzioni FC6 DT_DATE e DT_TOD puoi estrarre dal formato TIME rispettivamente la data in formato DATE (giorni da 01-01-1990) e l'ora in formato TIME (millisecondi dalla mezzanotte).

Tra i due metodi c'è una differenza fondamentale da considerare: se usi i timer, quando la cpu è spenta il tempo viene congelato, mentre l'orologio (escluse le CPU312) continua a camminare.

Scegli tu la strada che consideri migliore.

ATTENZIONE!!!

Se utilizzi la funzione SET_CLK ricordati che questa funzione va a scrivere direttamente sulla MMC, quindi il numero di scritture possibili è molto elevato ma non infinito. Se richiami questa funzione ad ogni scansione arrivi al danneggiamento della MMC in breve tempo. La funzione SET_CLK deve quindi essere richiamata solo quando si modifica l'ora.

Questo problema non c'è invece con la funzione READ_CLK, ma non avrebbe comunque senso richiamarla ad ogni scansione.

Potresti crearti un clock e leggere l'ora del PLC una volta al secondo (oppure, visti i tempi lunghi da gestire, anche una volta al minuto).

Link al commento
Condividi su altri siti

(oppure, visti i tempi lunghi da gestire, anche una volta al minuto).

Oppure, vista la precisione richiesta, basta leggerlo ogni "n" cicli di scansione.

Link al commento
Condividi su altri siti

Sto facendo fatica a seguirvi (questo dipende dal delta esperienza, la mia che è molto poca contro la vostra che è molta lasciano ampio spazio a difficoltà di comprensione immagino).

Ho capito che OB40 non mi aiuta in nessun modo, per cui croce sopra, ma non ho ancora capito come posso far funzionare lo scarico ogni 8 ore e finito lo scarico riprendere con la mia logica di lavoro. Magari mi viene più facile mentre lo programmo (sto ancora aspettando STEP7 sul mio pc e sono preso da altre incombenze in questo periodo).

Se poi quando ho il KOP pronto ve lo passo in formato pdf con qualche nota di sorta e proviamo a risolvere qualche dubbio insieme vi scoccia?

(Ho iniziato subito a dare del tu come si procede di solito sui forum, se preferite un tono più formale basta dirlo).

Link al commento
Condividi su altri siti

Passate le otto ore attivo lo scarico e lo richiudo quando raggiungo il livello minimo.

La valvola di reintegro apre se il livello è basso e se NON sto effettuando uno scarico.

Tutto qui.

Posta pure esempi di programma, e vedremo di aggiustarli insieme.

(Ho iniziato subito a dare del tu come si procede di solito sui forum, se preferite un tono più formale basta dirlo).

No no, per carità. Lasciamo perdere i toni formali.

Su questo forum, come su tutti gli altri (o quasi), il "lei" non esiste nemmeno.

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...