Vai al contenuto
PLC Forum


Salvataggio/ripristino quote con encoder incrementale


Cip77

Messaggi consigliati

Ciao a tutti,

solito problema da profano.

Mi trovo a dover gestire 3 encoder incrementali (collegati tramite modulo PosInput 1) per acquisire le quote dei 3 assi associati.

Al momento il modulo è configurato come "Funzionamento manuale (senza oggetto tecnologico)" con funzione di "Conteggio/Rilevamento della posizione", segnale "Encoder incrementale (A, B, N), interfaccia TTL 5V asimmetrico.

 

Apro il gate e riesco ad acquisire la quota. Mi hanno detto che nella macchina precedente (di cui non ho il progetto) all'accensione le quote visualizzate risultavano sbagliate, ma poi muovendo manualmente l'asse, appena legge la tacca di 0, le quote si ripristinano.

 

In teoria ho gli stessi encoder e in pratica, non ho capito come fare a gestire la questione in questo modo, ne se sia possibile farlo.

 

Sapete aiutarmi in qualche modo?

Grazie e ciao,

Claudio.

Link al commento
Condividi su altri siti

  • 2 weeks later...

Ciao

basta che prima di andare a leggere la quota dal tuo encoder sul fronte di primo ciclo plc imposti il valore dell'encoder salvato su DB, prima di spegnere la macchina.

Saluti

Link al commento
Condividi su altri siti

Il 26/7/2022 alle 17:00 , TravelMen ha scritto:

Ciao

basta che prima di andare a leggere la quota dal tuo encoder sul fronte di primo ciclo plc imposti il valore dell'encoder salvato su DB, prima di spegnere la macchina.

Saluti

Ciao TravelMen,

grazie per la risposta, ma sfortunatamente non va bene. Se muovono l'asse a macchina spenta, la quota viene ripristinata in un punto diverso da quella in cui è stata salvata.

Visto che la questione mi ha creato non pochi problemi, riporto la mia esperienza, in modo MOLTO sintetico.

Software utilizzato:
    - TIA Portal v.16
    
Configurazione hardware in uso:
    - cod. 6ES7215-1AG40-0XB0 - CPU 1215C DC/DC/DC
    - cod. 6ES7138-6BA01-0BA0 - TM PosInput 1 (montato su di una IM155-6 PN HF)
    - riga incrementale Heidenhain LS477C (la C sta per distance-coded reference marks)

 

Ho configurato il modulo TM PosInput 1 così:
    - Canale 0 \ Modo di funzionamento \ Selezione del modo di funzionamento per il canale 0: Funzionamento manuale (senza oggetto tecnologico)
    - Canale 0 \ Modo di funzionamento \ Selezione del modo di funzionamento per il canale 0: Conteggio/Rilevamento della posizione
    - Canale 0 \ Ingressi di conteggio \ Specifica segnali di ingresso/tipo di encoder \ Tipo di segnale : Encoder incrementale (A, B, N)
    - Canale 0 \ Ingressi di conteggio \ Parametri supplementari \ Valutazione segnale: Semplice
    - Canale 0 \ Ingressi di conteggio \ Parametri supplementari \ Frequenza di filtro: 1MHz
    - Canale 0 \ Ingressi di conteggio \ Parametri supplementari \ Comport. in caso di segnale N: Capture in caso di segnale N
    - Canale 0 \ Ingressi di conteggio \ Parametri supplementari \ Frequenza della funzione Capture: Una volta
    - Canale 0 \ Ingressi di conteggio \ Parametri supplementari \ Standard di interfaccia: TTL (5 V), asimmetrico
    - Canale 0 \ Valore di misura \ Specifica valore di misura \ Grandezza di misura: Frequenza
    - Canale 0 \ Valore di misura \ Specifica valore di misura \ Tempo di aggiornamento: 2.0 ms
    
Visto che questa tipologia di riga incrementale (come tante altre) monta un sistema di tacche di riferimento a distanza codificata, si possono sfruttare queste tacche per calcolare il riferimento assoluto.    

Ho quindi creato una funzione per rilevare e salvare i valori delle tacche, inizialmente due, poi tre (poi spiego il motivo, ma ne uso comunque due).
Alla prima accensione del PLC, eseguo la funzione per la lettura delle tacche ed una volta registrate procedo al calcolo del valore assoluto utilizzando la funzione Heidenhain seguente:

N = 1000 (costante presa da tabella Heidenhain)
Mrr = numero di impulsi tra le due tacche di riferimento
B = 2 * Mrr - N
D = la direzione di movimento della riga ( verso dx +1, verso sx -1)
Va = ( ABS(B) - SGN(B) -1 ) * N/2 + ( SGN(B) - SGN(D) )  * ABS(Mrr) / 2

Il primo problema è nato sul calcolo di Mrr. Heidenhain non dice nulla su come calcolarlo e, dopo essermi interfacciato con un loro tecnico e fatto tante prove, sono giunto alla conclusione che si calcola in questo modo:
 - se il segno della direzione è positivo: Mrr = SecondaQuota - PrimaQuota 
 - se il segno della direzione è negativo: Mrr = PrimaQuota - SecondaQuota 

Niente di difficile dopo che hai capito come funziona.
 
Proseguendo mi sono accorto di un altro problema. Numerando in progressione le tacche di riferimento (1, 2, 3, etc) incontrando una tacca pari ed una dispari, tutto funziona perfettamente. Al contrario, incontrando prima una dispari e poi una pari, la funzione Heidenhain da un risultato sbagliato. Sono ancora in attesa di una risposta dal tecnico Heidenhain.
Nel frattempo mi sono quindi dovuto creare una funzione per capire che tipo di tacca incontravo: nel primo caso utilizzo le prime due tacche incontrate senza problemi. Nel secondo caso invece faccio leggere la terza tacca usando i valori della seconda e terza tacca lette. 
A questo punto la funzione mi da sempre un valore attendibile.

Se necessitaste di approfondimenti fatemi sapere, tempo permettendo, cercherò di approfondire.

 

Ciao,
Claudio.

 

 

*****

Nota del moderatore in seguito a segnalazione.

Quando si inviano 2 messaggi a distanza di pochi minuti il sistema li unisce automaticamente in un unico messaggio.

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