marco1278 Inserito: 2 ore fa Segnala Inserito: 2 ore fa 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: 1 ora fa Segnala Inserita: 1 ora fa 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.
thinking Inserita: 1 ora fa Segnala Inserita: 1 ora fa 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
drn5 Inserita: 47 minuti fa Segnala Inserita: 47 minuti fa 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.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora