Vai al contenuto

Cenni sull’utilizzo del linguaggio SFC

Home Forum Informazioni ambiente di sviluppo LogicLab Cenni sull’utilizzo del linguaggio SFC

Stai visualizzando 11 post - dal 1 a 11 (di 11 totali)
  • Autore
    Post
  • #35704
    Stefano
    Partecipante

    Nel progetto che sto sviluppando ho un programma SFC principale che definisce degli step di logica ad alto livello. Questi contengono macroazioni. Le macroazioni sono, a loro volta, scritte in SFC e gestiscono azioni a più basso livello.

    Quando uno step ad alto livello cessa di essere attivo, tutto il codice riferito alla macroazione cessa di essere eseguito come da aspettative. Nel momento in cui lo step nel programma principale torna ad essere attivo, la relativa macroazione riprende a funzionare ma lo fa ripartendo dallo stato in cui era precedentemente.

    Per la mia applicazione avrei bisogno che la macroazione riparta dallo step Init. Prima di inventarmi costrutti nello schema vorrei capire se esiste un comando che resetti una azione scritta in SFC.

    #38636
    Sergio Bertana
    Amministratore del forum

    Premesso che non sono un esperto di linguaggio SFC, concordo con te che lo scenario è quello descritto, e non esiste un modo per resettare il flusso di esecuzione di un programma SFC.

    Tu puoi in una azione modificare via linguaggio ST variabili utilizzate nel programma SFC ma non è possibile in nessun modo gestire il flusso di esecuzione. Quindi quando lo step ad alto livello cessa di essere attivo gli step che gestiscono le azioni a basso livello rimangono congelati allo stato in cui sono.

    #38640
    Stefano
    Partecipante

    Speravo in una variabile tipo SFCInit come in codesys. Vedo di girarci attorno con un qualche costrutto.

    #38641
    Sergio Bertana
    Amministratore del forum

    Ho contattato al riguardo la Axel che mi ha dato alcuni suggerimenti, abilitando la flag Check functions and functions blocks external variables (Screenshot) si attivano anche le flag di controllo dello stato SFC (Vedi nota tecnica).

    #38642
    Stefano
    Partecipante

    Grazie mille! Avevo notato quei flag in opzioni progetto ma nella documentazione non ne era spiegato il funzionamento.

    Sarebbe comodo avere a disposizione in donwload la libreria (SFCControl.pll) menzionata nella documentazione. Le variabili descritte, comunque, fanno egregiamente il loro dovere.

    #38647
    Stefano
    Partecipante

    Ho parlato troppo presto. Funzionava perchè avevo lasciato i miei costrutti di reset.

    Se dichiaro la variabile tra le locali, o tra le globali, il compilatore passa i controlli ma poi nell’esecuzione del programma non avviene il reset.

    #38648
    Sergio Bertana
    Amministratore del forum

    Ho rispolverato un vecchio progetto di esempio con un lampeggiante (Topic) ed ho aggiunto una transizione divergente. In una azione ho inserito il controllo su l’ingresso logico Di00CPU che oltre ad essere copiato sull’uscita logica Do01CPU sul fronte di attivazione setta la variabile Nome POU_RESET_SFC.

    E se attivi l’ingresso Di00CPU il flusso di esecuzione SFC si resetta come deve essere (Ecco lo screenshot). Allego il programma sorgente.

    #38668
    Stefano
    Partecipante

    Ho esaminato il programma di esempio, funziona ma è leggermente diverso dallo scenario descitto da me. Esempio:

    – Creiamo un programma SFC chiamato Main.
    – All’interno di questo creiamo una azione in linguaggio SFC (chiamiamola subSFC)

    La mia esigenza è applicare il flag _RESET_SFC dal programma “Main” in modo da resettare lo step “subSFC”. Se all’interno di “subSFC” applico il flag “Main_RESET_SFC” il compilatore non da errori e quando il flag diventa true il programma “Main” si resetta. Stessa cosa se all’interno di “Main” setto a true il flag “Main_RESET_SFC”.

    Se all’interno di “Main” setto il flag “subSFC_RESET_SFC” il compilatore da errore. Idem se lo facco all’interno di “subSFC”. Ho provato anche con costrutti tipo “Main.subSFC_RESET_SFC” oppure “NomePasso.subSFC_RESET_SFC” o anche “NomeAzione.subSFC_RESET_SFC” (quindi “subSFC.subSFC_RESET_SFC”) ma il compilatore segnala sempre un errore.

    #38669
    Sergio Bertana
    Amministratore del forum

    Se guardi la nota il costrutto esatto per riferirsi alla flag di reset SFC della Action è [Programma]_[Action]_RESET_SFC. Quindi nel tuo esempio sarà Main_subSFC_RESET_SFC.

    Ho modificato l’esempio di prima aggiungendo una Action in SFC (ABlink) ed ho gestito il comando di reset del SFC della Action sia dal programma SFC principale (Screenshot), allego il programma sorgente.

    Il programma esegue 10 lampeggi della uscita e poi resta in attesa per 5 secondi con l’uscita attiva, prima di riprendere il ciclo dall’inizio. Con un ingresso digitale Di00CPU è possibile resettare in qualsiasi momento l’esecuzione del ciclo.

    #38674
    Stefano
    Partecipante

    Grazie mille, ora funziona tutto come da specifiche. Avevo interpretato la nota relativa al reset di una azione in modo differente.

    #50473
    Stefano
    Partecipante

    Purtroppo, a distanza di quasi 5 anni, devo rimettere mano al programma in cui ho utilizzato le variabili relative a questi post. Il programma era stato scritto con l vecchio LogicLab3 (2.3.0.0) e salvato con estensione ppjs. Se lo carico con l’ultima versione di LogicLab e cerco di compilare mi dice:

    BLINKVALUE(39) – errore S1305: DIV => Funzione sconosciuta

    DIV fa parte degli operatori di base.  Dato che nel progetto ci sono anche link alle librerie in formato PLL ho pensato di salvare il progetto in plcprj e fare il link alle nuove librerie. Ora, compilando, l’errore è:

    MAINPROGRAM(17) – errore A4097: CONTROLLOMACCHINA_RESET_SFC => Oggetto non trovato
    MAINPROGRAM(18) – errore A4097: VISALLARMISFC_RESET_SFC => Oggetto non trovato

    Non trovo riferimenti a queste due variabili nel software, anche se da qualche parte dovrei averle usate. Le trovo però nel file temporaneo LLSFCPreProc.lst creato in compilazione:

    {SRC:MAINPROGRAM}
    LD MAINPROGRAM_HOLD_SFC
    LD MAINPROGRAM_RESET_SFC
    S CONTROLLOMACCHINA_RESET_SFC
    S VISALLARMISFC_RESET_SFC

    La cosa strana è che se tolgo il flag da “Abilita le opzioni del controllo SFC” la compilazione avviene correttamente, anche se non so se poi il software funzioni ancora una volta usato nella macchina.

    Aggiungo che nemmeno il software di esempio presente qui si compila con l’ultima versione di LogicLab.

Stai visualizzando 11 post - dal 1 a 11 (di 11 totali)
  • Devi essere connesso per rispondere a questo topic.