G43.1 Dynamic Tool Length Measurement - Program Exceeds machine maximum on axis

More
4 years 11 months ago #226589 by +Jan+
I have a small problem with dynamic tool length measurement with G43.1.
I call via remap a macro on this basis:


My adapted macro looks like this

Code:
o<messen_eng> sub M64P10 #1700=1200            (Tool change X position) #1701=0        (Tool change Y position) #1702=-1        (Tool change Z position) #1800=-100        (Position safe Z/Starting point for G38.2 move) #1801=1279.125         (position probe X) #1802=2498        (position probe Y) #1900=#<_coord_system>    (Store coordinate system only G54 till G59) o500 if [#<_current_tool> EQ #<_selected_tool>] ;(debug, Tool already in spindle) o500 else  M5 G54 G90 G0      G53 Z#1702            (Go to tool change Z position) G53 X#1700 Y#1701        (Go to tool change XY position) M6 T#<_selected_tool> #4999=#5400. (save actually loaded tool... for another macro) G43.1 Z0            (TLO reset) G53 X#1801 Y#1802       (Go to probe position) G53 Z#1800            (Go to save Z position) G91 G38.2 Z-197.5  F850        (probing fast) G1    Z2.0  F150        (go up a bit)     G38.2 Z-2.25  F25         (probing slow) #2000=[#5063+#5223]     (Switching point+zero Offset) #2001=[#2000-#2002+#2003](new - diff + old)   #2002=[#2000]           (Save old switch point) #2003=[#2001]            (Save old offset)      G1 Z5.0 F500            (go up away from sensor) G90 G0 G43.1 Z#2001            (TLO set) G53 Z#1800         (Go to save Z position) G53 Z#1702            (Go to tool change Z position) #1803=1            (State tool already measured) ;(debug, Differenz ist: #2001) (Restore old zero (only G54 to G59)     o100 if[#1900 EQ 540] G54 o100 endif o101 if[#1900 EQ 550] G55 o101 endif o102 if[#1900 EQ 560] G56 o102 endif o103 if[#1900 EQ 570] G57 o103 endif o104 if[#1900 EQ 580] G58 o104 endif o500 endif M65P10 o<messen_eng> endsub M2


My Z axis has the following specification

[AXIS_Z]
MAX_VELOCITY = 100.0
MAX_ACCELERATION = 700.0
MIN_LIMIT = -300.0
MAX_LIMIT = 0.01

My workflow is as follows.

1. tool measurement via the macro above
2. define Z0 (for the tests I set it far away from machine limits)
3. start program

If I now start a program I get the message, "Program Exceeds machine maximum on axis Z.". As far as I could understand, the error occurs when the machine is moved to different Z heights in the program run.

For example, this code works here:

G21 (Units: Metric)
G40 G90
F1
M6 T9 ( Cutter, 6 mm)
G0 Z10
G0 X0 Y0
G01 Z10 F2000 (same height)
G01 X20 Y20
G01 X0 Y0
G0 Z10
M05 M30

This one as well:

G21 (Units: Metric)
G40 G90
F1
M6 T9 (Cutter, 6 mm)
G0 Z0
G0 X0 Y0
G01 Z0 F2000 (same height)
G01 X20 Y20
G01 X0 Y0
G0 Z0
M05 M30

This however not only with the above mentioned error message:

 

Attachment not found



G21 (Units: Metric)
G40 G90
F1
M6 T9 (Cutter, 6 mm)
G0 Z0
G0 X0 Y0
G01 Z10 F2000 (different height)
G01 X20 Y20
G01 X0 Y0
G0 Z0
M05 M30


If I then click on "Run anyway", the program runs through to the end of the cycle without any problems. However, since I have to click the message away every time and thus cannot use my external hardware start button, I would like to solve the problem. Does anyone have a troubleshooting approach?

Best wishes

Jan

Please Log in to join the conversation.

More
4 years 11 months ago #226670 by andypugh
I think that the problem here might be that probing always fails in the preview.
Judicious use of
Code:
O100 IF [#<_task> EQ 0] simulate probe O100 ELSE actually probe O100 ENDIF

Might fix the problem.

Please Log in to join the conversation.

More
4 years 11 months ago #226736 by +Jan+
I'm afraid that I'm not judicious enough to implement that accordingly ;-).
Can you please describe the workaround in more detail?

Thanks in advance

Jan

Please Log in to join the conversation.

More
4 years 11 months ago #226737 by andypugh
It's hard to know without context.

One thing to look at... What does your code do if the probe fails to find the sensor?

Please Log in to join the conversation.

More
4 years 11 months ago #226739 by andypugh
Looking at the preview interpreter:
github.com/LinuxCNC/linuxcnc/blob/master...sai/saicanon.cc#L397
It looks like the tool point moves to 0.254mm short of the programmed probe end position, but does not set the "probe success" parameter flag.

The issue that you are seeing is likely to be that the calculated result in preview mode appears to be a very short tool, one with a tip somewhere inside the headstock.

Maybe just skip the whole probe routine if #<_task> EQ 0 ?

Please Log in to join the conversation.

More
4 years 11 months ago #226740 by andypugh

Please Log in to join the conversation.

More
4 years 11 months ago #226805 by +Jan+
I have now added an If query at the beginning of the tool length measurement as it is implemented for example at Gmoccapy:
Code:
o<messen_eng> sub o100 if [#<_task> EQ 0] (debug, Task is zero) o100     return [999] o100 endif M64P10 #1700=1200            (Tool change X position) #1701=0        (Tool change Y position) #1702=-1        (Tool change Z position) #1800=-100        (position sicheres Z) #1801=1279.125         (position probe X) #1802=2498        (position probe Y) #1900=#<_coord_system>    (Store coordinate system only G54 till G59) o500 if [#<_current_tool> EQ #<_selected_tool>] ;(debug, Tool already in spindle) o500 else  M5 G54 G90 G0      G53 Z#1702            (Go to tool change Z position) G53 X#1700 Y#1701        (Go to tool change XY position) M6 T#<_selected_tool> #4999=#5400 G43.1 Z0            (TLO reset) G53 X#1801 Y#1802       (Go to probe position) G53 Z#1800            (Go to save Z position) G91 G38.2 Z-197.5  F850        (probing fast) G1    Z2.0  F150        (go up a bit)     G38.2 Z-2.25  F25         (probing slow) #2000=[#5063+#5223]     (Switching point+zero Offset) #2001=[#2000-#2002+#2003](new - diff + old)   #2002=[#2000]           (Save old switch point) #2003=[#2001]            (Save old offset)      G1 Z5.0 F500            (go up away from sensor) G90 G0 G43.1 Z#2001            (TLO set) G53 Z#1800         (Go to save Z position) G53 Z#1702            (Go to tool change Z position) #1803=1            (State tool already measured) ;(debug, Differenz ist: #2001) (Restore old zero (only G54 to G59)     o200 if[#1900 EQ 540] G54 o200 endif o201 if[#1900 EQ 550] G55 o201 endif o202 if[#1900 EQ 560] G56 o202 endif o203 if[#1900 EQ 570] G57 o203 endif o204 if[#1900 EQ 580] G58 o204 endif o500 endif M65P10 o<messen_eng> endsub M2

Is this implemented correctly?
Unfortunately the problem persists and I don't get a debug message when refreshing the preview.

Best wishes

Jan

Please Log in to join the conversation.

More
4 years 11 months ago #226809 by andypugh
I think that the o100 in front of the return is wrong.

Please Log in to join the conversation.

More
4 years 11 months ago #226822 by JohnnyCNC
Last year I did a remap based on the same one you based yours on.  I used the the QTDragon GUI, 3DProbe, eBay tool setter, and TTS tooling. My remap handles both fixed length tools and variable length tools.  Variable length tools get automatically measured right after the tool change and fixed length tool use the length listed in the tool table.  I remember getting that error while working through my remap but I don't recall the exact cause.  You may find some clues by looking at my remap.  You can find it  posted here

John

Please Log in to join the conversation.

More
4 years 11 months ago #226853 by d2inventory
Code:
o100 if [#<_task> EQ 0] (debug, Task is zero) o<messen_eng> return o100 endif


this is how you exit the subroutine.

btw, can you reproduce your error in a SIM config? I wasn't able to.

I managed to reproduce it and the above if clause fixed the issue as andy suggested.

Also if you're using a button type of touch probe you should debounce it, mine bounces for a few milliseconds so I used a 5ms debounce.

linuxcnc.org/docs/html/hal/rtcomps.html#_debounce

Please Log in to join the conversation.

Time to create page: 0.064 seconds
Powered by Kunena Forum