Jump to content
PLC Forum


Maverick85vr

FC attivati su condizione e congelamento variabili

Recommended Posts

Maverick85vr

Buongiorno a tutti ragazzi!

Avrei un questi da porvi che sicuramente nasce dalla mia poca esperienza nell'ambito e su cui avrei davvero bisogno che qualcuno mi facesse luce.

Dunque, come mostra l'immagine allegata, nel mettere le mani su un programma mi sono trovato davanti ai seguenti rami (vedi foto) che gestiscono lo start/stop di un ciclo di test macchina.
Tale ciclo è avviato mediante pulsanti di start/stop (impulsivi) da HMI, che con autoritenuta vanno ad agire su un merker che rappresenta la condizione affinché il blocco vero e proprio di test (una FC) venga eseguito; questo, durante la sua esecuzione, va ad agire (con bobine di out, non con set/reset) su alcuni merker che poi, in un altro blocco qui non mostrato, vanno a finire sulle bobine dei comandi fisici di alcune EV.

L'ho eseguito e mi aspettavo che la pressione del pulsante STOP, che determina l'immediata interruzione all'esecuzione del blocco, facesse andare a 0 anche questi merker in modo da far cadere i relativi comandi fisici, mentre mi sono accorto che pur interrompendone l'esecuzione, alcuni di questi merker rimangono valorizzati a 1 e il comando fisico rimane quindi attivato.

Essendo alle prime armi, vi chiedo se questo è un comportamento normale e se si per quale motivo...e vi chiedo anche se l'utilizzo di blocchi FC condizionati esternamente è una buona tecnica di programmazione o è da evitare.

Potete aiutarmi a fare chiarezza?

Grazie mille a tutti per il supporto,
buona serata.

 

IMG_20191130_164648.jpg

Share this post


Link to post
Share on other sites

MatteoR11

Se interrompi l'esecuzione di un FC congeli lo stato delle variabili all'interno dello stesso, per cui evidentemente ciò che era a 1 resta a 1.

 

Dal basso della mia esperienza evito il più possibile situazioni come questa, cioè interrompere l'esecuzione di un FC

Share this post


Link to post
Share on other sites
Maverick85vr

Grazie Matteo della risposta.
Quindi diciamo che è consigliabile utilizzare FC senza condizionarne l'esecuzione allo stato di una variabile e spostare eventualmente tali condizioni all'interno del blocco stesso, in modo che questo venga comunque eseguito costantemente. Corretto?

Grazie

Share this post


Link to post
Share on other sites
84paolo

Ciao.

io personalmente le FC condizionate le uso per le subroutine chiamate una tantum, per esempio per fare dei calcoli specifici.

Ho visto però su programmi molto lunghi che vengono usate delle subroutine per alleggerire il tempo di scansione del PLC.

per esempio tutti i comandi manuali sono fatti in un'altra subroutine, in modo che nel ciclo normale automatico il plc risulta più veloce nell'esecuzione.

Poi per attivare le uscite date dai comandi manuali, nella gestione delle uscite si mette anche in serie la stessa condizione che richiama la subroutine così che il comando rimane su perchè messo a 1 nella subroutine, ma il bit manuale non lo fa attivare.

 

Quando scrivevo i programmi sui vecchi PLC rockwell (SLC500) che avevano tempo ciclo molto lento, addirittura alcune subroutine non estremanente necessarie (per esempio gestione lampadine, conteggio statistiche) le richiamavamo 1 scansione si e una no alternate per alleggerire il tempo ciclo del PLC.

Se non lo avessimo fatto, durante il ciclo automatico il PLC non sarebbe stato abbastanza veloce da far lavorare la macchina correttamente

Edited by 84paolo

Share this post


Link to post
Share on other sites
Maverick85vr
1 ora fa, 84paolo ha scritto:

Ciao.

io personalmente le FC condizionate le uso per le subroutine chiamate una tantum, per esempio per fare dei calcoli specifici.

Ho visto però su programmi molto lunghi che vengono usate delle subroutine per alleggerire il tempo di scansione del PLC.

per esempio tutti i comandi manuali sono fatti in un'altra subroutine, in modo che nel ciclo normale automatico il plc risulta più veloce nell'esecuzione.

Poi per attivare le uscite date dai comandi manuali, nella gestione delle uscite si mette anche in serie la stessa condizione che richiama la subroutine così che il comando rimane su perchè messo a 1 nella subroutine, ma il bit manuale non lo fa attivare.

 

Quando scrivevo i programmi sui vecchi PLC rockwell (SLC500) che avevano tempo ciclo molto lento, addirittura alcune subroutine non estremanente necessarie (per esempio gestione lampadine, conteggio statistiche) le richiamavamo 1 scansione si e una no alternate per alleggerire il tempo ciclo del PLC.

Se non lo avessimo fatto, durante il ciclo automatico il PLC non sarebbe stato abbastanza veloce da far lavorare la macchina correttamente

Grazie mille del tuo suggerimento Paolo, effettivamente potrei fare così anch'io...l'intento con cui è stata fatta questa separazione logica tra i blocchi di programma credo proprio sia quella che hai spiegato tu, oltre che una distinzione concettuale da quello che è l'andamento in automatico della macchina; con la stessa filosofia ho infatti un altro blocco che gestisce proprio i comandi manuali e che risente del medesimo "difetto": uscite congelate una volta che il blocco termina l'esecuzione.
Effettivamente, nel caso dei comandi manuali, potrei aggiungere anch'io una condizione nella sintesi dei comandi logici sui comandi fisici, cosicché da far attivare l'uscita fisica se il comando manuale è alto e se la modalità manuale è attivata, è questo che intendevi giusto?

Grazie mille!

Share this post


Link to post
Share on other sites
84paolo

si esatto.

anche se io preferisco sempre lasciare le subroutine attive in modo che i bit non usati ritornino a zero

Share this post


Link to post
Share on other sites
batta

Oltre ai suggerimenti che ti sono stati dati, importante è capire il concetto: se un blocco non viene richiamato, significa proprio che non viene elaborato. Nessuna delle istruzioni al suo interno viene elaborata. È esattamente come se quel blocco non esistesse. Quindi, tutte le variabili al suo interno, rimangono nello stato che avevano durante l'ultima elaborazione del blocco.
Non è una caratteristica di Siemens, ma della programmazione in generale. Di qualsiasi linguaggio di programmazione.

Share this post


Link to post
Share on other sites
Maverick85vr
1 ora fa, batta ha scritto:

Oltre ai suggerimenti che ti sono stati dati, importante è capire il concetto: se un blocco non viene richiamato, significa proprio che non viene elaborato. Nessuna delle istruzioni al suo interno viene elaborata. È esattamente come se quel blocco non esistesse. Quindi, tutte le variabili al suo interno, rimangono nello stato che avevano durante l'ultima elaborazione del blocco.
Non è una caratteristica di Siemens, ma della programmazione in generale. Di qualsiasi linguaggio di programmazione.


Grazie Batta della risposta.

Spiego un attimo meglio quella che era la mia necessità di chiarezza... 🙂

Diciamo che se io invoco una funzione in un linguaggio di programmazione tradizionale ad alto livello, questa mi deve ritornare un valore quindi sicuramente, se ho progettato bene i vari casi, porterà a termine la sua esecuzione in maniera sequenziale arrivando ad un risultato consistente (dipendente dalla logica che deve eseguire) e quindi le variabili risulteranno valorizzate di conseguenza (e questo, portato nella programmazione PLC potrebbe equivalere all'esecuzione di una FC sul fronte di salita di una variabile, quindi soltanto una volta fino a terminazione).

Nel momento in cui io antepongo una condizione all'esecuzione di quella FC, questa viene eseguita costantemente finché quella condizione rimane valida, ma la sua esecuzione potrebbe interrompersi in qualsiasi punto, come nel mio caso, quindi con valori delle variabili dipendenti dal punto in cui è arrivata; in sostanza, quello che chiedevo era se questo fosse un comportamento naturale e ineluttabile (come logico pensaare) o se ci fosse qualche "impostazione" che permettesse alla FC, nel momento in cui smette di essere eseguita, di far cadere prima il controllo sulle bobine determinato dall'esecuzione stessa della FC.

In seconda battuta, come detto, mi interessava sapere se l'utilizzo di FC condizionati è quindi una buona tecnica di programmazione o se è preferibile, come detto da Paolo, far eseguire costantemente la FC ed eventualmente spostare le condizioni internamente alla FC stessa, anche a costo di doverla ripetere in ogni ramo.

Grazie mille.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...