Vai al contenuto

Mappatura pezzi su nastro di trasporto


Messaggi consigliati

marco1278
Inserito:

Ciao a tutti,

Mi trovo a lavorare su un’etichettatrice dotata di plc siemens s7-1200 e driver proprietario per il comando del motore dell’etichettatrice.

Sul nastro di trasporto ho una fotocellula che è elettricamente collegata sia al plc che al driver del motore.

Dopo l’applicazione dell’etichetta sono presenti due soffi ad aria compressa che piegano l’etichetta sul prodotto.

 

Devo far lavorare i soffi a intermittenza, cioè solo quando sta passando il prodotto con l’etichetta.

 

Mi sono creato una FB che richiamo 2 volte… una per ogni soffio.

La FB è composta da:

- 10 variabili booleane

- 10 timer TON

- una variabile INT di conteggio 

- una variabile generale #out

 

Sul fronte di salita della fotocellula vado a settare la varibile booleana corrispondente alla variabile di conteggio e poi incremento la variabile di conteggio. (Se il conteggio è a 5, setto la vatiabile 5 e poi incremento a 6)

Quando arrivo a 10 ricomincio a contare da 1.

Ogni variabile booleana attiva il rispettivo timer che inizia a contate il tempo.

Al raggiungimento del tempo impostato, ogni timer attiva la variabile #out e resetta la propria variabile booleana di attivazione così da disattivarsi.

La variabile #out, una volta attivata, viene disattivata da un altro timer dedicato.

 

 

Questa logica mi consente di tenere memoria dei pezzi che passano perché tra la fotocellula e l’ultimo soffio ci possono essere massimo 3 pezzi. Per evitare problemi ho creato i 10 timer.

 

Il sistema funziona… però fatto così non mi piace molto e non è precisissimo.


Qualcuno ha qualche suggerimento da darmi per fare un sistema più pulito?

 

Ho già provato a fare un ciclo con interrupt da OB30 impostato a 2ms, ma ho notato che non cambia molto sulle performance.

Lo so che ho un PLC poco performante per fare queste cose.

 

I tempi di ritardo variano da 60ms sul primo soffio a 200ms sull’ultimo.

 

Grazie

 

Ciao

Marco Fornaciari
Inserita:

Tipicamente questi problemi si risolvono più facilmente con uno shift register con i bit di una o più DB in fila.

Si fa pure il possiile per evitare tempi di ritardo, che con tempi così brevi non sono mai ripetitivi nei confronti del comando dell'uscita: bisogna posizionare correttamente il sensore di lettura e il soffio, quindi utilizzare elettrovalvole rapide.

 

Ma se funziona e ci devi perdere tempo per ricollaudarlo, lascia così e lo rifai solo se ci sono problemi.

La prossima volta lo rifai diverso.

 

Se il tempo di ciclo di tutto il programma è molto breve in rapporto alla velocità delle lavorazioni, usare un interrupt non serve e magari crea solo inutili complicazioni. 

Inserita:

Suggerimento, usa contatori (invece di timer che sono più lenti). Poi dovrai modificare una variable che non sono millisecondi ma che corrisponde ad un tempo.

 

Curiosità mia: non capisco 10 timer per gestire 2 soffi ma se hai fatto così immagino che servono.

ciao

Inserita:

Quindi una macchina a stati.

 

2mSec mi sembrano pochini per un 1200, però c'è anche da capire quanto è il tempo ciclo. Forse bastava un OB30 a 10mSec.

 

Se però usi i timer, per quello che mi pare di capire ne bastava uno solo nelle dichiarazioni static del FB.

 

Alla fin dei conti comunque "software che gira non si tocca" , anchio lascierei stare.

 

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