Hello Guest it is April 18, 2024, 05:59:31 PM

Author Topic: Macro to carry Z offset through multiple G codes  (Read 1267 times)

0 Members and 1 Guest are viewing this topic.

Macro to carry Z offset through multiple G codes
« on: December 01, 2020, 04:03:19 AM »
I may have posted into the wrong section. I cant seem to find where to start with this one. Tried in the general section and only got moths ha

Running multiple parts on multiple Z heights. Using 2010 screenset and the auto toolchange auto start function.

 I zero the tool on each one on each offset. Run the program. First Op runs fine until the tool change/fixed plate/new tool  which is when the new Z offset for G54 is not carried over into the G55 G56 G57 and so on. Normally the second tool is much longer and creates quite a nice deep cut on the G55 (or next offset) until I hit the stop button. (did it once)

I have been looking at the tool change macros but am stumped where to have it input the different Z offsets into the other G code offsets.

Please if someone could point me to A) The macro I need to change. B) How to get that macro to work when I am running multiple offsets. and C) Well anything else I need to study. D) Or can I alter my G Code to force the toolchange offset through each different table offset?

I think its M881 which is the auto tool change macro. I even have a young programmer keen to help. But - I am not a programmer and dont know where to start. This is the tool change macro yes? And can I alter it, rename it, and have it come alive when on different offsets?

Sub Main()
' 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 XPlate, YPlate, xtoprobe, ytoprobe
Dim PlateOffset, MatOffset, TotalOffset
Dim MatOffsetYN
Dim ZClear, ClearAllow
Dim CurrentFeed
Dim CurrentAbsInc
Dim Response

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
XPlate = GetUserDRO(1811)  ' Get X Machine Coordinate location of the touch plate
YPlate = GetUserDRO(1812)  ' Get Y Machine Coordinate location of the touch plate
PlateOffset = GetUserDRO(1851)  ' Get Plate Thickness DRO
MatOffset = GetUserDRO(1815)  ' Get Material Offset DRO

If GetOEMLED(1863) Then  ' Set Flag if Material Offset is used
   MatOffsetYN=1
   Else
   MatOffsetYN=0
End If

'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)


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

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 "G90 G31 Z" & Znew

While IsMoving() ' Wait for probe move to finish
Wend

ZNew = GetVar(2002) ' 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 "G90 G31 Z" & Znew

While IsMoving()
Wend

ZNew = GetVar(2002) ' 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.

'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

' Move to fixed plate location and probe again

Code "G53 G0 X" & XPlate & " Y" & YPlate ' Rapid to the location of the plate

While IsMoving()
Wend

Code "F" & FirstProbeFeed ' Set feedrate to 10 ipm or 300mm/min

If GetOemLED(825)<>0 Then
Code "(Z-Plate Grounded Check connection and try again)"
Exit Sub ' Exit if probe is tripped
End If

Code "(Probing for Reference Position.....)" ' Puts this message in the status bar

ZPlate = (GetOEMDRO(802) - FirstProbeDist)
Code "G90 G31 Z" & Zplate ' Probe move to current Z - 6 inches

While IsMoving()
Wend

ZPlate = GetVar(2002) ' Read the touch point
Code "G0 Z" & ( ZPlate + FirstRetractDist ) ' Move up .1 inch in case of overshoot

While IsMoving()
Wend

Code "F" & SecondProbeFeed ' Set feedrate to 1 ipm or 25mm/min

ZPlate = (GetOEMDRO(802) - SecProbeDist)
Code "G90 G31 Z" & Zplate ' Probe move to current Z - .25 inches

While IsMoving()
Wend

ZPlate = GetVar(2002) ' Read the touch point
Code "G1 Z" & ZPlate ' Move back to hit point in case of overshoot

While IsMoving()
Wend

Zplatetomaterial = GetOEMDRO(802) ' Record the current coordinate of the bottom of the tool and plate

Call SetUserDRO(1813,Zplatetomaterial) ' This sets a user DRO to the difference between the top of material and top of plate
sleep(500) ' Pause for DRO to update.

Code "G0 Z" & ZClear ' Move up to the  amount specified in the Z Clearance Plane DRO

While IsMoving()
Wend

Code "G0 X" & XWork & " Y" & YWork ' Returns to the previous XY job location

While IsMoving()
Wend

Code "F" & CurrentFeed ' Reset to original feed rate


If GetOEMLED(801) Then 'ON = English Measure INCH
Code "(Material Offset is Now Calculated in Inches)" 'puts this message in the status bar
Else 'OFF = Metric Measure MM
Code "(Material Offset is Now Calculated in mm's)" 'puts this message in the status bar
End If

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 Not FileName() = "No File Loaded." Then
   If GetOEMLED(1865) Then
      MsgBox "Start Spindle, then press OK to Continue",48,"Start Spindle"
   End If
   
   DoOEMButton(1000) ' Cycle Start
End If

End Sub               
     
 
 

Offline Graham Waterworth

*
  • *
  •  2,672 2,672
  • Yorkshire Dales, England
    • View Profile
Re: Macro to carry Z offset through multiple G codes
« Reply #1 on: December 02, 2020, 01:18:27 PM »
Forget the G55 and the others, set G54 to a fixed place on the fixture and then use G52 to provide a local offset for each part.

This way you program one part and use the code in subs to do the other parts with G52 set to the fixture point of the other parts.

Example

You have 6 parts set out on a 3 x 2 grid about 50mm pitch we have 3 tools, T1 spot drill, T2 5mm drill, T3 M6 tap

Datum is X & Y rear right corner, Z face of fixture, part finished height from fixture is 10.00MM

So here is some of the best free code you will ever get.

%
O0001 (MAIN PROGRAM)

G21 G40 G00 G17
G91 G28 X0 Y0 Z0
G52 X0 Y0 Z0 (clear any offset)

N1(SPOT DRILL)
T1 M6
G54 G00 G90 G43 X0 Y0 Z50. H1 S1500 M3
G52 X0 Y0 Z10.
M98 P0002
G52 X-50. Y0 Z10.1
M98 P0002
G52 X-100. Y0 Z10.05
M98 P0002
G52 X-100.15 Y-50. Z10.02
M98 P0002
G52 X-50. Y-50. Z10.1
M98 P0002
G52 X0 Y-50. Z10.05
M98 P0002
G91 G28 Z0
M1

N2 (5MM DRILL)
T2 M6
G54 G00 G90 G43 X0 Y0 Z50. H2 S1500 M3
G52 X0 Y0 Z10.
M98 P0003
G52 X-50. Y0 Z10.1
M98 P0003
G52 X-100. Y0 Z10.05
M98 P0003
G52 X-100.15 Y-50. Z10.02
M98 P0003
G52 X-50. Y-50. Z10.1
M98 P0003
G52 X0 Y-50. Z10.05
M98 P0003
G91 G28 Z0
M1

N3(M6 X 1.0 TAP)
T3 M6
G54 G00 G90 G43 X0 Y0 Z50. H3 S250 M3
G52 X0 Y0 Z10.
M98 P0004
G52 X-50. Y0 Z10.1
M98 P0004
G52 X-100. Y0 Z10.05
M98 P0004
G52 X-100.15. Y-50. Z10.02
M98 P0004
G52 X-50. Y-50. Z10.1
M98 P0004
G52 X0 Y-50. Z10.05
M98 P0004
G91 G28 Z0
G52 X0 Y0 Z0
M30

O0002(SPOT DRILL)
G00 X-10. Y-10.
Z10.
G82 Z-2.75 R1. P500 F.1 M8
X-40.
Y-40.
X-10.
G80
G52 X0 Y0 Z0
G00 Z50.
M99

O0003(5MM DRILL)
G00 X-10. Y-10.
Z10.
G81 Z-12. R1. F.2 M8
X-40.
Y-40.
X-10.
G80
G52 X0 Y0 Z0
G00 Z50.
M99

O0004(M6 TAP)
G00 X-10. Y-10.
Z10.
G84 Z-14. R3. F250. M8
X-40.
Y-40.
X-10.
G80
G52 X0 Y0 Z0
G00 Z50.
M99
%

The output on screen in Mach3 could be messed up but will work just fine,  in Mach4 it should be perfect.

Without engineers the world stops