Vai al contenuto
PLC Forum


Calcolare posizione motore S210


Crystal1995

Messaggi consigliati

Buongiorno,

vorrei chiedere a voi se avete magari un qualcosa di già fatto senza doverci perdere troppo tempo.

Dovrei eseguire un'avvitatura e al termine devo estrarre quanti gradi(°) sono stati percorsi durante l'avvitatura. 

Ovviamente l'asse è impostato con modulo 0-360° e cosi deve essere, non posso aumentare il modulo per vari motivi.

Esiste un blocco già fatto magari da Siemens o da voi che eseguo questo tipo di calcolo tenendo conto del passaggio dagli 0°?

 

Grazie mille

Modificato: da Crystal1995
Link al commento
Condividi su altri siti


dina_supertramp

Ciao, creati un bit "impulso passaggio per lo zero".
Sul fronte positivo di quel bit incrementi un contatore di 1, che poi azzererai ad ogni nuova lavorazione

Gradi percorsi = (moduli contati * valore modulo) + valore attuale di posizione 

Esempio con 5 passaggi per lo zero contati ed un modulo di 360°
Gradi percorsi = (5 * 360°) + 45.78° = 1845,78 gradi percorsi

La finezza sta nel creare il bit di impulso passaggio per lo zero, mio consiglio:
Tenerlo alto per un "giusto tempo" (questo tempo deve tenere conto del ciclo di scansione del PLC e dalle prestazioni del motion che stai usando)

(Io con Simotion D445 e clock del motion che gira a 2msec lo tengo alto per 10msec)

Mi permetto anche di consigliare ciò: Se usi oggetto tecnologico Siemens "Positioning Axis" ti consiglio di gestire il passaggio per lo zero non controllando la quota di posizione, ma andando a leggere dal TO il dato [actualModuloCycles] cioè il contatore dei cicli del modulo insito nel TO.
 

Link al commento
Condividi su altri siti

14 ore fa, acquaman ha scritto:

Che tipo si avvitatore/asse usi?

Sto usando un normalissimo S210 della siemens

14 ore fa, dina_supertramp ha scritto:

Ciao, creati un bit "impulso passaggio per lo zero".
Sul fronte positivo di quel bit incrementi un contatore di 1, che poi azzererai ad ogni nuova lavorazione

Gradi percorsi = (moduli contati * valore modulo) + valore attuale di posizione 

Esempio con 5 passaggi per lo zero contati ed un modulo di 360°
Gradi percorsi = (5 * 360°) + 45.78° = 1845,78 gradi percorsi

La finezza sta nel creare il bit di impulso passaggio per lo zero, mio consiglio:
Tenerlo alto per un "giusto tempo" (questo tempo deve tenere conto del ciclo di scansione del PLC e dalle prestazioni del motion che stai usando)

(Io con Simotion D445 e clock del motion che gira a 2msec lo tengo alto per 10msec)

Mi permetto anche di consigliare ciò: Se usi oggetto tecnologico Siemens "Positioning Axis" ti consiglio di gestire il passaggio per lo zero non controllando la quota di posizione, ma andando a leggere dal TO il dato [actualModuloCycles] cioè il contatore dei cicli del modulo insito nel TO.
 

Secondo te leggere gli impulsi dell'encoder non può essere una buona idea?

Link al commento
Condividi su altri siti

2 ore fa, Crystal1995 ha scritto:

Secondo te leggere gli impulsi dell'encoder non può essere una buona idea?

 

Sicuramente devi leggere gli impulsi dell'encoder.

Devi tenere conto della costante impulsi per giro di encoder e dell'eventuale rapporto di riduzione tra posizione dell'encoder ed albero dell'avvitatore.

 

Tanto per fare un esempio.

Encoder con costante 2048 imp/giro calettato con rapporto 1:1 sull'asse dell'avvitatore.

Misuri ad esempio 5680 impulsi; avrai percorso 2 moduli da 360° o se preferisci 4*pi radianti, più 1584 impulsi che corrispondono 278,4375°. Questo per qunato rigurda la misura.

Però se tu devi estrarre l'attrezzo dell'esatta quantità di gradi che sono stati necessari all'avvitatura, la faccenda è molto più semplice.

 

All'inizio avvitatura azzeri un contatore, di tipo up/down, che conterà gli impulsi durante tutta la fase; terminata l'avvitatura. Nel momento che inverti il moto il contatore inizierà a decontare e terminerai il moto quando il contatore sarà azzerato.

In questo modo avrai estratto l'attrezzo esattamente della medesima quantità necessaria all'avvitatura.

Link al commento
Condividi su altri siti

No semplicemente devo ricavare quanti gradi sono stati percorsi durante l'avvitatura.

1 ora fa, Livio Orsini ha scritto:

Sicuramente devi leggere gli impulsi dell'encoder.

Devi tenere conto della costante impulsi per giro di encoder e dell'eventuale rapporto di riduzione tra posizione dell'encoder ed albero dell'avvitatore.

L'unico problema nel fare questo è che gli impulsi dell'encoder quando vanno in overflow si azzerano.

Link al commento
Condividi su altri siti

dina_supertramp

Certo, puoi anche leggere gli impulsi dell'encoder e gestirli come descritto dal Sig.Orsini, ma sinceramente non capisco il perchè.

Hai un encoder, hai un qualcosa (FB, oggetti tecnologici, ecc.) che traducono gli impulsi in unità di misura utili come i gradi [°], hai già configurato un modulo di 360°, perchè non lavorare sulla posizione in [°] ma lavorare sugli impulsi? 

A me personalmente piace lasciare gli impulsi solo negli FB di gestione Encoder, in tutto il resto del codice lavoro con unità di misura utili.

Non c'è il giusto o sbagliato, sono filosofie. 

PS
Più la meccanica che ti viene data sarà approssimata, più la quota tradotta sarà imprecisa, di questo va tenuto conto...
 

 

Modificato: da dina_supertramp
Link al commento
Condividi su altri siti

18 ore fa, Crystal1995 ha scritto:

L'unico problema nel fare questo è che gli impulsi dell'encoder quando vanno in overflow si azzerano.

 

No basta gestire il riporto.

Se il contatore dispone del bit di over flow basta leggerlo e se è alto si incremente un secondo contatore e lo siazzera, idem nel deconteggio.

Se il contatore non ha il bit di riporto basta leggerlo ciclicamente e confrontare due letture consecutive. Se si ha un conteggio vicino al massimo nella prima ed un conteggio di poco sopra lo zero nella seconda, c'è stato trabocco quindi si incrementa il secondo contatore; viceversa in deconteggio: se leggerà un valore prossimo a zero e alla lettura successiva si avrà un valore prossimo al massimo, quinsi si decrementa il contatore dei riporti.

 

 

Link al commento
Condividi su altri siti

  • 1 month later...
Il 18/7/2023 alle 17:26 , dina_supertramp ha scritto:

Gradi percorsi = (moduli contati * valore modulo) + valore attuale di posizione 

Esempio con 5 passaggi per lo zero contati ed un modulo di 360°
Gradi percorsi = (5 * 360°) + 45.78° = 1845,78 gradi percorsi

La finezza sta nel creare il bit di impulso passaggio per lo zero, mio consiglio:
Tenerlo alto per un "giusto tempo" (questo tempo deve tenere conto del ciclo di scansione del PLC e dalle prestazioni del motion che stai usando)

(Io con Simotion D445 e clock del motion che gira a 2msec lo tengo alto per 10msec)

Mi permetto anche di consigliare ciò: Se usi oggetto tecnologico Siemens "Positioning Axis" ti consiglio di gestire il passaggio per lo zero non controllando la quota di posizione, ma andando a leggere dal TO il dato [actualModuloCycles] cioè il contatore dei cicli del modulo insito nel TO.
 

 

A me sembra che il modo descritto da dina_supertramp sia quello più semplice ed efficace. Se usi l'S210  col "positioning axis" ha già tutto quello che ti serve nel DB dell'asse per calcolare i gradi di avvitatura al comando. 

 

Diventerebbe:

IF "Start avvitatura" THEN

Gradi percorsi = (actualModuloCycles * module) + actualPosition 

END_IF;

 

Saluti

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