
Originally Posted by
ger21
While there are options available like the "Big Tex" solution, it's still two separate scripts and you would have to switch the script for the particular job.
I've come up with a solution based on several scripts and information I found (which they all seem to be based on) using the basic command substructure and added some sanity/entropy to ensure safety and reliability under any working condition.
What I personally disliked about the "Big-Tex" and other similar scripts is that they require the use of custom screen sets, what I created works with the standard screen set or any screen set you want to install it in provided it is based on the default input/data storage fields.
While I could have added the functions to employ axis relocation I think that the simple cancel so you can use the jog to X and Y coordinates is an acceptable alternative.
Turning off the spindle if it's on and starting it back up (in the direction it was turning) is a safety precaution that preserves the touch plate/probe if you get ahead of yourself.
Working from metric (G21/G71) or imperial (G20/G70) state is considered in the process so you don't have issues in either state and these states are restored when the script has finished so one script works under all scenarios.
This is what I came up with and bear in mind, I'm not a script writter and this is my first attempt at such things but due to background do have some clue how to write and comment code for later reference.
Code:
' Auto Tool Zero by Dale Walsh <dale@daleenterprise.com>
Dim Answer ' a discardable storage variable for general consumption
Dim Initial_Abs_Inc
Dim Initial_Feed_Rate
Dim Initial_G_State
Dim Initial_Machine_Coordinates_State
Dim Initial_Spindle_CW_State
Dim Initial_Spindle_CCW_State
Dim Initial_Spindle_State
Dim Initial_Tool_Offset_State
Dim Probing_Feed_Rate
Dim Guage_Block_Height
Dim Z_Probe_Pos
Initial_Feed_Rate = GetOEMDRO(818)
Initial_G_State = GetOEMDRO(819)
Initial_Machine_Coordinates_State = GetOEMLed(16)
Initial_Tool_Offset_State = GetOEMLED(28)
Initial_Abs_Inc = GetOEMDRO(48)
Guage_Block_Height = GetOEMDRO(1001)
If Guage_Block_Height <= 0 Then
Answer = MsgBox("A positive value must be entered for the Guage Block Height", 0, "Oops!!!")
Exit Sub
End If
If GetOEMDRO(824) <= 0 Then
Answer = MsgBox("A Tool has not been selected, select a tool and try again.", 0, "Oops!!!")
Exit Sub
End If
If IsSuchSignal(22) Then ' Check whether a probe input is defined..
If GetOEMLed(825) = 0 Then ' Check to see if it's already tripped
Answer = MsgBox("Do you need to Move X, Y or Z ?", 4, "Do you need to Move")
If Answer = 6 Then
Message("Tool Zeroing to Material was canceled so you can change coordinates.")
Exit Sub
End If
Answer = MsgBox("Place Sensor on work piece.", 1, "Is the Guage Block Sensor in place")
If Answer = 2 Then
Message("Tool Zeroing to Material was canceled.")
Exit Sub
End If
Message("Tool Zeroing to Material is requested.")
' Save settings for restoring later
Initial_Spindle_State = GetOEMLED(11)
Initial_Spindle_CW_State = GetOEMLED(164)
Initial_Spindle_CCW_State = GetOEMLED(165)
If Initial_Spindle_State = true Then ' Spindle is running so stop it
If Initial_Spindle_CW_State = Initial_Spindle_CCW_State Then
MsgBox("Your running spindle is misconfigured -> clockwise = " & Initial_Spindle_CW_State & " and counter-clockwise" & Initial_Spindle_CCW_State & " , please fix this.")
Exit Sub
End If
DoSpinStop()
Sleep(500)
End if
' Turn off Tool Offset if it's on
Select Case Initial_Tool_Offset_State
Case True
DoOEMButton(136)
End Select
' Turn off Machine Coordinates if on
Select Case Initial_Machine_Coordinates_State
Case True
DoOEMButton(180)
End Select
' Get current scale settings.
XScale = GetOEMDRO(59)
YScale = GetOEMDRO(60)
ZScale = GetOEMDRO(61)
' Set scale to one to probe.
Call SetOEMDRO(59, 1)
Call SetOEMDRO(60, 1)
Call SetOEMDRO(61, 1)
Select Case GetOEMLED(802)
Case true ' Metric System
Probing_Feed_Rate = 150
Probe_Travel = 250
Case false ' Imperial System
Probing_Feed_Rate = 6
Probe_Travel = 10
End Select
DoOemButton(1010)
Code "G4 P1"
' Perform the probe
Code "G90 G31 Z-" & Probe_Travel & " F" & Probing_Feed_Rate
While IsMoving()
Wend
Z_Probe_Pos = GetVar(2002)
Code "G0 Z" &Z_Probe_Pos
While IsMoving()
Wend
Call SetOemDRO(802 , Guage_Block_Height)
Code "G4 P0.500"
DoButton(24) ' Home Z-axis
While IsMoving()
Wend
Message("Tool is now zeroed to Material.")
' Restore the original settings
Code "F" &Initial_Feed_Rate
' Restore the original G mode
Select Case Initial_Abs_Inc
Case 0
Code "G90"
Case 1
Code "G91"
Case 2
Code "G92"
End Select
' Restore the original G state
Select Case Initial_G_State
Case 0
Code "G0"
Case 1
Code "G1"
End Select
Select Case Initial_Spindle_State
Case True ' Spindle is running so stop it
If Initial_Spindle_CW_State = true Then
DoSpinCW()
ElseIf Initial_Spindle_CCW_State = true Then
DoSpinCCW()
End If
End Select
' Restore the original Tool Offset state
Select Case Initial_Tool_Offset_State
Case True
DoOEMButton(136)
End Select
' Restore original Machine Coordinates State
Select Case Initial_Machine_Coordinates_State
Case True
DoOEMButton(179)
End Select
Call SetOEMDRO(59, XScale)
Call SetOEMDRO(60, YScale)
Call SetOEMDRO(61, ZScale)
Else
' Houston we have a problem
Answer = MsgBox("Guage Height Block is grounded, check connections and try again", 0, "Oh-oh")
End If
Else
Answer = MsgBox("Probe is not defined in" & Chr(13) & Chr(13) & """Config->Ports and Pins->Input Signals""" & Chr(13) & Chr(13) & Chr(9) & "configure and try again.", 0, "Oh-oh")
End If