Vai al contenuto
PLC Forum


Acquisizione Segnale Ad Impulsi


Mickey

Messaggi consigliati

Buonasera,

vi sottopongo il mio problema sperando ti trovare una soluzione assieme a voi.

Possiedo un motore DC munito di sensore di Hall il quale mi fornisce 288 impulsi ogni giro. Dopo aver condizionato il segnale portandolo a 24VDC dovrei leggerlo con un S7 200 e calcolare i giri motore. Premetto che ho letto molto sui contatori veloci ma da quanto ho capito si riferiscono a ingressi con doppia fare ed eventualmente un segnale di reset. Io non ho nulla di tutto cio'. Quello che si presenta al plc è un'onda quadra.

Come potrei trattare il mio problema?

Magari con un BGN_ITIME CAL_ITIME?

Grazie.

Saluti

Link al commento
Condividi su altri siti


Se leggi bene il manuale e/o l'help in linea vedrai chenei modi di funzionamento 3, 4 e 5 i contatori veloci necessitano di un solo segnale di clock.

Devi solo farti in timer di sistema, legato ad un interrupt, con la base tempi più comoda per misurare la tua velocità. Ad ogni scadenza della base tempi leggi il contatore "al volo", al valore letto sottrai il valore della lettura precedente e la misura di velocità è bella che fatta.

Link al commento
Condividi su altri siti

Grazie per il suggerimento. La cpu è una 224.

Ma posso azzerare il contatore ogni volta che si genera l'interrupt a tempo? Penso che non posso farlo contare all'infinito. Leggo il contatore ogni secondo e moltiplicandolo x 60 mi trovo i giri al minuto giusto?

Link al commento
Condividi su altri siti

Per facilitare la configurazione del contatore veloce puoi usare l'assistente.

Ma posso azzerare il contatore ogni volta che si genera l'interrupt a tempo? Penso che non posso farlo contare all'infinito. Leggo il contatore ogni secondo e moltiplicandolo x 60 mi trovo i giri al minuto giusto?

Si ma devi anche dividere per 288 ;)

Link al commento
Condividi su altri siti

Non c'è bisogno di azzerare il contatore, basta gestirne il trabocco.

Quando il contatore raggiunge il valore limite (tutti i bits a "1"), incremetato di un clock si azzera e ricomincia da capo. Essendo il conteggio solo avanti, se il risultato della sottrazione è <0 (negativo) significa che il contatore è traboccato. In questo caso è sufficiente complementare a"1" il valore precedente e sommare il complemento al valore attuale. Questa operazione la si deve compiere poche volte perchè il contatore è su 32 bits.

Per misurare la velocità, se è sufficiente l'aggiornamento ogni secondo, va bene la tua ipotesi ma devi dividere per il numero di impulsi al giro (288). Le operazioni ti conviente farle in real e convertire il risultato finale in intero.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Tutto perfetto.

Ho utilizzato un puntatore per salvare il valore di HC0 alternativamente in 2 celle di memoria in modo da avere il valore attuale e quello precedente. Ogni 100ms si genera un interrupt a tempo che esegue tutte le operazioni ed alla fine ottengo i giri al minuto del motore.

Un grazie a tutti voi. A molti sicuramente è parsa una sciocchezza da 2 minuti al max. ma per me è una piccola conquista.

Questo forum è sempre nei preferiti, a prescindere da quale pc uso e mi stupisco sempre della vostra cordialità e velocità nelle risposte.

Ciao.

Link al commento
Condividi su altri siti

Ho utilizzato un puntatore per salvare il valore di HC0 alternativamente in 2 celle di memoria in modo da avere il valore attuale e quello precedente

Perché hai usato un puntatore per una operazione così semplice?

Ad ogno interrupt, senza complicarsi la vita con i puntatori, ti basta eseguire le seguenti semplici operazioni:

NumeroImpulsi = ValoreAttuale - ValorePrecedente

e, subito dopo, memorizzi il nuovo valore per il prossimo interrupt:

ValorePrecedente = ValoreAttuale

Modificato: da batta
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...