Sub Main()' Simple Auto Zero' Based on the macros created be Big Tex -  May 25 2010' and modified by Poppa Bear 11dec10Dim ZNew, Zplate, ZMaxRetract, ZplatetomaterialDim XWork, YWork, XMachine, YMachine, ZMachineDim XScale, YScale, ZScaleDim xtoprobe, ytoprobeDim PlateOffset, MatOffset, TotalOffsetDim MatOffsetYNDim ZClear, ClearAllowDim CurrentFeedDim CurrentAbsIncDim ResponseDIM ZORIGINALDIM ZCURRENTDIM ZDIFFERENCEDIM OFFSET2, OFFSET3, OFFSET4, OFFSET5, OFFSET6, OFFSET7, OFFSET8, OFFSET9, OFFSET10, OFFSET11, OFFSET12, OFFSET13, OFFSET14, OFFSET15, OFFSET16, OFFSET17, OFFSET18XWork = GetOEMDRO(800)  ' Get Current X Work CoordinateYWork = GetOEMDRO(801)  ' Get Current Y Work CoordinateXMachine = GetOemDRO(83)  ' Get Current X Machine CoordinateYMachine = GetOemDRO(84)  ' Get Current Y Machine CoordinateZMachine = GetOemDRO(85)   ' Get Current Z Machine CoordinatePlateOffset = GetUserDRO(1851)  ' Get Plate Thickness DROMatOffset = GetUserDRO(1815)  ' Get Material Offset DROZORIGINAL= GETVAR(5223) 	'GET CURRENT G54 Z VALUEIf GetOEMLED(1863) Then  ' Set Flag if Material Offset is used	MatOffsetYN=1	Else	MatOffsetYN=0End If'Get Axis Scale factorsZScale = GetOEMDRO(61)'Set All Axis' Scale to 1Call SetOEMDRO(61,1)Sleep(250)CurrentFeed = GetOemDRO(818)  ' Get the current feedrate to return to laterCurrentAbsInc = GetOemLED(48)   ' Get the current G90/G91 stateZclear=GetOEMDRO(1814) ' Get Z Clearance Plane from DRO'//////// the block below will set all your reusable vars depending on Inch or mm.'//////// this sets the vars so you only need ONE large block of probing code.If GetOEMLED(801) Then  ' On = English Measure INCHFirstProbeDist = 6.0 ' Probe down 6 inchesFirstRetractDist = 0.05 ' Then retract .05 inchSecProbeDist = 0.25 ' Then probe down .25 inchesFirstProbeFeed = 10.0 ' First probe feed @ 10 ipmSecondProbeFeed = 1.0 ' Second probe feed @ 1 ipmClearAllow = 0.125 ' Max Allowable Clearance = Z Machine Zero - .125inElse ' Off = Metric Measure MMFirstProbeDist = 150.0 ' Probe down 150mmFirstRetractDist = 1.0 ' Then retract 1mmSecProbeDist = 6.0 ' Then probe down 6mmFirstProbeFeed = 250.0 ' First probe feed @ 250 mm/minSecondProbeFeed = 25.0 ' Second probe feed @ 25 mm/minClearAllow = 2.0 ' Max Allowable Clearance = Z Machine Zero - 2mmEnd If'//////// Error Condition checking codeIf GetOemLED(16)<>0 Then ' Check for Machine CoordinatesCode "(Please change to working coordinates)"Exit Sub ' Exit if in Machine CoordinatesEnd IfIf GetOemLED(825)<>0 ThenCode "(Z-Plate Grounded Check connection and try again)"Exit Sub ' Exit if probe is trippedEnd IfIf PlateOffset < 0 ThenCode "(Plate Thickness < 0 - Please Correct and try again)"Exit Sub ' Exit If Plate Thickness is less than 0End IfIf MatOffsetYN=1 Then	If MatOffset < 0 Then	Code "(Warning - Material Offset < 0)"	Sleep(3000)	End IfEnd IfIf ZClear <= 0 ThenCode "(Clearance Plane Must > 0 - Please Reset)"Exit Sub ' Exit If Clearance Plane is less than  or equal to 0End IfIf MatOffsetYN=1 Then  ' If Use Material Offset = Yes	TotalOffset = PlateOffset - MatOffset	Else	TotalOffset = PlateOffsetEnd If'//////// Start Probing Code, Probe In -Z direction.'//////// The vars will be Inch or Metric from above if/else statmentCode "G90"sleep(1000) ' Pause for 1 second to give time to position probe plateCode "F" & FirstProbeFeed ' Set feedrate to 10 ipm or 300mm/minCode "(Probing for Z Zero.....)" ' Puts this message in the status barZNew = (GetOEMDro(802) - FirstProbeDist ) ' Probe move to current Z - 6 inchesCode "G31 Z" & ZnewWhile IsMoving() ' Wait for probe move to finishWendSleep(200)ZNew = GetOEMDro(802) ' Read the touch pointCode "G0 Z" & ( ZNew + FirstRetractDist ) ' Move up .05 inch or 1mm in case of overshootWhile IsMoving()WendCode "F" & SecondProbeFeed ' Set feedrate to 1 ipm or 25mm/minZNew = (GetOEMDro(802) - SecProbeDist ) ' Probe move to current Z - .25 inchesCode "G31 Z" & ZnewWhile IsMoving()WendSleep(200)ZNew = GetOEMDro(802) ' Read the touch pointCode "G0 Z" & ZNew ' Move back to hit point in case of overshootWhile IsMoving()WendCall SetOEMDRO (802, TotalOffset) ' Set the Z axis DRO to plate thicknesssleep(500) ' Pause for DRO to update.ZCURRENT= GETVAR(5223) 	'GET G54 Z VALUE AFTER SETTING NEW TOOL'Make Sure Z Clearance Plane is below Home Switch. If not, Notify User and Proceed.ZMaxRetract = Abs(GetOemDRO(85)) - ClearAllow ' Distance to Home Switch - Clearance AllowanceIf ZClear - TotalOffset > ZMaxRetract ThenResponse = MsgBox ("Warning !!!" & (Chr(13)) & "Z Clearance Plane is Above Z Axis Home Switch." & (Chr(13)) & "Press OK To Retract Safely Below Switch" & (Chr(13)) & "Or Press Cancel to Exit Operation",49,"Insufficient Z Clearance!!")	If Response = 1 Then ' If OK		ZClear = TotalOffset + ZMaxRetract ' Retract to Z Machine zero - .125in or 2mm		ElseIf Response = 2 Then ' If Cancel		Exit Sub	End IfEnd IfCode "G0 Z" & ZClear ' Retract to Z Clearance PlaneWhile IsMoving()WendCall SetOEMDRO(61,ZScale)Sleep(250)ZDIFFERENCE= ZORIGINAL-ZCURRENT 	' CALCULATE THE DIFFERENCE BETWEEN THE PREVIOUS AND CURRENT TOOLOFFSET2= (GETVAR(5243) -ZDIFFERENCE)SETVAR(5243,OFFSET2)SLEEP(200)OFFSET3= (GETVAR(5263) -ZDIFFERENCE)SETVAR(5263,OFFSET3)SLEEP(200)OFFSET4= (GETVAR(5283) -ZDIFFERENCE)SETVAR(5283,OFFSET4)SLEEP(200)OFFSET5= (GETVAR(5303) -ZDIFFERENCE)SETVAR(5303,OFFSET5)SLEEP(200)OFFSET6= (GETVAR(5323) -ZDIFFERENCE)SETVAR(5323,OFFSET6)SLEEP(200)OFFSET7= (GETVAR(5343) -ZDIFFERENCE)SETVAR(5343,OFFSET7)SLEEP(200)OFFSET8= (GETVAR(5363) -ZDIFFERENCE)SETVAR(5363,OFFSET8)SLEEP(200)OFFSET9= (GETVAR(5383) -ZDIFFERENCE)SETVAR(5383,OFFSET9)SLEEP(200)OFFSET10= (GETVAR(5403) -ZDIFFERENCE)SETVAR(5403,OFFSET10)SLEEP(200)OFFSET11= (GETVAR(5423) -ZDIFFERENCE)SETVAR(5423,OFFSET11)SLEEP(200)OFFSET12= (GETVAR(5443) -ZDIFFERENCE)SETVAR(5443,OFFSET12)SLEEP(200)OFFSET13= (GETVAR(5463) -ZDIFFERENCE)SETVAR(5463,OFFSET13)SLEEP(200)OFFSET14= (GETVAR(5483) -ZDIFFERENCE)SETVAR(5483,OFFSET14)SLEEP(200)OFFSET15= (GETVAR(5503) -ZDIFFERENCE)SETVAR(5503,OFFSET15)SLEEP(200)OFFSET16= (GETVAR(5523) -ZDIFFERENCE)SETVAR(5523,OFFSET16)SLEEP(200)OFFSET17= (GETVAR(5543) -ZDIFFERENCE)SETVAR(5543,OFFSET17)SLEEP(200)OFFSET18= (GETVAR(5563) -ZDIFFERENCE)SETVAR(5563,OFFSET18)SLEEP(200)Code "(Z axis is now zeroed and offsets adjusted.)"If CurrentAbsInc = 0 Then 'if G91 was in effect before then return to itCode "G91" End If End Sub                        