ho "scritto" una macro M6Start e M6End, spudoratamente copiata ed adattata da una trovata in rete, in quanto non sono un grande esperto.
Da come le leggo, sembrano fare al caso mio, il problema è che se inserisco un cambio utensile in g-code, con l'ATC attivato nel config, legge correttamente M6Start, fa tutto quello che deve fare, e poi....riparte, senza completare la procedura in M6End. Le macro le ho fatte girare con il VBeditor di Mach3 e girano, senza errori di sintassi o simili. Mi sto scervellando a capire dove è il problema

Allego il codice:
M6Start (funziona):
Codice: Seleziona tutto
'ATTENZIONE! Questo script per funzionare deve avere:
' 1) la SafeZ correttamente impostata in Config->Safe_Z Setup. Nella schermata abilitare:
' "Allow Safe_Z Moves"
' "SafeZ DRO is in Machine Coordinates"
' "Safe_Z" = X
' 2) bisogna impostare correttamente le coordinate assolute del tastatore nelle variabili TastatoreX e TastatoreY
TastatoreX = 100
TastatoreY = 200
CambioUtensileX = 600
CambioUtensileY = 50
MisuraTastatura = 0
'per sicurezza fermo il mandrino
DoSpinStop()
'Si sposta sul tastatore
Message ("Cerco il tastatore...")
code "G53 G0 Z0"
code "G53 G0 X" & TastatoreX & " Y" & TastatoreY
While IsMoving()
Sleep 200
Wend
'Cerco Switch fino a -200
code "G31 Z" & (GetParam("ZDRO")-200) & "F150"
code "G4 P1"
While IsMoving()
Sleep 200
Wend
MisuraTastatura = GetParam("ZMachine")
SetVar(1234, MisuraTastatura)
Code "G4 P1.0" 'Pausa per fargli aggiornare il valore
Message ("Misura utensile presa correttamente. Torno in posizione per cambio utensile...")
'aspetta che abbia terminato il movimento
While IsMoving()
Sleep 200
Wend
code "G53 Z-10"
code "G53 G0 X" & CambioUtensileX & " Y" & CambioUtensileY 'posizione per il cambio utensile
While IsMoving()
Sleep 200
Wend
tool = GetSelectedTool()
SetCurrentTool( tool )
Code "G4 P1.0" 'Pausa per fargli aggiornare il valore
Message ("Dopo il cambio utensile avviare la lavorazione")
Codice: Seleziona tutto
'ATTENZIONE! Questo script per funzionare deve avere:
'
' 2) bisogna impostare correttamente le coordinate del tastatore nelle variabili TastatoreX e TastatoreY.
' Saranno chiaramente le stesse inserite nella Macro M6Start;
' 3) indicare in SafeX lo spostamento dell'asse dopo la tastatura. E' una misura di sicurezza per evitare
' che ad inizio lavorazione l'untensile urti il tastatore
TastatoreX = 100
TastatoreY = 200
SafeX = 30
CurrentFeed = GetOemDRO(818) 'Memorizzazione feedrate corrente
Dim ZPartenza
Dim MisuraTastatura
Dim ZArrivo
Dim DifferenzaTraUtensili
Dim NuovaZ
'per sicurezza fermo il mandrino
DoSpinStop()
ZPartenza = GetParam("ZDRO")
code "G53 Z-10"
'si sposta sul tastatore
Message ("Cerco il 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) & "F150"
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
'debug
' MsgBox ("MisuraTastatura: " & MisuraTastatura & vbCrLf & _
' "ZArrivo: " & ZArrivo & vbCrLf & _
' "DifferenzaTraUtensili: " & DifferenzaTraUtensili & vbCrLf & _
' "NuovaZ: " & NuovaZ )
Sleep (1000)
'riporta la Z alla posizione di sicurezza
Message ("Misure effettuate, torno in posizione sicura...")
GotoSafeZ()
'aspetta che abbia terminato il movimento
While IsMoving()
Sleep 500
Wend
Code "G4 P1.00" 'pausa
code "G53 G0 X" & TastatoreX + SafeX
Sleep (500)
While IsMoving()
Sleep 500
Wend
Code "G4 P1.00" 'pausa
Call SetDro (2, NuovaZ) 'Azzeramento Z con somma altezza probe
Code "G4 P1.0" 'Attesa Aggiornamento Dro.
Code "F" &CurrentFeed 'Ritorno al feedrate Originale
Message ("Nuova Z aggiornata. Riprendo lavorazione...")
'MsgBox("NuovaZ: " & NuovaZ)
