Vai al contenuto
PLC Forum


Serie L Ed Encoder Incrementale


step-80

Messaggi consigliati

Buonasera a tutti

Inizio questa discussione per chiedervi lumi su una questione che da qualche giorno mi incuriosisce.

Ho un encoder incrementale collegato agli ingressi veloci di una cpu serie L. Premetto che sono alle prime armi con gli encoder , ma a breve dovrò realizzare una applicazione che ne prevederà l' uso e quindi per ora ci sto giocando per testarne le funzioni.

Dopo aver letto quintalate di manuali hardware e software ed essermi documentato per bene, collego il mio encoder agli ingressi e scrivo due righe di programma : per prima cosa abilito lo special merker sm1895 per aprire il gate di conteggio, poi con una semplice istruzione Dmov copio il contenuto del registro speciale sd1880( che contiene il valore attuale del conteggio) in una doppia parola non allocata( D0) per visualizzarne il valore. In realtà ci dovrebbe essere una istruzione particolare per visualizzare il conteggio senza doverlo copiare ma per il momento mi andava cosi.

Compilo, salvo e carico nella cpu; vado online e provo a ruotare a mano il mio encoder: il valore si incrementa/decrementa perfettamente...perfetto!

Il passo successivo è stato scatenare un interrupt quando il valore del conteggio coincide con un valore inserito( coincidence detection interrupt)e richiamare un sottoprogramma . Per fare questo ho dovuto chiedere una mano al supporto tecnico in quanto il manuale non è molto chiaro in merito, o meglio la questione era semplicissima ma sul manuale era inutimente complicata a mio parere, comunque grazie al preparatissimo tecnico sono riuscito nel mio intento.

Forte di questo ho fatto qualche piccola aggiunta al programmino di prima: ho creato una seconda task che invece di essere richiamata sempre( true) è richiamata dal puntatore I0 che viene a sua volta richiamato dall evento di coincidenza. Dentro questa task metto una semplice istruzione dmov dove copio il valore attuale del conteggio in un altra variabile non allocata, esempio d100 .Dopo aver impostato il valore di coincidenza( esempio 3000) mi aspetto di trovare in d100 il valore di 3000 o qualche impulso in più alla peggio, invece dopo svariate prove mi ritrovo 1-2 impulsi IN MENO ( 2998-2999)... Perchè??

Li per li penso...vabbè che i giappo sono avanti, ma predire il tempo..

Link al commento
Condividi su altri siti


Ho eseguito altre prove e senza scomodare nuovamente l'assistenza per cosi poco, sono arrivato alla pseudo- conclusione che l'ipotesi del tempo di scansione sia la più accreditata. Per curiosità ho inserito una istruzione analoga a quella inserita nella routine di interrupt , con un dmov vado a copiare il valore dello special merker sd1880 che contiene il valore del contatore veloce in una doppia parola ovviamente diversa dalla prima..questa istruzione è inserita in un sottoprogramma richiamato normalmente ed è eseguita sul fronte dello special merker 1881 che è il bit che si alza quando la coincidenza è raggiunta.

Eseguendo varie prove noto che i valori letti nelle due variabili possono assumere risultati differenti ( e questo credo sia normale, visto che una istruzione è richiamata dall'interrupt e l'altra no), in quella richiamata dall'interrupt ho sempre i miei 1-2 impulsi in meno (dipende dalla velocità con la quale ruoto l'encoder) nell'altra invece posso anche avere valore uguale al preset...dalla diagnostica vedo che il tempo di ciclo si aggira sui 600 microsecondi (sono tre istruzioni in croce dentro).

A questo punto tutto dipende dall' aggiornamento del registro sd1880 che contiene il valore del contatore veloce...

Naturalmente la mia è pura curiosità, vorrei solo capire il perchè di questa cosa, anche se mi rendo conto che è stupido salvare il valore di un contatore nel momento in cui si sa esattamente che valore ha :whistling:

Link al commento
Condividi su altri siti

  • 2 weeks later...

Sperando di fare cosa gradita, ho inserito qui un piccolo video fatto da me che mostra un esempio di camma elettronica con plc serie L e scheda assi simple motion. Quello che si vede sullo schermo del pc è il grafico della camma da me disegnata( il profilo è stato disegnato liberamente, a puro titolo esemplificativo)e si può notare in seguito come si possa passare da una camma ad un altra semplicemente caricando nel registro corrispondente il numero desiderato.

Il servo insegue in questo caso un encoder master collegato alla scheda che nello specifico è un encoder ELAP line driver 1000 impulsi/giro ( un pò pochini a dir il vero ). Esiste la possibilità di far inseguire anche un'altro servo (quello che vedete al suo fianco per esempio) , oppure un'asse virtuale ( cioè l'asse non esiste fisicamente ma si pilota in posizione, jog ecc come un asse vero) oppure un encoder che non è collegato alla scheda ma alla cpu.

Ogni critica/commento è sempre ben accetto.

Grazie

Matteo

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