There was a recent thread discussing how to do macro for tool height setter for Speedio. Thought I'd post my approach. I'm using the preset length approach whereby the tool lengths are positive, and one needs to set the G54 Z value to workpiece height. In addition, I'm using the Speedio POTs with tool numbers programmed via MDI/ATC Tool with preset values. One runs a program that specifies the POT number, the macro determines the tool number associated with the POT, moves the POT/tool into spindle, runs the tool height setter and saves the offset for the tool. One program per POT. I've also got my Siemens NX Tool Library configured to match the Speedio tools 1 through 99, got all my tools/holders ready to go in my Huot cart to match, so everything flows very nicely when setting up new jobs. Caveat: Adjust your M codes to match your tool height setter and local conditions.
Here's the program for POT 1:
(T1 SINGLE TOOL LENGTH OFFSET SETTING)
($Id: O0001.NC,v 1.2 2023/07/06 22:14:54 drc Exp $)
(SETUP
(SET TOOL NUMBER IN MDI/ATC TOOLS FOR GIVEN POT)
(MOUNT TOOL IN GIVEN POT)
(RUN PROGRAM)
G65P8001 T1 (SET T = POT # TO BE MEASURED)
M30
And here's the macro:
(SINGLE TOOL TOUCH OFF)
($Id: O8001.NC,v 1.3 2023/07/09 18:50:09 drc Exp $)
(USAGE: G65P8001 T#)
(PARAMETERS
(T - POT NUMBER 1..21)
(GLOBALS
(#610 - Z MAX TRAVEL FOR SHORTEST TOOL, E.G. -10.811 = -300MM + 1.0IN)
(#611 - X TOOL SETTER CENTER, E.G. -1.046)
(#612 - Y TOOL SETTER CENTER, E.G. -1.0218)
(#614 - TOOL SETTER DISTANCE FROM TABLE, E.G. 8.0328)
(MACHINE RELATED
(#1106 - SPINDLE PROBE POWER CONTROL)
(#3004 - FEED OVERRIDE CONTROL)
(#3701 thru #3721 - POT TO TOOL NUMBER MAPPING, SEE MDI/ATC TOOLS)
(#5023 - MACHINE COORDINATE CURRENT Z)
(#11001 thru #11099 - TOOL LENGTH OFFSETS)
(LOCALS
(#142 - POT NUMBER = 1..21)
(#144 - TOOL NUMBER IN GIVEN POT = 1..99)
(#140 - ADDRESS OF TOOL LENGTH OFFSET = 11001..11099)
(#143 - SHORTEST TOOL LENGTH = 1.0IN)
(#145 - POT SELECTION = 101..121)
(NOTES
(SEE PROGRAM 8028 FOR RESTORE OF GLOBAL VALUES)
(USING PRESET TOOL LENGTH SCHEME, TOOL LENGTH OFFSETS ARE POSITIVE, G54 Z REQUIRED)
#142=#20 (POT NUMBER)
#144=#[3700+#142] (TOOL NUMBER IN GIVEN POT)
IF[#144EQ#0]GOTO9990 (CONFIRM TOOL CONFIGURED IN POT)
#140=11000+#144 (ADDRESS OF TOOL LENGTH OFFSET)
#143=-1.0 (SHORTEST TOOL LENGTH = 1.0IN)
#145=100+#142 (POT SELECTION)
#3004=0 (FEED OVERRIDE IS VALID)
M407 (SELECT TOOL SETTER)
#1106=0 (POWER OFF SPINDLE PROBE)
G4 P.5 (WAIT FOR RELAY TO TRIGGER)
M402 (TOOL AIR BLAST ON)
G4 P.5 (WAIT FOR AIR BLAST)
M403 (TOOL AIR BLAST OFF)
G91 G28 Z0 (RESET Z)
T#145 (SET POT)
M6 (SELECT TOOL)
M402 (TOOL AIR BLAST ON)
G4 P.5 (WAIT FOR AIR BLAST)
M403 (TOOL AIR BLAST OFF)
M19 (SET SPINDLE ORIENTATION)
G53 G0 G90 X#611 Y#612 (MOVE TO TOOL SETTER XY CENTER)
G91 G0 Z#143 (Z TO SHORTEST TOOL LENGTH)
G91 G31 Z#610 F150. (FAST Z DOWN UNTIL TOOL DETECTED)
G91 G0 Z.175 (Z UP RETRACT DISTANCE)
G4 P.1
G91 G31 Z-.175 F1.5 (SLOW Z DOWN UNTIL TOOL DETECTED)
G4 P.4
#[#140]=#5023-#614 (SET TOOL LENGTH OFFSET)
G91 G28 Z0 (RESET Z)
GOTO9999
N9990
#3000=91(POT*TOOL*NOT*CONFIGURED)
N9999
M99
And here's the program that saves away global values used by the macro, this only needs to be run when the values change as the values are stored in non-volatile memory:
(RESTORE VARIABLES)
($Id: O8028.NC,v 1.5 2023/07/09 18:50:09 drc Exp $)
(NOTES
(RUN THIS PROGRAM ONLY IF VALUES CHANGE)
(VALUES UPDATED 6/9/2023 BY D.COELHO)
#610=-10.811 (Z MAXIMUM TRAVEL SHORT TOOL)
#611=-1.046 (TOOL SETTER CENTER X)
#612=-1.0218 (TOOL SETTER CENTER Y)
#614= 8.0426 (TOOL SETTER DISTANCE FROM TABLE)
M30
P.S. Credit to Yamazen for the initial non-POT flavor of this macro, HEAVILY modified since then but some ideas copied from their approach.
Here's the program for POT 1:
(T1 SINGLE TOOL LENGTH OFFSET SETTING)
($Id: O0001.NC,v 1.2 2023/07/06 22:14:54 drc Exp $)
(SETUP

(SET TOOL NUMBER IN MDI/ATC TOOLS FOR GIVEN POT)
(MOUNT TOOL IN GIVEN POT)
(RUN PROGRAM)
G65P8001 T1 (SET T = POT # TO BE MEASURED)
M30
And here's the macro:
(SINGLE TOOL TOUCH OFF)
($Id: O8001.NC,v 1.3 2023/07/09 18:50:09 drc Exp $)
(USAGE: G65P8001 T#)
(PARAMETERS

(T - POT NUMBER 1..21)
(GLOBALS

(#610 - Z MAX TRAVEL FOR SHORTEST TOOL, E.G. -10.811 = -300MM + 1.0IN)
(#611 - X TOOL SETTER CENTER, E.G. -1.046)
(#612 - Y TOOL SETTER CENTER, E.G. -1.0218)
(#614 - TOOL SETTER DISTANCE FROM TABLE, E.G. 8.0328)
(MACHINE RELATED

(#1106 - SPINDLE PROBE POWER CONTROL)
(#3004 - FEED OVERRIDE CONTROL)
(#3701 thru #3721 - POT TO TOOL NUMBER MAPPING, SEE MDI/ATC TOOLS)
(#5023 - MACHINE COORDINATE CURRENT Z)
(#11001 thru #11099 - TOOL LENGTH OFFSETS)
(LOCALS

(#142 - POT NUMBER = 1..21)
(#144 - TOOL NUMBER IN GIVEN POT = 1..99)
(#140 - ADDRESS OF TOOL LENGTH OFFSET = 11001..11099)
(#143 - SHORTEST TOOL LENGTH = 1.0IN)
(#145 - POT SELECTION = 101..121)
(NOTES

(SEE PROGRAM 8028 FOR RESTORE OF GLOBAL VALUES)
(USING PRESET TOOL LENGTH SCHEME, TOOL LENGTH OFFSETS ARE POSITIVE, G54 Z REQUIRED)
#142=#20 (POT NUMBER)
#144=#[3700+#142] (TOOL NUMBER IN GIVEN POT)
IF[#144EQ#0]GOTO9990 (CONFIRM TOOL CONFIGURED IN POT)
#140=11000+#144 (ADDRESS OF TOOL LENGTH OFFSET)
#143=-1.0 (SHORTEST TOOL LENGTH = 1.0IN)
#145=100+#142 (POT SELECTION)
#3004=0 (FEED OVERRIDE IS VALID)
M407 (SELECT TOOL SETTER)
#1106=0 (POWER OFF SPINDLE PROBE)
G4 P.5 (WAIT FOR RELAY TO TRIGGER)
M402 (TOOL AIR BLAST ON)
G4 P.5 (WAIT FOR AIR BLAST)
M403 (TOOL AIR BLAST OFF)
G91 G28 Z0 (RESET Z)
T#145 (SET POT)
M6 (SELECT TOOL)
M402 (TOOL AIR BLAST ON)
G4 P.5 (WAIT FOR AIR BLAST)
M403 (TOOL AIR BLAST OFF)
M19 (SET SPINDLE ORIENTATION)
G53 G0 G90 X#611 Y#612 (MOVE TO TOOL SETTER XY CENTER)
G91 G0 Z#143 (Z TO SHORTEST TOOL LENGTH)
G91 G31 Z#610 F150. (FAST Z DOWN UNTIL TOOL DETECTED)
G91 G0 Z.175 (Z UP RETRACT DISTANCE)
G4 P.1
G91 G31 Z-.175 F1.5 (SLOW Z DOWN UNTIL TOOL DETECTED)
G4 P.4
#[#140]=#5023-#614 (SET TOOL LENGTH OFFSET)
G91 G28 Z0 (RESET Z)
GOTO9999
N9990
#3000=91(POT*TOOL*NOT*CONFIGURED)
N9999
M99
And here's the program that saves away global values used by the macro, this only needs to be run when the values change as the values are stored in non-volatile memory:
(RESTORE VARIABLES)
($Id: O8028.NC,v 1.5 2023/07/09 18:50:09 drc Exp $)
(NOTES

(RUN THIS PROGRAM ONLY IF VALUES CHANGE)
(VALUES UPDATED 6/9/2023 BY D.COELHO)
#610=-10.811 (Z MAXIMUM TRAVEL SHORT TOOL)
#611=-1.046 (TOOL SETTER CENTER X)
#612=-1.0218 (TOOL SETTER CENTER Y)
#614= 8.0426 (TOOL SETTER DISTANCE FROM TABLE)
M30
P.S. Credit to Yamazen for the initial non-POT flavor of this macro, HEAVILY modified since then but some ideas copied from their approach.