Sub Main()

' 2010 X- Y+ Probing Script
' 11/18/17 - Remove GetVar

Dim FRate1, FRate2
Dim DMax, Clearance, EdgeLength, CornerClear
Dim XStart
Dim PlateOffset, XOffset, YOffset
Dim ZeroYN
Dim ToolNo
Dim ToolD
Dim ProbeD
Dim ProbeLengthX, ProbeLengthY
Dim XNew, XHit, XEdge, X1, X2

Dim XPos, YPos, EdgeAngle, PocketXLen, PocketYLen, EdgeDelta, XCenter, YCenter

Dim XScale, YScale, ZScale

Dim CurrentAbsInc

Dim CurrentFeed

FRate1 = abs(GetUserDRO(1821))
FRate2 = abs(GetUserDRO(1822))
DMax = abs(GetUserDRO(1823))
PlateOffset = GetUserDRO(1824)
ToolNo = GetCurrentTool()
ToolD = GetToolParam(ToolNo,1)
   If GetUserDRO(1829) = 0 then	
   	ProbeD = ToolD
	Else 
	ProbeD = GetUserDRO(1829)
   End If
Clearance = abs(GetUserDRO(1825))
XOffset = GetUserDRO(1826)
YOffset = GetUserDRO(1827)
EdgeLength = abs(GetUserDRO(1828))
ProbeLengthX = GetOEMDRO(800) - DMax
XStart = GetOEMDRO(800)

CurrentFeed = GetOemDRO(818)  ' Get the current feedrate to return to later

If GetOEMLED(801) Then  ' On = English Measure INCH

CornerClear = 1.5

Else ' Off = Metric Measure MM

CornerClear = 38

End If

If GetOEMLED(1871) Then
ZeroYN=1
Else
ZeroYN=0
End If

CurrentAbsInc = GetOemLED(48)   ' Get the current G90/G91 state

'Get Axis Scale factors
XScale = GetOEMDRO(59)
YScale = GetOEMDRO(60)
ZScale = GetOEMDRO(61)

'Set All Axis' Scale to 1
Call SetOEMDRO(59,1)
Call SetOEMDRO(60,1)
Call SetOEMDRO(61,1)
Sleep(250)



'Check for Errors

If GetOemLED(16)<>0 Then ' Check for Machine Coordinates
Message "Please change to working coordinates"
Call SetOEMDRO(59,XScale)
Call SetOEMDRO(60,YScale)
Call SetOEMDRO(61,ZScale)
Sleep(250)
Exit Sub ' Exit if in Machine Coordinates
End If

If GetOemLED(825)<>0 Then
Message "Probe Grounded Check connection and try again"
Call SetOEMDRO(59,XScale)
Call SetOEMDRO(60,YScale)
Call SetOEMDRO(61,ZScale)
Sleep(250)
Exit Sub ' Exit if probe is tripped
End If


Code "G90"
Sleep(125)



	Message "Probing for X position....."
	Sleep(1000)  'Pause 1 second
	Code "F" & FRate1
	Sleep(125)
	Code "G31 X" & ProbeLengthX
	While IsMoving()
	Wend
	XHit = GetOEMDRO(800)
	X1 = XHit - ProbeD/2 - XOffset - PlateOffset   'Tool position at probe hit.


	If FRate2=0 Then
		Code "G0 X" & XHit + Clearance
		While IsMoving()
		Wend
	Else
		Code "G0 X" & XHit + ProbeD/4
		While IsMoving()
		Wend
	End If
		

	If FRate2<>0 Then
		Message "Slow Probing for X position....."
		Sleep(100)  'Pause 1/10 second
		Code "F" & Frate2
		Sleep(150)
		Code "G31 X" & ProbeLengthX
		While IsMoving()
		Wend
		XHit = GetOEMDRO(800)
		X1 = XHit - ProbeD/2 - XOffset - PlateOffset  'Tool position at probe hit.

	Code "G0 X" & XHit + Clearance
		While IsMoving()
		Wend

	End If



	If ZeroYN = 1 then 
		SetOEMDRO(800,0 + Clearance + ProbeD/2 + XOffset + PlateOffset)
		Sleep(150)
	End If

	XPos = Cstr(X1)


	PathLength = Len(XPos)
	For X = 2 To PathLength Step 1
	lstring=Mid(XPos,X,PathLength-X+1)

	If Left(lstring,1) = "." Then
		LabelLength = X+5
		Exit For
	End If

	Next X

	XPos=Left(XPos, LabelLength)

	Message "X Edge Found.........."
	Sleep(150)


	'Move around corner for Y Probing

	Code "G91"
	Code "G0 Y-" & CornerClear + 2*ProbeD
	While IsMoving
	Wend
	Code "G0 X-" & 2*ProbeD + Clearance
	While IsMoving
	Wend
	Code "G90"


	DMax = CornerClear + 3*ProbeD
	ProbeLengthY = GetOEMDRO(801) + DMax


	Message "Probing for Y position....."
	Code "F" & FRate1
	Sleep(125)
	Code "G31 Y" & ProbeLengthY
	While IsMoving()
	Wend
	YHit = GetOEMDRO(801)
	Y1 = YHit + ProbeD/2 + YOffset + PlateOffset   'Tool position at probe hit.


	If FRate2=0 Then
		Code "G0 Y" & YHit-Clearance
		While IsMoving()
		Wend
	Else
		Code "G0 Y" & YHit-ProbeD/4
		While IsMoving()
		Wend
	End If
		

	If FRate2<>0 Then
		Message "Slow Probing for Y position....."
		Sleep(100)  'Pause 1/10 second
		Code "F" & Frate2
		Sleep(150)
		Code "G31 Y" & ProbeLengthY
		While IsMoving()
		Wend
		YHit = GetOEMDRO(801)
		Y1 = YHit + ProbeD/2 + YOffset + PlateOffset  'Tool position at probe hit.

		Code "G0 Y" & YHit-Clearance
		While IsMoving()
		Wend

	End If



	YPos = Cstr(Y1)


	PathLength = Len(YPos)
	For X = 2 To PathLength Step 1
	lstring=Mid(YPos,X,PathLength-X+1)

	If Left(lstring,1) = "." Then
		LabelLength = X+5
		Exit For
	End If

	Next X

	YPos=Left(YPos, LabelLength)

	Message "Y Edge Found.........."
	Sleep(150)









SetUserLabel (3,XPos)
SetUserLabel (4,YPos)


If ZeroYN = 1 then 
SetOEMDRO(801,0 - Clearance - ProbeD/2 - YOffset - PlateOffset)
Sleep(150)
End If

Code "F" & CurrentFeed ' Reset to original feed rate


If CurrentAbsInc = 0 Then 'if G91 was in effect before then return to it
Code "G91" 
End If 

Call SetOEMDRO(59,XScale)
Call SetOEMDRO(60,YScale)
Call SetOEMDRO(61,ZScale)
Sleep(250)

If EdgeYN=1 Then
	Message "Edge Probing Complete.........."

	Else
	Message "Probing Complete.........."

End If

If GetOemLED(1872) Then SetUserLED(1870,0)


End Sub

