What's new
What's new

Advanced Tool Manahement for DUMMIES ?

D.D.Machine

Stainless
Joined
Dec 10, 2003
Location
poulsbo, wa, usa
I am trying to wrap my brain around the Advanced tool management on both original control and the NGC control and well I am finding a lot of info about it non of it I have found really does a good job of clearly explaining how to set it all up ,, for the most part I need to do tool breakage and backup tool on a couple on going jobs ,, I do lot of walk away time but want to go onto the next step and do lights out.
 
Assuming you have probing to facilitate what you want to do, it is all done via macros. Get yourself a copy of the renishaw inspection plus manual and have fun lol

Sent from my SM-G955U using Tapatalk
 
it looks like it done in the has control and just a little of it in the program ,, its just been kinda tricky to get a grip on it do to the info being spread between years and controls.
 
I'm using ATM pretty heavily on the production job on my new EC-400 right now. Program is 10 "tools", 2 of which are drill/tap. Running 4 different size threads on this one. Every tool has at least 1 backup, facemill has 4. Total of 25 tools in the magazine for these parts.

It is pretty easy to setup and the manual has a ton of info about it. Basically create a group, using a number over 1000. Then arrow down to the group, F4 to switch windows and you can add tools to the group. Tool use/time/load limits don't matter individually once in a group, it will use the group settings. Set those limits in the top window, arrow to the right. Edit your program to use this 1000+ number for T, H, D codes - it will automatically apply the individual tool's lengths/comps for you. When a tool is expired, next time you call it the control will use the next available tool (If any, alarm if not) in the group. You also have different options on which tool to use next. Sequentially, oldest, etc.

I make use of all of limits. Load-limits in case a part shifts or is loaded incorrectly (I want the machine to stop and alarm, especially if my drill/tap wears prematurely) and number of uses/time limits to control tool life.

A note about time limits - it seems on the NGC (not sure about classic here), the ATM has a bug with time limits, where expired tools do not show up under the "expired" section (however they will follow the rules and be flagged expired, no longer in use)

Use number of uses as a limit as first choice if possible. Number of holes works fine, however there is not a macro variable you could use to automatically clear the hole count. I could not get an answer from any apps guys at Selway or Haas. Seems this has to be manually zeroed on the ATM page if loading a new tool.

I use a program to bring up expired tools so I can replace, then retouch off lengths, and reset tool uses/time/etc using macro vars.

I check one tool for breakage using the built-in renishaw program. Be careful with this as the instructions we not clear to me at first. By default it will simply alarm if the tool is actually broken. In my case I could re-run that part of the program, using the next tool available in that group in most cases, since this one is not likely to leave behind any broken bits. In this case I don't want the tool check to alarm.

I use the flag, I believe set by M-variable? Will have to double check. Be careful with that since it was not clear, it is setting the tool length (#2000 var) of whatever tool you specify to 1.000 if broken, 0 if not. Be sure not to use the actual tool number here or you will certainly have a bigger problem crashing next time! My program checks this value (tool 200) and if set to 1 (tool is broken) I then manually expire the tool with the 8000-number varaible. (Also if broken I GOTO that toolpath's N-number to rerun. Duplicate toolchange calls the next available tool)


At a bare minimum you will probably want to create a short macro program to at least touch off whatever tool in spindle (#3026) and clear the use count (#5700-vars or use #[5700+#3026]=0) to help speed things up when replacing worn tools and clearing their limit counters (or #5400 for tool feed time, measured in seconds). Doing this I can maintain just over 99% spindle time on this machine throughout the day.
 
I use spindle load limits and tool breakage detection, but I'm not using backup tools. I understand how to set usage limits, but I'm not running long enough batches to get the tool life data to preemptively switch to a backup tool before it fails. I'm not clear on how I would get it to skip to the next part on a broken tool, if that's possible. I don't want the next tool running into the remnants of a broken tool or plowing into uncleared stock trying to finish the failed part.
 
On my EC400 I have a pallet pool, so in that case if a tool is broken I can just reject the whole pallet or skip to the next part on that tombstone/fixture/whatever.

I'm running a series of sub programs. Main program controls which pallets to run (reads from pallet pool schedule), from there it calls up a sub for each pallet, and the pallet program says which parts to run. If a tool is broken I just say M99 and it is back to the pallet program and the next part program runs, or if only one program on the pallet it goes to the cleaning cycle at the end, then on to next pallet.

Typing this out now, realizing this is not the best way to do it, but currently I'm using this in my tool break subprogram:
G65 P9853 B1. T#3026 H0.005 M200

If a tool is broken, length for tool 200 is set to 1. (#2200) Next line in my part program decides what to do.
IF[#2200EQ1]M99 to reject the part/pallet. Or if I want to rerun the next tool on that same toolpath:
IF[#2200EQ1]GOTO whatever N is the previous toolpath. (my post sets this # automatically)
(btw every toolchange the #2200 var is reset back to 0)

After typing this all out, I should do it a better way. The #8000-vars are used to manually expire a tool. Set to 1 and the tool is expired, no matter what the counts, limits, etc.

In the past I've used this:
G65 P9853 B1. T#3026 H0.005 M[6000+#3026]

This way the Renishaw program directly sets the correct 8000-var to expire the tool if it is indeed broken. (it adds 2000 to whatever value you specify for M, and sets that variable... M1 = #2001 for tool #1 length, or in my example, 6000+2000+tool-in-spindle = correct 8000-var) No messing around with tool offset variables. I'll probably change the rest to match this later, like:
IF[#[8000+#3026]EQ1]M99



I use spindle load limits and tool breakage detection, but I'm not using backup tools. I understand how to set usage limits, but I'm not running long enough batches to get the tool life data to preemptively switch to a backup tool before it fails. I'm not clear on how I would get it to skip to the next part on a broken tool, if that's possible. I don't want the next tool running into the remnants of a broken tool or plowing into uncleared stock trying to finish the failed part.

I take it this is on your verticals? If running multiple parts on the table, or even trunnion, if you are using sub programs this helps. I've done this once in the past, where I dedicated a variable for each part which I could use to "flag" the part as bad, if a tool was broken on it.

I used M97 subs, so it's all in one program. In the beginning of each sub, if that part's dedicated variable was set to 1, it would M99 to jump back to the main/top and go to next offset+toolpath. At the end of each sub, I'd run a toolbreak check. If the tool is not broken, it calls M99 to continue on and go to next offset/part. If the tool was broken, it would flag the part bad, call a duplicate toolchange to grab next good tool, then M99 to the next part.

Here's a some code from an old program:

Code:
N1020 
G40 G80 G90 G98 
(FINISH BIG SURFACE AROUND OBROUND FIRST) 
T1020 M6 (Tool # 1020: .125 Ball) 
T19 
G0 G90 G154 P1 X0.8501 Y-2.3949 
S4278 M3 
G43 H[#3026] Z2.23 /M8 
#520= 1.
G0 G90 G154 P1 X0.8501 Y-2.3949 
M97 P7007 
/ #520= 2.
/ G0 G90 G154 P2 X0.8501 Y-2.3949 
/ M97 P7007 
/ #520= 3.
/ G0 G90 G154 P3 X0.8501 Y-2.3949 
/ M97 P7007 
etc.

then the subs:

N7007 
S4278 
(IF PART IS FLAGGED AS BAD, SKIP IT)
IF [#[500+#520] EQ 1] THEN M99
G103 
M8 
M3 
G0 X0.8501 Y-2.3949 
G43 H[#3026] Z2.23 
<toolpath>
M9 
M5 
G0 G90 G53 Z0
G49 (CANCEL TLO BEFORE BREAK CHECK)
G65 P9853 B1. T#3026 S0.125 H0.01 M[6000+#3026]
G103 P1
(IF TOOL NOT BROKEN, THEN M99 EXIT)
IF [#[8000+#3026] NE 1] THEN M99(EXIT)
(IF TOOL IS BROKEN, FLAG PART AS BAD)
(AND SELECT NEXT TOOL FROM GROUP)
#[500+#520]= 1
T1020 M6 
G103 
M99 

In this case I was using #520 to keep track of which offset I was on, vars #501-#510 were the flags if a part had a broken tool

Also, if you're clearing out a lot of stock, where a tool break early on might cause a collision with tool holder & stock, you might want a break check between Z-levels. Easy enough to overlook something like that.
 
On my EC400 I have a pallet pool, so in that case if a tool is broken I can just reject the whole pallet or skip to the next part on that tombstone/fixture/whatever.

I'm running a series of sub programs. Main program controls which pallets to run (reads from pallet pool schedule), from there it calls up a sub for each pallet, and the pallet program says which parts to run. If a tool is broken I just say M99 and it is back to the pallet program and the next part program runs, or if only one program on the pallet it goes to the cleaning cycle at the end, then on to next pallet.

Typing this out now, realizing this is not the best way to do it, but currently I'm using this in my tool break subprogram:
G65 P9853 B1. T#3026 H0.005 M200

If a tool is broken, length for tool 200 is set to 1. (#2200) Next line in my part program decides what to do.
IF[#2200EQ1]M99 to reject the part/pallet. Or if I want to rerun the next tool on that same toolpath:
IF[#2200EQ1]GOTO whatever N is the previous toolpath. (my post sets this # automatically)
(btw every toolchange the #2200 var is reset back to 0)

After typing this all out, I should do it a better way. The #8000-vars are used to manually expire a tool. Set to 1 and the tool is expired, no matter what the counts, limits, etc.

In the past I've used this:
G65 P9853 B1. T#3026 H0.005 M[6000+#3026]

This way the Renishaw program directly sets the correct 8000-var to expire the tool if it is indeed broken. (it adds 2000 to whatever value you specify for M, and sets that variable... M1 = #2001 for tool #1 length, or in my example, 6000+2000+tool-in-spindle = correct 8000-var) No messing around with tool offset variables. I'll probably change the rest to match this later, like:
IF[#[8000+#3026]EQ1]M99





I take it this is on your verticals? If running multiple parts on the table, or even trunnion, if you are using sub programs this helps. I've done this once in the past, where I dedicated a variable for each part which I could use to "flag" the part as bad, if a tool was broken on it.

I used M97 subs, so it's all in one program. In the beginning of each sub, if that part's dedicated variable was set to 1, it would M99 to jump back to the main/top and go to next offset+toolpath. At the end of each sub, I'd run a toolbreak check. If the tool is not broken, it calls M99 to continue on and go to next offset/part. If the tool was broken, it would flag the part bad, call a duplicate toolchange to grab next good tool, then M99 to the next part.

Here's a some code from an old program:

Code:
N1020
G40 G80 G90 G98
(FINISH BIG SURFACE AROUND OBROUND FIRST)
T1020 M6 (Tool # 1020: .125 Ball)
T19
G0 G90 G154 P1 X0.8501 Y-2.3949
S4278 M3
G43 H[#3026] Z2.23 /M8
#520= 1.
G0 G90 G154 P1 X0.8501 Y-2.3949
M97 P7007
/ #520= 2.
/ G0 G90 G154 P2 X0.8501 Y-2.3949
/ M97 P7007
/ #520= 3.
/ G0 G90 G154 P3 X0.8501 Y-2.3949
/ M97 P7007
etc.

then the subs:

N7007
S4278
(IF PART IS FLAGGED AS BAD, SKIP IT)
IF [#[500+#520] EQ 1] THEN M99
G103
M8
M3
G0 X0.8501 Y-2.3949
G43 H[#3026] Z2.23
<toolpath>
M9
M5
G0 G90 G53 Z0
G49 (CANCEL TLO BEFORE BREAK CHECK)
G65 P9853 B1. T#3026 S0.125 H0.01 M[6000+#3026]
G103 P1
(IF TOOL NOT BROKEN, THEN M99 EXIT)
IF [#[8000+#3026] NE 1] THEN M99(EXIT)
(IF TOOL IS BROKEN, FLAG PART AS BAD)
(AND SELECT NEXT TOOL FROM GROUP)
#[500+#520]= 1
T1020 M6
G103
M99

In this case I was using #520 to keep track of which offset I was on, vars #501-#510 were the flags if a part had a broken tool

Also, if you're clearing out a lot of stock, where a tool break early on might cause a collision with tool holder & stock, you might want a break check between Z-levels. Easy enough to overlook something like that.

I've been referencing this thread for a few weeks now as I am trying to get tool groups and tool breakage detection working. Thanks to the info here I have mostly got it. We have an EC400 with pallet pool as well, NGC control.

This morning after I uploaded the programs for tool breakage and made my tool groups I ran into an issue. When I call a tool from a tool group, the length offset doesn't change. It will use the offset of the last tool which almost caused a major crash. I'm using the code "T1007 M06 G43 H1007" to call the tool change. Setting 15 is set to On as well. Have you ran into this issue? Thank you for the great info as well.
 
I've been referencing this thread for a few weeks now as I am trying to get tool groups and tool breakage detection working. Thanks to the info here I have mostly got it. We have an EC400 with pallet pool as well, NGC control.

This morning after I uploaded the programs for tool breakage and made my tool groups I ran into an issue. When I call a tool from a tool group, the length offset doesn't change. It will use the offset of the last tool which almost caused a major crash. I'm using the code "T1007 M06 G43 H1007" to call the tool change. Setting 15 is set to On as well. Have you ran into this issue? Thank you for the great info as well.

You call all of that on one line? Have you tried as two lines?
T1007 M06
G43 H1007


Are you using a toolchange macro aliased to M6?
 
You call all of that on one line? Have you tried as two lines?
T1007 M06
G43 H1007


Are you using a toolchange macro aliased to M6?

I will go try the code on 2 lines as you have mentioned here in a moment and report back if there is any changes. I don't think you can alias anything to M06 since it is already a predefined M-code (Tool change). I was just looking at it and noticed there is an M16 (tool change) as well. I will also give that a try.

Just curious, what software version might you be running on your machine assuming you still have it? Mine is 21.1101 and I cannot background edit programs on it or it will ghost the program from memory until reboot. Sometimes it just makes a bunch of copies of the program as well.

Most importantly though, it also crashes tools that are assigned number 200 because it wont update the offset when called in a program. I'm thinking maybe T200 and higher (T1000+) have a bug that won't update length offset. All other numbers 199 and below work great.
 
Could be just a bug. It seems the control is still full of them. They're constantly updating things and adding more bugs in the process. Fix one, two more pop up I guess. I have a relatively new 2022 machine that we discovered a bug with G83 cycle. Present on a 2021 machine too, not sure how far back it goes. I've also seen the program duping on some machines when editing programs just as you say. Reminds me I should probably ask for an update for that one.

Yes you can alias a program to M6 - that's the purpose of M16.
M6 calls a sub - in the sub you use M16 to prevent looping.

You might also try using G43 H#3026 - that should be a safe bet... unless you're using T200 as you suggest your machine has a bug. #3026 is tool in spindle.
 
Could be just a bug. It seems the control is still full of them. They're constantly updating things and adding more bugs in the process. Fix one, two more pop up I guess. I have a relatively new 2022 machine that we discovered a bug with G83 cycle. Present on a 2021 machine too, not sure how far back it goes. I've also seen the program duping on some machines when editing programs just as you say. Reminds me I should probably ask for an update for that one.

Yes you can alias a program to M6 - that's the purpose of M16.
M6 calls a sub - in the sub you use M16 to prevent looping.

You might also try using G43 H#3026 - that should be a safe bet... unless you're using T200 as you suggest your machine has a bug. #3026 is tool in spindle.

What was the bug so I know what to look out for?

I did a quick test and split the code onto 2 lines like everyone seems to do and it seems like it works. Unfortunately I'm not sure modifying 1000 tool calls and my post processors is the way I'm going to go. I do have Selway coming out tomorrow for another machine, I'm debating asking the tech to update my software.

G43 H#3026 doesn't seem to work with tool groups, whether its all on one line or split into 2. Bummer, that would've been great.

Lastly, I haven't tried running an actual program like this yet (probably will first thing tomorrow morning, but it seems to me like the machine updates the tool length offset even if I don't use G43 H#. It shows in the current commands the proper T and H numbers just by using T# M6. It even lets me cut air without any gripes.

So I will report with my findings after tomorrow and we will see what happens. I'm betting the software update fixes it though.
 
Well, it was a software bug. Updated and now I can run just fine. The tool order seems to work opposite as expected with "Older" actually using the newer tool, and vise versa. Otherwise it works great. This thread has been a huge help.
 
Could be just a bug. It seems the control is still full of them. They're constantly updating things and adding more bugs in the process. Fix one, two more pop up I guess. I have a relatively new 2022 machine that we discovered a bug with G83 cycle. Present on a 2021 machine too, not sure how far back it goes. I've also seen the program duping on some machines when editing programs just as you say. Reminds me I should probably ask for an update for that one.

Yes you can alias a program to M6 - that's the purpose of M16.
M6 calls a sub - in the sub you use M16 to prevent looping.

You might also try using G43 H#3026 - that should be a safe bet... unless you're using T200 as you suggest your machine has a bug. #3026 is tool in spindle.

I'm back again with another question! My machine has been running with tool breakage detection for many months now. It has saved us many nights of runtime. I love it. Lately though I am having issues with the machine thinking a tool is broken when it is not. I might get to work in the morning and see the machine has stopped because it thought a tool was broken, changed to its backup tool and thought the backup tool was broken too. I only have 2 tools so after that it just turns off.

I can't tell why it would be doing that. I have the tolerance on the detection as plus minus 2 thou which is a lot. I want to say its a chip on the probe as it comes up but I've personally watched a chip come up on the probe and the tool kind of just kicks it off on the first touch and then measures fine on the second touch. The tools themselves do not have chips on them.

It is such a long shot, but the only other thing I can think of is coolant droplets falling from the ceiling and hitting the probe during the measurement cycle. What would the chances of that be?

Anyways, was wondering if you had any experience with this since you were the one who helped me get this going in the first place. I'm going to open up another thread about this, but thanks again!
 
Is it a drill? I've seen a tiny amount of swarf stuck to the tip of a drill and trigger a 'broken' tool with small tolerance setting.
No, these are all endmills that are alarming out. Someone else mentioned to me that 2 thou is too small for tool breakage which now I'm thinking about it and that may be true. The machine has actually falsely alarmed out tools WAY more often than caught truly broken ones. So I think I will raise the tolerance to maybe .05" and try that for a while. Do you do breakage detection on endmills? If so, what tolerance do you set?

Also, I would have to read into it but I wonder if I can double check tools. Like if a tool is detected as broken I wonder if I can not have it expire and the machine grabs another tool to air blast the probe and then get the original tool again to recheck it.
 
You might be losing or gaining more than .002" in Z depending on temperatures too. In my shop that could easily happen. Set new tool during the day and by the time it is checked later at night it could be much different. No climate control here.

I think I have my default setting at .01"

Yes, I have some programs check endmills too.
 
I set my tool breakage tolerance at .004" or .005" on the CM-1's; I used to do .010" on the VF-3SS. If it's too small, even the tiniest bit of swarf will cause it to fail. I've also taken to leaving the coolant running (low pressure flood) while break checking to wash away chips and minimize false alarms. The only reason I can think of for wanting a tight break check tolerance is if you're worried about small chipping or wear at the tip, rather than an actual break, which will remove the whole LOC of the cutter.
 
Hey guys!
I am quite new to machining and G-Codes in general.
I figured out how to use Advanced Tool Management in HAAS control. We have EC400 with pallet pool.
My issue is that I want to use Tool Break Control after some operations on the tools that belong to the tool group in Tools Management on the machine.
SO the code looks like this:

M104 (Extend tool setting probe arm)
G65 P9853 T1020 B0. H0.1
M105 (Retract tool setting probe arm)
G53 G0 Z0.

And in tool group T1020 there are several same tools.
But after tool break control it gives me TOOL BROKEN alarm. But in reality tool is just fine- nothing is broken and no chips got between. I even re-run it several times at this line and cleaned the tool and probe and still gives an error.
Then I manually change the tool number to T3 (which belongs to the T1020 tools group) instead of T1020 and everything worked without an issue.
Can somebody explain me what I am doing wrong here?
 
Hey guys!
I am quite new to machining and G-Codes in general.
I figured out how to use Advanced Tool Management in HAAS control. We have EC400 with pallet pool.
My issue is that I want to use Tool Break Control after some operations on the tools that belong to the tool group in Tools Management on the machine.
SO the code looks like this:

M104 (Extend tool setting probe arm)
G65 P9853 T1020 B0. H0.1
M105 (Retract tool setting probe arm)
G53 G0 Z0.

And in tool group T1020 there are several same tools.
But after tool break control it gives me TOOL BROKEN alarm. But in reality tool is just fine- nothing is broken and no chips got between. I even re-run it several times at this line and cleaned the tool and probe and still gives an error.
Then I manually change the tool number to T3 (which belongs to the T1020 tools group) instead of T1020 and everything worked without an issue.
Can somebody explain me what I am doing wrong here?

I don't think the Renishaw macro compares against the tool in spindle, but rather the T-code specified. These typically use #[2000+#20] where #20 is your T-code and 2000 representing the start of the tool length variables (#2001-#2200.) If you feed it T1020, it probably evaluates to 3020, which is the power-on timer. Of course that value won't match the length it just measured.

Try using #3026. If you have tool 3 in the spindle, #3026 evaluates to 3. so the macro would compare to offset #2003.

G65 P9853 T#3026 B0. H0.1
 
Thank you!
I wasn't so far off, found that using #3026 will work.
But will it work for other tools as well? - I mean can I use this Macro variable for other tools than T3?
Did I understand correctly that this #3026 macro variable basically tells that compare offset values in the tools table, whichever is in the spindle?

One more question in addition to this topic.
Is anybody using Fusion 360 for programming Tool Break Control?
I am using MANUAL NC with Tool break. It works when using just a tool number, but it doesn't work when I gave my tools in a library numbers that represent Tool Group on the machine. And post is posting G65 P9853 T1020 B0. H0.1 . How can I make it post tool break control like this- G65 P9853 T#3026 B0. H0.1 instead?
I am trying to find this in post processor, but no luck so far :-)

Thank you very much for the inputs!
 








 
Back
Top