Vai al contenuto
PLC Forum


Calcolare Il Tempo Medio Che Intercorre Tra N° Impulsi


freder82

Messaggi consigliati

Ragazzi

una domanda apparentemente semplice, sto lavorando su un S7300,

come faccio a calcolare il tempo medio che intercorre tra n impulsi ( impulsi ricevuti da una fotocellula )

in modo da calcolare la velocità di una macchina,

sapreste consigliarmi che tipo di blocco posso utilizzare per avere un fattore tempo affidabile

Grazie :ph34r:

Modificato: da freder82
Link al commento
Condividi su altri siti


Media mobile

Se T(n)=(a(0) + a(1) + ... + a(n)) / n è il tempo medio allora

T(0) = a(0)

T(n) = (T(n-1) * (n-1)/n ) + a(n) / n

La velocità media sarà allora:

V(n) = Num_Pezzi(n) / T(n)

E' abbastanza semplice costruire un FB che calcola questo.

Link al commento
Condividi su altri siti

Se il tempo tra due impulsi è relativamente lungo (direi almeno dell'odine delle decine di ms) per una misura precisa potresti usare un ingresso di interrupt (a seconda della cpu puoi trovarli a bordo oppure dover aggiungere un modulo apposito) e calcolare il tempo trascorso in OB40.

Se il tempo è dell'ordine di alcuni secondi, secondo me ti conviene usare un normalissimo timer.

Se invece la frequenza degli impulsi è più elevata ti conviene contare il numero di impulsi in un determinato tempo, utilizzando magari OB35.

Se fornisci qualche dato in più possiamo dare suggerimenti migliori.

Link al commento
Condividi su altri siti

Grazie ragazzi

la frequenza dell'impulso è circa 1 secondo e mezzo ( forse qualcosa di piu )

ma la velocita della macchina ( quindi anche la frequenza degli impulsi ) puo essere aumentata o diminuita

a seconda della produzione, pero diciamo che siamo nell'ordine di 1 secondo e mezzo

BATTA

per l'utilizzo dell'OB35 penso di aver capito cosa mi consigli, farlo girare ad es. a 100 ms e calcolare quante volte viene ciclato tra 2 impulsi, guisto?;

ma in che modo pensi di utilizzare il timer ?

Grazie ancora ;)

Link al commento
Condividi su altri siti

La soluzione più semplice a mio avviso è di utilizzare l'OB35 e contare quante volte viene eseguito fra un impulso della fotocellula e quello successivo.

Se vuoi una discreta precisione ti conviene far lavorare l'OB35 a 50ms o meno.

Se hai un tempo ciclo della CPU alto ti conviene leggere l'impulso direttamente dalla periferia.

CIAo

Beppe

PS

La frequenza è in Hz, il tempo che intercorre fra due impulsi consecutivi è il periodo ed è espresso in secodi.

Modificato: da beppeconti
Link al commento
Condividi su altri siti

La soluzione con OB35 io la adotterei per frequenze molto più elevate, nel caso cioè si leggessero almeno alcune centinaia di impulsi ad ogni ciclo di OB35.

Per avere una precisione appena decente contando il numero di cicli di OB35 effettuati tra un impulso e l'altro, dovresti impostare tempi di esecuzione piuttosto bassi.

Sbagliare di 100ms su 1500 vuol dire commettere un errore del 6,67%. L'errore diventa, ovviamente, del 3,33% passando a 50ms, 1,33% con 20ms, 0,667% con 10ms.

Devi decidere se questo errore è accettabile.

Io sconsiglierei vivamente di scendere sotto i 10ms, anche se in OB35 programmi il semplice incremento di una variabile. Se in OB35 ci sono anche altre istruzioni, magari un pò complesse, meglio se rimani almeno sui 20ms. Molto dipende, ovviamente, anche dalla cpu che utilizzi.

Se mantieni tempi di esecuzione di OB35 elevati, per non veder "ballare" troppo il risultato dovresti poi fare la media di un certo numero di letture. Più elevato sarà il numero di letture più stabile sarà il valore calcolato, ma sarà però più lento l'aggiornamento.

Se il tempo ciclo della cpu è breve (diciamo dell'ordine dei 10ms) potresti ottenere risultati soddisfacenti semplicemente calcolando il tempo tra due impulsi per differenza tra due letture dell'ora direttamente in OB1 (in millisecondi dalla mezzanotte, estratta dalla variabile OB1_DATE_TIME).

Per precisioni maggiori si ritorna al discorso dell'interrupt, sempre calcolando il tempo per differenza usando le lettura dell'ora in OB40 (sempre in millisecondi dalla mezzanotte, estratta dalla variabile OB40_DATE_TIME).

Se usi questo sistema, fai attenzione a quando passi la mezzanotte.

Link al commento
Condividi su altri siti

In alternativa puoi provare a usare la variabile OB1_PREV_CYCLE in OB1 (o in un FC qualsiasi).

Questa variabile memorizza il tempo di scansione dell'ultimo ciclo plc (in ms).

La accumuli in una DINT e quando arriva l'ingresso calcoli la velocità e azzeri la DINT.

Dovrebbe essere abbastanza preciso se il tuo plc cicla in un tempo compreso tra 10 e 100 ms (sempre meno preciso comunque del sistema indicato da batta).

Modificato: da JumpMan
Link al commento
Condividi su altri siti

altro consiglio oltre a quelli ottimi che ti hanno gia' data

se ti devi fare una media , e' sempre meglio farti un fifo con gli ultimi x valori letti

e fare la media su quelli , in questo modo e' piu' reattivo il valore che visualizzi

ciao

Luca

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