Mickey Inserito: 20 febbraio 2008 Segnala Share Inserito: 20 febbraio 2008 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 More sharing options...
alfa84 Inserita: 20 febbraio 2008 Segnala Share Inserita: 20 febbraio 2008 che tipo di cpu?se ho ben capito hai un plc senza i contatori hardware veloci? Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 20 febbraio 2008 Segnala Share Inserita: 20 febbraio 2008 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 More sharing options...
Mickey Inserita: 20 febbraio 2008 Autore Segnala Share Inserita: 20 febbraio 2008 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 More sharing options...
JumpMan Inserita: 20 febbraio 2008 Segnala Share Inserita: 20 febbraio 2008 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 More sharing options...
Livio Orsini Inserita: 21 febbraio 2008 Segnala Share Inserita: 21 febbraio 2008 (modificato) 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: 21 febbraio 2008 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
Mickey Inserita: 21 febbraio 2008 Autore Segnala Share Inserita: 21 febbraio 2008 Si ho tralasciato di scrivere che ovviamente bisogna dividere x 288.Grazie a tutti per le info.Provo e vi faccio sapere.Ciao Link al commento Condividi su altri siti More sharing options...
Mickey Inserita: 21 febbraio 2008 Autore Segnala Share Inserita: 21 febbraio 2008 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 More sharing options...
batta Inserita: 21 febbraio 2008 Segnala Share Inserita: 21 febbraio 2008 (modificato) 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 precedentePerché 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 - ValorePrecedentee, subito dopo, memorizzi il nuovo valore per il prossimo interrupt:ValorePrecedente = ValoreAttuale Modificato: 21 febbraio 2008 da batta 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