Aiuto per macro M6 torretta cambio utensile.

Sezione dedicata a Mach3
Rispondi
ciccioFranco
Junior
Junior
Messaggi: 169
Iscritto il: lunedì 10 dicembre 2012, 20:47
Località: Torino

Aiuto per macro M6 torretta cambio utensile.

Messaggio da ciccioFranco » giovedì 23 marzo 2023, 11:03

Ho realizzato una torretta cambio utensile per il mio tornio Edison retrofittato cnc con Mach3, molto semplice, che si può vedere nel nella sezione retrofitting. Sono quindi passato alla macro M6 per la rotazione degli utensili, premetto che capisco poco quasi niente di programmazione macro, ma ricercando in rete e nei vari forum, ho provato a risolvere il problema. La torretta al momento non ha nessun tipo di sensore per l'azzeramento o l'homing, azzeramento che faccio manualmente, quello che vorrei ottenere è la rotazione di 45°per ogni utensile ( sono 8 ), in realtà mi occorrerebbe una rotazione oraria di 45°+5°(per far scattare le levette di fermo) e successivamente una rotazione antioraria di 5° per l'esatto posizionamento dell'utensile. Ho trovato in rete diverse macro, alcune molto complesse, ne ho trovata una che funzionerebbe (che allego), ma ha un problema: quando imposto un numero di utensile inferiore a quello attuale, la torretta ruota in senso antiorario bloccandosi. Naturalmente ho fatto tutte le impostazioni necessarie in mach3 in General Config. Se qualcuno può aiutarmi nella compilazione o segnalarmi una macro che potrebbe essermi utile, gliene sarei veramente grato.



Sub MAIN
tool = GetSelectedTool()
NewTool = tool
Oldtool=GetCurrentTool()
If NewTool = OldTool Then
Exit Sub
End If

Code"G53 G0 X-10" 'Sposta nella posizione di cambio utensile
While Ismoving()
Wend
Code"G53 G0 Z-20"
While Ismoving()
Wend

If NewTool = 1 Then ' Controlla lo strumento #
Code"G0 A4.0"
While Ismoving()
Wend
Code"G0 A0.0" ' Sposta in CCW in posizione esatta
While Ismoving() ' attendere che il movimento si fermi
Wend
End If

If NewTool = 2 Then
Code"G0 A49"
While Ismoving()
Wend
Code"G0 A45"
While Ismoving()
Wend

End If

If NewTool = 3 Then
Code"G0 A94"
While Ismoving()
Wend
Code"G0 A90"
While Ismoving()
Wend

End If

If NewTool = 4 Then
Code"G0 A139"
While Ismoving()
Wend
Code"G0 A135"
While Ismoving()
Wend

End If

If NewTool = 5 Then
Code"G0 A184"
While Ismoving()
Wend
Code"G0 A180"
While Ismoving()
Wend

End If

If NewTool = 6 Then
Code"G0 A229"
While Ismoving()
Wend
Code"G0 A225"
While Ismoving()
Wend

End If

If NewTool = 7 Then
Code"G0 A274"
While Ismoving()
Wend
Code"G0 A270"
While Ismoving()
Wend

End If

If NewTool = 8 Then
Code"G0 A319"
While Ismoving()
Wend
Code"G0 A315"
While Ismoving()
Wend

End If

SetCurrentTool( NewTool )
End Sub

torn24
God
God
Messaggi: 5044
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da torn24 » giovedì 23 marzo 2023, 15:38

Ciao! La macro va bene e corretta, solo come viene gestito il 4 asse da mach3. Quando programmi un grado sceglie il percorso più breve, se selezioni un utensile precedente il percorso più breve è antiorario con i problemi che comporta.

Allora per evitare la cosa bisognerebbe sapere i gradi dell'utensile selezionati, confrontarli con quello attuale, poi se il percorso più breve è antiorario programmare prima uno spostamento in avanti in modo che il percorso più breve sia orario.

Provo a pensarci un po se mi viene in mente come fare ti posto la macro.
CIAO A TUTTI !

torn24
God
God
Messaggi: 5044
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da torn24 » giovedì 23 marzo 2023, 16:08

Ho provato cosi è da provare in sicurezza, potrebbe necessitare di correzioni l'ho fatta in fretta

Codice: Seleziona tutto

Sub MAIN
option base 1
dim t(8) as integer ' array contenente gradi utensili
t(1)=0
t(2)=45
t(3)=90
t(4)=135
t(5)=180
t(6)=225
t(7)=270
t(8)=315
tool = GetSelectedTool()
NewTool = tool
Oldtool=GetCurrentTool()
If NewTool = OldTool Then
Exit Sub
End If


Code"G53 G0 X-10" 'Sposta nella posizione di cambio utensile
While Ismoving()
Wend
Code"G53 G0 Z-20"
While Ismoving()
Wend

if t(NewTool)< t(Oldtool) then
gradi=t(newtool)-45 'si posiziona a meno 45 gradi da nuovo utensile.
posizioneAttuale=t(Oldtool)
while pozizioneAttuale <> gradi
posizioneAttuale=posizioneAttuale+45
if posizioneAttuale>360 then
posizioeneAttuale=pozizioneAttuale-360
end if

code "G0 A" & posizioneAttuale
while Ismoving()
wend
wend
end if

If NewTool = 1 Then ' Controlla lo strumento #
Code"G0 A4.0"
While Ismoving()
Wend
Code"G0 A0.0" ' Sposta in CCW in posizione esatta
While Ismoving() ' attendere che il movimento si fermi
Wend
End If

If NewTool = 2 Then
Code"G0 A49"
While Ismoving()
Wend
Code"G0 A45"
While Ismoving()
Wend

End If

If NewTool = 3 Then
Code"G0 A94"
While Ismoving()
Wend
Code"G0 A90"
While Ismoving()
Wend

End If

If NewTool = 4 Then
Code"G0 A139"
While Ismoving()
Wend
Code"G0 A135"
While Ismoving()
Wend

End If

If NewTool = 5 Then
Code"G0 A184"
While Ismoving()
Wend
Code"G0 A180"
While Ismoving()
Wend

End If

If NewTool = 6 Then
Code"G0 A229"
While Ismoving()
Wend
Code"G0 A225"
While Ismoving()
Wend

End If

If NewTool = 7 Then
Code"G0 A274"
While Ismoving()
Wend
Code"G0 A270"
While Ismoving()
Wend

End If

If NewTool = 8 Then
Code"G0 A319"
While Ismoving()
Wend
Code"G0 A315"
While Ismoving()
Wend

End If

SetCurrentTool( NewTool )
End Sub



CIAO A TUTTI !

torn24
God
God
Messaggi: 5044
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da torn24 » giovedì 23 marzo 2023, 16:08

Ho provato cosi è da provare in sicurezza, potrebbe necessitare di correzioni l'ho fatta in fretta

Codice: Seleziona tutto

Sub MAIN
option base 1
dim t(8) as integer ' array contenente gradi utensili
t(1)=0
t(2)=45
t(3)=90
t(4)=135
t(5)=180
t(6)=225
t(7)=270
t(8)=315
tool = GetSelectedTool()
NewTool = tool
Oldtool=GetCurrentTool()
If NewTool = OldTool Then
Exit Sub
End If


Code"G53 G0 X-10" 'Sposta nella posizione di cambio utensile
While Ismoving()
Wend
Code"G53 G0 Z-20"
While Ismoving()
Wend

if t(NewTool)< t(Oldtool) then
gradi=t(newtool)-45 'si posiziona a meno 45 gradi da nuovo utensile.
if gradi<0 then
 gradi=360-45
end if
posizioneAttuale=t(Oldtool)
while posizioneAttuale <> gradi
posizioneAttuale=posizioneAttuale+45
if posizioneAttuale>360 then
posizioneAttuale=posizioneAttuale-360
end if

code "G0 A" & posizioneAttuale
while Ismoving()
wend
wend
end if

If NewTool = 1 Then ' Controlla lo strumento #
Code"G0 A4.0"
While Ismoving()
Wend
Code"G0 A0.0" ' Sposta in CCW in posizione esatta
While Ismoving() ' attendere che il movimento si fermi
Wend
End If

If NewTool = 2 Then
Code"G0 A49"
While Ismoving()
Wend
Code"G0 A45"
While Ismoving()
Wend

End If

If NewTool = 3 Then
Code"G0 A94"
While Ismoving()
Wend
Code"G0 A90"
While Ismoving()
Wend

End If

If NewTool = 4 Then
Code"G0 A139"
While Ismoving()
Wend
Code"G0 A135"
While Ismoving()
Wend

End If

If NewTool = 5 Then
Code"G0 A184"
While Ismoving()
Wend
Code"G0 A180"
While Ismoving()
Wend

End If

If NewTool = 6 Then
Code"G0 A229"
While Ismoving()
Wend
Code"G0 A225"
While Ismoving()
Wend

End If

If NewTool = 7 Then
Code"G0 A274"
While Ismoving()
Wend
Code"G0 A270"
While Ismoving()
Wend

End If

If NewTool = 8 Then
Code"G0 A319"
While Ismoving()
Wend
Code"G0 A315"
While Ismoving()
Wend

End If

SetCurrentTool( NewTool )
End Sub



CIAO A TUTTI !

torn24
God
God
Messaggi: 5044
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da torn24 » giovedì 23 marzo 2023, 16:38

La macro non va bene è da ripensare.
Se hai ad esempio l'utensile 1 e programmi l'utensile 8, otto ha più gradi ma girerebbe in senso antiorario.
Puoi provarla ma mi sa che in alcuni casi gira in senso antiorario, ma sarebbe meglio provarla e vedere come si comporta.
CIAO A TUTTI !

Avatar utente
hellfire39
God
God
Messaggi: 3402
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da hellfire39 » giovedì 23 marzo 2023, 16:48

Premetto che non conosco Mach3, ma non sarebbe più logico verificare se c'è un modo per forzare la direzione di rotazione piuttosto che inventarsi porchette software?

P.S. dovrebbe entrarci qualcosa il parametro "Ang Short Rot on G0"

torn24
God
God
Messaggi: 5044
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da torn24 » giovedì 23 marzo 2023, 17:21

Ma il percorso più breve attivato o non attivato non impedirebbe la rotazione antioraria o la impedirebbe??
Mi viene solo il dubbio che non si può impedire cosi la rotazione antioraria, ma provare non costa nulla.
Il dubbio deriva da questo:
Se siamo a 360 e si programma 300, il percorso più breve è antiorario se attivato.
se non attivato sono a 360 programmo 300, andrebbe comunque in senso antiorario, non per il percorso più breve ma perché deve decrementare.

Almeno quello che mi mostrano i dro della demo non collegata a motori, forse sbaglio.
CIAO A TUTTI !

ciccioFranco
Junior
Junior
Messaggi: 169
Iscritto il: lunedì 10 dicembre 2012, 20:47
Località: Torino

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da ciccioFranco » giovedì 23 marzo 2023, 17:41

Ciao Torn24, intanto grazie per la tua disponibilità, il problema è proprio quello della rotazione antioraria (-5°), che dovrebbe avvenire solo per posizionare l'utensile correttamente. Ho trovato e provato anche un'altra macro (che allego), questa procede correttamente, non torna indietro se l'utensile richiamato è di numero inferiore, ma ci deve essere qualcosa nella calcolo dei gradi che fa si che non azzecca una posizione.
Grazie anche a hellfire39 per l'interessamento: ho provato in Mach3 in General Config. ad utilizzare l'opzione "Ang Short Rot on G0", ma non funziona.

la macro presa in rete:
Sub Main()

Dim newtool As Integer
Dim acttool As Integer
Dim grad_pro_tool As Integer
Dim grad_to_pin As Integer
Dim grad_backwards as Integer
Dim number_bars As Integer
Dim dist_distance As Double
Dim f_fast As Integer
Dim f_slow As Integer

If IsLoading() Then
'do nothing during load GCode
'Exit Sub
Else

grad_pro_tool = 45 'fwd angular position for one Tool Change
grad_to_pin = 10 'overtravel fwd angular position for one Tool Change
grad_backwards = 10 'reverse rotation to Pawl
f_fast = 4000 'fast forward rotational speed to Tool Change
f_slow = 2000 'slow reverse rotational speed to Pawl

newtool = GetSelectedTool() 'get new tool number specified by the most recent tool change (M6) command
acttool = GetCurrentTool() 'get actual active tool number

'let's do some basic checks

'if new tool and act tool = 0
If ((newtool = 0) and (acttool = 0)) Then
message "new tool and actual tool = 0 -> do nothing"
Sleep(500)
Exit Sub
End If

'new tool = 0
If (newtool = 0) Then
message "new tool = 0 -> do nothing"
Sleep(500)
Exit Sub
End If

'new tool = act tool
If newtool = acttool Then
message "new tool = act tool -> do nothing"
Sleep(500)
Exit Sub
End If

'check toolnumber from 1 to 8 only
If (((newtool > 8) Or (newtool < 1)) and (newtool <> 0)) Then
DoButton(3)
Sleep(500)
message " tool number " & newtool & " not in range (1-8). Abort ! "
Exit Sub
End If

'X-Axis not homed
If GetOEMLED(807) Then
DoButton(3)
Sleep(500)
message "X-Axis not referenced -> Abort !!"
Exit Sub
End If

'Z-Axis not homed
If GetOEMLED(809) Then
DoButton(3)
Sleep(500)
message "Z-Axis not referenced -> Abort !!"
Exit Sub
End If

'let's do something
message "change tool from : " +CStr(acttool) + " to " + CStr(newtool)
'1000 ms (1s) delay to allow message above to be displayed
Sleep(1000)

'Calculate the number of cycles between the tools
If newtool > acttool Then number_bars = newtool - acttool
If newtool < acttool Then number_bars = 8 - acttool + newtool
'message "number_bars = " & number_bars
'1000 ms (1s) delay to allow message above to be displayed
'Sleep(1000)

'Convert distance to steps
dist_fast = (number_bars * grad_pro_tool) + grad_to_pin

'ATC X-Axis to Tool Change position = X-axis home position
message "ATC X-Axis to Tool Change position"
Code "G90 G53 G0 X-2.0"
While IsMoving()
Sleep(15)
Wend

'ATC Z-Axis to Tool Change position = Z-axis home position
message "ATC Z-Axis to Tool Change position"
Code "G90 G53 G0 Z-2.0"
While IsMoving()
Sleep(15)
Wend

'set A-Axis zero
Code "G92 A0"
'incremental Mode , units per Minute , Exact Stop
Code "G91 G94 G61"

'A-Axis rotate forward quickly to the new tool
message "A-Axis rotate forward quickly to the new tool"
Code "G01 A" & dist_fast & "F" & f_fast
While IsMoving()
Sleep(15)
Wend

'A-Axis reverse back slowly to Pawl
message "A-Axis reverse back slowly to Pawl"
Code "G01 A-" & grad_backwards & "F" & f_slow
While IsMoving()
Sleep(15)
Wend

'anounce new tool to system
SetCurrentTool(newtool)

'back to absolute mode
Code "G90" ' back to absolute movement

Message ""
End If

Avatar utente
hellfire39
God
God
Messaggi: 3402
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da hellfire39 » giovedì 23 marzo 2023, 17:43

forse sbaglio
penso di si.

Penso dipenda da altri parametri come la funzione modulo.
Inoltre si può pensare di incrementare sempre l'angolo piuttosto che prevedere l'uso del modulo

ciccioFranco
Junior
Junior
Messaggi: 169
Iscritto il: lunedì 10 dicembre 2012, 20:47
Località: Torino

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da ciccioFranco » giovedì 23 marzo 2023, 18:33

Scusate, non so perché ma é uscita l' Emoticon con copia incolla e non me ne sono accorto subito.
La parte esatta:
'check toolnumber from 1 to 8 only
If (((newtool > 8 ) Or (newtool < 1)) and (newtool <> 0)) Then
DoButton(3)
Sleep(500)
message " tool number " & newtool & " not in range (1-8). Abort ! "
Exit Sub

torn24
God
God
Messaggi: 5044
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da torn24 » venerdì 24 marzo 2023, 7:06

La seconda macro sembra corretta e ti spiego come funziona

1)Vari messaggi di errore se utensili sono 0 o minori di zero
2)Si calcola il numero di utensili da avanzare sia se si programma un utensile minore che maggiore
3)Si calcolo i gradi moltiplicando 45 per numero utensili ricavato nel passo 2 precedente
4)Posiziona gli assi x e z in posizione cambio utensile
5) G92 A0, Mette a zero l'asse A per cui i gradi sono sempre maggiori Per questo ruota sempre in senso orario
6-7) Posiziona asse A gradi calcolati più 10 poi torna indietro di 10 gradi posizione zero.

Sistema furbo e sembra corretta, non ha errori di programmazione e neanche errori di metodo logico, è corretta cosi
CIAO A TUTTI !

ciccioFranco
Junior
Junior
Messaggi: 169
Iscritto il: lunedì 10 dicembre 2012, 20:47
Località: Torino

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da ciccioFranco » venerdì 24 marzo 2023, 8:32

Grazie mille per la collaborazione.

alessandro2969
Newbie
Newbie
Messaggi: 2
Iscritto il: giovedì 11 maggio 2023, 12:42

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da alessandro2969 » lunedì 15 maggio 2023, 13:09

Buongiorno.
Anche io ho un tornio auto costruito CNC con cambio utensile.
Sto cercando qualcuno che mi aiuti nel settaggio della pagina Tool Table ( azzeramento utensili ).
Grazie

Avatar utente
Fiveaxis
God
God
Messaggi: 5712
Iscritto il: sabato 15 gennaio 2011, 12:08
Località: Monza e Brianza

Re: Aiuto per macro M6 torretta cambio utensile.

Messaggio da Fiveaxis » giovedì 18 maggio 2023, 21:45

Ti converrebbe aprire un nuovo argomento nella sezione la mia cnc, dettagliando bene com'è il tuo tornio e magari allegando qualche immagine. Avresti più visibilità... :wink:
La macchina conta...ma la differenza la fa il "manico"!

Rispondi

Torna a “Mach3”