Compare commits

...

10 Commits

Author SHA1 Message Date
6e67025fd5 dodalem testowy main user tab 2026-01-09 10:19:36 +01:00
c8d0784db4 dodalem przelacznik debug do aaa.ngc
a.ngc przygotowany do stestowania
linuxcnc.var z zapisanymi pozycjami
2026-01-09 10:19:10 +01:00
b2c9917b97 dodalem obsluge M6 i usunalem debounce 2026-01-08 16:34:37 +01:00
e4246909ec dodalem move sidebar 2026-01-08 15:08:48 +01:00
f70b1c201f dodalem debug 2026-01-08 15:06:30 +01:00
e1105783eb poprawione tabela narzedzi na P0
ustalenie pozycji pomiaru narzedzia
pomiar spindle zero
pomiar frezu 1mm
pomiar dziala dobrze
2025-12-17 16:43:49 +01:00
e7dacf19bb pozycja tool touch i dodaqny JOG 2025-12-17 15:55:38 +01:00
734f633676 porzadki w ini 2025-12-17 15:20:26 +01:00
c4e3fa445d pierwsze uruchomienie
DZIALA
2025-12-17 15:05:58 +01:00
2a69c932d2 dodalem pliki z machine_setup_files 2025-12-17 13:56:55 +01:00
152 changed files with 43374 additions and 84 deletions

3
.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
__pycache__
*.pickle
*.pyc

View File

@@ -2,10 +2,3 @@
# This file will not be overwritten when you run stepconf again # This file will not be overwritten when you run stepconf again
net spindle-on <= spindle.0.on net spindle-on <= spindle.0.on
loadrt debounce cfg=1
addf debounce.0 base-thread
setp debounce.0.delay 100
unlinkp motion.probe-input
net probe-in debounce.0.0.in
net probe-filt debounce.0.0.out => motion.probe-input

83
custom_config.yml Normal file
View File

@@ -0,0 +1,83 @@
# example of a machine specific settings
windows:
mainwindow:
kwargs:
confirm_exit: false
data_plugins:
tooltable:
provider: qtpyvcp.plugins.tool_table:ToolTable
kwargs:
columns: TZDR
offsettable:
provider: qtpyvcp.plugins.offset_table:OffsetTable
kwargs:
columns: "XYZR"
settings:
# VTK backplot view settings
backplot.show-grid:
default_value: false
backplot.show-program-bounds:
default_value: false
backplot.show-program-labels:
default_value: false
backplot.show-program-ticks:
default_value: false
backplot.show-machine-bounds:
default_value: false
backplot.show-machine-labels:
default_value: false
backplot.show-machine-ticks:
default_value: false
backplot.perspective-view:
default_value: false
backplot.multitool-colors:
default_value: True
rack-atc-setup.user-param-1:
description: user param label name
default_value: user param 1
persistent: true
rack-atc-setup.user-param-2:
description: user param label name
default_value: user param 2
persistent: true
rack-atc-setup.user-param-3:
description: user param label name
default_value: user param 3
persistent: true
rack-atc-setup.user-param-4:
description: user param label name
default_value: user param 4
persistent: true
rack-atc-setup.user-param-5:
description: user param label name
default_value: user param 5
persistent: true
tool-setter-probe.user-param-name-1:
description: tool setter user param 1
default_value: user param 1
persistent: true
tool-setter-probe.user-param-name-2:
description: tool setter user param 2
default_value: user param 2
persistent: true

119
linuxcnc.var Normal file
View File

@@ -0,0 +1,119 @@
5161 0.000000
5162 0.000000
5163 0.000000
5164 0.000000
5165 0.000000
5166 0.000000
5167 0.000000
5168 0.000000
5169 0.000000
5181 35.000000
5182 459.000000
5183 -0.000000
5184 0.000000
5185 0.000000
5186 0.000000
5187 0.000000
5188 0.000000
5189 0.000000
5210 0.000000
5211 0.000000
5212 0.000000
5213 0.000000
5214 0.000000
5215 0.000000
5216 0.000000
5217 0.000000
5218 0.000000
5219 0.000000
5220 1.000000
5221 300.000000
5222 150.000000
5223 -10.000000
5224 0.000000
5225 0.000000
5226 0.000000
5227 0.000000
5228 0.000000
5229 0.000000
5230 0.000000
5241 0.000000
5242 0.000000
5243 0.000000
5244 0.000000
5245 0.000000
5246 0.000000
5247 0.000000
5248 0.000000
5249 0.000000
5250 0.000000
5261 199.563000
5262 97.159000
5263 -30.157000
5264 0.000000
5265 0.000000
5266 0.000000
5267 0.000000
5268 0.000000
5269 0.000000
5270 0.000000
5281 0.000000
5282 0.000000
5283 0.000000
5284 0.000000
5285 0.000000
5286 0.000000
5287 0.000000
5288 0.000000
5289 0.000000
5290 0.000000
5301 0.000000
5302 0.000000
5303 0.000000
5304 0.000000
5305 0.000000
5306 0.000000
5307 0.000000
5308 0.000000
5309 0.000000
5310 0.000000
5321 0.000000
5322 0.000000
5323 0.000000
5324 0.000000
5325 0.000000
5326 0.000000
5327 0.000000
5328 0.000000
5329 0.000000
5330 0.000000
5341 0.000000
5342 0.000000
5343 0.000000
5344 0.000000
5345 0.000000
5346 0.000000
5347 0.000000
5348 0.000000
5349 0.000000
5350 0.000000
5361 0.000000
5362 0.000000
5363 0.000000
5364 0.000000
5365 0.000000
5366 0.000000
5367 0.000000
5368 0.000000
5369 0.000000
5370 0.000000
5381 0.000000
5382 0.000000
5383 0.000000
5384 0.000000
5385 0.000000
5386 0.000000
5387 0.000000
5388 0.000000
5389 0.000000
5390 0.000000

119
linuxcnc.var.bak Normal file
View File

@@ -0,0 +1,119 @@
5161 0.000000
5162 0.000000
5163 0.000000
5164 0.000000
5165 0.000000
5166 0.000000
5167 0.000000
5168 0.000000
5169 0.000000
5181 35.000000
5182 459.000000
5183 -0.000000
5184 0.000000
5185 0.000000
5186 0.000000
5187 0.000000
5188 0.000000
5189 0.000000
5210 0.000000
5211 0.000000
5212 0.000000
5213 0.000000
5214 0.000000
5215 0.000000
5216 0.000000
5217 0.000000
5218 0.000000
5219 0.000000
5220 1.000000
5221 300.000000
5222 150.000000
5223 -10.000000
5224 0.000000
5225 0.000000
5226 0.000000
5227 0.000000
5228 0.000000
5229 0.000000
5230 0.000000
5241 0.000000
5242 0.000000
5243 0.000000
5244 0.000000
5245 0.000000
5246 0.000000
5247 0.000000
5248 0.000000
5249 0.000000
5250 0.000000
5261 199.563000
5262 97.159000
5263 -30.157000
5264 0.000000
5265 0.000000
5266 0.000000
5267 0.000000
5268 0.000000
5269 0.000000
5270 0.000000
5281 0.000000
5282 0.000000
5283 0.000000
5284 0.000000
5285 0.000000
5286 0.000000
5287 0.000000
5288 0.000000
5289 0.000000
5290 0.000000
5301 0.000000
5302 0.000000
5303 0.000000
5304 0.000000
5305 0.000000
5306 0.000000
5307 0.000000
5308 0.000000
5309 0.000000
5310 0.000000
5321 0.000000
5322 0.000000
5323 0.000000
5324 0.000000
5325 0.000000
5326 0.000000
5327 0.000000
5328 0.000000
5329 0.000000
5330 0.000000
5341 0.000000
5342 0.000000
5343 0.000000
5344 0.000000
5345 0.000000
5346 0.000000
5347 0.000000
5348 0.000000
5349 0.000000
5350 0.000000
5361 0.000000
5362 0.000000
5363 0.000000
5364 0.000000
5365 0.000000
5366 0.000000
5367 0.000000
5368 0.000000
5369 0.000000
5370 0.000000
5381 0.000000
5382 0.000000
5383 0.000000
5384 0.000000
5385 0.000000
5386 0.000000
5387 0.000000
5388 0.000000
5389 0.000000
5390 0.000000

View File

@@ -2,7 +2,7 @@
# If you make changes to this file, they will be # If you make changes to this file, they will be
# overwritten when you run stepconf again # overwritten when you run stepconf again
loadrt [KINS]KINEMATICS loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS num_dio=6 num_aio=3
loadrt hal_parport cfg="0 out" loadrt hal_parport cfg="0 out"
setp parport.0.reset-time 5000 setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0,0 loadrt stepgen step_type=0,0,0
@@ -78,7 +78,7 @@ net home-z => joint.2.home-sw-in
net estop-out <= iocontrol.0.user-enable-out net estop-out <= iocontrol.0.user-enable-out
net estop-ext => iocontrol.0.emc-enable-in net estop-ext => iocontrol.0.emc-enable-in
net tool-change <= iocontrol.0.tool-change net tool-change-request <= iocontrol.0.tool-change
net tool-changed => iocontrol.0.tool-changed net tool-change-confirmed => iocontrol.0.tool-changed
net tool-number <= iocontrol.0.tool-prep-number net tool-number <= iocontrol.0.tool-prep-number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared

View File

@@ -3,33 +3,48 @@
# overwritten when you run stepconf again # overwritten when you run stepconf again
[EMC] [EMC]
MACHINE = mayo-mill MACHINE = mayo-mill-probebasic
DEBUG = 0 DEBUG = 0
VERSION = 1.1 VERSION = 1.1
[DISPLAY] [DISPLAY]
DISPLAY = qtvcp qtdragon DISPLAY = probe_basic
PREFERENCE_FILE_PATH = WORKINGFOLDER/qtdragon.pref OPEN_FILE = ~/linuxcnc/nc_files/pb_examples/blank.ngc
EDITOR = gedit CONFIG_FILE = custom_config.yml
LOG_FILE = mayo-mill-probebasic.log
LOG_LEVEL = DEBUG
#PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files
INTRO_GRAPHIC = pbsplash.png
INTRO_TIME = 5
#ARCDIVISION = 64
#GRIDS = 10mm 20mm 50mm 100mm
GEOMETRY = xyz
INCREMENTS = JOG 10mm 1mm .1mm .01mm
POSITION_OFFSET = RELATIVE POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL POSITION_FEEDBACK = ACTUAL
ARCDIVISION = 64
GRIDS = 10mm 20mm 50mm 100mm 1in 2in 5in 10in
MAX_FEED_OVERRIDE = 1.2 MAX_FEED_OVERRIDE = 1.2
MIN_SPINDLE_OVERRIDE = 0.5
MAX_SPINDLE_OVERRIDE = 1.2 MAX_SPINDLE_OVERRIDE = 1.2
DEFAULT_LINEAR_VELOCITY = 5.00 MIN_SPINDLE_OVERRIDE = 0.5
MIN_LINEAR_VELOCITY = 0 MIN_LINEAR_VELOCITY = 0
MAX_LINEAR_VELOCITY = 50.00 MAX_LINEAR_VELOCITY = 50.00
CYCLE_TIME = 0.100 DEFAULT_LINEAR_VELOCITY = 5.00
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
PROGRAM_PREFIX = /home/cnc/linuxcnc/nc_files
INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm
[KINS] USER_TABS_PATH = user_tabs/
JOINTS = 3 USER_BUTTONS_PATH = user_buttons/
KINEMATICS = trivkins coordinates=XYZ USER_DROS_PATH = user_dro_display/
DRO_DISPLAY = xyz
# ATC tab display options, 0 = no atc tab displayed, 1 = Carousel atc display, 2 = rack atc display
ATC_TAB_DISPLAY = 0
#USER_ATC_BUTTONS_PATH = user_atc_buttons/
CYCLE_TIME = 0.100
KEYBOARD_JOG = true
KEYBOARD_JOG_SAFETY_OFF = true
TOOL_TABLE_COLUMNS = TZDR
[FILTER] [FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
@@ -40,40 +55,31 @@ gif = image-to-gcode
jpg = image-to-gcode jpg = image-to-gcode
py = python py = python
[PYTHON]
TOPLEVEL = ./python/toplevel.py
PATH_APPEND = ./python/
[TASK] [TASK]
TASK = milltask TASK = milltask
CYCLE_TIME = 0.010 CYCLE_TIME = 0.010
[RS274NGC] [RS274NGC]
PARAMETER_FILE = linuxcnc.var
# start up G/M codes when first loaded
RS274NGC_STARTUP_CODE = G17 G21 G40 G43H0 G54 G64P0.0127 G80 G90 G94 G97 M5 M9 RS274NGC_STARTUP_CODE = G17 G21 G40 G43H0 G54 G64P0.0127 G80 G90 G94 G97 M5 M9
#RS274NGC_STARTUP_CODE = F10 S300 G20 G17 G40 G49 G54 G64 P.001 G80 G90 G91.1 G92.1 G94 G97 G98
# subroutine/remap path list PARAMETER_FILE = linuxcnc.var
SUBROUTINE_PATH =\ OWORD_NARGS = 1
~/linuxcnc/nc_files/examples/ngcgui_lib:\ NO_DOWNCASE_OWORD = 1
~/linuxcnc/nc_files/examples/ngcgui_lib/utilitysubs:\ SUBROUTINE_PATH = subroutines
~/linuxcnc/nc_files/examples/remap-subroutines:\
~/linuxcnc/nc_files/examples/remap_lib
# is the sub, with is called when a error during tool change happens.
ON_ABORT_COMMAND=O <on_abort> call
# The remap code for QtVCP's versaprobe's automatic tool probe of Z # The remap code for QtVCP's versaprobe's automatic tool probe of Z
REMAP=M6 modalgroup=6 prolog=change_prolog ngc=qt_auto_probe_tool epilog=change_epilog REMAP=M6 modalgroup=6 prolog=change_prolog ngc=aaa epilog=change_epilog
# required for python remaps [HAL]
[PYTHON] HALUI = halui
# The path to start a search for user modules. ie python's sys.path.insert(0,PATH) HALFILE = mayo-mill-probebasic.hal
#PATH_PREPEND = ~/linuxcnc/nc_files/examples/remap_lib/python-stdglue/python HALFILE = custom.hal
POSTGUI_HALFILE = probe_basic_postgui.hal
# The path start point for all remap searches ie. python's sys.path.append() TWOPASS = one
PATH_APPEND = ~/linuxcnc/nc_files/examples/remap_lib/python-stdglue/python
# path to the tremap's 'oplevel file
TOPLEVEL = ~/linuxcnc/nc_files/examples/remap_lib/python-stdglue/python/toplevel.py
# set remap debug level
#LOG_LEVEL = 1000
[EMCMOT] [EMCMOT]
EMCMOT = motmod EMCMOT = motmod
@@ -81,43 +87,28 @@ COMM_TIMEOUT = 1.0
BASE_PERIOD = 100000 BASE_PERIOD = 100000
SERVO_PERIOD = 1000000 SERVO_PERIOD = 1000000
[HAL]
HALFILE = mayo-mill.hal
HALFILE = custom.hal
POSTGUI_HALFILE = postgui_call_list.hal
[TRAJ]
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 5.00
MAX_LINEAR_VELOCITY = 50.00
[EMCIO] [EMCIO]
EMCIO = io EMCIO = io
CYCLE_TIME = 0.100 CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl TOOL_TABLE = tool.tbl
[PROBE]
# pick basic probe or versa probe or remove for none
USE_PROBE = versaprobe
#USE_PROBE = basicprobe
[VERSA_TOOLSETTER]
X = 32.5
Y = 458.5
Z = -30
Z_MAX_CLEAR = -2
MAXPROBE = 40
[CHANGE_POSITION] [CHANGE_POSITION]
X = 10 X = 10
Y = 10 Y = 10
Z = -2 Z = -2
[MDI_COMMAND_LIST] [KINS]
# for macro buttons on main oage up to 10 possible JOINTS = 3
MDI_COMMAND = G0 Z25;X0 Y0;Z0, Goto\nUser\nZero KINEMATICS = trivkins coordinates=XYZ
MDI_COMMAND = G53 G0 Z0;G53 G0 X0 Y0,Goto\nMachn\nZero
[TRAJ]
AXES = 3
COORDINATES = X Y Z
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 5.00
MAX_LINEAR_VELOCITY = 50.00
#*** AXIS_X ******************************* #*** AXIS_X *******************************
[AXIS_X] [AXIS_X]
MAX_VELOCITY = 50.0 MAX_VELOCITY = 50.0

BIN
pbsplash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

210
probe_basic.var Normal file
View File

@@ -0,0 +1,210 @@
3000 0.000000
3001 0.000000
3002 0.000000
3003 0.000000
3004 0.000000
3005 0.000000
3006 0.000000
3007 0.000000
3008 0.000000
3009 0.000000
3010 0.000000
3011 0.000000
3012 0.000000
3013 0.000000
3014 0.000000
3015 0.000000
3016 0.000000
3017 0.000000
3018 0.000000
3019 0.000000
3020 0.000000
3021 0.000000
3022 0.000000
3023 0.000000
3024 0.000000
3025 0.000000
3026 0.000000
3027 0.000000
3028 0.000000
3029 0.000000
3030 0.000000
3031 0.000000
3032 0.000000
3033 0.000000
3034 0.000000
3035 0.000000
3036 0.000000
3037 0.000000
3038 0.000000
3039 0.000000
3050 0.000000
3051 0.000000
3052 0.000000
3053 0.000000
3054 0.000000
3979 0.000000
3980 6.000000
3981 0.000000
3982 0.000000
3983 0.000000
3984 0.000000
3985 0.000000
3986 0.000000
3987 0.000000
3988 0.000000
3989 0.000000
3990 0.000000
3991 0.000000
3992 0.000000
3993 0.000000
3994 0.000000
3995 0.000000
3996 0.000000
3997 0.000000
3998 0.000000
3999 0.000000
4000 0.000000
4001 0.000000
4002 0.000000
4003 0.000000
4004 0.000000
4005 0.000000
4006 0.000000
4007 0.000000
4008 0.000000
4009 0.000000
4010 0.000000
4011 0.000000
4012 0.000000
4013 0.000000
4014 0.000000
4015 0.000000
4016 0.000000
4017 0.000000
4018 0.000000
4019 0.000000
4020 0.000000
4021 0.000000
4022 0.000000
4023 0.000000
4024 0.000000
5161 0.000000
5162 0.000000
5163 0.000000
5164 0.000000
5165 0.000000
5166 0.000000
5167 0.000000
5168 0.000000
5169 0.000000
5181 0.000000
5182 0.000000
5183 0.000000
5184 0.000000
5185 0.000000
5186 0.000000
5187 0.000000
5188 0.000000
5189 0.000000
5210 0.000000
5211 0.000000
5212 0.000000
5213 0.000000
5214 0.000000
5215 0.000000
5216 0.000000
5217 0.000000
5218 0.000000
5219 0.000000
5220 1.000000
5221 0.000000
5222 0.000000
5223 0.000000
5224 0.000000
5225 0.000000
5226 0.000000
5227 0.000000
5228 0.000000
5229 0.000000
5230 0.000000
5241 0.000000
5242 0.000000
5243 0.000000
5244 0.000000
5245 0.000000
5246 0.000000
5247 0.000000
5248 0.000000
5249 0.000000
5250 0.000000
5261 0.000000
5262 0.000000
5263 0.000000
5264 0.000000
5265 0.000000
5266 0.000000
5267 0.000000
5268 0.000000
5269 0.000000
5270 0.000000
5281 0.000000
5282 0.000000
5283 0.000000
5284 0.000000
5285 0.000000
5286 0.000000
5287 0.000000
5288 0.000000
5289 0.000000
5290 0.000000
5301 0.000000
5302 0.000000
5303 0.000000
5304 0.000000
5305 0.000000
5306 0.000000
5307 0.000000
5308 0.000000
5309 0.000000
5310 0.000000
5321 0.000000
5322 0.000000
5323 0.000000
5324 0.000000
5325 0.000000
5326 0.000000
5327 0.000000
5328 0.000000
5329 0.000000
5330 0.000000
5341 0.000000
5342 0.000000
5343 0.000000
5344 0.000000
5345 0.000000
5346 0.000000
5347 0.000000
5348 0.000000
5349 0.000000
5350 0.000000
5361 0.000000
5362 0.000000
5363 0.000000
5364 0.000000
5365 0.000000
5366 0.000000
5367 0.000000
5368 0.000000
5369 0.000000
5370 0.000000
5381 0.000000
5382 0.000000
5383 0.000000
5384 0.000000
5385 0.000000
5386 0.000000
5387 0.000000
5388 0.000000
5389 0.000000
5390 0.000000

25
probe_basic_postgui.hal Normal file
View File

@@ -0,0 +1,25 @@
loadrt time
loadrt not
addf time.0 servo-thread
addf not.0 servo-thread
net prog-running not.0.in <= halui.program.is-idle
net prog-paused halui.program.is-paused => time.0.pause
net cycle-timer time.0.start <= not.0.out
net cycle-seconds qtpyvcp.timerseconds.in <= time.0.seconds
net cycle-minutes qtpyvcp.timerminutes.in <= time.0.minutes
net cycle-hours qtpyvcp.timerhours.in <= time.0.hours
# *** Time items required for Probe Basic to run ***
# ---manual tool change signals---
net tool-change-request => qtpyvcp_manualtoolchange.change
net tool-change-confirmed <= qtpyvcp_manualtoolchange.changed
net tool-number => qtpyvcp_manualtoolchange.number
# *** Probe graphic simulation trigger push probe tip ***
# net probe-in => qtpyvcp.probe-in.out
net probe-in <= qtpyvcp.probe-led.on
# *** Set line below for actual spindle readout from your hal file ***
# net spindle-rpm-filtered scale_to_rpm.out => qtpyvcp.spindle-encoder-rpm.in

View File

@@ -0,0 +1,38 @@
# These ini configuration items are required for probe basic.
# please compare contrast to your machine ini configuration
# and edit any matching existing items and/or add any items
# that are not under the corresponding ini sections.
[DISPLAY]
DISPLAY = probe_basic
OPEN_FILE = ~/linuxcnc/nc_files/pb_examples/blank.ngc
CONFIG_FILE = custom_config.yml
MAX_FEED_OVERRIDE = 2.000000 # Recommended Setting for Probe Basic
MAX_SPINDLE_OVERRIDE = 2.000000 # Recommended Setting for Probe Basic
MIN_SPINDLE_OVERRIDE = 0.500000 # Recommended Setting for Probe Basic
INTRO_GRAPHIC = pbsplash.png # Recommended Setting for Probe Basic
INTRO_TIME = 5 # Recommended Setting for Probe Basic
INCREMENTS = JOG .01in .001in .0001in # REQUIRED Setting for Probe Basic
GEOMETRY = xyz # REQUIRED Setting for Probe Basic
USER_TABS_PATH = user_tabs/ # REQUIRED Setting for Probe Basic
USER_BUTTONS_PATH = user_buttons/ # REQUIRED Setting for Probe Basic
USER_DROS_PATH = user_dro_display/ # REQUIRED Setting for Probe Basic
DRO_DISPLAY = xyz # REQUIRED Setting for Probe Basic, Options: xyz, xyza, xyzab, xyzac, xyzbc, user
# ATC tab display options, 0 = no atc tab displayed, 1 = Carousel atc display, 2 = rack atc display
ATC_TAB_DISPLAY = 0
#USER_ATC_BUTTONS_PATH = user_atc_buttons/
[RS274NGC]
RS274NGC_STARTUP_CODE = F10 S300 G20 G17 G40 G49 G54 G64 P.001 G80 G90 G91.1 G92.1 G94 G97 G98
PARAMETER_FILE = linuxcnc.var
OWORD_NARGS = 1
NO_DOWNCASE_OWORD = 1
SUBROUTINE_PATH = subroutines
[HAL]
HALUI = halui
POSTGUI_HALFILE = probe_basic_postgui.hal
TWOPASS = one
[TRAJ]
AXES = 3 # or number of axes of your machine

19
python/remap.py Normal file
View File

@@ -0,0 +1,19 @@
# This is a component of LinuxCNC
# Copyright 2011, 2012, 2013, 2014 Dewey Garrett <dgarrett@panix.com>,
# Michael Haberler <git@mah.priv.at>, Norbert Schechner <nieson@web.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
from stdglue import *

165
python/stdglue.py Normal file
View File

@@ -0,0 +1,165 @@
#NOTE:
# The legacy names *selected_pocket* and *current_pocket* actually reference
# a sequential tooldata index for tool items loaded from a tool
# table ([EMCIO]TOOL_TABLE) or via a tooldata database ([EMCIO]DB_PROGRAM)
# stdglue - canned prolog and epilog functions for the remappable builtin codes (T,M6,M61,S,F)
#
# we dont use argspec to avoid the generic error message of the argspec prolog and give more
# concise ones here
import emccanon
from linuxcnc import version
from interpreter import *
from emccanon import MESSAGE
throw_exceptions = 1
VERSION = version
# used so screens can get info.
# add this to toplevel to call it:
# import remap
# def __init__(self):
# if self.task:
# remap.build_hal(self)
def build_hal(self):
import hal
try:
h=hal.component('remapStat')
h.newpin("tool", hal.HAL_S32, hal.HAL_OUT)
h.newpin("wear", hal.HAL_S32, hal.HAL_OUT)
h.ready()
self.hal_tool_comp = h
except Exception as e:
print(e)
# REMAP=T prolog=prepare_prolog ngc=prepare epilog=prepare_epilog
# exposed parameters: #<tool> #<pocket>
def prepare_prolog(self,**words):
try:
cblock = self.blocks[self.remap_level]
if not cblock.t_flag:
self.set_errormsg("T requires a tool number")
return INTERP_ERROR
tool = cblock.t_number
if tool:
(status, pocket) = self.find_tool_pocket(tool)
if status != INTERP_OK:
self.set_errormsg("T%d: pocket not found" % (tool))
return status
else:
pocket = -1 # this is a T0 - tool unload
self.params["tool"] = tool
self.params["pocket"] = pocket
return INTERP_OK
except Exception as e:
self.set_errormsg("T%d/prepare_prolog: %s" % (int(words['t']), e))
return INTERP_ERROR
def prepare_epilog(self, **words):
try:
if not self.value_returned:
r = self.blocks[self.remap_level].executing_remap
self.set_errormsg("the %s remap procedure %s did not return a value"
% (r.name,r.remap_ngc if r.remap_ngc else r.remap_py))
return INTERP_ERROR
if self.blocks[self.remap_level].builtin_used:
#print "---------- T builtin recursion, nothing to do"
return INTERP_OK
else:
if self.return_value > 0:
self.selected_tool = int(self.params["tool"])
self.selected_pocket = int(self.params["pocket"])
emccanon.SELECT_TOOL(self.selected_tool)
return INTERP_OK
else:
self.set_errormsg("T%d: aborted (return code %.1f)" % (int(self.params["tool"]),self.return_value))
return INTERP_ERROR
except Exception as e:
self.set_errormsg("T%d/prepare_epilog: %s" % (tool,e))
return INTERP_ERROR
# REMAP=M6 modalgroup=6 prolog=change_prolog ngc=change epilog=change_epilog
# exposed parameters:
# #<tool_in_spindle>
# #<selected_tool>
# #<current_pocket>
# #<selected_pocket>
def change_prolog(self, **words):
try:
# this is relevant only when using iocontrol-v2.
if self.params[5600] > 0.0:
if self.params[5601] < 0.0:
self.set_errormsg("Toolchanger hard fault %d" % (int(self.params[5601])))
return INTERP_ERROR
print("change_prolog: Toolchanger soft fault %d" % int(self.params[5601]))
if self.selected_pocket < 0:
self.set_errormsg("M6: no tool prepared")
return INTERP_ERROR
if self.cutter_comp_side:
self.set_errormsg("Cannot change tools with cutter radius compensation on")
return INTERP_ERROR
self.params["tool_in_spindle"] = self.current_tool
self.params["selected_tool"] = self.selected_tool
self.params["current_pocket"] = self.current_pocket
self.params["selected_pocket"] = self.selected_pocket
return INTERP_OK
except Exception as e:
self.set_errormsg("M6/change_prolog: %s" % (e))
return INTERP_ERROR
def change_epilog(self, **words):
try:
if not self.value_returned:
r = self.blocks[self.remap_level].executing_remap
self.set_errormsg("the %s remap procedure %s did not return a value"
% (r.name,r.remap_ngc if r.remap_ngc else r.remap_py))
yield INTERP_ERROR
# this is relevant only when using iocontrol-v2.
if self.params[5600] > 0.0:
if self.params[5601] < 0.0:
self.set_errormsg("Toolchanger hard fault %d" % (int(self.params[5601])))
yield INTERP_ERROR
print("change_epilog: Toolchanger soft fault %d" % int(self.params[5601]))
if self.blocks[self.remap_level].builtin_used:
#print "---------- M6 builtin recursion, nothing to do"
yield INTERP_OK
else:
if self.return_value > 0.0:
# commit change
self.selected_pocket = int(self.params["selected_pocket"])
if "2.9" in VERSION:
emccanon.CHANGE_TOOL(self.selected_pocket)
elif "2.10" in VERSION:
emccanon.SELECT_TOOL(self.selected_tool)
emccanon.CHANGE_TOOL()
self.current_pocket = self.selected_pocket
self.selected_pocket = -1
self.selected_tool = -1
# cause a sync()
self.set_tool_parameters()
self.toolchange_flag = True
yield INTERP_EXECUTE_FINISH
else:
# yield to print any messages from the NGC program
yield INTERP_EXECUTE_FINISH
self.set_errormsg("M6 aborted (return code %.1f)" % (self.return_value))
yield INTERP_ERROR
except Exception as e:
self.set_errormsg("M6/change_epilog: %s" % (e))
yield INTERP_ERROR

19
python/toplevel.py Normal file
View File

@@ -0,0 +1,19 @@
# This is a component of LinuxCNC
# Copyright 2011, 2013, 2014 Dewey Garrett <dgarrett@panix.com>,
# Michael Haberler <git@mah.priv.at>, Norbert Schechner <nieson@web.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
import remap

10
subroutines/a.ngc Normal file
View File

@@ -0,0 +1,10 @@
o<a> sub
#<debug_1> = 0
M6
o100 if [#<debug_1> EQ 1]
(DEBUG, testowy napis)
o<a> endsub [1]
M2

188
subroutines/aaa.ngc Normal file
View File

@@ -0,0 +1,188 @@
o<aaa> sub
#<print_debug> = 0
o10 if [#<print_debug> EQ 1]
(DEBUG, from tool_in_spindle=#<tool_in_spindle> to selected_tool=#<selected_tool>)
o10 endif
; -------------------------------------
; --- Begin Initial data gathering ----
; -------------------------------------
#<fast_probe_fr> = #3004 (set from probe screen fast probe feed rate)
#<slow_probe_fr> = #3005 (set from probe screen slow probe feedrate)
#<traverse_fr> = #3006 (set from probe screen traverse probe feedrate)
#<z_max_travel> = #3007 (max z distance the tool travels before erroring out if not contact is made)
#<xy_max_travel> = #3008 (max xy distance the tool travels before erroring out if not contact is made)
#<retract_distance> = #3009 (distance the tool retracts after making contact during fast feed mode)
#<spindle_zero_height> = #3010 (G53 distance from home to spindle nose triggering point on touch plate)
#<tool_diameter_probe_mode> = #3011 (activates the tool diameter probe subroutine section)
#<tool_diameter_offset_mode> = #3012 (activates the tool diameter offset position for probe subroutine section)
#<tool_setter_offset_direction> = #3013 (sets tool setter offset direction to move tool)
#<tool_diameter> = #5410 (current tool's diameter used for offseting probe position in x axis)
G92.1 (Cancel G92 offset)
M50 P0
#<tool_touch_x_coords> = #5181
#<tool_touch_y_coords> = #5182
#<tool_touch_z_coords> = #5183
#<tool_change_x_coords> = 10
#<tool_change_y_coords> = 10
#<tool_change_z_coords> = -10
#<tool_radius_offset> = [#<tool_diameter> / 2]
#<left_offset_probing_position> = [#<tool_touch_x_coords> - #<tool_radius_offset>]
#<right_offset_probing_position> = [#<tool_touch_x_coords> + #<tool_radius_offset>]
#<front_offset_probing_position> = [#<tool_touch_y_coords> - #<tool_radius_offset>]
#<back_offset_probing_position> = [#<tool_touch_y_coords> + #<tool_radius_offset>]
#<tool> = #<selected_tool>
#<pocket> = #<selected_pocket>
#<local_start_x> = #<_x>
#<local_start_y> = #<_y>
#<local_start_z> = #<_z>
#<zworkoffset> = [#[5203 + #5220 * 20] + #5213 * #5210]
;#<offset_z> = #5422 ;Stores the offset of the current Z coordinate.
o100 if [#<tool_diameter_offset_mode> EQ 1]
o101 if [#<tool_setter_offset_direction> EQ 0]
#<tool_touch_x_coords> = #<left_offset_probing_position>
o101 else if [#<tool_setter_offset_direction> EQ 1]
#<tool_touch_x_coords> = #<right_offset_probing_position>
o101 else if [#<tool_setter_offset_direction> EQ 2]
#<tool_touch_y_coords> = #<front_offset_probing_position>
o101 else if [#<tool_setter_offset_direction> EQ 3]
#<tool_touch_y_coords> = #<back_offset_probing_position>
o101 endif
o100 endif
; -------------------------------------
; --- End Initial Data Gathering ----
; -------------------------------------
; -------------------------------------
; --- Begin Initial Safety Checks ----
; -------------------------------------
; we must execute this only in the milltask interpreter
; or preview will break, so test for '#<_task>' which is 1 for
; the milltask interpreter and 0 in the UI's
o110 if [#<_task> EQ 0]
(debug, Task is Null)
o110 return [999]
o110 endif
; check we are in right mode
o120 if [#<_metric_machine>]
o125 if [#<_imperial>]
(MSG, Auto Tool probe error: not in G21 mode )
o125 return [-3] ; indicate probe contact failure to epilog
o125 endif
o120 else
o125 if [#<_imperial> EQ 0]
(MSG, Auto Tool probe error: not in G20 mode )
o125 return [-3] ; indicate probe contact failure to epilog
o125 endif
o120 endif
; -------------------------------------
; --- End Initial Safety Checks ----
; -------------------------------------
; -------------------------------------
; --- Begin Physical Tool Change ----
; -------------------------------------
G90 (set absolute coordinates)
G53 G0 F[#<traverse_fr>] Z0 (move to z0 home position)
o200 if [#<_current_tool> NE #<tool>]
; then move to change position
G53 G0 F[#<traverse_fr>] X#<tool_change_x_coords> Y#<tool_change_y_coords>
G53 G0 F[#<traverse_fr>] Z#<tool_change_z_coords>
o200 endif
;cancel tool offset mode
G49
; using the code being remapped here means 'use builtin behaviour'
; ie, this is not a recursive call to this program, but calls the
; un-remapped M6 processing
; That processing includes actually sending the window to the user
; to press OK when they have completed the tool change.
M6
; -------------------------------------
; ------ End Physical Tool Change ----
; -------------------------------------
; -------------------------------------
; ------ Begin Safety Checks for Tool Offset Measurement ----
; -------------------------------------
; -------------------------------------
; ------ Begin Tool Offset Measurement ----
; -------------------------------------
G90 (set absolute coordinates)
G53 G1 F[#<traverse_fr>] Z0 (move to z0 home position)
G53 G1 F[#<traverse_fr>] X#<tool_touch_x_coords> Y#<tool_touch_y_coords>
G53 G1 F[#<traverse_fr>] Z#<tool_touch_z_coords>
#<offset_z> = #5422 ;Stores the offset of the current Z coordinate.
;switch to relative distance mode for probe moves
G91
F #<fast_probe_fr>
G38.2 Z-[#<z_max_travel>] (fast tool probe)
#<z_fast_probe> = #5063 (save probe result of fast probe to parameters)
G1 F[#<traverse_fr>] Z[#<retract_distance>] (retract tool retract distance amount)
o400 if [#5070 EQ 0]
G90
o400 return [-3] ; indicate probe contact failure to epilog
o400 endif
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o410 if [#<slow_probe_fr> GT 0]
(Initiate Slow Z- Probe)
G91
F[#<slow_probe_fr>] (set probe slow feedrate)
G38.2 Z-[#<retract_distance> * 2] (slow tool probe)
#<z_slow_probe> = #5063
o410 endif
o420 if [#5070 EQ 0]
G90
o420 return [-3] ; indicate probe contact failure to epilog
o420 endif
(Tool Diameter Probe Mode Section, User must define this section as needed)
o430 if [#<tool_diameter_probe_mode> EQ 1]
(DEBUG, Tool Diameter Probing is Not Defined in Subroutine)
o430 endif
G90 (set absolute coordinates)
G53 G1 F[#<traverse_fr>] Z0 (Send Spindle to home zero position)
(define new tool length offset parameters)
#<new_tool_length_offset> = [ABS[#<spindle_zero_height> + #5063 - #<offset_z>]]
G10 L1 P #<tool> Z [#<new_tool_length_offset>]
T #<tool> G43 H #<tool> (enable tool length offset)
M50 P1 (reinstate feedrate override)
o<print_debug> if [#<print_debug> EQ 1]
(DEBUG, new tool lenght offset: #<new_tool_length_offset>)
(DEBUG, offset_z: #<offset_z>, spindle zero offset: #<spindle_zero_height>, fast probe: #<z_fast_probe>, slow probe: #<z_slow_probe>)
o<print_debug> endif
o<aaa> endsub [1]
M2

12
subroutines/clamptool.ngc Normal file
View File

@@ -0,0 +1,12 @@
o<clamptool> sub
M65 P2 ; clamp the tool
M66 P5 L3 Q2 ; check the clamped tool sensor
o100 if [#5399 LT 0]
(abort, Failed to release tool) ; abort if the sensor does not activate in 2 seconds
o100 endif
o<clamptool> endsub [1]
M2

27
subroutines/extendatc.ngc Normal file
View File

@@ -0,0 +1,27 @@
o<extendatc> sub
; #<atc_z_tool_change_height> is the height you spindle needs to be at to clamp/unclamp a tool form the ATC (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT)
; #<atc_z_tool_clearance_height> is the clearance height you spindle needs to be at to safely clear the ATC (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT)
#<atc_z_tool_change_height> = -3.9000
o100 if [EXISTS[#<_ini[atc]z_tool_change_height>]]
#<atc_z_tool_change_height> = #<_ini[atc]z_tool_change_height>
o100 endif
#<atc_z_tool_clearance_height> = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01]
o110 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]]
#<atc_z_tool_clearance_height> = #<_ini[atc]z_tool_clearance_height>
o110 endif
G0 G53 Z#<atc_z_tool_clearance_height> ; move z to clear height
M65 P1 ; Turn off carousel home solenoid
M64 P0 ; Move Carousel OUT
M66 P1 L3 Q5 ; check for carousel out position sensor
o120 if [#5399 LT 0]
M65 P0 ; switch off atc out solenoid
(abort, ATC not in position)
o120 endif
o<extendatc> endsub [1]
M2

10
subroutines/go_to_g30.ngc Normal file
View File

@@ -0,0 +1,10 @@
o<go_to_g30> sub
M73
G90
G53 G0 Z0
G30
o<go_to_g30> endsub
M2

View File

@@ -0,0 +1,20 @@
o<go_to_home> sub
M73
G90
G53 G0 Z0
G53 G0 X0 Y0
o100 if [EXISTS[#<_ini[traj]axes>]]
#<geometry> = #<_ini[traj]axes>
o100 endif
o110 if [#<geometry> EQ 4]
G53 G0 A0
o110 else if [#<geometry> EQ 5]
G53 G0 A0 C0
o110 endif
o<go_to_home> endsub
M2

View File

@@ -0,0 +1,20 @@
o<go_to_zero> sub
M73
G90
G53 G0 Z0
G0 X0 Y0
o100 if [EXISTS[#<_ini[traj]axes>]]
#<geometry> = #<_ini[traj]axes>
o100 endif
o110 if [#<geometry> EQ 4]
G0 A0
o110 else if [#<geometry> EQ 5]
G0 A0 C0
o110 endif
o<go_to_zero> endsub
M2

View File

@@ -0,0 +1,48 @@
(author: Chris P)
(version: 0.5)
(date: 06/27/24)
(load tool in spindle safety macro)
; This is called form the ATC page
; Parameter #3991 is used to track the current tool loaded it in the spindle (persistently)
; Parameters #4001 to #4024 are used to track which tool is in which pocket (persistently)
; Parameter #4000 is not populated just used in the maths to calculate the above numbers
; #<number_of_pockets>: The number of pockets the ATC platter has, This is user set in the INI file via #<_ini[atc]pockets>
o<load_spindle_safety> sub
(PRINT, o<load_spindle_safety>)
#<load_spindle_tool_number> = #1 ; this is the value form the ATC tab
#<probe_tool_number> = #3014
; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings
#<number_of_pockets> = 12
o101 if [EXISTS[#<_ini[atc]pockets>]]
#<number_of_pockets> = #<_ini[atc]pockets>
o101 endif
#10 = 0
#11 = 0 ; 1 if tool is already stored in carousel
o110 while [#10 LT #<number_of_pockets>]
#10 = [#10+1]
o120 if [#<load_spindle_tool_number> EQ #[4000 + #10]]
(DEBUG, the tool you are trying to load is already stored in carousel pocket %d#10)
#11 = 1
o120 endif
o110 endwhile
o130 if [#11 EQ 0]
M61 Q#<load_spindle_tool_number> G43 H#<load_spindle_tool_number>
#3991 = #<load_spindle_tool_number>
o130 endif
o140 if [#<load_spindle_tool_number> EQ #<probe_tool_number>]
S0 M5
o140 endif
o<program_coolant> call
o<load_spindle_safety> endsub
M2 (end program)

View File

@@ -0,0 +1,48 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(load tool in spindle safety macro)
; This is called form the Tool page
; Parameter #3991 is used to track the current tool loaded it in the spindle (persistently)
; Parameters #4001 to #4024 are used to track which tool is in which pocket (persistently)
; Parameter #4000 is not populated just used in the maths to calculate the above numbers
; #<number_of_pockets>: The number of pockets the ATC platter has, This is user set in the INI file via #<_ini[atc]pockets>
o<load_spindle_safety_2> sub
(PRINT, o<load_spindle_safety_2>)
#<load_spindle_tool_number_2> = #1 ; this is the value form the TOOL tab
#<probe_tool_number> = #3014
; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings
#<number_of_pockets> = 12
o101 if [EXISTS[#<_ini[atc]pockets>]]
#<number_of_pockets> = #<_ini[atc]pockets>
o101 endif
#10 = 0
#11 = 0 ; 1 if tool is already stored in carousel
o110 while [#10 LT #<number_of_pockets>]
#10 = [#10+1]
o120 if [#<load_spindle_tool_number_2> EQ #[4000 + #10]]
(DEBUG, the tool you are trying to load is already stored in carousel pocket %d#10)
#11 = 1
o120 endif
o110 endwhile
o130 if [#11 EQ 0]
M61 Q#<load_spindle_tool_number_2> G43 H#<load_spindle_tool_number_2>
#3991 = #<load_spindle_tool_number_2>
o130 endif
o140 if [#<load_spindle_tool_number_2> EQ #<probe_tool_number>]
S0 M5
o140 endif
o<program_coolant> call
o<load_spindle_safety_2> endsub
M2 (end program)

39
subroutines/m10.ngc Normal file
View File

@@ -0,0 +1,39 @@
o<m10> sub
; Move tool carousel best direction to pocket P
; Parameter #3989 is used to track if the carousel is homed (M13) (volatile)
; Parameter #3990 is used to track the current tool pocket (persistently)
; #<number_of_pockets>: The number of pockets in the ATC is automaticity pulled from the INI via #<_ini[atc]pockets>
(PRINT, o<m10> P#<p>)
o100 if [#3989 NE 1]
M13
o100 endif
; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings
#<number_of_pockets> = 12
o110 if [EXISTS[#<_ini[atc]pockets>]]
#<number_of_pockets> = #<_ini[atc]pockets>
o110 endif
#<steps> = [#3990 - #<p>]
(PRINT, o<m10> P#<p>, steps=#<steps>)
o120 if [#<steps> GT [#<number_of_pockets> / 2]]
#<steps>=[#<steps> - #<number_of_pockets>]
o120 endif
o130 if [#<steps> LT -[#<number_of_pockets> / 2]]
#<steps>=[#<steps> + #<number_of_pockets>]
o130 endif
o140 if [#<steps> GT 0]
M12 P[#<steps>]
o140 elseif [#<steps> LT 0]
#<steps>=[#<steps> * -1]
M11 P[#<steps>]
o140 endif
(PRINT, o<m10> endsub)
o<m10> endsub [1]
M2

50
subroutines/m11.ngc Normal file
View File

@@ -0,0 +1,50 @@
o<m11> sub
; Move tool carousel CW Parameter P number of steps
; Without parameter one step CW.
; Parameter #3989 is used to track if the carousel is homed (M13) (volatile)
; Parameter #3990 is used to track the current tool pocket (persistently)
; #<number_of_pockets>: The number of pockets in the ATC is automaticity pulled from the INI via #<_ini[atc]pockets>
(PRINT, o<m11> P#<p>)
o100 if [#3989 NE 1]
(PRINT, atc not homed, homing)
M13
o100 endif
; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings
#<number_of_pockets> = 12
o110 if [EXISTS[#<_ini[atc]pockets>]]
#<number_of_pockets> = #<_ini[atc]pockets>
o110 endif
o120 if [EXISTS[#<p>]]
#<steps_to_move> = #<p>
o120 else
#<steps_to_move> = 1
(tells the atc widget move 1 step forward)
o120 endif
(tells the atc widget how many steps to move and start moving forward)
(DEBUG, EVAL[vcp.getWidget{"dynatc"}.rotate{#<steps_to_move>, "cw"}])
M64 P4 ; Move atc motor FWD
o130 do
M66 P4 L1 Q3 ; wait for rising edge on rotation index
o131 if [#5399 LT 0]
M65 P4 ; Stop atc motor
(abort, Failed to get rotation index)
o131 endif
#3990 = [[[#3990+2] MOD #<number_of_pockets>]-1] ; Pocket is no.1-#<number_of_pockets>
#<steps_to_move> = [#<steps_to_move>-1]
o130 while [#<steps_to_move> GT 0]
M65 P4 ; Stop motor
#<_my_current_pocket> = #3990
(PRINT, o<m11> endsub)
o<m11> endsub [1]
M2

50
subroutines/m12.ngc Normal file
View File

@@ -0,0 +1,50 @@
o<m12> sub
; Move tool carousel CCW Parameter P number of steps
; Without parameter one step CCW.
; Parameter #3989 is used to track if the carousel is homed (M13) (volatile)
; Parameter #3990 is used to track the current tool pocket (persistently)
; #<number_of_pockets>: The number of pockets in the ATC is automaticity pulled from the INI via #<_ini[atc]pockets>
(PRINT, o<m12> P#<p>)
o100 if [#3989 NE 1]
(PRINT, atc not homed, homing)
M13
o100 endif
; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings
#<number_of_pockets> = 12
o110 if [EXISTS[#<_ini[atc]pockets>]]
#<number_of_pockets> = #<_ini[atc]pockets>
o110 endif
o120 if [EXISTS[#<p>]]
#<steps_to_move> = #<p>
o120 else
#<steps_to_move>=1
(tells the atc widget move 1 step reverse)
o120 endif
(tells the atc widget how many steps to move and start moving reverse)
(DEBUG, EVAL[vcp.getWidget{"dynatc"}.rotate{#<steps_to_move>, "ccw"}])
M64 P3 ; Move atc motor REV
o130 do
M66 P4 L1 Q3 ; wait for rising edge on rotation index
o131 if [#5399 LT 0]
M65 P3 ; Stop atc motor
(abort, Failed to get rotation index)
o131 endif
#3990 = [[[#3990-2] MOD #<number_of_pockets>]+1] ; Pocket is no.1-#<number_of_pockets>
#<steps_to_move> = [#<steps_to_move>-1]
o130 while [#<steps_to_move> GT 0]
M65 P3 ; Stop motor
#<_my_current_pocket> = #3990
(PRINT, o<m12> endsub)
o<m12> endsub [1]
M2

42
subroutines/m13.ngc Normal file
View File

@@ -0,0 +1,42 @@
o<m13> sub
; Move tool carousel CW until ATC zero
; Parameter #3989 is used to track if the carousel is homed (M13) (volatile)
; Parameter #3990 is used to track the current tool pocket (persistently)
; #<number_of_pockets>: The number of pockets in the ATC is automaticity pulled from the INI via #<_ini[atc]pockets>
(PRINT, o<m13>)
(DEBUG, EVAL[vcp.getWidget{"dynatc"}.atc_message{"REFERENCING"}])
M64 P4 ; Move Motor FWD
M66 P4 L1 Q20 ; wait for rising edge on home index
o100 if [#5399 LT 0]
M65 P4 ; stop motor
(abort, Failed to home carousel)
o100 endif
#3990 = 1
M65 P4 ; Stop motor
#3989 = 1
(DEBUG, EVAL[vcp.getWidget{"dynatc"}.atc_message{}])
#<number_of_pockets> = 12
o110 if [EXISTS[#<_ini[atc]pockets>]]
#<number_of_pockets> = #<_ini[atc]pockets>
o110 endif
#1 = 0
o120 while [#1 LT #<number_of_pockets>]
#1 = [#1+1]
#2 = #[4000+#1]
(DEBUG, EVAL[vcp.getWidget{"dynatc"}.store_tool{#1, #2}])
o120 endwhile
M61 Q#3991 G43 H#3991
(PRINT, o<m13> endsub)
o<m13> endsub [1]
M2

45
subroutines/m21.ngc Normal file
View File

@@ -0,0 +1,45 @@
o<m21> sub
; Move Carousel to the tool change position - OUT
; then unload any tool in the spindle into the current pocket
; Parameter #3991 is used to track the current tool loaded it in the spindle (persistently)
; #<atc_z_tool_change_height> is the height you spindle needs to be at to clamp/unclamp a tool form the ATC (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT)
; #<atc_z_tool_clearance_height> is the clearance height you spindle needs to be at to safely clear the ATC (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT)
(PRINT, o<m21>)
#<atc_z_tool_change_height> = -3.9000
o100 if [EXISTS[#<_ini[atc]z_tool_change_height>]]
#<atc_z_tool_change_height> = #<_ini[atc]z_tool_change_height>
o100 endif
#<atc_z_tool_clearance_height> = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01]
o110 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]]
#<atc_z_tool_clearance_height> = #<_ini[atc]z_tool_clearance_height>
o110 endif
M65 P1 ; switch off carousel in solenoid
M66 P1 L3 Q1
M5 M9
G90
G0 G53 Z#<atc_z_tool_change_height> ; rapid move to above the tool change height
;M19 R0 Q3 ; orient spindle
M64 P0 ; Move Carousel out
M66 P1 L3 Q5 ; check for carousel out sensor
o120 if [#5399 LT 0]
M65 P0 ; switch off atc out solenoid
(abort, ATC not in position)
o120 endif
M24 ; activate drawbar, release the tool
M5 ; turn off spindle lock
G0 G53 Z#<atc_z_tool_clearance_height> ; move z to clear height
#3991 = 0; save fact there is now no tool in the spindle
(PRINT, o<m21> endsub)
o<m21> endsub [1]
M2

42
subroutines/m22.ngc Normal file
View File

@@ -0,0 +1,42 @@
o<m22> sub
; Move Carousel to the home position - IN
; after loading any tool in the current pocket to the spindle
; #<atc_z_tool_change_height> is the height you spindle needs to be at to clamp/unclamp a tool form the ATC (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT)
; #<atc_z_tool_clearance_height> is the clearance height you spindle needs to be at to safely clear the ATC (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT)
(PRINT, o<m22>)
#<atc_z_tool_change_height> = -3.9000
o100 if [EXISTS[#<_ini[atc]z_tool_change_height>]]
#<atc_z_tool_change_height> = #<_ini[atc]z_tool_change_height>
o100 endif
#<atc_z_tool_clearance_height> = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01]
o110 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]]
#<atc_z_tool_clearance_height> = #<_ini[atc]z_tool_clearance_height>
o110 endif
;M19 R0 Q2
M24
;M19 R0 Q1
;G90
G0 G53 Z#<atc_z_tool_change_height> ; rapid move to above the tool change height
M65 P2 ; release the drawbar to clamp the tool
M5
M66 P5 L3 Q1 ; check the tool clamped sensor
o120 if [#5399 LT 0]
(abort, Failed to reclamp tool)
o120 endif
M65 P0 ; Move Carousel home
M66 P0 L3 Q4 ; check carousel in position sensor
o130 if [#5399 LT 0]
M65 P1 ; turn off the solenoid to send atc home
(abort, Failed to send carousel home) ; abort if the sensor does not activate in 5 seconds
o130 endif
;M65 P1 ; Turn off carousel home position solenoid
(PRINT, o<m22> endsub)
o<m22> endsub [1]
M2

0
subroutines/m23.ngc Normal file
View File

14
subroutines/m24.ngc Normal file
View File

@@ -0,0 +1,14 @@
o<m24> sub
(PRINT, o<m24>)
M64 P2 ; unclamp the tool
M66 P2 L3 Q2 ; check the unclamped tool sensor
o100 if [#5399 LT 0]
M65 P2 ; turn off the drawbar
(abort, failed to release tool) ; abort if the sensor does not activate in 3 seconds
o100 endif
(PRINT, o<m24> endsub)
o<m24> endsub [1]
M2

15
subroutines/m25.ngc Normal file
View File

@@ -0,0 +1,15 @@
o<m25> sub
(PRINT, o<m25>)
M64 P0 ; Move Carousel out
M66 P1 L3 Q5 ; check for carousel out sensor
o100 if [#5399 LT 0]
M65 P0 ; switch off atc out solenoid
(abort, ATC not in position)
o100 endif
(PRINT, o<m25> endsub)
o<m25> endsub [1]
M2

0
subroutines/m26.ngc Normal file
View File

View File

@@ -0,0 +1,25 @@
(author: Chris P)
(version: 0.3)
(date: 06/27/24)
(m6 tool call with g43 offset applied)
o<m6_tool_call_atc_page> sub
#<tool_number_entry_atc_page> = #1
#<probe_tool_number> = #3014
T#<tool_number_entry_atc_page> M6
o100 if [1 EQ 1]
G43 H#<tool_number_entry_atc_page>
o100 endif
o110 if [#<tool_number_entry_atc_page> EQ #<probe_tool_number>]
S0 M5
o110 endif
o<program_coolant> call
o<m6_tool_call_atc_page> endsub
M2 (end program)

View File

@@ -0,0 +1,26 @@
(author: Chris P)
(version: 0.4)
(date: 06/27/24)
(m6 tool call with g43 offset applied)
o<m6_tool_call_main_panel> sub
#<tool_number_entry_main_panel> = #1
#<probe_tool_number> = #3014
T#<tool_number_entry_main_panel> M6
o100 if [1 EQ 1]
G43 H#<tool_number_entry_main_panel>
o100 endif
o110 if [#<tool_number_entry_main_panel> EQ #<probe_tool_number>]
S0 M5
o110 endif
o<program_coolant> call
o<m6_tool_call_main_panel> endsub
M2 (end program)

View File

@@ -0,0 +1,26 @@
(author: Chris P)
(version: 0.4)
(date: 06/27/24)
(m6 tool call with g43 offset applied)
o<m6_tool_call_tool_page> sub
#<tool_number_entry_tool_page> = #1
#<probe_tool_number> = #3014
T#<tool_number_entry_tool_page> M6
o100 if [1 EQ 1]
G43 H#<tool_number_entry_tool_page>
o100 endif
o110 if [#<tool_number_entry_tool_page> EQ #<probe_tool_number>]
S0 M5
o110 endif
o<program_coolant> call
o<m6_tool_call_tool_page> endsub
M2 (end program)

View File

@@ -0,0 +1,19 @@
o<move_head_above_carousel> sub
; #<atc_z_tool_change_height> is the height you spindle needs to be at to clamp/unclamp a tool form the ATC (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT)
; #<atc_z_tool_clearance_height> is the clearance height you spindle needs to be at to safely clear the ATC (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT)
#<atc_z_tool_change_height> = -3.9000
o100 if [EXISTS[#<_ini[atc]z_tool_change_height>]]
#<atc_z_tool_change_height> = #<_ini[atc]z_tool_change_height>
o100 endif
#<atc_z_tool_clearance_height> = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01]
o110 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]]
#<atc_z_tool_clearance_height> = #<_ini[atc]z_tool_clearance_height>
o110 endif
G0 G53 Z#<atc_z_tool_clearance_height> ; move z to clear height
o<move_head_above_carousel> endsub [1]
M2

View File

@@ -0,0 +1,18 @@
o<move_tool_to_carousel_height> sub
; #<atc_z_tool_change_height> is the height you spindle needs to be at to clamp/unclamp a tool form the ATC (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT)
; #<atc_z_tool_clearance_height> is the clearance height you spindle needs to be at to safely clear the ATC (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT)
#<atc_z_tool_change_height> = -3.9000
o100 if [EXISTS[#<_ini[atc]z_tool_change_height>]]
#<atc_z_tool_change_height> = #<_ini[atc]z_tool_change_height>
o100 endif
#<atc_z_tool_clearance_height> = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01]
o110 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]]
#<atc_z_tool_clearance_height> = #<_ini[atc]z_tool_clearance_height>
o110 endif
G0 G53 Z#<atc_z_tool_change_height> ; rapid move to above the tool change height
o<move_tool_to_carousel_height> endsub [1]
M2

9
subroutines/on_abort.ngc Normal file
View File

@@ -0,0 +1,9 @@
%
o<on_abort> sub
G90
G40
G49
o<on_abort> endsub
%

View File

@@ -0,0 +1,11 @@
o<orientspindle> sub
; Orient the spindle with platter
(PRINT, o<orientspindle>)
M5 M9 ; stop all spindle motion and coolant
M19 R0 Q4 ; orient spindle
M5 ; turn off spindle lock
o<orientspindle> endsub [1]
M2

View File

@@ -0,0 +1,122 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe back left inside corner for x,y,z 0,0,0 position)
(Start probe position is over back left inside corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_back_left_inside_corner> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_back_left_inside_corner> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Traverse Workpiece Top at Z Clearance Height plane)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>] Y-[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
G90
(Current X Position including offsets in current program units)
#<x_start> = #5420
(Call sub "probe_x_minus_sub" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_back_left_inside_corner> return
o110 endif
(move to X start Position)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_start>]
(Current Y Position including offsets in current program units)
#<y_start> = #5421
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_back_left_inside_corner> return
o120 endif
(move to Y start Position)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_start>]
(Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_minus_zero_edge>] Y[#<y_plus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_minus_zero_edge> + #<workspace_x>]
G10 L2 P#5220 Y[#<y_plus_zero_edge> + #<workspace_y>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_back_left_inside_corner> endsub
M2 (end program)

View File

@@ -0,0 +1,118 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe back left top corner for x,y,z 0,0,0 position)
(Start probe position is over back left corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_back_left_top_corner> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_back_left_top_corner> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_back_left_top_corner> return
o110 endif
(Probe Y Positioning Move, up to Z clearance plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane)
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>] Y[#<step_off_width>]
(Probe Y Positioning Move,to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_back_left_top_corner> return
o120 endif
(Probe Completion Move to Z Clearance Plane, and XY Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_plus_zero_edge>] Y[#<y_minus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_plus_zero_edge> + #<workspace_x>]
G10 L2 P#5220 Y[#<y_minus_zero_edge> + #<workspace_y>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_back_left_top_corner> endsub
M2 (end program)

View File

@@ -0,0 +1,122 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe back right inside corner for x,y,z 0,0,0 position)
(Start probe position is over back right inside corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_back_right_inside_corner> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_back_right_inside_corner> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width X and Y)
G91
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>] Y-[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
G90
(Current X Position including offsets in current program units)
#<x_start> = #5420
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_back_right_inside_corner> return
o110 endif
(move to X start Position)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_start>]
(Current Y Position including offsets in current program units)
#<y_start> = #5421
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_back_right_inside_corner> return
o120 endif
(move to Y start Position)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_start>]
(Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_plus_zero_edge>] Y[#<y_plus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_plus_zero_edge> + #<workspace_x>]
G10 L2 P#5220 Y[#<y_plus_zero_edge> + #<workspace_y>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_back_right_inside_corner> endsub
M2 (end program)

View File

@@ -0,0 +1,117 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe back right top corner for x,y,z 0,0,0 position)
(Start probe position is over back right corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_back_right_top_corner> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_back_right_top_corner> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_back_right_top_corner> return
o110 endif
(Probe Y Positioning Move, up to Z clearance plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Probe Y Positioning Move)
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>] Y[#<step_off_width>]
(Probe Y Positioning Move,to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_back_right_top_corner> return
o120 endif
(Probe Completion Move to Z Clearance Plane, and XY Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_minus_zero_edge>] Y[#<y_minus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_minus_zero_edge> + #<workspace_x>]
G10 L2 P#5220 Y[#<y_minus_zero_edge> + #<workspace_y>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_back_right_top_corner> endsub
M2 (end program)

View File

@@ -0,0 +1,91 @@
(author: Chris P)
(version: 0.4)
(date: 06/27/24)
(Probe back top side for y,z 0,0 position)
(Start probe position is over back edge of stock)
(inside the step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<Probe_back_top_side> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<Probe_back_top_side> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe Y Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y[#<step_off_width>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_back_top_side> return
o110 endif
(Probe Completion Move to Z Clearance Plane, and Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_minus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o120 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 Y[#<y_minus_zero_edge> + #<workspace_y>]
o120 endif
(Reinstate Feedrate Override)
M50 P1
o<Probe_back_top_side> endsub
M2 (end program)

View File

@@ -0,0 +1,8 @@
o<probe_cal_reset> sub
#3032 = 0
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o<probe_cal_reset> endsub
M2 (end program)

View File

@@ -0,0 +1,329 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe calibration offset using defined diam round boss)
(Start probe position is over center of stock in X and Y axis)
(within max z distance, ensure all settings have been)
(set properly according to help diagrams)
o<probe_cal_round_boss> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<cal_diameter> = #3033 (=0)
#<sq_cal_axis> = #3036 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
#<workspace_z> = #[5203 + [20 * #5220]]
(clear current probe calibration offset)
#3032 = 0
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_cal_round_boss> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius>]
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter>]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030][#3032]
(Probe X Positioning Move, X hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[#<cal_diameter>/2 + #<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_probed> = #5061
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in X, X Hint + Step Off Width at Rapid Speed)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<cal_diameter> + #<step_off_width> + #<xy_clearance>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(probed center calulation)
#<x_center_probed> = [[#<x_minus_probed> + #<x_plus_probed>] / 2]
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Probe Y Positioning Move, Y hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y-[#<cal_diameter>/2 + #<step_off_width>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_probed> = #5062
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in Y, Y Hint + Step Off Width at Rapid Speed)
G91
F[#<probe_traverse_fr>]
G38.3 Y[#<cal_diameter> + #<step_off_width> + #<xy_clearance>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calulation)
#<y_center_probed> = [[#<y_minus_probed> + #<y_plus_probed>] / 2]
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
(Move to z clearance plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Move to Y Center)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
(Probe X Positioning Move, X hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[#<cal_diameter>/2 + #<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_probed> = #5061
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in X, X Hint + Step Off Width at Rapid Speed)
F[#<probe_traverse_fr>]
G38.3 X[#<cal_diameter> + #<step_off_width> + #<xy_clearance>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(probed center calulation)
#<x_center_probed> = [[#<x_minus_probed> + #<x_plus_probed>] / 2]
(calculate X Width Probed)
o110 if [#<x_minus_probed> GT #<x_plus_probed>]
#<x_raw_width> = [#<x_minus_probed> - #<x_plus_probed>]
o110 else
#<x_raw_width> = [#<x_plus_probed> - #<x_minus_probed>]
o110 endif
(Completed probed width calculations)
#<x_probed_width> = [#<x_raw_width> - #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Probe Y Positioning Move, Y hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y-[#<cal_diameter>/2 + #<step_off_width>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_probed> = #5062
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in Y, Y Hint + Step Off Width at Rapid Speed)
F[#<probe_traverse_fr>]
G38.3 Y[#<cal_diameter> + #<step_off_width> + #<xy_clearance>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_traverse_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calulation)
#<y_center_probed> = [[#<y_minus_probed> + #<y_plus_probed>] / 2]
(calculate Y Width Probed)
o120 if [#<y_minus_probed> GT #<y_plus_probed>]
#<y_raw_width> = [#<y_minus_probed> - #<y_plus_probed>]
o120 else
#<y_raw_width> = [#<y_plus_probed> - #<y_minus_probed>]
o<probe_round_boss> return
o120 endif
(Completed probed width calculations)
#<y_probed_width> = [#<y_raw_width> - #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
#<averaged_diam> = [[#<x_probed_width> + #<y_probed_width>] / 2]
#1010 = #<averaged_diam>
(DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}])
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>] Y[#<y_center_probed>]
o130 if [#<cal_diameter> GT #<x_probed_width>]
(calculate calibration error and adjust calibration offset)
#<x_cal_error> = [[#<cal_diameter> - #<x_probed_width>] / 2]
#<new_x_cal_offset> = [#<x_cal_error>]
o130 else
#<x_cal_error> = [[#<x_probed_width> - #<cal_diameter>] / 2]
#<new_x_cal_offset> = [#<x_cal_error>]
o130 endif
o140 if [#<cal_diameter> GT #<y_probed_width>]
(calculate calibration error and adjust calibration offset)
#<y_cal_error> = [[#<cal_diameter> - #<y_probed_width>] / 2]
#<new_y_cal_offset> = [#<y_cal_error>]
o140 else
#<y_cal_error> = [[#<y_probed_width> - #<cal_diameter>] / 2]
#<new_y_cal_offset> = [#<y_cal_error>]
o140 endif
#<new_avg_cal_offset> = [[#<new_x_cal_offset> + #<new_y_cal_offset>] / 2]
o150 if [#<sq_cal_axis> EQ 0]
#3032 = [ABS[#<new_avg_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o150 else if [#<sq_cal_axis> EQ 1]
#3032 = [ABS[#<new_x_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o150 else
#3032 = [ABS[#<new_y_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o150 endif
#<x_zero> = [#<x_center_probed> + #<workspace_x>]
#<y_zero> = [#<y_center_probed> + #<workspace_y>]
(probe mode rules for WCO or probe position measuring only)
o160 if [#<probe_mode> EQ 0]
(Record XY Zero in selected WCO)
G10 L2 P#5220 X[#<x_zero>] Y[#<y_zero>]
o160 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_cal_round_boss> endsub
M2 (end program)

View File

@@ -0,0 +1,223 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe calibration offset using defined diam round pocket)
(Start probe position is over left side edge of pocket wall)
(inside the step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_cal_round_pocket> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<cal_diameter> = #3033 (=0)
#<sq_cal_axis> = #3036 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(clear current probe calibration offset)
#3032 = 0
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_cal_round_pocket> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter>]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030][#3032]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x-)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3033][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
(Probe Completion Move to Z Clearance Plane, and X Zero)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Call sub "probe_y_plus" to Probe Y+)
o<probe_y_plus> call [#3014][#3015][#3016][3017][#3018 + #3033 / 2][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus" to Probe Y-)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3033][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
(Probe Completion Move to Z Clearance Plane, Y Zero)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
(Call sub "probe_x_minus" to Probe x-)
o<probe_x_minus> call [#3014][#3015][#3016][3017][#3018 + #3033 / 2][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3033][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_plus_probed> - #<x_minus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Call sub "probe_y_plus" to Probe Y+)
o<probe_y_plus> call [#3014][#3015][#3016][3017][#3018 + #3033 / 2][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus" to Probe Y-)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3033][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_plus_probed> - #<y_minus_probed>]
(Completed probed diameter calculations)
#<y_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
#<averaged_diam> = [[#<x_probed_width> + #<y_probed_width>] / 2]
#1010 = #<averaged_diam>
(DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}])
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
o110 if [#<cal_diameter> GT #<x_probed_width>]
(calculate calibration error and adjust calibration offset)
#<x_cal_error> = [[#<cal_diameter> - #<x_probed_width>] / 2]
#<new_x_cal_offset> = [#<x_cal_error>]
o110 else
#<x_cal_error> = [[#<x_probed_width> - #<cal_diameter>] / 2]
#<new_x_cal_offset> = [#<x_cal_error>]
o110 endif
o120 if [#<cal_diameter> GT #<y_probed_width>]
(calculate calibration error and adjust calibration offset)
#<y_cal_error> = [[#<cal_diameter> - #<y_probed_width>] / 2]
#<new_y_cal_offset> = [#<y_cal_error>]
o120 else
#<y_cal_error> = [[#<y_probed_width> - #<cal_diameter>] / 2]
#<new_y_cal_offset> = [#<y_cal_error>]
o120 endif
#<new_avg_cal_offset> = [[#<new_x_cal_offset> + #<new_y_cal_offset>] / 2]
o130 if [#<sq_cal_axis> EQ 0]
#3032 = [ABS[#<new_avg_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o130 else if [#<sq_cal_axis> EQ 1]
#3032 = [ABS[#<new_x_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o130 else
#3032 = [ABS[#<new_y_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o130 endif
#<x_zero> = [#<x_center_probed> + #<workspace_x>]
#<y_zero> = [#<y_center_probed> + #<workspace_y>]
(probe mode rules for WCO or probe position measuring only)
o140 if [#<probe_mode> EQ 0]
(Record Y Zero in selected WCO)
G10 L2 P#5220 X[#<x_zero>] Y[#<y_zero>]
(Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero)
o140 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_cal_round_pocket> endsub
M2 (end program)

View File

@@ -0,0 +1,224 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe calibration offset using defined width square boss)
(Start probe position is over center of stock in X and Y axis)
(within max z distance, ensure all settings have been)
(set properly according to help diagrams)
o<probe_cal_square_boss> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<x_cal_width> = #3034 (=0)
#<y_cal_width> = #3035 (=0)
#<sq_cal_axis> = #3036 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
#<workspace_z> = #[5203 + [20 * #5220]]
(clear current probe calibration offset)
#3032 = 0
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_cal_square_boss> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius>]
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter>]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030][#3032]
(Probe X Positioning Move, X hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[#<x_cal_width>/2 + #<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_probed> = #5061
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in X, X Hint + Step Off Width at Traverse Speed)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<x_cal_width> + #<step_off_width> + #<xy_clearance>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(probed center calulation)
#<x_center_probed> = [[#<x_minus_probed> + #<x_plus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_minus_probed> - #<x_plus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> - #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Probe Y Positioning Move, Y hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y-[#<y_cal_width>/2 + #<step_off_width>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_probed> = #5062
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in Y, Y Hint + Step Off Width at traverse Speed)
G91
F[#<probe_traverse_fr>]
G38.3 Y[#<y_cal_width> + #<step_off_width> + #<xy_clearance>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calulation)
#<y_center_probed> = [[#<y_minus_probed> + #<y_plus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_minus_probed> - #<y_plus_probed>]
(Completed probed width calculations)
#<y_probed_width> = [#<raw_width> - #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>] Y[#<y_center_probed>]
o110 if [#<x_cal_width> GT #<x_probed_width>]
(calculate calibration error and adjust calibration offset)
#<x_cal_error> = [[#<x_cal_width> - #<x_probed_width>] / 2]
#<new_x_cal_offset> = [#<x_cal_error>]
o110 else
#<x_cal_error> = [[#<x_probed_width> - #<x_cal_width>] / 2]
#<new_x_cal_offset> = [#<x_cal_error>]
o110 endif
o120 if [#<y_cal_width> GT #<y_probed_width>]
(calculate calibration error and adjust calibration offset)
#<y_cal_error> = [[#<y_cal_width> - #<y_probed_width>] / 2]
#<new_y_cal_offset> = [#<y_cal_error>]
o120 else
#<y_cal_error> = [[#<y_probed_width> - #<y_cal_width>] / 2]
#<new_y_cal_offset> = [#<y_cal_error>]
o120 endif
#<new_avg_cal_offset> = [[#<new_x_cal_offset> + #<new_y_cal_offset>] / 2]
o130 if [#<sq_cal_axis> EQ 0]
#3032 = [ABS[#<new_avg_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o130 else if [#<sq_cal_axis> EQ 1]
#3032 = [ABS[#<new_x_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o130 else
#3032 = [ABS[#<new_y_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o130 endif
#<x_zero> = [#<x_center_probed> + #<workspace_x>]
#<y_zero> = [#<y_center_probed> + #<workspace_y>]
(probe mode rules for WCO or probe position measuring only)
o140 if [#<probe_mode> EQ 0]
(Record XY Zero in selected WCO)
G10 L2 P#5220 X[#<x_zero>] Y[#<y_zero>]
(Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero)
o140 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_cal_square_boss> endsub
M2 (end program)

View File

@@ -0,0 +1,178 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe calibration offset using defined width square pocket)
(Start probe position is over left side edge of pocket wall)
(inside the step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_cal_square_pocket> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<x_cal_width> = #3034 (=0)
#<y_cal_width> = #3035 (=0)
#<sq_cal_axis> = #3036 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(clear current probe calibration offset)
#3032 = 0
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_cal_square_pocket> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter>]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030][#3032]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3034][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_plus_probed> - #<x_minus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
(Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Call sub "probe_y_plus" to Probe Y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][3017][#3018 + #3035 / 2][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus" to Probe Y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3035][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_plus_probed> - #<y_minus_probed>]
(Completed probed width calculations)
#<y_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
o110 if [#<x_cal_width> GT #<x_probed_width>]
(calculate calibration error and adjust calibration offset)
#<x_cal_error> = [[#<x_cal_width> - #<x_probed_width>] / 2]
#<new_x_cal_offset> = [#<x_cal_error>]
o110 else
#<x_cal_error> = [[#<x_probed_width> - #<x_cal_width>] / 2]
#<new_x_cal_offset> = [#<x_cal_error>]
o110 endif
o120 if [#<y_cal_width> GT #<y_probed_width>]
(calculate calibration error and adjust calibration offset)
#<y_cal_error> = [[#<y_cal_width> - #<y_probed_width>] / 2]
#<new_y_cal_offset> = [#<y_cal_error>]
o120 else
#<y_cal_error> = [[#<y_probed_width> - #<y_cal_width>] / 2]
#<new_y_cal_offset> = [#<y_cal_error>]
o120 endif
#<new_avg_cal_offset> = [[#<new_x_cal_offset> + #<new_y_cal_offset>] / 2]
o130 if [#<sq_cal_axis> EQ 0]
#3032 = [ABS[#<new_avg_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o130 else if [#<sq_cal_axis> EQ 1]
#3032 = [ABS[#<new_x_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o130 else
#3032 = [ABS[#<new_y_cal_offset>]]
(DEBUG, EVAL[vcp.getWidget{"calibration_offset_3032"}.setValue{#3032}])
o130 endif
#<x_zero> = [#<x_center_probed> + #<workspace_x>]
#<y_zero> = [#<y_center_probed> + #<workspace_y>]
(probe mode rules for WCO or probe position measuring only)
o140 if [#<probe_mode> EQ 0]
(Record X Zero in selected WCO)
G10 L2 P#5220 X[#<x_zero>] Y[#<y_zero>]
o140 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_cal_square_pocket> endsub
M2 (end program)

View File

@@ -0,0 +1,173 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Corner X minus Edge Angle for x,y,z 0,0,0 position)
(Start probe position is over front right corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_corner_x_minus_edge_angle> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<wco_rotation> = #3031 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
(set rotation offset to zero for new probe cycle)
G10 L2 P[#5220] R0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_corner_x_minus_edge_angle> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
#<z1x> = #5420
#<z1y> = #5421
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 y-[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
#<p1x> = #5420
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p1y> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_x_minus_edge_angle> return
o110 endif
(Probe Y Positioning Move, up to Z clearance plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane)
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>] Y[#<step_off_width>]
(Probe Y Positioning Move,to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
#<p2y> = #5421
(Call sub "probe_x_minus" to Probe X- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p2x> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_x_minus_edge_angle> return
o120 endif
(edge width move to edge second probing point)
G91
F[#<probe_fast_fr>]
G38.3 Y[#<edge_width>]
#<p3y> = #5421
(Call sub "probe_x_minus" to Probe X- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p3x> = #<_value>
(value returned safety check, aborts if no value returned)
o130 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_x_minus_edge_angle> return
o130 endif
#<edge_delta> = [#<p2x> - #<p3x>]
#<edge_angle> = [ATAN [#<edge_delta>] / [#<edge_width>]]
#1011 = #<edge_delta>
(DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}])
#1012 = #<edge_angle>
(DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}])
#<c1xr> = [#<z1x> + [#<p2x> - #<z1x>] * COS[-#<edge_angle>] - [#<p2y> - #<z1y>] * SIN[-#<edge_angle>]]
#<c1yr> = [#<z1y> + [#<p1x> - #<z1x>] * SIN[-#<edge_angle>] + [#<p1y> - #<z1y>] * COS[-#<edge_angle>]]
#<c1x> = [#<z1x> + [#<c1xr> - #<z1x>] * COS[#<edge_angle>] - [#<c1yr> - #<z1y>] * SIN[#<edge_angle>]]
#<c1y> = [#<z1y> + [#<c1xr> - #<z1x>] * SIN[#<edge_angle>] + [#<c1yr> - #<z1y>] * COS[#<edge_angle>]]
(Probe Completion Move to Z Clearance Plane, and XY Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<c1x>] Y[#<c1y>]
(probe mode rules for WCO,Rotation and probe position measuring only)
o140 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<c1x> + #<workspace_x>] Y[#<c1y> + #<workspace_y>]
o140 endif
(probe mode rules for WCO,Rotation and probe position measuring only)
o150 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 1]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<c1x> + #<workspace_x>] Y[#<c1y> + #<workspace_y>] R[#<edge_angle>]
o150 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_corner_x_minus_edge_angle> endsub
M2 (end program)

View File

@@ -0,0 +1,173 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Corner X plus Edge Angle for x,y,z 0,0,0 position)
(Start probe position is over back left corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_corner_x_plus_edge_angle> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<wco_rotation> = #3031 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
(set rotation offset to zero for new probe cycle)
G10 L2 P[#5220] R0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_corner_x_plus_edge_angle> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
#<z1x> = #5420
#<z1y> = #5421
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 y[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
#<p1x> = #5420
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p1y> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_x_plus_edge_angle> return
o110 endif
(Probe Y Positioning Move, up to Z clearance plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane)
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>] Y-[#<step_off_width>]
(Probe Y Positioning Move,to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
#<p2y> = #5421
(Call sub "probe_x_plus" to Probe X+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p2x> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_x_plus_edge_angle> return
o120 endif
(edge width move to edge second probing point)
G91
F[#<probe_fast_fr>]
G38.3 Y-[#<edge_width>]
#<p3y> = #5421
(Call sub "probe_x_plus" to Probe X+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p3x> = #<_value>
(value returned safety check, aborts if no value returned)
o130 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_x_plus_edge_angle> return
o130 endif
#<edge_delta> = [#<p3x> - #<p2x>]
#<edge_angle> = [ATAN [#<edge_delta>] / [#<edge_width>]]
#1011 = #<edge_delta>
(DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}])
#1012 = #<edge_angle>
(DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}])
#<c1xr> = [#<z1x> + [#<p2x> - #<z1x>] * COS[-#<edge_angle>] - [#<p2y> - #<z1y>] * SIN[-#<edge_angle>]]
#<c1yr> = [#<z1y> + [#<p1x> - #<z1x>] * SIN[-#<edge_angle>] + [#<p1y> - #<z1y>] * COS[-#<edge_angle>]]
#<c1x> = [#<z1x> + [#<c1xr> - #<z1x>] * COS[#<edge_angle>] - [#<c1yr> - #<z1y>] * SIN[#<edge_angle>]]
#<c1y> = [#<z1y> + [#<c1xr> - #<z1x>] * SIN[#<edge_angle>] + [#<c1yr> - #<z1y>] * COS[#<edge_angle>]]
(Probe Completion Move to Z Clearance Plane, and XY Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<c1x>] Y[#<c1y>]
(probe mode rules for WCO,Rotation and probe position measuring only)
o140 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<c1x> + #<workspace_x>] Y[#<c1y> + #<workspace_y>]
o140 endif
(probe mode rules for WCO,Rotation and probe position measuring only)
o150 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 1]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<c1x> + #<workspace_x>] Y[#<c1y> + #<workspace_y>] R[#<edge_angle>]
o150 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_corner_x_plus_edge_angle> endsub
M2 (end program)

View File

@@ -0,0 +1,173 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Corner Y minus Edge Angle for x,y,z 0,0,0 position)
(Start probe position is over back right corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_corner_y_minus_edge_angle> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<wco_rotation> = #3031 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
(set rotation offset to zero for new probe cycle)
G10 L2 P[#5220] R0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_corner_y_minus_edge_angle> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
#<z1x> = #5420
#<z1y> = #5421
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
#<p1y> = #5421
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p1x> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_y_minus_edge_angle> return
o110 endif
(Probe Y Positioning Move, up to Z clearance plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane)
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>] Y[#<step_off_width>]
(Probe Y Positioning Move,to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
#<p2x> = #5420
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p2y> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_y_minus_edge_angle> return
o120 endif
(edge width move to edge second probing point)
G91
F[#<probe_fast_fr>]
G38.3 X-[#<edge_width>]
#<p3x> = #5420
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p3y> = #<_value>
(value returned safety check, aborts if no value returned)
o130 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_y_minus_edge_angle> return
o130 endif
#<edge_delta> = [#<p2y> - #<p3y>]
#<edge_angle> = [ATAN [#<edge_delta>] / [#<edge_width>]]
#1011 = #<edge_delta>
(DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}])
#1012 = #<edge_angle>
(DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}])
#<c1xr> = [#<z1x> + [#<p1x> - #<z1x>] * COS[-#<edge_angle>] - [#<p1y> - #<z1y>] * SIN[-#<edge_angle>]]
#<c1yr> = [#<z1y> + [#<p2x> - #<z1x>] * SIN[-#<edge_angle>] + [#<p2y> - #<z1y>] * COS[-#<edge_angle>]]
#<c1x> = [#<z1x> + [#<c1xr> - #<z1x>] * COS[#<edge_angle>] - [#<c1yr> - #<z1y>] * SIN[#<edge_angle>]]
#<c1y> = [#<z1y> + [#<c1xr> - #<z1x>] * SIN[#<edge_angle>] + [#<c1yr> - #<z1y>] * COS[#<edge_angle>]]
(Probe Completion Move to Z Clearance Plane, and XY Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<c1x>] Y[#<c1y>]
(probe mode rules for WCO,Rotation and probe position measuring only)
o140 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<c1x> + #<workspace_x>] Y[#<c1y> + #<workspace_y>]
o140 endif
(probe mode rules for WCO,Rotation and probe position measuring only)
o150 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 1]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<c1x> + #<workspace_x>] Y[#<c1y> + #<workspace_y>] R[#<edge_angle>]
o150 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_corner_y_minus_edge_angle> endsub
M2 (end program)

View File

@@ -0,0 +1,173 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Corner Y Plus Edge Angle for x,y,z 0,0,0 position)
(Start probe position is over front left corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_corner_y_plus_edge_angle> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<wco_rotation> = #3031 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
(set rotation offset to zero for new probe cycle)
G10 L2 P[#5220] R0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_corner_y_plus_edge_angle> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
#<z1x> = #5420
#<z1y> = #5421
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
#<p1y> = #5421
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p1x> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_y_plus_edge_angle> return
o110 endif
(Probe Y Positioning Move, up to Z clearance plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane)
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>] Y-[#<step_off_width>]
(Probe Y Positioning Move,to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
#<p2x> = #5420
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p2y> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_y_plus_edge_angle> return
o120 endif
(edge width move to edge second probing point)
G91
F[#<probe_fast_fr>]
G38.3 X[#<edge_width>]
#<p3x> = #5420
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<p3y> = #<_value>
(value returned safety check, aborts if no value returned)
o130 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_corner_y_plus_edge_angle> return
o130 endif
#<edge_delta> = [#<p3y> - #<p2y>]
#<edge_angle> = [ATAN [#<edge_delta>] / [#<edge_width>]]
#1011 = #<edge_delta>
(DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}])
#1012 = #<edge_angle>
(DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}])
#<c1xr> = [#<z1x> + [#<p1x> - #<z1x>] * COS[-#<edge_angle>] - [#<p1y> - #<z1y>] * SIN[-#<edge_angle>]]
#<c1yr> = [#<z1y> + [#<p2x> - #<z1x>] * SIN[-#<edge_angle>] + [#<p2y> - #<z1y>] * COS[-#<edge_angle>]]
#<c1x> = [#<z1x> + [#<c1xr> - #<z1x>] * COS[#<edge_angle>] - [#<c1yr> - #<z1y>] * SIN[#<edge_angle>]]
#<c1y> = [#<z1y> + [#<c1xr> - #<z1x>] * SIN[#<edge_angle>] + [#<c1yr> - #<z1y>] * COS[#<edge_angle>]]
(Probe Completion Move to Z Clearance Plane, and XY Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<c1x>] Y[#<c1y>]
(probe mode rules for WCO,Rotation and probe position measuring only)
o140 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<c1x> + #<workspace_x>] Y[#<c1y> + #<workspace_y>]
o140 endif
(probe mode rules for WCO,Rotation and probe position measuring only)
o150 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 1]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<c1x> + #<workspace_x>] Y[#<c1y> + #<workspace_y>] R[#<edge_angle>]
o150 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_corner_y_plus_edge_angle> endsub
M2 (end program)

View File

@@ -0,0 +1,123 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe front left inside corner for x,y,z 0,0,0 position)
(Start probe position is over front left inside corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_front_left_inside_corner> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_front_left_inside_corner> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Traverse Workpiece Top at Z Clearance Height plane)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>] Y[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
G90
(Current X Position including offsets in current program units)
#<x_start> = #5420
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_front_left_inside_corner> return
o110 endif
(move to X start Position)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_start>]
(Current Y Position including offsets in current program units)
#<y_start> = #5421
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_front_left_inside_corner> return
o120 endif
(move to Y start Position)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_start>]
(Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_minus_zero_edge>] Y[#<y_minus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_minus_zero_edge> + #<workspace_x>]
G10 L2 P#5220 Y[#<y_minus_zero_edge> + #<workspace_y>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_front_left_inside_corner> endsub
M2 (end program)

View File

@@ -0,0 +1,119 @@
(author: Chris P)
(version: 0.5)
(date: 06/27/24)
(Probe front left top corner for x,y,z 0,0,0 position)
(Start probe position is over front left corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_front_left_top_corner> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_front_left_top_corner> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_front_left_top_corner> return
o110 endif
(Probe Y Positioning Move, up to Z clearance plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Probe Y Positioning Move, Traverse Workpiece at Z Clearance plane)
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>] Y-[#<step_off_width>]
(Probe Y Positioning Move,to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_front_left_top_corner> return
o120 endif
(Probe Completion Move to Z Clearance Plane, and XY Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_plus_zero_edge>] Y[#<y_plus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_plus_zero_edge> + #<workspace_x>]
G10 L2 P#5220 Y[#<y_plus_zero_edge> + #<workspace_y>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_front_left_top_corner> endsub
M2 (end program)

View File

@@ -0,0 +1,123 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe front right inside corner for x,y,z 0,0,0 position)
(Start probe position is over front right inside corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_front_right_inside_corner> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_front_right_inside_corner> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width X and Y)
G91
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>] Y[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
G90
(Current X Position including offsets in current program units)
#<x_start> = #5420
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_front_right_inside_corner> return
o110 endif
(move to X start Position)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_start>]
(Current Y Position including offsets in current program units)
#<y_start> = #5421
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_front_right_inside_corner> return
o120 endif
(move to Y start Position)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_start>]
(Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_plus_zero_edge>] Y[#<y_minus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_plus_zero_edge> + #<workspace_x>]
G10 L2 P#5220 Y[#<y_minus_zero_edge> + #<workspace_y>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_front_right_inside_corner> endsub
M2 (end program)

View File

@@ -0,0 +1,120 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe front right top corner for x,y,z 0,0,0 position)
(Start probe position is over front right corner of stock)
(inside the step off width square and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_front_right_top_corner> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_front_right_top_corner> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_front_right_top_corner> return
o110 endif
(Probe Y Positioning Move, up to Z clearance plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Probe Y Positioning Move, Traverse Workpiece Top at Z Clearance Height plane)
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>] Y-[#<step_off_width>]
(Probe Y Positioning Move,to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y- side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_front_right_top_corner> return
o120 endif
(Probe Completion Move to Z Clearance Plane, and XY Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_minus_zero_edge>] Y[#<y_plus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_minus_zero_edge> + #<workspace_x>]
G10 L2 P#5220 Y[#<y_plus_zero_edge> + #<workspace_y>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_front_right_top_corner> endsub
M2 (end program)

View File

@@ -0,0 +1,92 @@
(author: Chris P)
(version: 0.5)
(date: 06/27/24)
(Probe front top side for y,z 0,0 position)
(Start probe position is over front edge of stock)
(inside the step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<Probe_front_top_side> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<Probe_front_top_side> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe Y Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y-[#<step_off_width>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_front_top_side> return
o110 endif
(Probe Completion Move to Z Clearance Plane, and Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_plus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o120 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 Y[#<y_plus_zero_edge> + #<workspace_y>]
o120 endif
(Reinstate Feedrate Override)
M50 P1
o<Probe_front_top_side> endsub
M2 (end program)

View File

@@ -0,0 +1,92 @@
(author: Chris P)
(version: 0.4)
(date: 06/27/24)
(Probe left top side for x,z 0,0 position)
(Start probe position is over left side edge of stock)
(inside the step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<Probe_left_top_side> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<Probe_left_top_side> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_left_top_side> return
o110 endif
(Probe Completion Move to Z Clearance Plane, and Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_plus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o120 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_plus_zero_edge> + #<workspace_x>]
o120 endif
(Reinstate Feedrate Override)
M50 P1
o<Probe_left_top_side> endsub
M2 (end program)

View File

@@ -0,0 +1,185 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Boss in X and Y Axes, find center and z 0 position)
(Start probe position is over center of stock in X and Y axis)
(within max z distance, ensure all settings have been)
(set properly according to help diagrams)
o<probe_rect_boss> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<x_hint_boss_pocket> = #3026 (=0)
#<y_hint_boss_pocket> = #3027 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
#<workspace_z> = #[5203 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_rect_boss> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, X hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[[#<x_hint_boss_pocket>/2] + #<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_probed> = #5061
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in X, X Hint + Step Off Width at Rapid Speed)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<x_hint_boss_pocket> + #<step_off_width> + #<xy_clearance>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(probed center calulation)
#<x_center_probed> = [[#<x_minus_probed> + #<x_plus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_minus_probed> - #<x_plus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> - #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Probe Y Positioning Move, Y hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y-[[#<y_hint_boss_pocket>/2] + #<step_off_width>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_probed> = #5062
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in Y, Y Hint + Step Off Width at Rapid Speed)
G91
F[#<probe_traverse_fr>]
G38.3 Y[#<y_hint_boss_pocket> + #<step_off_width> + #<xy_clearance>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calulation)
#<y_center_probed> = [[#<y_minus_probed> + #<y_plus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_minus_probed> - #<y_plus_probed>]
(Completed probed width calculations)
#<y_probed_width> = [#<raw_width> - #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>] Y[#<y_center_probed>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record XY Zero in selected WCO)
G10 L2 P#5220 X[#<x_center_probed> + #<workspace_x>] Y[#<y_center_probed> + #<workspace_y>]
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_rect_boss> endsub
M2 (end program)

View File

@@ -0,0 +1,139 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe rect pocket center measure x and widths, find xy center position)
(Start probe position is over left side edge of pocket wall)
(inside the step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_rect_pocket> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<x_hint_boss_pocket> = #3026 (=0)
#<y_hint_boss_pocket> = #3027 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_rect_pocket> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3026][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_plus_probed> - #<x_minus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
(Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Call sub "probe_y_plus" to Probe Y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][3017][#3018 + #3027 / 2][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus" to Probe Y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3027][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_plus_probed> - #<y_minus_probed>]
(Completed probed width calculations)
#<y_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record X Zero in selected WCO)
G10 L2 P#5220 X[#<x_center_probed> + #<workspace_x>] Y[#<y_center_probed> + #<workspace_y>]
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_rect_pocket> endsub
M2 (end program)

View File

@@ -0,0 +1,121 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe rect pocket center measure x and y widths, find xy center position)
(Start probe position is rough center of pocket probe tip below top edge)
(ensure all settings have been set properly according to help diagrams)
o<probe_rect_pocket_center_start> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<x_hint_boss_pocket> = #3026 (=0)
#<y_hint_boss_pocket> = #3027 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_rect_pocket_center_start> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][3017][#3018 + #3026 / 2][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3026][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_plus_probed> - #<x_minus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
(Probe Completion Move to X Zero, Y Zero)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Call sub "probe_y_plus" to Probe Y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][3017][#3018 + #3027 / 2][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus" to Probe Y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3027][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_plus_probed> - #<y_minus_probed>]
(Completed probed width calculations)
#<y_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record X and Y Zero in selected WCO)
G10 L2 P#5220 X[#<x_center_probed> + #<workspace_x>] Y[#<y_center_probed> + #<workspace_y>]
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_rect_pocket_center_start> endsub
M2 (end program)

View File

@@ -0,0 +1,129 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Ridge in X Axis to find center and z 0 position)
(Start probe position is over center of stock in the X axis)
(within max z distance, ensure all settings have been)
(set properly according to help diagrams)
o<probe_ridge_x> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<x_hint_ridge_valley> = #3028 (=0)
#<y_hint_ridge_valley> = #3029 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_z> = #[5203 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_ridge_x> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, X hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[[#<x_hint_ridge_valley>/2] + #<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_probed> = #5061
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in X, X Hint + Step Off Width at Rapid Speed)
F[#<probe_traverse_fr>]
G38.3 X[#<x_hint_ridge_valley> + #<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(probed center calulation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_minus_probed> - #<x_plus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> - #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
(Probe Completion Move to Z Clearance Plane, and X Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record X Zero in selected WCO)
G10 L2 P#5220 X[#<x_center_probed> + #<workspace_x>]
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_ridge_x> endsub
M2 (end program)

View File

@@ -0,0 +1,129 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Ridge in Y Axis to find center and z 0 position)
(Start probe position is over center of stock in the Y axis)
(within max z distance, ensure all settings have been)
(set properly according to help diagrams)
o<probe_ridge_y> sub
(uses NGCGUI style arg spec)
#<probe_tool_number> = #3014
#<probe_slow_fr> = #3015
#<probe_fast_fr> = #3016
#<probe_traverse_fr> = #3017
#<max_xy_distance> = #3018
#<xy_clearance> = #3019
#<max_z_distance> = #3020
#<z_clearance> = #3021
#<extra_probe_depth> = #3022
#<step_off_width> = #3023
#<edge_width> = #3024
#<x_hint_ridge_valley> = #3028
#<y_hint_ridge_valley> = #3029
#<probe_mode> = #3030
#<calibration_offset> = #3032
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_y> = #[5202 + [20 * #5220]]
#<workspace_z> = #[5203 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_ridge_y> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe Y Positioning Move, Y hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y-[[#<y_hint_ridge_valley>/2] + #<step_off_width>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_probed> = #5062
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in Y, Y Hint + Step Off Width at Rapid Speed)
F[#<probe_traverse_fr>]
G38.3 Y[#<y_hint_ridge_valley> + #<step_off_width>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calulation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_minus_probed> - #<y_plus_probed>]
(Completed probed width calculations)
#<y_probed_width> = [#<raw_width> - #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
(Probe Completion Move to Z Clearance Plane, and X Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record Y Zero in selected WCO)
G10 L2 P#5220 Y[#<y_center_probed> + #<workspace_y>]
(Probe Completion Move to Z Clearance Plane, and X Zero, Y Zero)
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_ridge_y> endsub
M2 (end program)

View File

@@ -0,0 +1,91 @@
(author: Chris P)
(version: 0.4)
(date: 06/27/24)
(Probe right top side for x,z 0,0 position)
(Start probe position is over right side edge of stock)
(inside the step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<Probe_right_top_side> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<Probe_right_top_side> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_zero_edge> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_right_top_side> return
o110 endif
(Probe Completion Move to Z Clearance Plane, and Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_minus_zero_edge>]
(probe mode rules for WCO or probe position measuring only)
o120 if [#<probe_mode> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_minus_zero_edge> + #<workspace_x>]
o120 endif
(Reinstate Feedrate Override)
M50 P1
o<Probe_right_top_side> endsub
M2 (end program)

View File

@@ -0,0 +1,293 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Boss in X and Y Axes, find center, Diam and z 0 position)
(Start probe position is over center of stock in X and Y axis)
(within max z distance, ensure all settings have been)
(set properly according to help diagrams)
o<probe_round_boss> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<diameter_hint> = #3025 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
#<workspace_z> = #[5203 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_round_boss> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, X hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[[#<diameter_hint> / 2] + [#<step_off_width>]]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_probed> = #5061
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in X, X Hint + Step Off Width at Rapid Speed)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<diameter_hint> + #<step_off_width> + #<xy_clearance>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(probed center calulation)
#<x_center_probed> = [[#<x_minus_probed> + #<x_plus_probed>] / 2]
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Probe Y Positioning Move, Y hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y-[[#<diameter_hint> / 2] + [#<step_off_width>]]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_probed> = #5062
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in Y, Y Hint + Step Off Width at Rapid Speed)
G91
F[#<probe_traverse_fr>]
G38.3 Y[#<diameter_hint> + #<step_off_width> + #<xy_clearance>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calulation)
#<y_center_probed> = [[#<y_minus_probed> + #<y_plus_probed>] / 2]
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
(Move to z clearance plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Move to Y Center)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
(Probe X Positioning Move, X hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[[#<diameter_hint> / 2] + [#<step_off_width>]]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_probed> = #5061
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in X, X Hint + Step Off Width at Rapid Speed)
F[#<probe_traverse_fr>]
G38.3 X[#<diameter_hint> + #<step_off_width> + #<xy_clearance>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(probed center calulation)
#<x_center_probed> = [[#<x_minus_probed> + #<x_plus_probed>] / 2]
(calculate X Width Probed)
o110 if [#<x_minus_probed> GT #<x_plus_probed>]
#<x_raw_width> = [#<x_minus_probed> - #<x_plus_probed>]
o110 else
#<x_raw_width> = [#<x_plus_probed> - #<x_minus_probed>]
o110 endif
(Completed probed width calculations)
#<x_probed_width> = [#<x_raw_width> - #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Probe Y Positioning Move, Y hint/2 + Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y-[[#<diameter_hint> / 2] + [#<step_off_width>]]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_probed> = #5062
(first side Probe Completion Move to Z Clearance Plane)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(Positioning move in Y, Y Hint + Step Off Width at Rapid Speed)
F[#<probe_traverse_fr>]
G38.3 Y[#<diameter_hint> + #<step_off_width> + #<xy_clearance>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calulation)
#<y_center_probed> = [[#<y_minus_probed> + #<y_plus_probed>] / 2]
(calculate Y Width Probed)
o120 if [#<y_minus_probed> GT #<y_plus_probed>]
#<y_raw_width> = [#<y_minus_probed> - #<y_plus_probed>]
o120 else
#<y_raw_width> = [#<y_plus_probed> - #<y_minus_probed>]
o120 endif
(Completed probed width calculations)
#<y_probed_width> = [#<y_raw_width> - #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
#<averaged_diam> = [[#<x_probed_width> + #<y_probed_width>] / 2]
#1010 = #<averaged_diam>
(DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}])
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>] Y[#<y_center_probed>]
#<x_zero> = [#<x_center_probed> + #<workspace_x>]
#<y_zero> = [#<y_center_probed> + #<workspace_y>]
(probe mode rules for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record XY Zero in selected WCO)
G10 L2 P#5220 X[#<x_zero>] Y[#<y_zero>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_round_boss> endsub
M2 (end program)

View File

@@ -0,0 +1,184 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe round pocket center measure x and y Diam, find xy center position)
(Start probe position is over left side edge of pocket wall)
(inside the step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_round_pocket> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<diameter_hint> = #3025 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_round_pocket> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x-)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
(Probe Completion Move to Z Clearance Plane, and X Zero)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Call sub "probe_y_plus" to Probe Y+)
o<probe_y_plus> call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus" to Probe Y-)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
(Probe Completion Move to Z Clearance Plane, Y Zero)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
(Call sub "probe_x_minus" to Probe x-)
o<probe_x_minus> call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_plus_probed> - #<x_minus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Call sub "probe_y_plus" to Probe Y+)
o<probe_y_plus> call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus" to Probe Y-)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_plus_probed> - #<y_minus_probed>]
(Completed probed diameter calculations)
#<y_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
#<averaged_diam> = [[#<x_probed_width> + #<y_probed_width>] / 2]
#1010 = #<averaged_diam>
(DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}])
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record Y Zero in selected WCO)
G10 L2 P#5220 X[#<x_center_probed> + #<workspace_x>]
G10 L2 P#5220 Y[#<y_center_probed> + #<workspace_y>]
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_round_pocket> endsub
M2 (end program)

View File

@@ -0,0 +1,167 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe round pocket center start measure x and y Diam, find xy center position)
(Start probe position is rough center of pocket a safe distance below top edge)
(no z move will be initiated in this routine. end position is hole center)
(ensure all settings have been set properly according to help diagrams)
o<probe_round_pocket_center_start> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<diameter_hint> = #3025 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_round_pocket_center_start> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
(Call sub "probe_x_minus" to Probe x-)
o<probe_x_minus> call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
(Probe Completion Move to X Zero)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Call sub "probe_y_plus" to Probe Y+)
o<probe_y_plus> call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus" to Probe Y-)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
(Probe Completion Move to Y Zero)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
(Call sub "probe_x_minus" to Probe x-)
o<probe_x_minus> call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_plus_probed> - #<x_minus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(Call sub "probe_y_plus" to Probe Y+)
o<probe_y_plus> call [#3014][#3015][#3016][3017][#3018 + #3025 / 2][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus" to Probe Y-)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3025][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_plus_probed> - #<y_minus_probed>]
(Completed probed diameter calculations)
#<y_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
#<averaged_diam> = [[#<x_probed_width> + #<y_probed_width>] / 2]
#1010 = #<averaged_diam>
(DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}])
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record Y Zero in selected WCO)
G10 L2 P#5220 X[#<x_center_probed> + #<workspace_x>]
G10 L2 P#5220 Y[#<y_center_probed> + #<workspace_y>]
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_round_pocket_center_start> endsub
M2 (end program)

View File

@@ -0,0 +1,77 @@
(author: Chris P)
(version: 0.0)
(date: 12/26/24)
(Probe Spindle Nose in Z Minus direction over tool setter and set Spindle Zero Distance)
(Start probe position is over toolsetter platter within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_spindle_nose> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_fast_fr> = #3004 (=10.0)
#<probe_slow_fr> = #3005 (=0)
#<probe_traverse_fr> = #3006 (=50)
#<max_z_distance> = #3007 (=12.5)
#<retract_distance> = #3009 (=0.1000)
(Cancel G92 offsets)
G92.1
o100 if [2 EQ 2]
G49
o100 endif
#<offset_z> = #5422
(Initial Fast Z- Probe)
G91
F[#<probe_fast_fr>]
G38.2 Z-[#<max_z_distance>]
#<z_minus_probed> = #5063
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] Z#<z>
F[#<probe_fast_fr>]
(return from sub)
o<probe_spindle_nose> return
o110 endif
(Move up retract_distance height for slow probe)
G90
G1 F[#<probe_traverse_fr>] Z[#<z_minus_probed> + #<retract_distance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow Z- Probe)
G91
F[#<probe_slow_fr>]
G38.2 Z-[#<retract_distance> * 2]
#<z_minus_probed> = #5063
G90
G1 F[#<probe_traverse_fr>] Z[#<z_minus_probed> + #<retract_distance>]
o120 endif
(defines the edge as z_probed_position for DRO reporting)
#<z_minus_probed_position> = #<z_minus_probed>
(output to gui DRO "Z PROBED POSITION")
#1009 = #<z_minus_probed_position>
#3010 = [ABS[#<z_minus_probed_position> - #<offset_z>]]
#<max_z_travel_default> = [#3010 * 1.001]
#3007 = #<max_z_travel_default>
(DEBUG, EVAL[vcp.getWidget{"z_minus_probed_position"}.setValue{#1009}])
(DEBUG, EVAL[vcp.getWidget{"spindle_zero_height_3010"}.setValue{#3010}])
(DEBUG, EVAL[vcp.getWidget{"z_max_travel_3007"}.setValue{#3007}])
G53 G0 Z0.0
o<probe_spindle_nose> endsub
M2 (end program)

View File

@@ -0,0 +1,131 @@
(author: Chris P)
(version: 0.4)
(date: 06/27/24)
(Probe back top edge angle for y,z 0,0 position and edge angle)
(Start probe position is over back edge of stock, set edge width,)
(step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_top_back_edge_angle> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<wco_rotation> = #3031 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
(set rotation offset to zero for new probe cycle)
G10 L2 P[#5220] R0
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_top_back_edge_angle> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
#<x_start_position> = #5420
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe Y Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y[#<step_off_width>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_zero_edge_start> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_top_back_edge_angle> return
o110 endif
(edge width move to edge second probing point)
G91
F[#<probe_fast_fr>]
G38.3 X-[#<edge_width>]
(Call sub "probe_y_minus" to Probe y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_minus_zero_edge_end> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_top_back_edge_angle> return
o120 endif
#<edge_delta> = [#<y_minus_zero_edge_start> - #<y_minus_zero_edge_end>]
#<edge_angle> = [ATAN [#<edge_delta>] / [#<edge_width>]]
#1011 = #<edge_delta>
(DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}])
#1012 = #<edge_angle>
(DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}])
(Probe Completion Move to Z Clearance Plane, and Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_start_position>] Y[#<y_minus_zero_edge_start>]
(probe mode rules for WCO, Rotation and probe position measuring only)
o130 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_start_position>] Y[#<y_minus_zero_edge_start> + #<workspace_y>]
o130 endif
(probe mode rules for WCO, Rotation and probe position measuring only)
o140 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 1]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_start_position>] Y[#<y_minus_zero_edge_start> + #<workspace_y>] R[#<edge_angle>]
o140 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_top_back_edge_angle> endsub
M2 (end program)

View File

@@ -0,0 +1,131 @@
(author: Chris P)
(version: 0.5)
(date: 06/27/24)
(Probe top front edge angle for y,z 0,0 position and edge angle)
(Start probe position is over front edge of stock, set edge width,)
(step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_top_front_edge_angle> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<wco_rotation> = #3031 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
(set rotation offset to zero for new probe cycle)
G10 L2 P[#5220] R0
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_top_front_edge_angle> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
#<x_start_position> = #5420
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe Y Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y-[#<step_off_width>]
(Probe Y Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_zero_edge_start> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_top_front_edge_angle> return
o110 endif
(edge width move to edge second probing point)
G91
F[#<probe_fast_fr>]
G38.3 X[#<edge_width>]
(Call sub "probe_y_plus" to Probe y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_zero_edge_end> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing Y Sub returned edge parameter, aborting)
M50 P1
o<probe_top_front_edge_angle> return
o120 endif
#<edge_delta> = [#<y_plus_zero_edge_end> - #<y_plus_zero_edge_start>]
#<edge_angle> = [ATAN [#<edge_delta>] / [#<edge_width>]]
#1011 = #<edge_delta>
(DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}])
#1012 = #<edge_angle>
(DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}])
(Probe Completion Move to Z Clearance Plane, and Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_start_position>] Y[#<y_plus_zero_edge_start>]
(probe mode rules for WCO, Rotation and probe position measuring only)
o130 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_start_position>] Y[#<y_plus_zero_edge_start> + #<workspace_y>]
o130 endif
(probe mode rules for WCO, Rotation and probe position measuring only)
o140 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 1]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_start_position>] Y[#<y_plus_zero_edge_start> + #<workspace_y>] R[#<edge_angle>]
o140 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_top_front_edge_angle> endsub
M2 (end program)

View File

@@ -0,0 +1,131 @@
(author: Chris P)
(version: 0.4)
(date: 06/27/24)
(Probe top left edge angle for y,z 0,0 position and edge angle)
(Start probe position is over left edge of stock, set edge width,)
(step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_top_left_edge_angle> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<wco_rotation> = #3031 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
(set rotation offset to zero for new probe cycle)
G10 L2 P[#5220] R0
#<workspace_x> = #[5201 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_top_left_edge_angle> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
#<y_start_position> = #5421
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X-[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_zero_edge_start> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_top_left_edge_angle> return
o110 endif
(edge width move to edge second probing point)
G91
F[#<probe_fast_fr>]
G38.3 Y-[#<edge_width>]
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_plus_zero_edge_end> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_top_left_edge_angle> return
o120 endif
#<edge_delta> = [#<x_plus_zero_edge_end> - #<x_plus_zero_edge_start>]
#<edge_angle> = [ATAN [#<edge_delta>] / [#<edge_width>]]
#1011 = #<edge_delta>
(DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}])
#1012 = #<edge_angle>
(DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}])
(Probe Completion Move to Z Clearance Plane, and Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_plus_zero_edge_start>] Y[#<y_start_position>]
(probe mode rules for WCO, Rotation and probe position measuring only)
o130 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_plus_zero_edge_start> + #<workspace_x>] Y[#<y_start_position>]
o130 endif
(probe mode rules for WCO, Rotation and probe position measuring only)
o140 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 1]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_plus_zero_edge_start> + #<workspace_x>] Y[#<y_start_position>] R[#<edge_angle>]
o140 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_top_left_edge_angle> endsub
M2 (end program)

View File

@@ -0,0 +1,131 @@
(author: Chris P)
(version: 0.4)
(date: 06/27/24)
(Probe top right edge angle for y,z 0,0 position and edge angle)
(Start probe position is over right edge of stock, set edge width,)
(step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_top_right_edge_angle> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<probe_mode> = #3030 (=0)
#<wco_rotation> = #3031 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
(set rotation offset to zero for new probe cycle)
G10 L2 P[#5220] R0
#<workspace_x> = #[5201 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_top_right_edge_angle> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probing depth from the z probed clearance height, used for z moves)
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
#<y_start_position> = #5421
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_zero_edge_start> = #<_value>
(value returned safety check, aborts if no value returned)
o110 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_top_right_edge_angle> return
o110 endif
(edge width move to edge second probing point)
G91
F[#<probe_fast_fr>]
G38.3 Y[#<edge_width>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_zero_edge_end> = #<_value>
(value returned safety check, aborts if no value returned)
o120 if [#<probe_mode> EQ 1 AND #<_value_returned> NE 1]
(DEBUG, Missing X Sub returned edge parameter, aborting)
M50 P1
o<probe_top_right_edge_angle> return
o120 endif
#<edge_delta> = [#<x_minus_zero_edge_start> - #<x_minus_zero_edge_end>]
#<edge_angle> = [ATAN [#<edge_delta>] / [#<edge_width>]]
#1011 = #<edge_delta>
(DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}])
#1012 = #<edge_angle>
(DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}])
(Probe Completion Move to Z Clearance Plane, and Y Zero)
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_minus_zero_edge_start>] Y[#<y_start_position>]
(probe mode rules for WCO, Rotation and probe position measuring only)
o130 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 0]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_minus_zero_edge_start> + #<workspace_x>] Y[#<y_start_position>]
o130 endif
(probe mode rules for WCO, Rotation and probe position measuring only)
o140 if [#<probe_mode> EQ 0 AND #<wco_rotation> EQ 1]
(Record Zero in selected axes and WCO)
G10 L2 P#5220 X[#<x_minus_zero_edge_start> + #<workspace_x>] Y[#<y_start_position>] R[#<edge_angle>]
o140 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_top_right_edge_angle> endsub
M2 (end program)

View File

@@ -0,0 +1,109 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe valley in x, find Z0, X0 valley center position)
(Start probe position is over left side edge of valley wall)
(inside the step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_valley_x> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<x_hint_ridge_valley> = #3028 (=0)
#<y_hint_ridge_valley> = #3029 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_valley_x> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe X Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 X[#<step_off_width>]
(Probe X Positioning Move, to Probing Depth)
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3028][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_plus_probed> - #<x_minus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
(Probe Completion Move to Z Clearance Plane, and X Zero)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record X Zero in selected WCO)
G10 L2 P#5220 X[#<x_center_probed> + #<workspace_x>]
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_valley_x> endsub
M2 (end program)

View File

@@ -0,0 +1,91 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe valley in x, find X zero valley center position)
(Start probe position is centered between valley walls)
(ensure all settings have been set properly according to help diagrams)
o<probe_valley_x_center_start> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<x_hint_ridge_valley> = #3028 (=0)
#<y_hint_ridge_valley> = #3029 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_valley_x_center_start> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
(Call sub "probe_x_minus" to Probe x- side of Workpiece)
o<probe_x_minus> call [#3014][#3015][#3016][3017][#3018 + #3028 / 2][#3019][#3032]
#<x_minus_probed> = #5061
(Call sub "probe_x_plus" to Probe x+ side of Workpiece)
o<probe_x_plus> call [#3014][#3015][#3016][3017][#3018 + #3028][#3019][#3032]
#<x_plus_probed> = #5061
(probed center calculation)
#<x_center_probed> = [[#<x_plus_probed> + #<x_minus_probed>] / 2]
(calculate X Width Probed)
#<raw_width> = [#<x_plus_probed> - #<x_minus_probed>]
(Completed probed width calculations)
#<x_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1001 = #<x_probed_width>
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1001}])
#1002 = #<x_center_probed>
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1002}])
(Probe Completion Move to X Zero)
G90
F[#<probe_traverse_fr>]
G38.3 X[#<x_center_probed>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record X Zero in selected WCO)
G10 L2 P#5220 X[#<x_center_probed> + #<workspace_x>]
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_valley_x_center_start> endsub
M2 (end program)

View File

@@ -0,0 +1,107 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe valley in Y, find Z0, Y0 valley center position)
(Start probe position is over back side edge of valley wall)
(inside the step off width distance and within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_valley_y> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<x_hint_ridge_valley> = #3028 (=0)
#<y_hint_ridge_valley> = #3029 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_valley_y> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
#<z_probe_stack> = [#<z_clearance> + #<probe_diameter> + #<extra_probe_depth>]
(Call sub "probe_z_minus_sub" to Probe top of Workpiece)
o<probe_z_minus_sub> call [#3014][#3015][#3016][#3017][#3020][#3021][#3030]
(Probe Y Positioning Move, Step Off Width)
G91
F[#<probe_traverse_fr>]
G38.3 Y-[#<step_off_width>]
F[#<probe_fast_fr>]
G38.3 Z-[#<z_probe_stack>]
(Call sub "probe_y_plus" to Probe Y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][#3017][#3018][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus_sub" to Probe Y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3029][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_plus_probed> - #<y_minus_probed>]
(Completed probed width calculations)
#<y_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
(Probe Completion Move to Z Clearance Plane, and X Zero)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
G91
F[#<probe_traverse_fr>]
G38.3 Z[#<z_probe_stack>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record X Zero in selected WCO)
G10 L2 P#5220 Y[#<y_center_probed> + #<workspace_y>]
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_valley_y> endsub
M2 (end program)

View File

@@ -0,0 +1,91 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe valley in Y find Y0 valley center position)
(Start probe position is rough center between valley walls)
(ensure all settings have been set properly according to help diagrams)
o<probe_valley_y_center_start> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<edge_width> = #3024 (=0.5000)
#<x_hint_ridge_valley> = #3028 (=0)
#<y_hint_ridge_valley> = #3029 (=0)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_valley_y_center_start> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(remove probe tip diam and cal offset from probed width calculations)
#<probe_diameter_offset> = [#<probe_diameter> - [#<calibration_offset> * 2]]
(Call sub "probe_y_plus" to Probe Y+ side of Workpiece)
o<probe_y_plus> call [#3014][#3015][#3016][3017][#3018 + #3029 / 2][#3019][#3032]
#<y_plus_probed> = #5062
(Call sub "probe_y_minus_sub" to Probe Y- side of Workpiece)
o<probe_y_minus> call [#3014][#3015][#3016][3017][#3018 + #3029][#3019][#3032]
#<y_minus_probed> = #5062
(probed center calculation)
#<y_center_probed> = [[#<y_plus_probed> + #<y_minus_probed>] / 2]
(calculate Y Width Probed)
#<raw_width> = [#<y_plus_probed> - #<y_minus_probed>]
(Completed probed width calculations)
#<y_probed_width> = [#<raw_width> + #<probe_diameter_offset>]
#1003 = #<y_probed_width>
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1003}])
#1004 = #<y_center_probed>
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1004}])
(Probe Completion Move to Z Clearance Plane, and X Zero)
G90
F[#<probe_traverse_fr>]
G38.3 Y[#<y_center_probed>]
(probe mode rules for WCO or probe position measuring only)
o110 if [#<probe_mode> EQ 0]
(Record X Zero in selected WCO)
G10 L2 P#5220 Y[#<y_center_probed> + #<workspace_y>]
o110 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_valley_y_center_start> endsub
M2 (end program)

View File

@@ -0,0 +1,85 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe X Minus direction and set X 0 in current WCO)
(Start probe position to the right side edge of stock)
(inside the max xy distance with the probe tip below the stock top edge)
(ensure all settings have been set properly according to help diagrams)
o<probe_x_minus> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #1
#<probe_slow_fr> = #2
#<probe_fast_fr> = #3
#<probe_traverse_fr> = #4
#<max_xy_distance> = #5
#<xy_clearance> = #6
#<calibration_offset> = #7
(Cancel G92 offsets)
G92.1
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
o<probe_x_minus> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(Current X Position including offsets in current program units)
#<x> = #5420
(Initiate Fast X- Probe)
G91
F[#<probe_fast_fr>]
G38.2 X-[#<max_xy_distance>]
#<x_minus_probed> = #5061
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] X#<x>
F[#<probe_fast_fr>]
(return from sub)
o<probe_x_minus> return
o110 endif
(Move to xy_clearance distance for slow probe)
G90
G1 F[#<probe_traverse_fr>] X[#<x_minus_probed> + #<xy_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow X- Probe)
G91
F[#<probe_slow_fr>]
G38.2 X-[#<xy_clearance> * 2]
#<x_minus_probed> = #5061
G90
G1 F[#<probe_traverse_fr>] X[#<x_minus_probed> + #<xy_clearance>]
o120 endif
#<x_minus_zero_edge> = [#<x_minus_probed> - #<probe_center_offset>]
(defines the edge as x_probed_position for DRO reporting)
#<x_minus_probed_position> = #<x_minus_zero_edge>
(output to gui DRO "X PROBED POSITION")
#1005 = #<x_minus_probed_position>
(DEBUG, EVAL[vcp.getWidget{"x_minus_probed_position"}.setValue{#1005}])
o<probe_x_minus> endsub [#<x_minus_zero_edge>]
M2 (end program)

View File

@@ -0,0 +1,105 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe X Minus direction and set X 0 in current WCO)
(Start probe position to the right side edge of stock)
(inside the max xy distance with the probe tip below the stock top edge)
(ensure all settings have been set properly according to help diagrams)
o<probe_x_minus_wco> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_x_minus_wco> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(Current X Position including offsets in current program units)
#<x> = #5420
(Initiate Fast X- Probe)
G91
F[#<probe_fast_fr>]
G38.2 X-[#<max_xy_distance>]
#<x_minus_probed> = #5061
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] X#<x>
F[#<probe_fast_fr>]
M50 P1
o<probe_x_minus_wco> return
o110 endif
(Move to xy_clearance distance for slow probe)
G90
G1 F[#<probe_traverse_fr>] X[#<x_minus_probed> + #<xy_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow X- Probe)
G91
F[#<probe_slow_fr>]
G38.2 X-[#<xy_clearance> * 2]
#<x_minus_probed> = #5061
G90
G1 F[#<probe_traverse_fr>] X[#<x_minus_probed> + #<xy_clearance>]
o120 endif
#<x_minus_zero_edge> = [#<x_minus_probed> - #<probe_center_offset>]
(defines the edge as x_probed_position for DRO reporting)
#<x_minus_probed_position> = #<x_minus_zero_edge>
(output to gui DRO "X PROBED POSITION")
#1005 = #<x_minus_probed_position>
(DEBUG, EVAL[vcp.getWidget{"x_minus_probed_position"}.setValue{#1005}])
(probe mode rule for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record X Zero in selected WCO)
G10 L2 P#5220 X[#<x_minus_zero_edge> + #<workspace_x>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_x_minus_wco> endsub
M2 (end program)

View File

@@ -0,0 +1,85 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe X plus direction and set X 0 in current WCO)
(Start probe position to the left side edge of stock)
(inside the max xy distance with the probe tip below the stock top edge)
(ensure all settings have been set properly according to help diagrams)
o<probe_x_plus> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #1
#<probe_slow_fr> = #2
#<probe_fast_fr> = #3
#<probe_traverse_fr> = #4
#<max_xy_distance> = #5
#<xy_clearance> = #6
#<calibration_offset> = #7
(Cancel G92 offsets)
G92.1
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
o<probe_x_plus> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(Current X Position including offsets in current program units)
#<x> = #5420
(Initiate Fast X+ Probe)
G91
F[#<probe_fast_fr>]
G38.2 X[#<max_xy_distance>]
#<x_plus_probed> = #5061
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] X#<x>
F[#<probe_fast_fr>]
(return from sub)
o<probe_x_plus> return
o110 endif
(Move to xy_clearance distance for slow probe)
G90
G1 F[#<probe_traverse_fr>] X[#<x_plus_probed> - #<xy_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow X+ Probe)
G91
F[#<probe_slow_fr>]
G38.2 X[#<xy_clearance> * 2]
#<x_plus_probed> = #5061
G90
G1 F[#<probe_traverse_fr>] X[#<x_plus_probed> - #<xy_clearance>]
o120 endif
#<x_plus_zero_edge> = [#<x_plus_probed> + #<probe_center_offset>]
(defines the edge as x_probed_position for DRO reporting)
#<x_plus_probed_position> = #<x_plus_zero_edge>
(output to gui DRO "X PROBED POSITION")
#1006 = #<x_plus_probed_position>
(DEBUG, EVAL[vcp.getWidget{"x_plus_probed_position"}.setValue{#1006}])
o<probe_x_plus> endsub [#<x_plus_zero_edge>]
M2 (end program)

View File

@@ -0,0 +1,105 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe X plus direction and set X 0 in current WCO)
(Start probe position to the left side edge of stock)
(inside the max xy distance with the probe tip below the stock top edge)
(ensure all settings have been set properly according to help diagrams)
o<probe_x_plus_wco> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_x> = #[5201 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_x_plus_wco> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(Current X Position including offsets in current program units)
#<x> = #5420
(Initiate Fast X+ Probe)
G91
F[#<probe_fast_fr>]
G38.2 X[#<max_xy_distance>]
#<x_plus_probed> = #5061
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] X#<x>
F[#<probe_fast_fr>]
M50 P1
o<probe_x_plus_wco> return
o110 endif
(Move to xy_clearance distance for slow probe)
G90
G1 F[#<probe_traverse_fr>] X[#<x_plus_probed> - #<xy_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow X+ Probe)
G91
F[#<probe_slow_fr>]
G38.2 X[#<xy_clearance> * 2]
#<x_plus_probed> = #5061
G90
G1 F[#<probe_traverse_fr>] X[#<x_plus_probed> - #<xy_clearance>]
o120 endif
#<x_plus_zero_edge> = [#<x_plus_probed> + #<probe_center_offset>]
(defines the edge as x_probed_position for DRO reporting)
#<x_plus_probed_position> = #<x_plus_zero_edge>
(output to gui DRO "X PROBED POSITION")
#1006 = #<x_plus_probed_position>
(DEBUG, EVAL[vcp.getWidget{"x_plus_probed_position"}.setValue{#1006}])
(probe mode rule for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record X Zero in selected WCO)
G10 L2 P#5220 X[#<x_plus_zero_edge> + #<workspace_x>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_x_plus_wco> endsub
M2 (end program)

View File

@@ -0,0 +1,85 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Y Minus direction to locate edge, end at clearance distance)
(Start probe position to the back side edge of stock)
(inside the max xy distance with the probe tip below the stock top edge)
(ensure all settings have been set properly according to help diagrams)
o<probe_y_minus> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #1
#<probe_slow_fr> = #2
#<probe_fast_fr> = #3
#<probe_traverse_fr> = #4
#<max_xy_distance> = #5
#<xy_clearance> = #6
#<calibration_offset> = #7
(Cancel G92 offsets)
G92.1
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
o<probe_y_minus> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(Current Y Position including offsets in current program units)
#<y> = #5421
(Initiate Fast Y- Probe)
G91
F[#<probe_fast_fr>]
G38.2 y-[#<max_xy_distance>]
#<y_minus_probed> = #5062
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] Y#<y>
F[#<probe_fast_fr>]
(return from sub)
o<probe_y_minus> return
o110 endif
(Move to xy_clearance distance for slow probe)
G90
G1 F[#<probe_traverse_fr>] Y[#<y_minus_probed> + #<xy_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow Y- Probe)
G91
F[#<probe_slow_fr>]
G38.2 Y-[#<xy_clearance> * 2]
#<y_minus_probed> = #5062
G90
G1 F[#<probe_traverse_fr>] Y[#<y_minus_probed> + #<xy_clearance>]
o120 endif
#<y_minus_zero_edge> = [#5062 - #<probe_center_offset>]
(defines the edge as y_probed_position for DRO reporting)
#<y_minus_probed_position> = #<y_minus_zero_edge>
(output to gui DRO "Y PROBED POSITION")
#1007 = #<y_minus_probed_position>
(DEBUG, EVAL[vcp.getWidget{"y_minus_probed_position"}.setValue{#1007}])
o<probe_y_minus> endsub [#<y_minus_zero_edge>]
M2 (end program)

View File

@@ -0,0 +1,105 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Y Minus direction and set Y 0 in current WCO)
(Start probe position to the back side edge of stock)
(inside the max xy distance with the probe tip below the stock top edge)
(ensure all settings have been set properly according to help diagrams)
o<probe_y_minus_wco> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_y_minus_wco> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(Current Y Position including offsets in current program units)
#<y> = #5421
(Initiate Fast Y- Probe)
G91
F[#<probe_fast_fr>]
G38.2 y-[#<max_xy_distance>]
#<y_minus_probed> = #5062
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] Y#<y>
F[#<probe_fast_fr>]
M50 P1
o<probe_y_minus_wco> return
o110 endif
(Move to xy_clearance distance for slow probe)
G90
G1 F[#<probe_traverse_fr>] Y[#<y_minus_probed> + #<xy_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow Y- Probe)
G91
F[#<probe_slow_fr>]
G38.2 Y-[#<xy_clearance> * 2]
#<y_minus_probed> = #5062
G90
G1 F[#<probe_traverse_fr>] Y[#<y_minus_probed> + #<xy_clearance>]
o120 endif
#<y_minus_zero_edge> = [#5062 - #<probe_center_offset>]
(defines the edge as y_probed_position for DRO reporting)
#<y_minus_probed_position> = #<y_minus_zero_edge>
(output to gui DRO "Y PROBED POSITION")
#1007 = #<y_minus_probed_position>
(DEBUG, EVAL[vcp.getWidget{"y_minus_probed_position"}.setValue{#1007}])
(probe mode rule for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Y Zero in selected WCO)
G10 L2 P#5220 Y[#<y_minus_zero_edge> + #<workspace_y>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_y_minus_wco> endsub
M2 (end program)

View File

@@ -0,0 +1,85 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Y plus direction to locate edge, end at clearance distance)
(Start probe position to the front side edge of stock)
(inside the max xy distance with the probe tip below the stock top edge)
(ensure all settings have been set properly according to help diagrams)
o<probe_y_plus> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #1
#<probe_slow_fr> = #2
#<probe_fast_fr> = #3
#<probe_traverse_fr> = #4
#<max_xy_distance> = #5
#<xy_clearance> = #6
#<calibration_offset> = #7
(Cancel G92 offsets)
G92.1
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
o<probe_y_plus> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(Current Y Position including offsets in current program units)
#<y> = #5421
(Initiate Fast y+ Probe)
G91
F[#<probe_fast_fr>]
G38.2 Y[#<max_xy_distance>]
#<y_plus_probed> = #5062
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] Y#<y>
F[#<probe_fast_fr>]
(return from sub)
o<probe_y_plus> return
o110 endif
(Move to xy_clearance distance for slow probe)
G90
G1 F[#<probe_traverse_fr>] Y[#<y_plus_probed> - #<xy_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow Y+ Probe)
G91
F[#<probe_slow_fr>]
G38.2 Y[#<xy_clearance> * 2]
#<y_plus_probed> = #5062
G90
G1 F[#<probe_traverse_fr>] Y[#<y_plus_probed> - #<xy_clearance>]
o120 endif
#<y_plus_zero_edge> = [#5062 + #<probe_center_offset>]
(defines the edge as y_probed_position for DRO reporting)
#<y_plus_probed_position> = #<y_plus_zero_edge>
(output to gui DRO "Y PROBED POSITION")
#1008 = #<y_plus_probed_position>
(DEBUG, EVAL[vcp.getWidget{"y_plus_probed_position"}.setValue{#1008}])
o<probe_y_plus> endsub [#<y_plus_zero_edge>]
M2 (end program)

View File

@@ -0,0 +1,105 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Y plus direction and set Y 0 in current WCO)
(Start probe position to the front side edge of stock)
(inside the max xy distance with the probe tip below the stock top edge)
(ensure all settings have been set properly according to help diagrams)
o<probe_y_plus_wco> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_xy_distance> = #3018 (=0.5000)
#<xy_clearance> = #3019 (=0.1000)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<extra_probe_depth> = #3022 (=0.0000)
#<step_off_width> = #3023 (=0.5000)
#<probe_mode> = #3030 (=0)
#<calibration_offset> = #3032 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_y> = #[5202 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_y_plus_wco> return
o100 endif
(Probe Diameter)
#<probe_diameter> = #5410
(Probe Radius)
#<probe_radius> = [#<probe_diameter> / 2]
(Probe Centerline Offset)
#<probe_center_offset> = [#<probe_radius> - #<calibration_offset>]
(Current Y Position including offsets in current program units)
#<y> = #5421
(Initiate Fast y+ Probe)
G91
F[#<probe_fast_fr>]
G38.2 Y[#<max_xy_distance>]
#<y_plus_probed> = #5062
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] Y#<y>
F[#<probe_fast_fr>]
M50 P1
o<probe_y_plus_wco> return
o110 endif
(Move to xy_clearance distance for slow probe)
G90
G1 F[#<probe_traverse_fr>] Y[#<y_plus_probed> - #<xy_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow Y+ Probe)
G91
F[#<probe_slow_fr>]
G38.2 Y[#<xy_clearance> * 2]
#<y_plus_probed> = #5062
G90
G1 F[#<probe_traverse_fr>] Y[#<y_plus_probed> - #<xy_clearance>]
o120 endif
#<y_plus_zero_edge> = [#5062 + #<probe_center_offset>]
(defines the edge as y_probed_position for DRO reporting)
#<y_plus_probed_position> = #<y_plus_zero_edge>
(output to gui DRO "Y PROBED POSITION")
#1008 = #<y_plus_probed_position>
(DEBUG, EVAL[vcp.getWidget{"y_plus_probed_position"}.setValue{#1008}])
(probe mode rule for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Y Zero in selected WCO)
G10 L2 P#5220 Y[#<y_plus_zero_edge> + #<workspace_y>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_y_plus_wco> endsub
M2 (end program)

View File

@@ -0,0 +1,84 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Z Minus direction and set Z 0 in current WCO)
(Start probe position is over stock within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_z_minus_sub> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #1
#<probe_slow_fr> = #2
#<probe_fast_fr> = #3
#<probe_traverse_fr> = #4
#<max_z_distance> = #5
#<z_clearance> = #6
#<probe_mode> = #7
(Cancel G92 offsets)
G92.1
#<workspace_z> = #[5203 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
o<probe_z_minus_sub> return
o100 endif
(Current Z Position including offsets in current program units)
#<z> = #5422
(Initial Fast Z- Probe)
G91
F[#<probe_fast_fr>]
G38.2 Z-[#<max_z_distance>]
#<z_minus_probed> = #5063
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] Z#<z>
F[#<probe_fast_fr>]
(return from sub)
o<probe_z_minus_sub> return
o110 endif
(Move to z_clearance height for slow probe)
G90
G1 F[#<probe_traverse_fr>] Z[#<z_minus_probed> + #<z_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow Z- Probe)
G91
F[#<probe_slow_fr>]
G38.2 Z-[#<z_clearance> * 2]
#<z_minus_probed> = #5063
G90
G1 F[#<probe_traverse_fr>] Z[#<z_minus_probed> + #<z_clearance>]
o120 endif
(defines the edge as z_probed_position for DRO reporting)
#<z_minus_probed_position> = #<z_minus_probed>
(output to gui DRO "Z PROBED POSITION")
#1009 = #<z_minus_probed_position>
(DEBUG, EVAL[vcp.getWidget{"z_minus_probed_position"}.setValue{#1009}])
#<z_finish_height> = [#<z_minus_probed> + #<z_clearance>]
(probe mode rule for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Z zero in selected WCO)
G10 L2 P#5220 Z[#<z_minus_probed> + #<workspace_z>]
o<probe_z_minus_sub> return
o130 endif
o<probe_z_minus_sub> endsub [#<z_finish_height>]
M2 (end program)

View File

@@ -0,0 +1,91 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Probe Z Minus direction and set Z 0 in current WCO)
(Start probe position is over stock within max z distance)
(ensure all settings have been set properly according to help diagrams)
o<probe_z_minus_wco> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<probe_tool_number> = #3014 (=99)
#<probe_slow_fr> = #3015 (=0)
#<probe_fast_fr> = #3016 (=10.0)
#<probe_traverse_fr> = #3017 (=50)
#<max_z_distance> = #3020 (=0.5000)
#<z_clearance> = #3021 (=0.1000)
#<probe_mode> = #3030 (=0)
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
#<workspace_z> = #[5203 + [20 * #5220]]
(Probe Tool Safety Check)
o100 if [#5400 NE #<probe_tool_number>]
(DEBUG, Specified probe tool %d#<probe_tool_number> not in spindle, aborting)
M50 P1
o<probe_z_minus_wco> return
o100 endif
(Current Z Position including offsets in current program units)
#<z> = #5422
(Initial Fast Z- Probe)
G91
F[#<probe_fast_fr>]
G38.2 Z-[#<max_z_distance>]
#<z_minus_probed> = #5063
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<probe_traverse_fr>] Z#<z>
F[#<probe_fast_fr>]
(return from sub)
M50 P1
o<probe_z_minus_wco> return
o110 endif
(Move to z_clearance height for slow probe)
G90
G1 F[#<probe_traverse_fr>] Z[#<z_minus_probed> + #<z_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow Z- Probe)
G91
F[#<probe_slow_fr>]
G38.2 Z-[#<z_clearance> * 2]
#<z_minus_probed> = #5063
G90
G1 F[#<probe_traverse_fr>] Z[#<z_minus_probed> + #<z_clearance>]
o120 endif
(defines the edge as z_probed_position for DRO reporting)
#<z_minus_probed_position> = #<z_minus_probed>
(output to gui DRO "Z PROBED POSITION")
#1009 = #<z_minus_probed_position>
(DEBUG, EVAL[vcp.getWidget{"z_minus_probed_position"}.setValue{#1009}])
#<z_finish_height> = [#<z_minus_probed> + #<z_clearance>]
(probe mode rule for WCO or probe position measuring only)
o130 if [#<probe_mode> EQ 0]
(Record Z zero in selected WCO)
G10 L2 P#5220 Z[#<z_minus_probed> + #<workspace_z>]
o130 endif
(Reinstate Feedrate Override)
M50 P1
o<probe_z_minus_wco> endsub
M2 (end program)

View File

@@ -0,0 +1,45 @@
(author: Chris P)
(version: 0.3)
(date: 06/27/24)
(programmable coolant subroutine for aiming the coolant nozzle)
(settings for setup are displayed on probe basic setting page)
(in the programmable coolant constants container.)
(calculations assume coolant nozzle is located on the right side of the spindle)
o<program_coolant> sub
(PRINT, o<program_coolant>)
#<activate_programmable_coolant> = #3000
#<horizontal_spindle_nozzle_dist> = #3001
#<vertical_spindle_nozzle_dist> = #3002
#<pc_angle_offset> = #3003
o100 if [#<activate_programmable_coolant> EQ 0]
o100 return
o100 endif
#<pc_tool_length> = #5403
#<tool_diameter> = #5410
#<tool_radius_offset_dist> = [#<tool_diameter> / 2]
#<tool_diameter_offset_dist> = [#<horizontal_spindle_nozzle_dist> - #<tool_radius_offset_dist>]
#<tool_tip_position> = [[#<vertical_spindle_nozzle_dist>] + [#<pc_tool_length>]]
#<coolant_abs_angle> = [ATAN[#<tool_tip_position>] / [#<tool_diameter_offset_dist>]]
#<coolant_final_angle> = [[#<coolant_abs_angle>] + [#<pc_angle_offset>]]
#1000 = #<coolant_final_angle>
(DEBUG, EVAL[vcp.getWidget{"coolant_final_angle"}.setValue{#1000}])
M68 E0 Q[#<coolant_final_angle>]
(PRINT, o<program_coolant> endsub)
o<program_coolant> endsub
M2 (end program)

View File

@@ -0,0 +1,139 @@
(author: Chris P, Lcvette)
(version: 0.1)
(date: 02/8/25)
(This sub will write user parameters to the var file and ui widgets)
(Determine ATC Rack Position, Pocket Order, and Clearance Direction)
(Requires Pockets to be aligned parallel with X or Y Axis Travels)
o<rack_id_calc> sub
#<rack_traverse_speed_3980> = #1 (0)
#<rack_z_load_height_3981> = #2 (0)
#<rack_safe_z_height_3982> = #3 (0)
#<rack_pocket_1_x_3983> = #4 (0)
#<rack_pocket_1_y_3984> = #5 (0)
#<rack_pocket_2_x_3985> = #6 (0)
#<rack_pocket_2_y_3986> = #7 (0)
#<pocket_1_x_clearance_3987> = #8 (0)
#<pocket_1_y_clearance_3988> = #9 (0)
#<rack_atc_user_1_3974> = #10 (0)
#<rack_atc_user_2_3975> = #11 (0)
#<rack_atc_user_3_3976> = #12 (0)
#<rack_atc_user_4_3977> = #13 (0)
#<rack_atc_user_5_3978> = #14 (0)
#3974 = #<rack_atc_user_1_3974>
#3975 = #<rack_atc_user_2_3975>
#3976 = #<rack_atc_user_3_3976>
#3977 = #<rack_atc_user_4_3977>
#3978 = #<rack_atc_user_5_3978>
#3980 = #<rack_traverse_speed_3980>
#3981 = #<rack_z_load_height_3981>
#3982 = #<rack_safe_z_height_3982>
#3983 = #<rack_pocket_1_x_3983>
#3984 = #<rack_pocket_1_y_3984>
#3985 = #<rack_pocket_2_x_3985>
#3986 = #<rack_pocket_2_y_3986>
#3987 = #<pocket_1_x_clearance_3987>
#3988 = #<pocket_1_y_clearance_3988>
(Initialize ALL variables first)
#3979 = 0
#<pocket_order> = 0
#<clearance_direction> = 0
#<rack_id> = 0
#<temp> = 0
(Pull ini pocket count and write to ui)
o100 if [EXISTS[#<_ini[atc]pockets>]]
#<number_of_pockets> = #<_ini[atc]pockets>
#3973 = #<number_of_pockets>
(DEBUG, EVAL[vcp.getWidget{"rack_pocket_count"}.setValue{#3973}])
o100 endif
(Check for duplicate pocket positions)
o110 if [#<rack_pocket_1_x_3983> EQ #<rack_pocket_2_x_3985>]
o111 if [#<rack_pocket_1_y_3984> EQ #<rack_pocket_2_y_3986>]
(PRINT, "Error: Duplicate pocket positions detected!")
#3979 = 0
(DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}])
o<rack_id_calc> return
o111 endif
o110 endif
(Check if row is parallel to the Y-axis)
o120 if [#<rack_pocket_1_x_3983> EQ #<rack_pocket_2_x_3985>]
(PRINT, "Row is parallel to Y-axis")
(Determine pocket order)
o121 if [#<rack_pocket_2_y_3986> GT #<rack_pocket_1_y_3984>]
#<pocket_order> = 1 (-Y to +Y)
o121 else
#<pocket_order> = 2 (+Y to -Y)
o121 endif
(Determine clearance direction - MUST be in X)
o122 if [#<pocket_1_x_clearance_3987> GT #<rack_pocket_1_x_3983>]
#<clearance_direction> = 1 (+X)
o122 elseif [#<pocket_1_x_clearance_3987> LT #<rack_pocket_1_x_3983>]
#<clearance_direction> = 2 (-X)
o122 else
(PRINT, "Error: Clearance direction must be perpendicular to pocket row!")
#3979 = 0
(DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}])
o<rack_id_calc> return
o122 endif
(Assign rack_id - break down calculation steps)
#<temp> = [#<pocket_order> - 1]
#<temp> = [#<temp> * 2]
#<temp> = [#<temp> + #<clearance_direction>]
#<rack_id> = #<temp>
#3979 = #<rack_id>
(DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}])
o<rack_id_calc> return
o120 endif
(Check if row is parallel to the X-axis)
o130 if [#<rack_pocket_1_y_3984> EQ #<rack_pocket_2_y_3986>]
(PRINT, "Row is parallel to X-axis")
(Determine pocket order)
o131 if [#<rack_pocket_2_x_3985> GT #<rack_pocket_1_x_3983>]
#<pocket_order> = 1 (-X to +X)
o131 else
#<pocket_order> = 2 (+X to -X)
o131 endif
(Determine clearance direction - MUST be in Y)
o132 if [#<pocket_1_y_clearance_3988> GT #<rack_pocket_1_y_3984>]
#<clearance_direction> = 1 (+Y)
o132 elseif [#<pocket_1_y_clearance_3988> LT #<rack_pocket_1_y_3984>]
#<clearance_direction> = 2 (-Y)
o132 else
(PRINT, "Error: Clearance direction must be perpendicular to pocket row!")
#3979 = 0
(DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}])
o<rack_id_calc> return
o132 endif
(Assign rack_id - break down calculation steps)
#<temp> = [#<pocket_order> - 1]
#<temp> = [#<temp> * 2]
#<temp> = [#<temp> + #<clearance_direction>]
#<temp> = [#<temp> + 4]
#<rack_id> = #<temp>
#3979 = #<rack_id>
(DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}])
o<rack_id_calc> return
o130 endif
(MSG, "Error: No Conditions Met, Rack ID Not Set")
#3979 = 0
(DEBUG, EVAL[vcp.getWidget{"atc_rack_id"}.setValue{#3979}])
o<rack_id_calc> endsub
M2

View File

@@ -0,0 +1,41 @@
o<reset_all_data> sub
#1001 = 0
(DEBUG, EVAL[vcp.getWidget{"x_center_probed"}.setValue{#1001}])
#1002 = 0
(DEBUG, EVAL[vcp.getWidget{"x_probed_width"}.setValue{#1002}])
#1003 = 0
(DEBUG, EVAL[vcp.getWidget{"y_center_probed"}.setValue{#1003}])
#1004 = 0
(DEBUG, EVAL[vcp.getWidget{"y_probed_width"}.setValue{#1004}])
#1005 = 0
(DEBUG, EVAL[vcp.getWidget{"x_minus_probed_position"}.setValue{#1005}])
#1006 = 0
(DEBUG, EVAL[vcp.getWidget{"x_plus_probed_position"}.setValue{#1006}])
#1007 = 0
(DEBUG, EVAL[vcp.getWidget{"y_minus_probed_position"}.setValue{#1007}])
#1008 = 0
(DEBUG, EVAL[vcp.getWidget{"y_plus_probed_position"}.setValue{#1008}])
#1009 = 0
(DEBUG, EVAL[vcp.getWidget{"z_minus_probed_position"}.setValue{#1009}])
#1010 = 0
(DEBUG, EVAL[vcp.getWidget{"averaged_diam"}.setValue{#1010}])
#1011 = 0
(DEBUG, EVAL[vcp.getWidget{"edge_delta"}.setValue{#1011}])
#1012 = 0
(DEBUG, EVAL[vcp.getWidget{"edge_angle"}.setValue{#1012}])
o<reset_all_data> endsub
M2 (end program)

View File

@@ -0,0 +1,15 @@
o<retractatc> sub
M65 P0 ; Turn off carousel out solenoid
M64 P1 ; Move Carousel IN
M66 P0 L3 Q5 ; check carousel in position sensor
o100 if [#5399 LT 0]
M65 P1 ; turn off the solenoid to send atc home
(abort, Failed to send carousel home) ; abort if the sensor does not activate in 5 seconds
o100 endif
M65 P1
o<retractatc> endsub [1]
M2

View File

@@ -0,0 +1,19 @@
o<set_g30_position> sub
o100 if [1 EQ 1]
(G30.1 records the tool touch off position in the var file)
G30.1
o100 endif
#1000 = #5181
(DEBUG, EVAL[vcp.getWidget{"x_tool_change_position"}.setValue{#1000}])
#1001 = #5182
(DEBUG, EVAL[vcp.getWidget{"y_tool_change_position"}.setValue{#1001}])
#1002 = #5183
(DEBUG, EVAL[vcp.getWidget{"z_tool_change_position"}.setValue{#1002}])
o<set_g30_position> endsub
M2

View File

@@ -0,0 +1,16 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(store spindle tool in carousel macro)
o<store_tool_in_carousel> sub
(PRINT, o<store_tool_in_carousel>)
G49
T0 M6
o<store_tool_in_carousel> endsub
M2 (end program)

View File

@@ -0,0 +1,21 @@
o<surface_scan_param_update> sub
#<surface_scan_x0_3050> = #1
#<surface_scan_y0_3051> = #2
#<surface_scan_height_3052> = #3
#<surface_scan_width_3053> = #4
#<surface_scan_step_3054> = #5
#3050 = #<surface_scan_x0_3050>
#3051 = #<surface_scan_y0_3051>
#3052 = #<surface_scan_height_3052>
#3053 = #<surface_scan_width_3053>
#3054 = #<surface_scan_step_3054>
o<surface_scan_param_update> endsub [1]
M2

View File

@@ -0,0 +1,44 @@
o<surface_test> sub
;(MSG, SURFACE_TEST.NGC)
M64 P0 (turn off compensation)
;T1 M6 (Install probe)
#<x0> = #3050 ;(debug, x0: [#<x0>])
#<y0> = #3051 ;(debug, y0: [#<y0>])
#<height> = #3052 ;(debug, height: [#<height>])
#<width> = #3053 ;(debug, width: [#<width>])
#<step> = #3054 ;(debug, step: [#<step>])
#<search_feed> = #3055 ;(debug, search_feed: [#<search_feed>])
#<latch_feed> = #3056 ;(debug, latch_feed: [#<latch_feed>])
#<safe_z> = #3057 ;(debug, safe_z: [#<safe_z>])
#<search_z> = #3058 ;(debug, search_z: [#<search_z>])
;(PROBEOPEN filename.txt)
G0 Z#<safe_z>
#<y> = #<y0>
o101 while [#<y> LT #<height>+#<y0>]
#<x> = #<x0>
o102 while [#<x> LE #<width>+#<x0>]
G0 X#<x> Y#<y>
G38.2 Z#<search_z> F#<search_feed>
G0 Z#<safe_z>
#<x> = [#<x>+#<step>]
o102 endwhile
#<y> = [#<y>+#<step>]
#<x> = [#<x0>+#<width>]
o103 while [#<x> GE #<x0>]
G0 X#<x> Y#<y>
G38.2 Z#<search_z> F#<search_feed>
G0 Z#<safe_z>
#<x> = [#<x>-#<step>]
o103 endwhile
#<y> = [#<y>+#<step>]
o101 endwhile
;(PROBECLOSE)
o<surface_test> endsub
M2

View File

@@ -0,0 +1,45 @@
o<tool_setter_param_update> sub
#<fast_probe_fr_3004> = #1
#<slow_probe_fr_3005> = #2
#<traverse_fr_3006> = #3
#<z_max_travel_3007> = #4
#<xy_max_travel_3008> = #5
#<retract_distance_3009> = #6
#<spindle_zero_height_3010> = #7
#<tool_diameter_probe_mode_3011> = #8
#<tool_diameter_offset_mode_3012> = #9
#<tool_setter_offset_direction_3013> = #10
#<breakage_tolerance_3037> = #11
#<user_setter_1_3038> = #12
#<user_setter_2_3039> = #13
#3004 = #<fast_probe_fr_3004>
#3005 = #<slow_probe_fr_3005>
#3006 = #<traverse_fr_3006>
#3007 = #<z_max_travel_3007>
#3008 = #<xy_max_travel_3008>
#3009 = #<retract_distance_3009>
#3010 = #<spindle_zero_height_3010>
#3011 = #<tool_diameter_probe_mode_3011>
#3012 = #<tool_diameter_offset_mode_3012>
#3013 = #<tool_setter_offset_direction_3013>
#3037 = #<breakage_tolerance_3037>
#3038 = #<user_setter_1_3038>
#3039 = #<user_setter_2_3039>
o<tool_setter_param_update> endsub [1]
M2

View File

@@ -0,0 +1,101 @@
(author: Chris P, TooTall18)
(version: 0.2)
(date: 06/27/24)
o<tool_touch_off> sub
#<fast_probe_fr> = #3004 (set from probe screen fast probe feed rate)
#<slow_probe_fr> = #3005 (set from probe screen slow probe feedrate)
#<traverse_fr> = #3006 (set from probe screen traverse probe feedrate)
#<z_max_travel> = #3007 (max z distance the tool travels before erroring out if not contact is made)
#<xy_max_travel> = #3008 (max xy distance the tool travels before erroring out if not contact is made)
#<retract_distance> = #3009 (distance the tool retracts after making contact during fast feed mode)
#<spindle_zero_height> = #3010 (G53 distance from home to spindle nose triggering point on touch plate)
#<tool_diameter_probe_mode> = #3011 (activates the tool diameter probe subroutine section)
#<tool_diameter_offset_mode> = #3012 (activates the tool diameter offset position for probe subroutine section)
#<tool_setter_offset_direction> = #3013 (sets tool setter offset direction to move tool)
#<tool_diameter> = #5410 (current tool's diameter used for offseting probe position in x axis)
G92.1 (Cancel G92 offset)
M50 P0
#<tool_touch_x_coords> = #5181
#<tool_touch_y_coords> = #5182
#<tool_touch_z_coords> = #5183
#<tool_radius_offset> = [#<tool_diameter> / 2]
#<left_offset_probing_position> = [#<tool_touch_x_coords> - #<tool_radius_offset>]
#<right_offset_probing_position> = [#<tool_touch_x_coords> + #<tool_radius_offset>]
#<front_offset_probing_position> = [#<tool_touch_y_coords> - #<tool_radius_offset>]
#<back_offset_probing_position> = [#<tool_touch_y_coords> + #<tool_radius_offset>]
o100 if [#<tool_diameter_offset_mode> EQ 1]
o101 if [#<tool_setter_offset_direction> EQ 0]
#<tool_touch_x_coords> = #<left_offset_probing_position>
o101 else if [#<tool_setter_offset_direction> EQ 1]
#<tool_touch_x_coords> = #<right_offset_probing_position>
o101 else if [#<tool_setter_offset_direction> EQ 2]
#<tool_touch_y_coords> = #<front_offset_probing_position>
o101 else if [#<tool_setter_offset_direction> EQ 3]
#<tool_touch_y_coords> = #<back_offset_probing_position>
o101 endif
o100 endif
o110 if [2 EQ 2]
G49
o110 endif
G90 (set absolute coordinates)
G53 G1 F[#<traverse_fr>] Z0 (move to z0 home position)
G53 G1 F[#<traverse_fr>] X#<tool_touch_x_coords> Y#<tool_touch_y_coords>
G53 G1 F[#<traverse_fr>] Z#<tool_touch_z_coords>
#<offset_z> = #5422 ;Stores the offset of the current Z coordinate.
G91
F #<fast_probe_fr>
G38.2 Z-[#<z_max_travel>] (fast tool probe)
#<z_fast_probe> = #5063 (save probe result of fast probe to parameters)
G1 F[#<traverse_fr>] Z[#<retract_distance>] (retract tool retract distance amount)
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<slow_probe_fr> GT 0]
(Initiate Slow Z- Probe)
G91
F[#<slow_probe_fr>] (set probe slow feedrate)
G38.2 Z-[#<retract_distance> * 2] (slow tool probe)
#<z_slow_probe> = #5063
G90
G1 F[#<traverse_fr>] Z[#<z_slow_probe> + #<retract_distance>]
o120 endif
o130 if [#5070 EQ 1] (verify probe event was succesful)
#<z_slow_probe> = #5063 (save slow probe result to parameters)
o130 else
(DEBUG,Tool Length Offset Probe Failed)
o130 endif
(Tool Diameter Probe Mode Section, User must define this section as needed)
o140 if [#<tool_diameter_probe_mode> EQ 1]
(DEBUG, Tool Diameter Probing is Not Defined in Subroutine)
o140 endif
o150 if [3 EQ 3]
G49
o150 endif
G90 (set absolute coordinates)
G53 G1 F[#<traverse_fr>] Z0 (Send Spindle to home zero position)
(define new tool length offset parameters)
#<new_tool_length_offset> = [ABS[#<spindle_zero_height> + #5063 - #<offset_z>]]
G10 L1 P #5400 Z [#<new_tool_length_offset>] (5400 = tool number)
T #5400 G43 H #5400 (enable tool length offset)
M50 P1 (reinstate feedrate override)
o<tool_touch_off> endsub
M2 (end program)

137
subroutines/toolchange.ngc Normal file
View File

@@ -0,0 +1,137 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
o<toolchange> sub
; Parameter #3989 is used to track if the carousel is homed (M13) (volatile)
; Parameter #3990 is used to track the current tool pocket (persistently)
; Parameter #3991 is used to track the current tool loaded it in the spindle (persistently)
; Parameters #4001 to #4024 are used to track which tool is in which pocket (persistently)
; Parameter #4000 is not populated just used in the maths to calculate the above numbers
; #<number_of_pockets>: The number of pockets the ATC platter has, This is user set in the INI file via #<_ini[atc]pockets>
; #<atc_z_tool_change_height> The Z height your spindle needs to be at to clamp/unclamp a tool from the ATC platter (Set via INI [ATC]Z_TOOL_CHANGE_HEIGHT)
; #<atc_z_tool_clearance_height> The Z clearance height in machine coordinates that your spindle needs to be at to clear the tools during carousel rotation (Set via INI [ATC]Z_TOOL_CLEARANCE_HEIGHT)
(PRINT, o<toolchange> selected_tool: #<selected_tool>, tool_in_spindle: #<tool_in_spindle>, selected_pocket: #<selected_pocket>, current_pocket: #<current_pocket>, task: #<_task>)
o100 if [#<_task> EQ 0]
(DEBUG, Task is null)
o<toolchange> return [999]
o100 endif (this code eliminates tool missing error on load for multiple use tools)
; default to a 12 pocket ATC (matching DynATC Widget behaviour), then update based on INI settings
#<number_of_pockets> = 12
o110 if [EXISTS[#<_ini[atc]pockets>]]
#<number_of_pockets> = #<_ini[atc]pockets>
o110 endif
#<atc_z_tool_change_height> = -3.9000
o120 if [EXISTS[#<_ini[atc]z_tool_change_height>]]
#<atc_z_tool_change_height> = #<_ini[atc]z_tool_change_height>
o120 endif
#<atc_z_tool_clearance_height> = [#<_ini[AXIS_Z]MAX_LIMIT>-0.01]
o130 if [EXISTS[#<_ini[atc]z_tool_clearance_height>]]
#<atc_z_tool_clearance_height> = #<_ini[atc]z_tool_clearance_height>
o130 endif
; assign the variables passed by M6 change_prolog to some parameters
#100 = #<selected_tool>
#110 = #<tool_in_spindle>
#120 = #<selected_pocket>
#121 = #<current_pocket>
; NOTE:
; The legacy names *selected_pocket* and *current_pocket* actually reference
; a sequential tooldata index for tool items loaded from a tool
; table ([EMCIO]TOOL_TABLE) or via a tooldata database ([EMCIO]DB_PROGRAM)
; see Linuxcnc docs for further information on how these are used
o140 if [#<selected_tool> EQ #<tool_in_spindle>] ; checks if tool in the spindle is same as requested
(PRINT, Requested tool already in spindle)
(PRINT, o<toolchange> endsub)
o<toolchange> endsub [1]
M2
o140 endif
o150 if [#3991 NE #<tool_in_spindle>]
(PRINT, o<toolchange> tool_in_spindle does not match 3991)
o150 endif
#<next_pocket> = 0 ; assigns 0 to the next pocket for a later check if the tool is found in the carousel
#<open_pocket> = 0
#130 = #<number_of_pockets> ; assign test parameter the number of pockets in the carousel
o160 do
o161 if [#[4000 + #130] EQ #<selected_tool>] ; checks all pockets to see if it contains tool number requested as the new tool
#<next_pocket> = #130 ; if tool is found in pocket, assigns the next pocket
o161 endif
o162 if [#[4000 + #130] EQ 0] ; checks if the pocket is empty, last pocket checked will be the lowest empty pocket number, for putting tool in spindle away.
#<open_pocket> = #130
o162 endif
#130 = [#130 - 1]
o160 while [#130 GT 0]
o170 if [#<next_pocket> EQ 0] ; if tool is not found, aborts and sends a message
(abort, Tool T%d#<selected_tool> not found in carousel)
o170 endif
; now we know which pocket the next tool is sitting in
; we need to know if we need to put a tool away
; or if there is not tool in the spindle
o180 if [#<tool_in_spindle> GT 0] ; checks if there is a valid tool in the spindle
o181 if [#<open_pocket> EQ 0] ; If there is a tool in the spindle, checks if there is an open pocket
(abort, Carousel is full, cant put away tool T#<tool_in_spindle> in into carousel)
o181 endif
M10 P[#<open_pocket>] ; move carousel to an open pocket
M21 ; puts the tool in spindle away into the open pocket
(DEBUG, EVAL[vcp.getWidget{"dynatc"}.store_tool{#<open_pocket>, #<tool_in_spindle>}])
#140 = #<open_pocket>
#[4000 + #140] = #<tool_in_spindle> ; save tool number in pocket
#3991 = 0 ; empty tool in the spindle
M61 Q0
G49
o180 endif
G90
G0 G53 Z#<atc_z_tool_clearance_height> ; move z to clear height
o190 if [#<selected_tool> GT 0] ; selected tool is not tool0
M10 P#<next_pocket> ; set the carousel to move to the right pocket for the selected tool
M65 P1
M64 P0
M66 P1 L3 Q5 ; check carousel out position sensor
o191 if [#5399 LT 0]
M65 P0 ; turn off the solenoid to send atc to tool change
(abort, Failed to send carousel home) ; abort if the sensor does not activate in 5 seconds
o191 endif
M65 P0
(DEBUG, EVAL[vcp.getWidget{"dynatc"}.store_tool{#<next_pocket>, 0}])
M22 ; Carousel out
#150 = #<next_pocket>
#[4000 + #150] = 0 ; empty the pocket
#3991 = #<selected_tool> ; Set persistent variable to remember tool in spindle after power cycle
o190 else
M65 P2 ; deactive drawbar
M65 P0 ; make sure ATC out solenoid is off
M64 P1 ; move carousel home
M66 P0 L3 Q4 ; check carousel in position sensor
o192 if [#5399 LT 0]
M65 P1 ; turn off the solenoid to send atc home
(abort, Failed to send carousel home) ; abort if the sensor does not activate in 5 seconds
o192 endif
M65 P1
o190 endif
M61 Q#<selected_tool>
o200 if [1 EQ 1]
G43 H#<selected_tool>
o200 endif
o<program_coolant> call
(PRINT, o<toolchange> endsub)
o<toolchange> endsub [1]
M2

View File

@@ -0,0 +1,95 @@
(author: Chris P)
(version: 0.2)
(date: 06/27/24)
(Measure tool and set Z 0.000 in current WCO for new tool)
o<toolsetter_wco> sub
(uses NGCGUI style arg spec)
(number after "=" in comment is default value)
#<fast_probe_fr> = #3004 (set from probe screen fast probe feed rate)
#<slow_probe_fr> = #3005 (set from probe screen slow probe feedrate)
#<traverse_fr> = #3006 (set from probe screen traverse probe feedrate)
#<z_max_travel> = #3007 (max z distance the tool travels before erroring out if not contact is made)
#<xy_max_travel> = #3008 (max xy distance the tool travels before erroring out if not contact is made)
#<retract_distance> = #3009 (distance the tool retracts after making contact during fast feed mode)
#<spindle_zero_height> = #3010 (G53 distance from home to spindle nose triggering point on touch plate)
#<tool_diameter_probe_mode> = #3011 (activates the tool diameter probe subroutine section)
#<tool_diameter_offset_mode> = #3012 (activates the tool diameter offset position for probe subroutine section)
#<tool_diameter> = #5410 (current tool's diameter used for offseting probe position in x axis)
(start with an m6, do all the standard m6 stuff and then touch off -TMC)
M6
(Cancel G92 offsets)
G92.1
(Cancel Feedrate Override)
M50 P0
o100 if [2 EQ 2]
G49
o100 endif
G90 (set absolute coordinates)
G53 G1 F[#<traverse_fr>] Z0 (move to z0 home position)
G53 G1 F[#<traverse_fr>] X#<tool_touch_x_coords> Y#<tool_touch_y_coords>
#<workspace_z> = #[5203 + [20 * #5220]]
(Current Z Position including offsets in current program units)
#<z> = #5422
(Initial Fast Z- Probe)
G91
F[#<probe_fast_fr>]
G38.2 Z-[#<max_z_distance>]
#<z_minus_probed> = #5063
(Probe Error check, #5070 will be 0 if failed)
o110 if [#5070 EQ 0]
(back to start point and feed)
G90
G1 F[#<traverse_fr>] Z#<z>
F[#<probe_fast_fr>]
(return from sub)
M50 P1
o<toolsetter_wco> return
o110 endif
(Move to z_clearance height for slow probe)
G90
G1 F[#<traverse_fr>] Z[#<z_minus_probed> + #<z_clearance>]
(Slow Probe Rule, if Slow Probe FR is set to 0, Slow Probe is Bypassed)
o120 if [#<probe_slow_fr> GT 0]
(Initiate Slow Z- Probe)
G91
F[#<probe_slow_fr>]
G38.2 Z-[#<z_clearance> * 2]
#<z_minus_probed> = #5063
G90
G1 F[#<traverse_fr>] Z[#<z_minus_probed> + #<z_clearance>]
o120 endif
#<z_finish_height> = [#<z_minus_probed> + #<z_clearance>]
#<new_tool_wco_z> = [#<z_minus_probed> - #<tool_setter_height>]
(Record Z zero in selected WCO)
G10 L2 P#5220 Z[#<new_tool_wco_z> + #<workspace_z>]
(Move to Toolset location)
G53 G1 F[#<traverse_fr>] X#<dust_boot_x_coords> Y#<dust_boot_y_coords>
(pause for dust boot)
M0 (replace the dust boot)
(Reinstate Feedrate Override)
M50 P1
o<toolsetter_wco> endsub
M2 (end program)

Some files were not shown because too many files have changed in this diff Show More