Crystal1995 Inserito: 18 luglio 2023 Segnala Share Inserito: 18 luglio 2023 (modificato) 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: 18 luglio 2023 da Crystal1995 Link al commento Condividi su altri siti More sharing options...
acquaman Inserita: 18 luglio 2023 Segnala Share Inserita: 18 luglio 2023 Che tipo si avvitatore/asse usi? Link al commento Condividi su altri siti More sharing options...
dina_supertramp Inserita: 18 luglio 2023 Segnala Share Inserita: 18 luglio 2023 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 More sharing options...
Crystal1995 Inserita: 19 luglio 2023 Autore Segnala Share Inserita: 19 luglio 2023 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 More sharing options...
Livio Orsini Inserita: 19 luglio 2023 Segnala Share Inserita: 19 luglio 2023 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 More sharing options...
Crystal1995 Inserita: 19 luglio 2023 Autore Segnala Share Inserita: 19 luglio 2023 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 More sharing options...
dina_supertramp Inserita: 19 luglio 2023 Segnala Share Inserita: 19 luglio 2023 (modificato) 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: 19 luglio 2023 da dina_supertramp Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 20 luglio 2023 Segnala Share Inserita: 20 luglio 2023 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 More sharing options...
Slayer90 Inserita: 6 settembre 2023 Segnala Share Inserita: 6 settembre 2023 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 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