tecnologyassistence Inserito: 1 febbraio 2010 Segnala Share Inserito: 1 febbraio 2010 Salve a tutti ho dato uno sguardo ad altre discussioni che parlano del sistema ruota fonica,il mio problema e rilevare gli impulsi da una ruota fonica e al variare della velocita con cui leggo gli impulsi dovrei sapere di quanti cm/min il tappeto sta avanzando.Ho questi dati ogni impulso corrisponde ad uno spostamento di 1cm.Come posso fare a ricavare il real time questo dato e allegerlo di continuo? ringrazio anticipatamente a tutti coloro che potranno darmi un consiglio.grazie Domenico. Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 1 febbraio 2010 Segnala Share Inserita: 1 febbraio 2010 Be intanto dipende dall'hardware che hai.Se il tuo HW lo permette io fare o su interput del segnale da controllare e il tempo trascorso tra due inetrput di da la velocità istantanea della tua ruota, alla fine, ovvero dopo n secondi vedi quanti impulsi hai contato per ricavare la velocità (dovrebbe essere la velocità media).Oppure in OB35 richiamato ogni n°ms (dipende dalla turata del tuo impulso e dalla velocità massima che può raggiungere il sistema) incrementi un contatore di impulsi e dopo n richiami di OB35 ti calcoli la velocità.Se magari fornisci maggiori info sulla tua applicazione Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 1 febbraio 2010 Autore Segnala Share Inserita: 1 febbraio 2010 allora utilizzo una CPU 3152DP la velocita e bassa non ho elevate velocita l'avanzamento del tappeto e abbastanza lento il lavore massimo che posso raggiungere dovrebbe essere 50cm/min tu dici di utilizzare OB35 ok ma come posso tenere in memoria il lavore del risultato del calcolo e farlo variare non appena il tempo che ho fra un impulso e un altro aumenta o diminuisce?grazie Domenico Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 1 febbraio 2010 Segnala Share Inserita: 1 febbraio 2010 (modificato) ma come posso tenere in memoria il lavore del risultato del calcolo e farlo variare non appena il tempo che ho fra un impulso e un altro aumenta o diminuisce?Allora se devi tenere monitorato il tempo tra un impulso e l'altro allora devi farlo tarmite interput, ovvero parametrizzi OB40 e tra le variabile che ti mette a disposizione trovi "Date and time OB40 started ", per tanto con una semplice sottrazione tra il tempi,opportunamente depurati delle informazioni che non ti servono, (tipo anno, mese, giorno, ecc), ottieni il tempo trascorso tra un impulso e l'altro, il risultato lo confronti con il tempo che hai salvato del ciclo prima, ed il gioco è fatto. Modificato: 1 febbraio 2010 da TravelMen Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 1 febbraio 2010 Autore Segnala Share Inserita: 1 febbraio 2010 ti ringrazio per il suggerimento potresti esplicarmi un piccolissimo esempio ?grazie Domenico Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 2 febbraio 2010 Segnala Share Inserita: 2 febbraio 2010 Ma come piccolo esempio di rimando a questa discussione, e come questa ne trovi altre che possono fornirti esempi. Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 2 febbraio 2010 Autore Segnala Share Inserita: 2 febbraio 2010 Travelmen ti ringrazio ma non sono riuscito a capire un granche il quella discussione perche forse si parla di una situazione differente dalla mia sto cercando di provare alcune cose ma dalle prove che ho fatto non sono riuscito ad ottenere il risultato che sesidero ottenere in pratica non ho capito se utilizzare ob35 oppure ob40 oppure utilizare un semplice fc e sviluppare dentro il calcolo impulsi tempo.davvero non ne sto venendo fuori. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 2 febbraio 2010 Segnala Share Inserita: 2 febbraio 2010 Tu hai bisogno di costruire un periodimetro; in altri termini devi misurare il tempo che intercorre tra due impulsi.Dai tuoi dati, 1 imp == 1 cm e 50cm/1', si ricava che hai un periodo <= 1.2".A mio giudizio il metodo più semplice è:- Nella configurazione Hw setti il clock di sistema, legato all'interrupt dell'OB35, a 10ms- Nell'OB35 fai un semplice conteggio, ad ogni interrutp incrementi un contatore.- Leghi gli impulsi ad un ingresso veloce ad interrupt (OB40), al primo impulso leggi il contaotre di OB35 e lo memorizzi, al secondo impulso rileggi il contatore di OB36. La differenza tra le due letture ti da il tempo trascorso con risoluzione pari a 10ms che è pari ad 1/120 del periodo più corto. Se ti basta questa risoluzione hai risolto il tuo problema di misura. Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 2 febbraio 2010 Autore Segnala Share Inserita: 2 febbraio 2010 Sig Orsini in tanto grazie per il suo intervento il problema e che al variare del tempo cioè della velocita fra un impulso e unaltro devo ricavare se il nastro trasportatore avanza di 40 o di 25 o di 30 centimetri al minuto.Grazie Domenico Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 2 febbraio 2010 Segnala Share Inserita: 2 febbraio 2010 Esempio.Se hai impostato l'interrupt in OB35 a 19ms; se hai 1 imp/1 cm ed hai contato 120 interrupts di OB35 tra due impulsi, significa che il tuo periodo "T" vale 1,2" (120 * 10-3 = 1,2").La tua velocità V = 60/T ==> 60/1,2 = 50 cm/1'.Se invece tu avessi contato 155 interrupts tra due impulsi avresti un periodo pari a T = 155 * 10-3 = 1,55", da cui V = 60/1,55= 38,71 cm/1'Più chiaro ora? Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 2 febbraio 2010 Autore Segnala Share Inserita: 2 febbraio 2010 Grazie adesso piu chiaro ho capito devo solo cercare di mettere assieme il tutto non ho dimistichezza con ob35 diciamo che non ho quasi mai usato queste funzioni.comunque tentero' di farlo.grazie Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 4 febbraio 2010 Autore Segnala Share Inserita: 4 febbraio 2010 Sig Orsini niente da fare sarò un pò somaro sarà semplice da fare ma non ci riesco a capire come conteggiare interrupts di ob35. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 4 febbraio 2010 Segnala Share Inserita: 4 febbraio 2010 Ogni volta che viene richiamato l'interrupt il programma entrerà in OB35. Assegnata una word allo scopo, ogni volta che entri in OB35 incrementi la word di conteggio. Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 5 febbraio 2010 Autore Segnala Share Inserita: 5 febbraio 2010 Grazie ancora per l'aiuto allora ho provato a fare quello che mi sugerisce ma non riesco a contare le volte che viene eseguito OB35in buona sostanza non so se ho fatto qualche errore io ma sto richiamando il blocco dove eseguo il conteggio in OB35 senza richiamarlo in OB1 ho provato anche ad utilizare il clock di sistema utilizando esempio m0.6 come impulso di un secondo e incrementare una word che ad ogni 60 secondi contati si azzera nel momento in cui si azzere controllo il valore proveniente dal conteggio del sensore di prossimita montato sulla ruota fonica ma risulta molto in preciso. Link al commento Condividi su altri siti More sharing options...
TravelMen Inserita: 5 febbraio 2010 Segnala Share Inserita: 5 febbraio 2010 (modificato) Be a questo punto posta il codice da te fatto, dell' OB35 cosi vediamo se è tutto giusto.L' OB35 non va richiamato nell OB1 ma va inserito nel progetto OFFLine e poi scaricato nel PLC.E sopratutto il richiamo dell OB 35 fa configurato nella configurazione HW e poi anche essa va scaricata nel PLC.Se hai fatto tutto quello che ti è stato detto da Livio non vedo alcun problema.ho provato anche ad utilizare il clock di sistema utilizando esempio m0.6 come impulso di un secondo e incrementare una word che ad ogni 60 secondi contati si azzera...C'è un errore di fondo, leggendo ciò che hai scritto, che il tuo conteggio avviene se hai M0.6 = 1 ed l'ingresso del tuo sensore, almeno è quello che ho capito io.Perchè funzioni il tuo esempio, devi usare due word, una per contare i 60 seconti ed una per contare gli impulsi.A #Senosre fp #DIFU jcn av L 1 L word +I T word av: nop 0 Modificato: 5 febbraio 2010 da TravelMen Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 5 febbraio 2010 Autore Segnala Share Inserita: 5 febbraio 2010 dunque M6.0 e un clock di sistem U "clock1/sec"a di 1 sec con questo incremnto una word U M0.6 FP M 5.5 SPBNB _006 L "DB023".DB023_040 L 1 +I T "DB023".DB023_040_006: NOP 0con questo confronto azzero il conteggio e ottengo il minuto U( U( L "DB023".DB023_040 L 60 >I ) SPBNB _007 L 0 T "DB023".DB023_040 SET SAVE CLR _007: U BIE ) SPBNB _008 L 0 T "DB023".DB023_042_008: NOP 0qui conteggio i passi rilevati dalla ruota fonica U "SQPASSO" FP M 5.4 SPBNB _009 L "DB023".DB023_042 L 1 +I T "DB023".DB023_042_009: NOP 0 L "DB023".DB023_040 L 60 ==I = #azzera U #azzera SPBNB _00a L "DB023".DB023_042 T "DB023".DB023_044 // valore che leggo a pannello velocita espressa in cm al minuto _00a: NOP 0la velocita non mi risulta sempre costante ma in precisa ad ogni azzeramento del conteggio minuti varia sempre anche se il tempo e sempre quello.questo fc lo richiamo in ob35call fc4dove sto sbagliando?grazie per il vostro aiutoDomenico Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 5 febbraio 2010 Segnala Share Inserita: 5 febbraio 2010 (modificato) Stai facendo molta confusione//DB023".DB023_042 == contatore L "DB023".DB023_042 L 1 +I T "DB023".DB023_042Inserisci in OB35 quelle 3 righe di codice e solo quellle. Se hai configurato OB35 come ti ho scritto e come ha spiegato abbondantemente TraveMen, ogni volta che scatta l'interrupt di tempo s'incrementa il contatore.Poi leghi l'ingresso della ruota fonica ad un ingresso veloce ad interrupt. Nell'interrupt esterno che scatta, pe, sui fronti di salita degli impulsi della ruota fonica leggi "DB023".DB023_042 e confronti con il valore della lettura precedente, valore che avrai memorizzato. La differenza tra le due letture ti da il periodo dell'impulso. poi esegui quello che ho scritto nel post #10 Modificato: 5 febbraio 2010 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 5 febbraio 2010 Autore Segnala Share Inserita: 5 febbraio 2010 (modificato) Scusatemi ancora saro capoccione io ma non ho mai utilizato questo benedetto OB35 non riesco a farlo funzionare vi chiedo se potete magari aiutarmi a semplificare il tutto magari con un esempio so che l'ho scopo del forum non e farsi aiutare cosi capisco bene ma non riesco a venirne fuori. Modificato: 5 febbraio 2010 da tecnologyassistence Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 5 febbraio 2010 Segnala Share Inserita: 5 febbraio 2010 Il problema è che non sappiamo come aiutarti. Hai letto il post #15 di TravelMen?Hai eseguito la configurazioen HW?Poi nell'OB35 devi insere 3 istruzioni 3 e solo quelle. Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 5 febbraio 2010 Autore Segnala Share Inserita: 5 febbraio 2010 allora in OB35 ho inserito solo questo:L "DB023".DB023_042 L 1 +I T "DB023".DB023_042se leggo quella variabile vedo che scorre velocemente,poi sul la configurazione ho impostato OB35 a 19ms.il mio ingresso di interrupt non so come utilizzarlo il discorso e capire come diceva Lei nel post #10 come eseguire quel calcolo per tirare fuori la velocità attuale. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 5 febbraio 2010 Segnala Share Inserita: 5 febbraio 2010 (modificato) poi sul la configurazione ho impostato OB35 a 19ms.Perchè vuoi complicarti la vita ad ogni costo? Impostalo a 10ms o a 20ms o a 100ms. Io ti consiglio, per avere una buona risoluzione d'impostarlo a 10ms.Per l'interrupt esterno.Devi avere o una CPU con ingressi veloci, oppure una scheda di input digitale per ingressi veloci (interrupt di processo). Nella configurazione Hw ne configuri uno in modo che generi un interrupt ad ogni fronte di salita. A quell'ingresso colleghi il sensore della ruota fonica. Poi nell'OB di interrupt, associato a quell'evento nella configurazione HW, scrivi le istruzioni che leggono la differenza.Per esempio:L"DB023".DB023_052;memoria conteggi tempi L "DB023".DB023_042 -I T "DB023".DB023_062; periodo impulso L "DB023".DB023_042;contatore tempo T "DB023".DB023_052;memoria conteggi tempiPoi se 1 impulso vale esattamente 1 cm, e hai impostato il tempo a 10ms, ti basta eseguire la divisione 60/"DB023".DB023_062Sono anni che non uso lo step7, per cui non son sicuro se si può scrivere un codice più ottimizzato, comunque le 3 righe che ti ho scritto dovrebbero funzionare.PS Sul forum ci si considera amici e colleghi, quindi l'amichevole tu va più che bene Modificato: 5 febbraio 2010 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 5 febbraio 2010 Autore Segnala Share Inserita: 5 febbraio 2010 Ok livio ti ringrazio farò delle prove e ti faro sapere.saluti Domenico Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 6 febbraio 2010 Autore Segnala Share Inserita: 6 febbraio 2010 Vorrei farvi unaltra devo per forza utilizzare interrupt anche se il tempo che ce tra un impulso e l'altro e abbastanza grande?In buona sostanza il tempo che ho tra un impulso ed unaltro e di circa 1s500ms la velocità massima che posso concedere al materiale che avanza e di 50cm al minuto e la velocita minima e di circa 15 cm al minuto.quindi visto che utilizzo una CPU3152DP 6ES7-315-2AG10-0AB0 e necessario che io abbia degli ingressi che rilevano conteggi veloci?Buona giornata a tutti Domenico Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 6 febbraio 2010 Segnala Share Inserita: 6 febbraio 2010 Dipende dalla precisione che ti serve. Con interrupt esterno e clok di OB35 a 10 ms hai una risoluzione di 10 ms quindi la precisione del periodo è migliore di 20ms (se ragioni sul caso pessimo vedi che in teoria è 19.999 ms)Se ti limiti a leggere gli impulsi da programma peggiori questa precisione di una quantità doppia rispetto al tempo di campionamento.Ammettiamo, per ipotesi, che tu legga direttamente la periferia ogni 5 ms l'errore sul periodo sarà di circa 30 ms- Alla massima velocità il tuo periodo corrisponde a 1200 ms quindi avrai una precisione pari a 2,5% nel caso pessimo, contro lo 1.66666% dell'uso di interrupt.Se questo ti basta puoi arrangiare il programm in modo da andare a leggere ogni tot istruzioni il tuo ingresso in modo diretto (PEW). Non usare le normali istruzioni di lettura perchè ingressi e uscite non sono quelle fisiche, ma le tabelle immagini aggiornate ad ogni ciclo di programma. Link al commento Condividi su altri siti More sharing options...
tecnologyassistence Inserita: 10 febbraio 2010 Autore Segnala Share Inserita: 10 febbraio 2010 (modificato) Ciao Livio niente da fare non ne vengo fuori unaltra complicazione e che ho verificato con esattezza con un calibro il passo dei denti della ruote ed e esattamente 12mm sono davvero inguiato qualcuno spero mi possa aiutare magari con qualche esempio mi starò complicando la vita ma non ci sono riuscito scusatemi.grazie Domenico Modificato: 10 febbraio 2010 da tecnologyassistence Link al commento Condividi su altri siti More sharing options...
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