Vai al contenuto
PLC Forum


Sviluppare Da Velocita Impulso = Velocità In Cm/min - Impulsi ruota fonica velocita=tempo=Velocità in cm/min


tecnologyassistence

Messaggi consigliati

tecnologyassistence

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


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

tecnologyassistence

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

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.

:thumb_yello:

Modificato: da TravelMen
Link al commento
Condividi su altri siti

tecnologyassistence

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

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

tecnologyassistence

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

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

tecnologyassistence

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

tecnologyassistence

Sig Orsini niente da fare sarò un pò somaro sarà semplice da fare ma non ci riesco a capire come conteggiare interrupts di ob35.

:unsure:

Link al commento
Condividi su altri siti

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

tecnologyassistence

Grazie ancora per l'aiuto allora ho provato a fare quello che mi sugerisce ma non riesco a contare le volte che viene eseguito OB35

in 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

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: da TravelMen
Link al commento
Condividi su altri siti

tecnologyassistence

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 0

con 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 0

qui 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 0

la 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 ob35

call fc4

dove sto sbagliando?

grazie per il vostro aiuto

Domenico

Link al commento
Condividi su altri siti

Stai facendo molta confusione

//DB023".DB023_042 == contatore
L "DB023".DB023_042
L 1
+I 
T "DB023".DB023_042

Inserisci 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: da Livio Orsini
Link al commento
Condividi su altri siti

tecnologyassistence

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: da tecnologyassistence
Link al commento
Condividi su altri siti

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

tecnologyassistence

allora in OB35 ho inserito solo questo:

L "DB023".DB023_042

L 1

+I

T "DB023".DB023_042

se 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

poi sul la configurazione ho impostato OB35 a 19ms.

Perchè vuoi complicarti la vita ad ogni costo? :D 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 tempi

Poi se 1 impulso vale esattamente 1 cm, e hai impostato il tempo a 10ms, ti basta eseguire la divisione 60/"DB023".DB023_062

Sono 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: da Livio Orsini
Link al commento
Condividi su altri siti

tecnologyassistence

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

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

tecnologyassistence

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: da tecnologyassistence
Link al commento
Condividi su altri siti

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