-
Notifications
You must be signed in to change notification settings - Fork 5
/
AutoZero.m1s
172 lines (149 loc) · 5.94 KB
/
AutoZero.m1s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
'----------------------------------------------------------------------
' Mach3 code for 3 axis zeroing on the Triqueta
' Written by Allen Massey 2016/06/18
' Updated by James Newton and Ensari Cokur 2018/01/27
' Please test this code yourself and use at your own risk
'----------------------------------------------------------------------
' ---------------------------------------------------------------------
' These values need to be set to the exact values of your touchplate
PlateThickness = 0.67 ' Inches
PlateHole = 0.75 ' Inches
YWidth = 1.747 ' Inches
XWidth = 1.741 ' Inches
' ---------------------------------------------------------------------
ProbeFeed = 3 ' Feedrate to use for probing
MoveFeed = 30 ' Feedrate to use for movements
RetractClearance = .25 ' Distance above touch plate to retract
' ---------------------------------------------------------------------
ProbeLED = 825
CurrentFeed = GetOemDRO(FeedrateDRO) ' Save current feedrate
If IsSuchSignal(22) = 0 Then ' Be sure the Touch Probe is wired
Message( "ERROR !! No Touch probe wired" )
End ' Stop the Zero routine and exit back to Mach3
End If
' Be sure the touch plate is not starting out grounded
' Do nothing if probe is already grounded
If GetOemLed(ProbeLED) <> 0 Then
Message( "ERROR !! Touch Plate is already grounded" )
End ' Stop the Zero routine and exit back to Mach3
End If
countdown = 15
count = 40
While (countdown > 0)
If (count < 1) Then
countdown = countdown -1
If (countdown < 1) Then
Message( "ERROR: Touch NOT detected" )
End
End If
count = 40
End If
If GetOemLed(ProbeLED) <> 0 Then
Message( "Touch detected" )
While (GetOemLed(ProbeLED) <> 0)
sleep 10
Wend
countdown = 0
End If
sleep 25
count = count -1
Message( "Touch plate to probe within " & countdown & "seconds")
Wend
sleep 100 'Debounce
Message( "Touch detected and released" )
AbsMode = GetOemLED(AbsoluteModeLED) ' Save current coordinate mode
Code "G90" ' Set absolute coordinate mode
ToolDiameter = InputBox("Enter the Tool Diameter (in inches), or -2 to find in hole, or -1 to zero Z only","AutoZero", -2)
ToolRadius = ToolDiameter / 2 ' calculate the tool radius
If ToolDiameter = -1 Then ' just do the normal Z zero
Call ZeroAxis("Z", -1, PlateThickness, RetractClearance)
End If
If ToolDiameter > 0 Then ' Zero XYZ with known tool size
Message( "Auto Zeroing all for tool of radius " & ToolRadius )
Call ZeroAxis("X", -0.5, XWidth + ToolRadius, 0.1) ' axis, range, offset, retract
code "G91" ' Relative positioning
code "G1 Y1.5 F" & MoveFeed ' Move toward back of machine 1.5 inch
Call WaitForMove()
code "G1 X-0.6 F" & MoveFeed ' Move Left (to get behind edge finder .6 inches
Call WaitForMove()
Call ZeroAxis("Y", -1, YWidth + ToolRadius, 0.1) ' axis, range, offset, retract
code "G91" ' Relative positioning
code "G1 Z" & PlateThickness & " F" & MoveFeed ' Raise the Z above the top of the plate
Call WaitForMove()
code "G91" ' Relative positioning
code "G1 Y-0.7 F" & MoveFeed ' Move over the plate by moveing foward .7 inches
Call WaitForMove()
Call ZeroAxis("Z", -1, PlateThickness, RetractClearance)
Code "(X, Y and Z axis are zeroed)" ' put a message on status bar
Message ("ALL axis zeroed for " & ToolRadius & " Radius tool" )
End If
If ToolDiameter = -2 Then ' Zero XYZ with unknown tool size
Message( "Auto Zeroing all for unknown tool")
Call ZeroAxis("X", -PlateHole, 0, 0.1) ' axis, range, offset, retract
XTravel = ZeroAxis("X", PlateHole, 0, -0.1) ' axis, range, offset, retract
code "G91" ' Relative positioning
code "G1 X-" & (XTravel/2) & " F" & MoveFeed ' Move to center on X axis
Call WaitForMove()
Call ZeroAxis("Y", -PlateHole, 0, XTravel/2) ' axis, range, offset, retract
YTravel = ZeroAxis("Y", PlateHole, 0, -0.1) ' axis, range, offset, retract
ToolDiameter = PlateHole - YTravel
ToolRadius = ToolDiameter / 2 ' calculate the tool radius
code "G91" ' Relative positioning
code "G1 Y-" & (YTravel/2) & " F" & MoveFeed ' Move to center on X axis
Call WaitForMove()
Call SetDRO( 0, 0.00 )
Call SetDRO( 1, 0.00 )
Code "G4 P0.25" ' pause for val to set
code "G91" ' Relative positioning
code "G1 Z" & PlateThickness & " F" & MoveFeed ' Raise the Z above the top of the plate
Call WaitForMove()
code "G91" ' Relative positioning
code "G1 X0.7 Y0.7 F" & MoveFeed ' Move over the plate by moveing foward .7 inches
Call WaitForMove()
Call ZeroAxis("Z", -1, PlateThickness, RetractClearance)
Code "(X, Y and Z axis are zeroed)" ' put a message on status bar
Message ("ALL axis zeroed for " & ToolRadius & " Radius tool" )
End If
If ToolDiameter = 0 Then
Message ("Cancelled")
End If
If AbsMode = 0 Then
Code "G91"
End If
Code "F" & CurrentFeed ' Reset feedrate to original value
Function ZeroAxis(ByVal axis As String, ByVal range As Double, ByVal offset As Double, ByVal retract As Double) As Double
Message( "Auto Zeroing " & axis & "..." )
Select Case axis
Case "X"
axisno = 0
Case "Y"
axisno = 1
Case "Z"
axisno = 2
End Select
Call SetDRO( axisno, 0.00 )
Code "G4 P0.25" ' pause for val to set
code "G91" ' Relative positioning
code "G31 " & axis & range & " F" & ProbeFeed ' move axis a max of range at the ProbeFeed in/min
Call WaitForMove()
If ( range > 0 And ((range - 0.01) <= GetDRO(axisno)) ) Or (range < 0 And ( (range + 0.01) >= GetDRO(axisno)) ) Then
Message( "ERROR: Out of range " & range & " by " & GetDRO(axisno) )
End
End If
If offset <> 0 Then
Call SetDRO( axisno, offset ) ' Set the Z zero
Code "G4 P0.25" ' pause for val to set
End If
code "G1 " & axis & retract & " F" & MoveFeed ' Retract the axis
Call WaitForMove()
Code "(" & axis & " axis is zeroed)" ' put a message on status bar
ZeroAxis = GetDRO(axisno)
End Function
Function WaitForMove() As Boolean
While (IsMoving() = 1) And (IsEStop() = 0) ' Wait for moment to stop
Wend
If IsEStop() = 1 Then
Message("ERROR: E-STOP!")
End
End If
End Function