Mcode subroutine for automatic tool length measuring
02 Mar 2020 08:43 - 02 Mar 2020 09:14 #158953
by simonmn
Mcode subroutine for automatic tool length measuring was created by simonmn
Hey guys.
I am working on a subroutine for automatic tool length measuring, but am a little uncertain how to best proceed.
What I want the machine to do is basically(I hope):
1. Operator calls a M106 T1 (or P1) to measure Tool 1
1.2. Either the machine changes to that tool, if not loaded. Or measures active tool and stores offset in Tool 1's offset.
2. Machine checks state of tool setter, to be sure its not smashing the tool down in a disconnected toolsetter.
3. Moves down at a fixed speed until it touches the tool setter.
4. Stores value.
5. Moves away, or to last X Y position
I'm hoping the subroutine could be converted into a breakage detection in the future.
I know there are a lot of automatic tool measuring threads, but I'm having some trouble finding the information I need.
Especially of point 3.
Writing a G01 Z-1000 F500 G(til sensor is active) seems wrong and dangerous, and I would very much like to know of a better way someone else has done it.
Here's what I have written so far.
Hope you can help me or point me in the right direction.
I am working on a subroutine for automatic tool length measuring, but am a little uncertain how to best proceed.
What I want the machine to do is basically(I hope):
1. Operator calls a M106 T1 (or P1) to measure Tool 1
1.2. Either the machine changes to that tool, if not loaded. Or measures active tool and stores offset in Tool 1's offset.
2. Machine checks state of tool setter, to be sure its not smashing the tool down in a disconnected toolsetter.
3. Moves down at a fixed speed until it touches the tool setter.
4. Stores value.
5. Moves away, or to last X Y position
I'm hoping the subroutine could be converted into a breakage detection in the future.
I know there are a lot of automatic tool measuring threads, but I'm having some trouble finding the information I need.
Especially of point 3.
Writing a G01 Z-1000 F500 G(til sensor is active) seems wrong and dangerous, and I would very much like to know of a better way someone else has done it.
Here's what I have written so far.
o<M106> sub
(A suproutine for automatic tool length offset)
M5 (Stop spindle, if running)
M19 R0 (Orient spindle)
G49 (Cancel Tool Length Compensation)
G40 (Cancel tool Compensation)
G80 (Cancel Canned Cycle)
G90 (Absolute mode)
G17 (XY plane)
(G53 is Machine coordinate system)
G53 G0 Z0 (Move spindle to home position)
#<x-start-pos> = #5420 (Get X start position before move)
#<y-start-pos> = #5421 (Get Y start position before move)
G53 G0 X(Tool setter X Position) Y(Tool setter Y Position)
G4 P1 (Wait a second)
(Checks if the toolsetter is connectet properly. With a 3 seconds wait time)
M66 P7 L4 Q3 (Check if tool setter "set" state is correct. NC - LOW)
O100 if [#5399 LT 0]
(abort, Tool Setter "Set" connection not connected properly)
O100 endif
M66 P8 L4 Q3 (Check if tool setter "overtravel" state is correct. NC - LOW)
O100 if [#5399 LT 0]
(abort, Tool Setter "Overtravel" connection not connected properly)
O100 endif
M52 P0 (Cancel Adaptive Feed Control)
M50 P0 (Cancel Spindle Speed Override Control)
(Command to move the tool down until the toolsetter triggers) F1000
G91 (Incrementel mode)
G0 Z10
G90 (Absolute mode)
G01 (Zto toolsetter) F50
G10 L1 P#5400 (Active tool)
G53 G0 Z0 (Move spindle to home position)
G4 P1 (Wait a second)
G53 G0 X#<x-start-pos> Y#<y-start-pos> (Go to X start position)
M02
Hope you can help me or point me in the right direction.
Last edit: 02 Mar 2020 09:14 by simonmn. Reason: Updated code a bit
Please Log in or Create an account to join the conversation.
02 Mar 2020 15:12 #158979
by bbsr_5a
Replied by bbsr_5a on topic Mcode subroutine for automatic tool length measuring
lots of lines
its for most of us pritty simple
and this is started by button press or as of User-Mcode
The most interesting is that almost every mashine as well as every Company gots its own setup to behave toolmesurments
its for most of us pritty simple
o<znullen> sub
G91 ( relative mode for probing)
G38.2 Z-25 F100 ( trip switch on the way down)
G90 ( absolute mode)
G92 Z0 (set Z0 )
G1 Z3.5 F150 (move tool free)
o<znullen> endsub
M2
and this is started by button press or as of User-Mcode
The most interesting is that almost every mashine as well as every Company gots its own setup to behave toolmesurments
The following user(s) said Thank You: simonmn
Please Log in or Create an account to join the conversation.
02 Mar 2020 18:22 #159005
by MaHa
Replied by MaHa on topic Mcode subroutine for automatic tool length measuring
There are countless ways for toolprobing, hard to recommend a workflow.
My way, reducing the chance for crashing the toolseter, tool projection is in the cam tooldata. Then the tool is inserted as required. Previously this data is entered in tooltable, or is there already.
The travel distance to toolseter is calculated, according the tooltable entry. If the toolseter fails, the overshot is minimal. Feed and M52 can be adjusted just before measuring point.
My way, reducing the chance for crashing the toolseter, tool projection is in the cam tooldata. Then the tool is inserted as required. Previously this data is entered in tooltable, or is there already.
The travel distance to toolseter is calculated, according the tooltable entry. If the toolseter fails, the overshot is minimal. Feed and M52 can be adjusted just before measuring point.
Attachments:
The following user(s) said Thank You: simonmn
Please Log in or Create an account to join the conversation.
04 Mar 2020 13:45 #159192
by andypugh
You need G38 (there are three versions, G38.1, G38.2, G38.3 and G38.4)
(Unfortunately I can't get to the LinuxCNC docs right now for some reason, so can't give a link)
G38 is a dedicated probing move.
Replied by andypugh on topic Mcode subroutine for automatic tool length measuring
Writing a G01 Z-1000 F500 G(til sensor is active) seems wrong and dangerous, and I would very much like to know of a better way
You need G38 (there are three versions, G38.1, G38.2, G38.3 and G38.4)
(Unfortunately I can't get to the LinuxCNC docs right now for some reason, so can't give a link)
G38 is a dedicated probing move.
The following user(s) said Thank You: simonmn
Please Log in or Create an account to join the conversation.
- empireages
- Offline
- New Member
Less
More
- Posts: 4
- Thank you received: 2
21 Apr 2020 13:11 #164960
by empireages
Replied by empireages on topic Mcode subroutine for automatic tool length measuring
As andypush said, you want to make a protected move that will do 2 things :
1-Stop moving when it trip the toolsetter.
2- give you the coordinate of where it tripped.
G38 probing
Also if you want to measure thing like a 3 inch shell mill, before probing, move 1/2 time the diameter so your toolsetter will it on of the tool inserts.
With G38, you cant tell him to probe on a certain distance and if the toolsetter don't trip, then linuxCNC will alarm out. Protecting your machine of crashes.
But for that, i think you need to use the probing cycle based of an approximate distance that you can measure and enter in tooltable so it know x tool is approximately 1.25 inch, i go rapid to probe height + .15+ 1.25 then g38 for .5 then alarm if it don't touch or if the probe trip, calculate the real tool length.
This is how Mazak do their probing on their machine without renishaw tool setter.
My 2cents
1-Stop moving when it trip the toolsetter.
2- give you the coordinate of where it tripped.
G38 probing
Also if you want to measure thing like a 3 inch shell mill, before probing, move 1/2 time the diameter so your toolsetter will it on of the tool inserts.
With G38, you cant tell him to probe on a certain distance and if the toolsetter don't trip, then linuxCNC will alarm out. Protecting your machine of crashes.
But for that, i think you need to use the probing cycle based of an approximate distance that you can measure and enter in tooltable so it know x tool is approximately 1.25 inch, i go rapid to probe height + .15+ 1.25 then g38 for .5 then alarm if it don't touch or if the probe trip, calculate the real tool length.
This is how Mazak do their probing on their machine without renishaw tool setter.
My 2cents
The following user(s) said Thank You: simonmn
Please Log in or Create an account to join the conversation.
09 Aug 2020 11:32 #177743
by simonmn
Replied by simonmn on topic Mcode subroutine for automatic tool length measuring
Hope I can revive this post.
I took your suggestions and looked into G38. A lot more simple than I thought, and didn't take long to get something working.
Tested it first with bbsr_5a's code, to get a basis, but it seems like a "One tool, one offset" strategy with G92?
Made a fixed mount for the tool setter, so I don't need to pull in a touchplate to touch tools off.
I also really liked the idea of rough measuring your tool, and typing that into the tool table. aka, having the tool length being the distance from spindle nose, to tool tip. Kind of like MaHa showed and empireages talked about.
Now I'm a little unsure how to set this up on the machine. How do I make it so, that the tool length is the actual tool length from spindle to tip?
Here is the updated gcode I am playing around with, if it can help.Am currently playing alot with macros, both at work and at home, hence the ini variable calls.
Hope you can point me in the right direction
Thanks for the help.
I took your suggestions and looked into G38. A lot more simple than I thought, and didn't take long to get something working.
Tested it first with bbsr_5a's code, to get a basis, but it seems like a "One tool, one offset" strategy with G92?
Made a fixed mount for the tool setter, so I don't need to pull in a touchplate to touch tools off.
I also really liked the idea of rough measuring your tool, and typing that into the tool table. aka, having the tool length being the distance from spindle nose, to tool tip. Kind of like MaHa showed and empireages talked about.
Now I'm a little unsure how to set this up on the machine. How do I make it so, that the tool length is the actual tool length from spindle to tip?
Here is the updated gcode I am playing around with, if it can help.
O1212
(Probe kode test program)
G90 (Absolute mode)
G53 G00 Z0
G53 G00 X#<_ini[toolsetter]x_position> Y#<_ini[toolsetter]y_position>
G4 P0.5
G53 G00 Z#<_ini[toolsetter]z_safe_height>
G4 P0.5
G91 (Incremental mode)
G38.2 Z-200 F#<_ini[toolsetter]tool_find_speed>
G01 Z4 F1000
G38.2 Z-6 F#<_ini[toolsetter]tool_set_speed>
G90 (Absolute mode)
G10 L1 P#5400 Z#5063 (Læs #5400, for at se hvilket værktøj er aktivt, og gem værdigen fra #5063 i det værktøjs længde)
G91 (Incremental mode)
G01 Z10 F1500
G90
G53 G00 Z0
(MSG, Tool length set)
M30
Hope you can point me in the right direction
Thanks for the help.
Attachments:
Please Log in or Create an account to join the conversation.
10 Aug 2020 07:53 - 12 Aug 2020 06:21 #177803
by MaHa
Replied by MaHa on topic Mcode subroutine for automatic tool length measuring
From retracted Z (G53 Z0), you need to know the distance from spindle to trigger-point of toolsetter.
(If possible, probe the spindle, #<P1> = #5063)
(If possible, probe the spindle, #<P1> = [#5063 + #[5203 + [#5220 * 20]]])
Keep this as negative value, eg #<P1> = -350
After probing your tool, #<TOOL_L> = ABS[#<P1> - #5063]
After probing your tool, #<TOOL_L> = ABS[#<P1> - [#5063 + #[5203 + [#5220 * 20]]]]
EDIT:
Sorry i gave misleading information. As #5063 probe result is related to active Z-offset, the correct way to get the absolute position is:
Probe trigger point absolute position = [#5063 + #[5203 + [#5220 * 20]]]
or
on probe contact, then G28.1 before lift off from probe, #5163 should give the same result.
(If possible, probe the spindle, #<P1> = [#5063 + #[5203 + [#5220 * 20]]])
Keep this as negative value, eg #<P1> = -350
After probing your tool, #<TOOL_L> = ABS[#<P1> - [#5063 + #[5203 + [#5220 * 20]]]]
EDIT:
Sorry i gave misleading information. As #5063 probe result is related to active Z-offset, the correct way to get the absolute position is:
Probe trigger point absolute position = [#5063 + #[5203 + [#5220 * 20]]]
or
on probe contact, then G28.1 before lift off from probe, #5163 should give the same result.
Last edit: 12 Aug 2020 06:21 by MaHa. Reason: Incorrect information
The following user(s) said Thank You: simonmn
Please Log in or Create an account to join the conversation.
12 Aug 2020 16:46 #178044
by simonmn
Replied by simonmn on topic Mcode subroutine for automatic tool length measuring
Thanks for the quick response! Sorry for the late reply.
Played around with the code today, but need some help with understanding it, especially the "[#5063 + #[5203 + [#5220 * 20]]]]" part.
Got the distance "Spindle nose to toolsetter" and saved it in the ini file, so i can pull it with #<_ini[toolsetter]z_skip_height>.
I got the code working like I wanted to with " #500 = [#5063 - #<_ini[toolsetter]z_skip_height>] ", but like you pointed out, this only works if the active offset (G54) is set to 0 at G53 Z0. Which isn't ideal.
The above code gave me the tool length in positive, which is nice. But when I tried " #500 = ABS[#<_ini[toolsetter]z_skip_height> -[#5063 + #[5203 + [#5220 * 20]]]] " I get a somewhat random number. Say the tool is 170mm, then the above would give me a 132mm or something like that.
Thanks again
Played around with the code today, but need some help with understanding it, especially the "[#5063 + #[5203 + [#5220 * 20]]]]" part.
Got the distance "Spindle nose to toolsetter" and saved it in the ini file, so i can pull it with #<_ini[toolsetter]z_skip_height>.
I got the code working like I wanted to with " #500 = [#5063 - #<_ini[toolsetter]z_skip_height>] ", but like you pointed out, this only works if the active offset (G54) is set to 0 at G53 Z0. Which isn't ideal.
The above code gave me the tool length in positive, which is nice. But when I tried " #500 = ABS[#<_ini[toolsetter]z_skip_height> -[#5063 + #[5203 + [#5220 * 20]]]] " I get a somewhat random number. Say the tool is 170mm, then the above would give me a 132mm or something like that.
Thanks again
Please Log in or Create an account to join the conversation.
12 Aug 2020 20:56 #178057
by MaHa
Replied by MaHa on topic Mcode subroutine for automatic tool length measuring
To explain the parameters used:
#5220 - Coordinate System number 1 - 9 for G54 - G59.3. Persistent.
#5223 - Coordinate System 1, G54 for Z, Increase by 20 for next CS.
When #5220 = 1 (G54)
Z Value (G54) #[5203 + [#5220 * 20]] .... (#[5203 + [1 * 20]] equal #5223)
So you are free to work and probe with from G54 to G59.3
If you replace '#<P1>' by 'z_skip_height' and it is a negative number, from G53 Z0, the code should return the distance between spindle and toolsetter when probing. At least my imagination tells me that...
#5220 - Coordinate System number 1 - 9 for G54 - G59.3. Persistent.
#5223 - Coordinate System 1, G54 for Z, Increase by 20 for next CS.
When #5220 = 1 (G54)
Z Value (G54) #[5203 + [#5220 * 20]] .... (#[5203 + [1 * 20]] equal #5223)
So you are free to work and probe with from G54 to G59.3
If you replace '#<P1>' by 'z_skip_height' and it is a negative number, from G53 Z0, the code should return the distance between spindle and toolsetter when probing. At least my imagination tells me that...
Please Log in or Create an account to join the conversation.
22 Aug 2020 07:52 - 22 Aug 2020 08:16 #178981
by chris@cnc
Replied by chris@cnc on topic Mcode subroutine for automatic tool length measuring
Hello,
I have now also tried to measure my tools automatically. I also find it very good when the tool length has a real value as Simonmn shows in the picture. I don't understand your calculation with so many parameters. My solution is a little simpler. I calculate back to the machine zero point + the fixed distance from the probe point spindle nose and zero point. What do you say about it?
unfortunately the print commando does not work
example
(print, reference length is # 500)
Does anyone have an example?
I have now also tried to measure my tools automatically. I also find it very good when the tool length has a real value as Simonmn shows in the picture. I don't understand your calculation with so many parameters. My solution is a little simpler. I calculate back to the machine zero point + the fixed distance from the probe point spindle nose and zero point. What do you say about it?
unfortunately the print commando does not work
example
(print, reference length is # 500)
Does anyone have an example?
T1 M6
G49
G90 (Absolute mode)
G53 G00 Z-10
M101 ( Laser on)
G4 P1
G91 ( relative mode for probing)
G38.2 Z-150 F1000 (search tool nose )
G1 Z3 ( tool off)
G4 P1
G38.2 Z-5 F100 (probe tool with probe feed )
G28.1 ( set distance from Zero point to current postion to #5161-#5166)
#500=[102+#5163] ( calculate tool length)
G1 Z1 F100 ( tool off)
G10 L1 P1 Z#500 (set length in tooltable)
G43 H1 (call tool compensation)
o1 if [#5070 EQ 1]
M102 (Laser off)
(MSG, Tool set)
o1 else
(MSG, Tool not set)
o1 endif
G90
M2
Last edit: 22 Aug 2020 08:16 by chris@cnc.
Please Log in or Create an account to join the conversation.
Time to create page: 0.206 seconds