Vai al contenuto
PLC Forum


Encoder Per Attivare Lampade


Messaggi consigliati

Inserito:

Buongiorno,

devo usare un encoder per attivare un cerchio di luci disposte appunto su una ruota. quindi l albero dell encoder man mano che gira accende una lampada fino ad un giro completo e tutte le lampade accese ( 360°)

ora ho a disposizione un encoder da 3600 imp giro e la cpu un s7 222 con 6 uscite a rele.

la cosa è abbastanza semplice per ora, perche ho configurato l encoder e ho scritto 6 segmenti nel main dove faccio i confronti e attivo l uscite: cioe, quando

l encoder ha fatto 600 imp attivo la prima lampada, quando ne avra fatti 1200 attivo la seconda lampada, quando sara 1800 la terza e cosi via fino a 3600imp sesta lampada accesa.

Ora volevo chiedere ma per non scrivere i sei segmenti non che sono pigro ma perche se le lampade invece di 6 sono 60 come posso fare per risolvere scrivendo pochi segmenti??? cè una soluzione?


Inserita:

Copia e incolla dei segmenti e piccole modifiche

Inserita:

Ciao Livio :) , le soluzioni piu semplici sono a volte le piu difficili da trovare, ma stavo pensando non è che si potrebbe fare qualcosa con lo scorrimento verso dx o sx o la rotazione dei bit in una word?

Inserita: (modificato)

Dipende tutto da come hai organizzato il tuo programma.

Puoi usare incrementi, scorrimenti, oppure mettere i valori di compoarazione e di uscita in una tabella ed incrementare il puntatore alla tabella ad ogni comparazione positiva.

I modi sono quasi infiniti.

Dipende dai gusti, preferenze e....sensibilità

Modificato: da Livio Orsini
Inserita:
oppure mettere i valori di compoarazione e di uscita in una tabella ed incrementare il puntatore alla tabella ad ogni comparazione positiva.

questo deve essere interessante ma non so di cosa parli... :rolleyes:

Inserita:
encoder ha fatto 600 imp attivo la prima lampada, quando ne avra fatti 1200 attivo la seconda lampada, quando sara 1800 la terza e cosi via fino a 3600imp sesta lampada accesa.

Fai due array; nel primo metti i valori del contatore (600, 1200, etc); nel secondo metti i corrispondenti valori di uscita (Q0, q1, etc. p.e.)

Poi fai una variabile ch s'incrementa, con questa individui l'elemento degli array. Partirai da 0. Carichi nel registro dello HSc il valore del primo array corrispondente alla variabile (0 per il primo)

Avrai settato lo HSc in mofo che dia un interrupt al raggiungimento del valore di comparazione tra contatore e registro. Sull'interrupt butti fuori l'uscita corrispondente all'elemeto dell'array indicato dalla variabile.

Incrementi la variabile, carichi nel registro di comparazione l'elemento dell'array puntato dal nuovovalore ed esci dalla routine d'interrupt.

Ovviamente devi fare il controllo perchè arrivato all'unltimo elemento devi ripartire da zero (buffer circolare o stack circolare).

In questo modo per qualsiasi modifica di valore o aggiunte di elemnti devi manovrare solo sui dati della tabella.

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