I've just recently gotten into the CNC world myself and one of the first things I did was learn a good bit of VBScripting. I started with an Auto Tool Zero macro that was provided with the MPG pendant I added in to my system and progressed by studying that as well as some of the good documentation available on the ArtSoft website. However, I've now built up a nice tool change macro that will move the spindle to a specified location (user definable, more details below), prompt for the new tool and when the new tool has been acknowledged, perform and Auto Tool Zero using the touch "plate" (it's actually a cylinder with a metal surface) or allow you to perform a manual touch-off. Then when you press "Cycle Start" to continue, the M6End.m1s macro will return to the work location the machine was at prior to the T1 M6 (or T2, T3, etc. - whichever tool is called for) and continue running the part program.
This is all done using the default Mach 3 1024.set screen set configuration.
First, here is the M6Start.m1s macro I've written (you'll have to forgive the formatting, it didn't come across very clean when I pasted it in below):
' 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
Next is the slightly modified M6End.m1s file:
'The (modified) 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
Now for the specifics:
1. At the beginning of the tool change macro, the spindle will be moved to Safe-Z if the machine is configured for it or Z0 if not.
2. Then the spindle is moved to the X and Y location (in Machine Coordinates!) specified in the "Tool Change Location" DRO on the "Settings" screen.
3. The user is then prompted by way of a dialogue box to change to the specified tool and then press OK.
4. The next pop-up dialogue box prompts the user to position the touch plate and click OK, or you can click CANCEL to perform a manual touch-off.
5. The Auto Tool Zero routine in the macro uses the Z location in the Tool Change Location DROs as the starting height of the of probe movement, again in Machine Coordinates. It will perform a Feed Rate move to this height and then execute a G31 command for a depth of 20mm (my preferred unit of measure for the parts I make). The depth is defined in the variable ProbeD and can be changed to your preference.
6. Finally the spindle will be moved back up a short amount (10mm) for removing the touch plate.
All previous machine settings (G0/1, G20/21 and G90/91) are restored at the end of this macro so it should work even if you're working in inches instead of mm.
As mentioned earlier, pressing "Cycle Start" will then run the M6End macro which returns the spindle to the location it was at when the M6 macro was first called and then continue running the part program.
If you use this macro, PLEASE NOTE that the Tool Change Location DROs should be set IN MACHINE COORDINATES and configured prior to running the part program which may call the M6 command. Also, the Z location specified is the starting height IN MACHINE COORDINATES for the beginning of the probe move.
Finally, I've also added a set of Digitize LEDs on the Program Run screen, one on each side of the Auto Tool Zero button (even though this button won't be used unless you choose to "manually" set the tool zero). This is for three purposes:
1. The operator can verify that the probe is not shorted prior to the zeroing operation.
2. The operator can test the probe quickly and easily by touching the plate to the tool prior to clicking OK to begin the operation.
3. The operator has visual confirmation that the tool has touched off. The LEDs will light up briefly until the tool is raised back up, off of the touch plate.
I haven't done extensive/exhaustive testing on this macro, but it does work for my purposes. If you do use it, you are responsible for understanding its' operation and potential safety risks.
Hopefully this helps someone get a better experience with their equipment.
Lastly, I'd appreciate any feedback from you kind folks as to any consideration which I may have overlooked in programming this macro - particularly any safety concerns one may have.
Thanks,
Stephen "Highspeed" Kruse