Vai al contenuto
PLC Forum


FC attivati su condizione e congelamento variabili


Maverick85vr

Messaggi consigliati

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

Link al commento
Condividi su altri siti


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

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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

Modificato: da 84paolo
Link al commento
Condividi su altri siti

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!

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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.

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