Cambio utensile semi-automatico

Sezione dedicata a Mach3
Rispondi
Avatar utente
maxetere
Newbie
Newbie
Messaggi: 21
Iscritto il: giovedì 3 gennaio 2008, 19:51
Località: L'Aquila
Contatta:

Cambio utensile semi-automatico

Messaggio da maxetere » venerdì 20 marzo 2020, 16:39

Ciao ragazzi, sto implementando su Mach3 quello che alcuni chiamano "cambio utensile semi-automatico". Praticamente l'utente si deve preoccupare solo di sostituire fisicamente l'utensile e la macchina pensa a fare tutto il resto. Qualcuno ha già implementato qualcosa del genere?
Vengo da controller Colibrì e il relativo software già aveva le macro implementate. Quello che sono abituato a fare è questo:

1) Dopo aver fissato il pezzo sul piano, fatto l'homing e azzeramento degli assi vado a toccare con la punta dell'utensile la sommità del pezzo. Azzero l'asse Z. In questo modo ho "comunicato" alla macchina la sua altezza.

2) Avvio il "ciclo" di lavoro e la macchina va sul tastatore (zero probe) fissato al piano in una determinata posizione e si abbassa fino a toccarlo. A questo punto avvia la lavorazione.

3) Arriva il momento del cambio utensile: la macchina sposta gli assi in posizione comoda per cambiare fisicamente l'utensile

4) Confermo l'avvenuta sostituzione e la macchina torna toccare il tastatore per determinare la lunghezza del nuovo utensile. Riprende la lavorazione

Spero sia tutto chiaro. Qualcuno ha già implementato qualcosa del genere?
Max

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

Re: Cambio utensile semi-automatico

Messaggio da torn24 » sabato 21 marzo 2020, 8:38

Più che cambio utensile è un azzeratore automatico, fai una ricerca sul forum per mach3 perché sono cose che sono state fatte.
CIAO A TUTTI !

Avatar utente
maxetere
Newbie
Newbie
Messaggi: 21
Iscritto il: giovedì 3 gennaio 2008, 19:51
Località: L'Aquila
Contatta:

Re: Cambio utensile semi-automatico

Messaggio da maxetere » mercoledì 25 marzo 2020, 16:56

Allora, ho lavorato in questo modo ma ho un problema da risolvere e chiedo il vostro aiuto:

1) azzero il primo utensile sul pezzo
2) avvio la lavorazione e nel G-CODE ce quando incontra l'istruzione di cambio utensile "M6 T2" richiama il codice contenuto in M6start modificato come segue:

Codice: Seleziona tutto

'M6Start
TastatoreX = 35
TastatoreY = 100
ZoffsetParam = 2
MisuraTastatura = 0

If Not GetLed (7) Then ' è referenziato X
	vxled = 1
End If

If Not GetLed (8) Then ' è referenziato Y
	vyled = 1
End If

If Not GetLed (9) Then ' è referenziato Z
	vzled = 1
End If

Tled = vxled + vyled + vzled

If Tled = 3 Then ' se non sono referenziati X, Y e Z esco

	If IsSuchSignal (22) Then           ' Il Probe è abilitato
	
		DoSpinStop()                        ' Fermo il Motore	
		
		'fa l'homing dell'asse Z
		DoButton(24) 
		'aspetta che abbia terminato il movimento
		While IsMoving()
			Sleep 500
		Wend

		'Si sposta sul tastatore
		code "G53 G0 Z0"
		code "G53 G0 X" & TastatoreX & " Y" & TastatoreY 
		
		While IsMoving()
			Sleep 500
		Wend
		
		'Cerco Switch fino a -200   
		code "G31 Z" & (GetParam("ZDRO")-200) & "F180"    
		code "G4 P1"		
		While IsMoving()
			Sleep 500
		Wend
		
		MisuraTastatura = GetParam("ZMachine")   
		SetVar(1234, MisuraTastatura)
		Code "G4 P1.0" 'Pausa per fargli aggiornare il valore
		
		'SetUserDRO(2001, GetParam("ZDRO"))  ' Trovato il segnale cioè lo switch, sovrascrivo il valore dell'UserDRO    
		                                    ' con quello letto in ZDRO
		
		'fa l'homing dell'asse Z per sicurezza
		DoButton(24) 
		'aspetta che abbia terminato il movimento
		While IsMoving()
			Sleep 500
		Wend
		
		code "G53 G0 X200 Y0" 'posizione per il cambio utensile
		
		While IsMoving()
			Sleep 500
		Wend		 
		 
		tool = GetSelectedTool()
		SetCurrentTool( tool )
		Code "G4 P1.0" 'Pausa per fargli aggiornare il valore
	End If 
          
Else
	MsgBox ("Per poter cambiare l'utensile bisognava prima aver referenziato la macchina")
End If  
con questo codice effettuo una prima tastatura dell'utensile per determinarne la lunghezza del primo utensile che memorizzo nella variabile "SetVar(1234, MisuraTastatura)", mi sarà utile dopo.
Subito sposto il mandrino in una posizione comoda per effettuare il cambo utensile e riprendo la lavorazione. A questo punto:

3) viene eseguito il codice contenuto nel file M6End che riporto di seguito:

Codice: Seleziona tutto

'REM The default script here moves the tool back To m6start If Any movement has occured during the tool change..
'x = GetToolChangeStart( 0 )
'y = GetToolChangeStart( 1 )
'z = GetToolChangeStart( 2 )
'a = GetToolChangeStart( 3 )
'b = GetToolChangeStart( 4 )
'c = GetToolChangeStart( 5 )
'if(IsSafeZ() = 1) Then
' SafeZ = GetSafeZ()
' If SafeZ > z Then StraightTraverse x, y,SafeZ, a, b, c 
' 'StraightFeed x, y, z , a, b, c
'else'
' Code "G00 X" & x & "Y" & y
'End If
TastatoreX = 35
TastatoreY = 100
Dim ZPartenza
Dim MisuraTastatura
Dim ZArrivo
Dim DifferenzaTraUtensili
Dim NuovaZ
If IsSuchSignal (22) Then ' Il Probe è abilitato
DoSpinStop() ' Fermo il Motore 
ZPartenza = GetParam("ZDRO") 
'fa l'homing dell'asse Z
DoButton(24) 
While IsMoving() 
Sleep 500
Wend
'si sposta sul tastatore
code "G53 G0 X" & TastatoreX & " Y" & TastatoreY
Sleep (500) 
While IsMoving()
Sleep 500
Wend 
' Cerco Switch fino a -200
code "G31 Z" & (GetParam("ZDRO")-200) & "F180"
Sleep (500)
While IsMoving() ' Aspetto mentre si muove
Sleep 100
Wend
'recupera la misura della tastatura avvenuta nella routine M6Start
'serve per misurare la differenza di lunghezza tra gli utensili
MisuraTastatura = GetVar(1234)
ZArrivo = GetParam("ZMachine")
Code "G4 P2.00" 'Pausa per fargli leggere il valore
DifferenzaTraUtensili = ZArrivo - MisuraTastatura
NuovaZ = ZPartenza - DifferenzaTraUtensili 
'MsgBox("NuovaZ: " & NuovaZ)
'fa l'homing dell'asse Z
DoButton(24)
'aspetta che abbia terminato il movimento
While IsMoving()
Sleep 500
Wend
Code "G4 P2.00" 'pausa
'SetOEMDRO(ZDRO, NuovaZ)
'torna al vecchio sistema di coordinate
'Code "G54 G90"
'Code "G4 P5.0" 'Pause for Dro to update 
'Code "G10 L2 P1 Z" & NuovaZ
'Code "G4 P1.0" 'Pause for Dro to update 
'imposta la nuova Z 
SetToolZ(NuovaZ)
'SetOEMDro (2, NuovaZ) 
Code "G4 P2.00" 'Pausa per fargli scrivere il valore
End If
questo codice misura la lunghezza del nuovo utensile e la confronta con la misura effettuata in precedenza e memorizzata nella variabile "MisuraTastatura" per ottenere la differenza di lunghezza tra i due utensili. Calcolo quindi il nuovo valore di Z.
Il codice contenuto in M6Start funziona perfettamente in ogni condizione mentre il secondo codice, quello di M6End, funziona bene solo in modalità debug (ossia eseguo una riga per volta nell'editor di VBScript), al contrario se avvio la lavorazione normalmente sbala (probabilmente) la memorizzazione del nuovo valore di Z che risulta essere più del doppio di quello che dovrebbe essere. Ho provato a inserire pause (Sleep) o ritardi con Code "G4" ma non ne vuole sapere.

Qualcuno ha qualche suggerimento?
Max

Rispondi

Torna a “Mach3”