Vai al contenuto

lorrendo

Diagnostica: timeout su movimento motori/attuatori

Recommended Posts

lorrendo

Vorrei un consiglio su come gestire la diagnostica per i movimenti dei vari attuatori; in particolare vorrei impostare un timeout in modo da generare un'errore se i vari movimenti non si compiono entro un tempo massimo prefissato.

 

Il contesto è didattico ma vorrei che fosse aderente alla realtà. Il PLC è un S7-1200 e l'ambiente Tia Portal V13. Il programma gestisce un automatismo sequenziale che implementa in ladder un algoritmo descritto da un diagramma SFC (di solito parto da un diagramma temporale, disegno su carta l'SFC e traduco in ladder con la tecnica batch). Uso una funzione per gestire l'evoluzione del sistema da un passo al successivo, una per le uscite, attivate in base al passo attivo, e una per diagnostica e allarmi. In quest'ultima vorrei inserire anche il timeout per i movimenti usando un timer che segnala un errore allo scadere del tempo. Posso mettere un timer per tutte le 10 uscite oppure metterlo sugli stati, che cambiano quando i movimenti sono arrivati al finecorsa. Ha senso mettere un unico timer per tutti i movimenti e resettarlo con i vari finecorsa?

 

Qual è il modo più semplice o sensato per farlo?

Condividi questa discussione


Link discussione
Condividi su altri siti
max.bocca

Normalmente ogni funzione ha un tempo differente, quindi timer diversi vanno bene come pure centralizzato ma ad ogni fase c'è da riscrivere il valore di intervento.

Condividi questa discussione


Link discussione
Condividi su altri siti
lorrendo
2 ore fa, max.bocca scrisse:

Normalmente ogni funzione ha un tempo differente, quindi timer diversi vanno bene come pure centralizzato ma ad ogni fase c'è da riscrivere il valore di intervento.

Ogni movimento potrebbe avere un timeout diverso ma per semplificare la gestione, snellire il programma e usare meno timer avevo pensato di usarne uno solo con una durata uguale per tutti. Mi rendo conto però che così la gestione dell'unico timer si complica perché non posso attivarlo con i passi (con i merker di passo in parallelo il timer non si azzera) o le uscite (se attivate in sequenza) e devo invece resettarlo con un istruzione "resetta timer" o con dei contatti attivi sul fronte di attuatori o passi. Alla fine risulta una soluzione meno leggibile e meno flessibile. Ho cercato guardato se online se c'erano delle best practise al riguardo ma senza successo. Ho guardato anche qualche testo (Pirraglia, Pellicanò) ma ho trovato solo raccomandazioni generiche senza esempi concreti. Ci sono dei testi che trattino questo tipo di problemi?

Condividi questa discussione


Link discussione
Condividi su altri siti
lorrendo

Sto provando con un solo timer e un timeout uguale su tutti i passi della sequenza. Nelle uscite ho aggiunto un timer sempre attivo (con contatti NC per i passi che non prevedono movimenti) e nella sequenza con le transizioni da un passo all'altro ho aggiunto l'istruzione che lo resetta:

349525022_resettimer.PNG.0187ba7da6e6077ba31c394c0d7e93b8.PNG

Funziona ma non mi convince del tutto. Cambiare il timeout a seconda del passo diventa complicato ma specialmente non mi piace l'istruzione di reset inserita nella funzione che gestisce la sequenza. Si può fare meglio?

Condividi questa discussione


Link discussione
Condividi su altri siti
batta

Per cambiare il tempo di time-out basta una istruzione MOVE.
Da capire, piuttosto, se c'è sempre un solo passo attivo.
In ogni caso, dopo aver rilevato il time-out, dovrai associarlo al passo che l'ha generato per fare una diagnostica seria, e non limitarti ad una generica segnalazione di time-out.

Condividi questa discussione


Link discussione
Condividi su altri siti
lorrendo
6 ore fa, batta scrisse:

Per cambiare il tempo di time-out basta una istruzione MOVE.

Uso qualcosa di simile per impostare un tempo di default per i timer il cui tempo è modificabile da HMI.

Quote

Da capire, piuttosto, se c'è sempre un solo passo attivo.

In questo automatismo sì (non c'è parallelismo).

Quote

In ogni caso, dopo aver rilevato il time-out, dovrai associarlo al passo che l'ha generato per fare una diagnostica seria, e non limitarti ad una generica segnalazione di time-out.

Non l'ho fatto perché l'intento è didattico e non volevo complicare troppo il programma. Attualmente quando c'è un timeout si resettano tutti i passi in modo da disattivare tutte le uscite. Come potrei fare per fare una diagnostica più evoluta? Posso lasciare il passo dove si è verificato il timeout attivo (e segnalarlo via HMI) e bloccare le uscite in altro modo (un contatto "errore diagnostica" NC in serie) o resettando le uscite in un segmento eseguito per ultimo (mi piace meno...). Come è meglio fare?

 

Il passo attivo non è memorizzato in una singola variabile ma uso tanti bit quanti sono i passi (merker di passo).

 

Grazie dei consigli!


Messaggio editato da lorrendo

Condividi questa discussione


Link discussione
Condividi su altri siti
step-80

La questione interessa molto anche a me.

In particolare vorrei capire se al verificarsi di un timeout resettate immediatamente tutti i passi , attivi o meno, salvando magari prima il passo che era attivo in un altra variabile per poterla visualizzare. 

Sperando di non sporcare la discussione dell’utente che ha aperto il post vorrei chiedere inoltre dove siete soliti analizzare gli allarmi relativi a quella sequenza..se nella sequenza stessa, col rischio di rendere meno leggibile il

codice, o in un fc a parte, col rischio di creare confusione..

Condividi questa discussione


Link discussione
Condividi su altri siti
step-80

Personalmente da un po ho adottato questa tecnica, non so se è giusta o meno ma è quella che mi piace di piu. 

 

Creo la mia "POU" ( fc per Siemens) ad esempio "sequenza home asse 1" , dichiarando nelle variabili LOCALI di tale pou una 50ina di bit ( per le mie applicazioni bastano sempre) composti da 25/30 bit di passo ed il resto di libero utilizzo. In questi ultimi inserisco consensi, abilitazioni e quant'altro debba cadere al verificarsi di una anomalia. 

In testa alla Pou verifico la presenza di una anomalia, se presente salto ad un punto del programma dove lancio una istruzione di reset in blocco dei 50 bit dichiarati sopra. Se nessuna anomalia presente elaboro invece il codice della sequenza(il salto non viene eseguito), settando e resettando i passi a seconda delle transizioni .

Dall'istruzione di reset in poi invece vi é la parte di programma che è sempre richiamata, dove comando le eventuali uscite con i passi attivi come coil( no set / reset) in modo che al verificarsi di una anomalia vengano sganciate le uscite . 

 

Questo sistema mi fa stare più 'tranquillo' nel senso che la macchina viene gestita come unitá composta da tante piccole unità operative dove ogni unitá ha la sua diagnostica. Per abilitare il ciclo automatico ogni unità mi deve dare il suo Ready.

 

Personalmente non amo inserire i negati delle anomalie barbaramente in serie al comando delle uscite..le uscite sinspengono, ma cosa succede quando si tira su il fungo? Mi è capitato di vedere macchine, anche costruite da aziende leader, che si bloccavano premendo il fungo o aprendo una porta ma...non appena chiusa la porta la macchina ripartiva allegramente😭

 

 

 


Messaggio editato da step-80

Condividi questa discussione


Link discussione
Condividi su altri siti

Registrati o accedi per inserire messaggi

Devi essere un utente registrato per lasciare un messaggio. La registrazione è GRATUITA.

Crea un account

Iscriviti alla nostra comunità. È facile!

Registra un nuovo account

Connettiti

Hai già un account? Connettiti qui

Connettiti adesso

×