Esempio movimentazione carrello in linguaggio SFC

Attenzione !I messaggi sul forum potrebbero essere modificati dal nostro staff. La data e l'ora dei messaggi potrebbe non essere quella di invio ma quella di moderazione da parte dello staff. Grazie per l'attenzione.

Home Forum Programmazione IEC 61131 (LogicLab) Esempio movimentazione carrello in linguaggio SFC

Questo argomento contiene 5 risposte, ha 2 partecipanti, ed √® stato aggiornato da  Sergio Bertana 5 anni, 3 mesi fa.

Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)
  • Autore
    Articoli
  • #35412

    Stefano
    Partecipante

    Sto 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 Avvio

    PS: So che il secondo caso descritto andrebbe inserito nel caso 1 per ottimizzazione. L’ho diviso per avere in esempio una transazione in più.

    #37773

    Sergio Bertana
    Amministratore del forum

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

    #37775

    Stefano
    Partecipante

    Ok, direi che è abbastanza chiaro.
    Grazie mille!!

    #37778

    Sergio Bertana
    Amministratore del forum

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

    #37913

    Stefano
    Partecipante

    A 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 ?

    #37914

    Sergio Bertana
    Amministratore del forum

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

Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)

Devi essere loggato per rispondere a questa discussione.