Esempio movimentazione carrello in linguaggio SFC
Home › Forum › Programmazione IEC 61131 (LogicLab) › Esempio movimentazione carrello in linguaggio SFC
- Questo topic ha 5 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 11 anni, 4 mesi fa da
Sergio Bertana.
-
AutorePost
-
Settembre 13, 2013 alle 8:56 am #35412
Stefano
PartecipanteSto cercando di prendere confidenza con LogicLab e il linguaggio SFC ma non mi sono ancora chiari alcuni aspetti dell’iterfaccia utente (come posizionare i blocchi, collegare le azioni ecc ecc). Sto cercando esempi per chiarificarmi ma non trovo progetti un po’ articolati per LogicLab con componenti SFC. Un esempio utile sarebbe qualcosa tipo la movimentazione di un carrello con due posizioni (FcA e FcB) e un tasto avvio. Con una sequenza tipo:
– Inizio.
– Attesta pulsante avvio.
– Se (NOT FcA) and (NOT FcB): Marcia avanti fino ad attivazione FcA -> Jump Attesa Pulsante Avvio.
Se FcB: Marcia avanti fino ad attivazione FcA -> Jump Attesa Pulsante Avvio
Se FcA: Marcia indietro fino ad attivazione FcB -> Jump Attesa Pulsante AvvioPS: So che il secondo caso descritto andrebbe inserito nel caso 1 per ottimizzazione. L’ho diviso per avere in esempio una transazione in più.
Settembre 14, 2013 alle 6:24 am #37773Sergio Bertana
Amministratore del forumNon sono un esperto programmatore in SFC, quando ho programmi sequenziali da realizzare preferisco utilizzare il linguaggio ST, lo statement CASE OF permette di gestirli in modo molto ordinato. Ma cerco di dare una risposta alla tua richiesta realizzando un semplice programma SFC che assolve allo scopo (Stampa programma, Download sorgente).
– Nello step Init, eseguo l’azzeramento delle due uscite di comando direzione.
– Nella successiva transazione attendo l’attivazione del pulsante di start.
– Prima di aprire una transizione devo forzatamente inserire uno step, lo step Dummy e solo un riempitivo.
– Apro una transizione divergente, eseguendo due transazioni di controllo sullo stato dei finecorsa. Se nessun finecorsa è attivo prevale il ramo più a sinistra quindi attivo l’asse in avanti (Come tua richiesta).
– Eseguo i due step di Avanti ed Indietro in cui viene attivata la relativa uscita di comando.
– Quando viene attivato il finecorsa, si salta sullo step Init che azzera le uscite di comando.Settembre 16, 2013 alle 8:42 am #37775Stefano
PartecipanteOk, direi che è abbastanza chiaro.
Grazie mille!!Settembre 17, 2013 alle 1:11 pm #37778Sergio Bertana
Amministratore del forumCon un attimo di tempo libero ho provveduto ad ampliare il progetto di movimentazione carrello e/o asse aggiungendo la movimentazione automatica, come si vede dallo screenshot del programma SFC.
In modo manuale viene atteso il comando di start per movimentare in avanti o indietro, il movimento continua fino al raggiungimento del finecorsa relativo.
In modo automatico, su comando di start viene eseguita la movimentazione in avanti, raggiunto il finecorsa viene atteso un tempo di pausa, poi viene eseguita la movimentazione indietro. Raggiunto il finecorsa viene eseguita una pausa poi il ciclo riprende con la movimentazione in avanti. Per interrompere il ciclo automatico occorre passare in manuale.
Ho predisposto anche un ingresso %IX0.2 di simulazione, con l’ingresso attivo vengono simulati i finecorsa dopo un tempo dall’avvio della movimentazione, in questo modo si può testare il funzionamento in modo molto più agevole, non dovendo gestire gli ingressi di finecorsa.
Le varie azioni e transizioni sono gestite con programmi sia in linguaggio ladder LD che structured text ST, questo per dimostrare come un unico programma SFC possa contenere parti scritte negli altri 4 linguaggi della normativa IEC61131, allego stampa programma e files sorgenti.
Dicembre 2, 2013 alle 9:34 am #37913Stefano
PartecipanteA riguardo di questo esempio ho un paio di domande.
Una riguarda LogicLab:
Andando nel menù debug -> Modo Sinulazione appare l’errore “definizione del simulatore (TGSX) non trovato”. Manca qualche file in LogicLab ?L’altra riguarda il progetto di esempio.
Se si volessero aggiungere due allarmi, uno che intervenga se il carro impiega più di X tempo ad arrivare al finecorsa, e l’altro che intervenga alla chiusura di un contatto (che può essere il pulsante di emergenza, o un contatto di protezione termica), quale sarebbe il modo più corretto di gestirli ?Dicembre 2, 2013 alle 9:54 am #37914Sergio Bertana
Amministratore del forumIl simulatore interno a LogicLab non è implementato nella versione attuale, sarà disponibile dalla prossima versione in via di rilascio. Attualmente forniamo un simulatore esterno, devi selezionare il target simulatore per utilizarlo (Topic).
Ho convertito il tuo programma per l’utilizzo con il simulatore e ti ho aggiunto la gestione dell’allarme di avanzamento asse (Download programma sorgente). Ecco lo screenshot del tuo programma in simulazione.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.