I have a custom made macro for the M6START that was compiled from segments of different code found here and elsewhere. I've written it to utilize the "Tool Change Location" DROs on the settings page for the (manual) tool change location (X, Y only using a SafeZ move) and probe start height (Z DRO). I have then added a couple of prompt/response pop-ups to tell what tool is being requested and to press OK when changed, then another to prompt for the Tool Zero probe (with the option to Cancel which skips that part of the macro). No additional macros necessary. When I'm all done, I press cycle start which returns to the original X and Y tool location by way of a SafeZ height then down to the original Z location then continues on with the program. I've added a button onto the Settings screen which allows me to set the Tool Change Location DROs to the current tool location so my routine is to decide where I want that location to be prior to running the program by moving to that location and touching/clicking that button.
Often times, I want to skip the tool zero routine (e.g. the first tool change command in a program when I've already installed the tool and set the height with the Tool Zero button on the main screen) or maybe do a manual routine. But now that you mentioned it, I've never really tried a manual tool probe after an M6Start macro has run, but the intent is that I would be able to select "Remember" to set the current location into the machine, jog to the tool zero location I want, press the Auto Tool Zero and then return with the "Return" button, making sure to select a SafeZ height. I guess that is something I should test more thoroughly.
For your reference, below is my M6Start and M6End code. This is Mach3 VBScript as a point of reference as I'm not sure if you're using 3 or 4. (I'm assuming 3 with the 2010 screen set from reading your posts, but we know what assuming does...
)
M6Start.M1S
' Set variables to store some current, selected and user defined values
tool = GetSelectedTool() 'Value for Tool DRO at completion of tool change
CurrentFeedMode = GetOemDRO(819) 'Get current G0/G1 state
CurrentUnitsMM = GetOemLED(802) 'Get Current MM Units state
CurrentAbsCMode = GetOemLED(48) 'Get current G90/G91 state
CurrentFeedRate = GetOemDRO(818) 'Get the current Feed Rate
ToolChangeX = GetUserDRO(1200) 'Get user defined tool change location
ToolChangeY = GetUserDRO(1201)
ToolChangeZ = GetUserDRO(1202) 'NOTE: Z will be used for Auto Tool Zero start height
GageH = GetOEMDRO( 1001 ) 'Gage Block Height
ProbeD = 20 'Depth to probe for touch plate
' Move to user defined tool change location
If CurrentUnitsMM = FALSE Then 'Ensure measurement mode is in MM for macro
Code "G21"
End If
If IsSafeZ() Then 'If SafeZ is defined,
safeZ = GetSafeZ() 'use it for positioning commands
Else
safeZ = 0 'Otherwise, moves are made at MC Z0
End If
Code" G53 G0 Z" & safeZ 'Position spindle for tool change
Code"G53 G0 X" & ToolChangeX & "Y" & ToolChangeY
While IsMoving()
Sleep(10)
Wend
PText = "Tool #" & tool & " requested. (See Setup Sheet for details.)" _
& Chr(10) & "Insert requested tool and press OK to continue."
MachMsg(PText,"Tool Change Request",0)
SetCurrentTool( tool ) 'Set the Tool DRO to the new tool number
' Auto tool zero
AutoZeroPrompt = "Place probe for Auto Tool Zero and press OK" _
& Chr(10) & "Or press CANCEL to zero tool manually"
AutoZero = MachMsg(AutoZeroPrompt,"Auto Tool Zero",1)
If AutoZero = 1 Then 'AutoZero = 1, User pressed OK
Code "G53 G0 Z" & ToolChangeZ 'ToolChangeZ is MC for starting location of probing
While IsMoving()
Sleep (10)
Wend
ZCurrent = GetOemDro(802) 'Current Z DRO
ZNew = ZCurrent - ProbeD 'Probe depth end height
Code "G90F100" 'slow feed rate to 100 MM/MIN
Code "G31 Z" &ZNew 'Start the probe move
While IsMoving()
Sleep(10)
Wend
If GetOEMLed(825) = True Then 'Probing successful
ProbeTouch = GetVar(2002) 'Exact height touch plate was contacted
Code "G1 Z" & ProbeTouch 'Go there (corrects for potential over-run)
While IsMoving()
Sleep(10)
Wend
Call SetDro(2,GageH) 'Set Z DRO to adjusted value
FinalMove = GageH + 10
Code "G0 Z" &FinalMove 'Raise probe off of touch plate
While IsMoving()
Sleep(10)
Wend
Message("Press Cycle Start to continue...")
Else 'Probe did not contact touch plate
Message("Zero not achieved - Check probe and try again manually")
End If
Else 'User selected Cancel on Auto Tool Zero prompt
Message("Zero tool manually and press Cycle Start to continue...")
End If
'RESTORE MACHINE STATE VALUES
'Feed Rate
Code "F" &CurrentFeedRate 'restore starting feed rate
'G0/G1 State
If CurrentFeedMode = "80" Then 'Machine still in initial state at start of macro
Code "G0" 'so set move mode to G0
Else
Code "G" & CurrentFeedMode 'Otherwise set move mode to previous value
End If
'G20/G21 State
If CurrentUnitsMM Then 'Units was previously set to mm
Code "G21"
Else 'Units was previously set to inches
Code "G20"
End If
'G90/G91 State
If CurrentAbsCMode Then 'System was using absolute coordinates
Code "G90"
Else 'System was using incremental coordinates
Code "G91"
End If
M6End.M1S
'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()
Code "G53 G0 Z" & SafeZ
Else
Code "G53 G0 Z0"
End If
Code "G0 A" & a' & "B" & b & "C" & c
Code "G0 X" & x & "Y" & y
Code "G0 Z" & z
Hope that helps or at least gives you some ideas to work from.
Stephen "Highspeed" Kruse