...spero di essere nella sezione giusta, e mi scuso fin da subito se così non fosse...
Forse mi dilungherò un po', ma voglio fornire i dati precisi così che possiate valutare la soluzione più corretta possibile:
Ho realizzato un braccio antropomorfo a 6 gradi di libertà, ho deciso di gestire gli assi con mach3, devo dire che tutto funziona correttamente, però è sorto un problema nel momento in cui ho stabilito le posizioni di home degli assi.
Caratteristiche:
Per esigenze geometriche, la posizione home degli assi si trova in un punto di carico minimo, cioè dove il carico è "circa" in linea con il baricentro, ne consegue che la posizione home è quasi a metà della corsa di ogni singolo asse.
I proximity sono montati nel seguente modo: posizione > 0 = 0, posizione > 0 = 1, quindi in tutte le posizioni comprese fra -90 e 0 il proximity restituirà segnale 1, per tutte le posizioni comprese fra 0 e +90 il proximity restituirà 0.
Non ho voluto montare degli encoder sugli assi per evitare costi su questo esperimento, ne consegue che se per vari motivi il motore perde uno step tutti i riferimenti vanno persi; il programma prosegue ma con le quote falsate rispetto alla posizione reale.
Considerazioni:
Perdere i riferimenti mentre è in esecuzione un programma (per questo tipo di progetto) non è importante, basta che poi possa ristabilire la posizione reale rispetto la posizione Home.
Soluzione ipotizzata:
Alla conclusione di ogni singolo programma riposizionare in Home tutti gli assi
Problema:
Non posso usare il comando G28 perché: il robot torna nella posizione Home, ma quella dettata dai riferimenti, ma essendo i riferimenti persi torna in una Home falsata.
Non posso usare il comando G28.1 perché: funziona bene solo la prima volta, quando accendo mach3 posso avere due situazioni:
A) Proximity non attivo (posizione >0), l'asse si sposta in direzioni negativa fino a trovare il punto di attivazione, poi inverte la direzione ad una velocità ridotta, quando il sensore si disabilita, fissa il punto Home.
B) Proximity già attivo (posizione <0), l'asse si sposta a velocità ridotta in direzione positiva, quando il sensore si disabilita, fisssa il punto di Home.
Fino a qui tutto bene, il problema nasce quando devo riposizionare l'asse in Home, ecco cosa succede:
A) Proximity non attivo (posizione >0), l'asse si sposta in direzioni negativa fino a trovare il punto di attivazione, poi inverte la direzione ad una velocità ridotta, quando il sensore si disabilita, fissa il punto Home. (ottimo, tutto bene fa quello che deve fare)
B) Proximity già attivo (posizione <0), l'asse non si muove per niente. (e qui casca l'asino)
Non ho mai fatto una macro in VB, però mi sono messo di lena ed ho imparato a fare quei comandi che sembravano necessari per l'utilizzo di un robot antropomorfo in modo coerente alle caratteristiche del robot stesso.
Però ora credo si entri in un campo di utilizzo più "avanzato" di quello che posso affrontare data la mia conoscenza appena superficiale di VB, e sono quindi a chiedere il Vostro aiuto.
Ecco due possibili strade da percorrere:
a) inserire un comando che faccia "dimenticare" a mach3 di avere già fatto gli zeri macchina, così da poter inserire tale comando prima dell'istruzione G28.1, in questo modo il comando verrà eseguito, sempre, come se fosse la prima volta.
b) inserire un comando che esegua un jog+ fino a portare lo stato del proximity a 0, per poi eseguire l'istruzione G28.1 da manuale.
Credo che entrambe le strade siano percorribili, ma hanno problematiche diverse, la prima è "semplice" ma non so se esiste un comando per cancellare lo stato di Home eseguita, la seconda forse più complicata, credo si possa risolvere con un if...then...
... if... imput1=1 jog+x then DoOEMBotton (1002)
una cosa di questo tipo, però ho bisogno di un aiuto per una sintassi corretta, e magari implementata di ulteriori istruzioni per una corretta esecuzione.
Grazie fin da subito, e mi scuso se ho esagerato con le spiegazioni.