Vai al contenuto
PLC Forum


È possibile effettuare un reset dei parametri di un blocco FC?


manudale

Messaggi consigliati

Buongiorno,

sto svolgendo una esercitazione di programmazione sfruttando il linguaggio grafico Ladder;

questa riguarda il ciclo di un incrocio semaforico con prenotazione pedonale, nulla di complicato ma di sviluppo tutt'altro che banale.

 

Non volendo entrare nei dettagli del quesito, andrò direttamente al sodo specificando il problema in modo breve sperando di farvelo cogliere subito

inoltre allego qui una schermata relativa al problema che sto per descrivere.

 

Contenuto allegato:

- Nel layout di sinistra dell'ambiente di sviluppo TIA portal, sono presenti le istruzioni inserite nel blocco organizzativo OB1: contiene i richiami del blocco FC in questione.

- Nel layout di destra, è contenuta la logica riguardante lo stesso blocco FC richiamato in precedenza nel blocco OB1.

È effettivamente il semaforo singolo

 

Ora che dovrebbe essere più chiaro orientarsi all'interno della schermata, farò presente qual' è il problema:

 

 

 

 

 

 

FC.png

Continuo qui a spiegare dato che per errore ho confermato l'invio della discussione

Link al commento
Condividi su altri siti


Continuo qui a spiegare dato che per errore ho confermato l'invio della discussione..

 

Ora che dovrebbe essere più chiaro orientarsi all'interno della schermata, farò presente qual' è il problema:

 

Qualora il contatto "TLC_Starter" venisse energizzato (in OB1) verrà richiamato lo specifico FC e il ciclo verrà inizializzato con i temporizzatori che inizieranno ad elaborare le loro logiche.

Nel momento in cui il contatto "TLC_Starter" viene aperto (smettendo di energizzare FC ) la funzione non verrà richiamata e il codice al suo interno smetterà di essere scansionato.

 

Però ho notato che se il blocco di richiamo della funzione smette di essere energizzato, i parametri interni non vengono impostati al loro valore iniziale ma vengono ritenuti:

- Nel layout di destra il contatto TLC_Starter , interno al blocco FC,  (introdotto per puro scopo dimostrativo) per esempio continua ad essere energizzato.

- I temporizzatori vengono "congelati" mantenendo costante il loro ET.

 

Se FC dovesse ritornare ad essere energizzata i vari temporizzatori ripartono da dove erano rimasti.

 

Essendo lo scopo del contatto TLC_Starter quello di interrompere l'intero ciclo e mandare tutti i semafori nello stato di "fuori funzione", provoca una situazione di stati non corretti.

 

Quindi mi chiedo se fosse possibile cambiare il comportamento di un blocco FC azzerando i suoi stati quando non energizzato oppure se sto sbagliando completamente approccio e in quel caso quale sarebbe meglio seguire.

 

Grazie per qualsiasi aiuto che mi verrà fornito!

Link al commento
Condividi su altri siti

2 ore fa, manudale ha scritto:

Però ho notato che se il blocco di richiamo della funzione smette di essere energizzato, i parametri interni non vengono impostati al loro valore iniziale ma vengono ritenuti:

Togliere EN significa saltare completamente l'elaborazione della funzione, quindi la situazione viene congelata.
La funzione deve essere sempre elaborata, e devi portare all'interno della funzione stessa la logica per interrompere il ciclo.
Un modo diverso per dire ciò che ha detto "drn5".

Link al commento
Condividi su altri siti

Come già ti è stato suggerito, in OB1 poni sempre a TRUE l'ingresso En del blocco funzione. 
Successivamente , all interno dell'FB, potresti creare una variabile di tipo Bool di abilitazione (esempio , i_xEn)  dichiarata come Input. 
 

Ad inizio blocco, se questo bit è basso, resetti tutto quello che devi resettare ( io molto spesso subito dopo ci metto pure un RETURN, per evitare di elaborare ciò che viene dopo) . 
Ovviamente tutto questo detto in maniera molto semplicistica, ma ci possono essere molteplici varianti..
 

In questo modo avrai un codice molto più pulito, leggibile e-soprattutto- facilmente modificabile anche a distanza di tempo . 

Modificato: da step-80
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...