- Posts: 55
- Thank you received: 11
G76 - Pause in Z during exit taper Linux CNC 2.7.0
- verticalperformance
- Offline
- Senior Member
-
Less
More
11 years 1 month ago #63020
by verticalperformance
G76 - Pause in Z during exit taper Linux CNC 2.7.0 was created by verticalperformance
Since updating to 2.7.0, I have noticed a brief pause in Z feed when cutting threads with an exit taper. I've been using the same code fragment for a while and had not noticed this in 2.6.x. 
With an exit taper, what I expect to see if constant Z feed feed until "Z" with the X feed starting to disengage the tool at a distance "E" prior to this. What I do see is a definite "hiccup" in Z velocity as the X axis starts to feed out - almost like it's trying to index?
I might have to resort to a exit rebate (which I use when I need to thread up to a shoulder) until resolved.
Anybody else seen this in 2.7.0 - or can try G76 with and without exit tapers and confirm it's not just a a "me moment"
Thanks in advance.
Machine Details:
Sherline Lathe with factory steppers and driver box
Digispeed spindle control using sherline spindle encoder with single pulse for spindle index
Homemade 60ppr spindle encoder for spindle RPM.
Code fragment below -
(sorry it's coded using radius - one day I'll really have to go and fix all my code to diameter. Also it's an M6 thread but it's a bit of a struggle for the sherline in stainless steel so the numbers were arrived at with a bit of iteration to make the nut fit, rather than working out what they should be first!)
Also see axis preview attached with and without taper.
With an exit taper, what I expect to see if constant Z feed feed until "Z" with the X feed starting to disengage the tool at a distance "E" prior to this. What I do see is a definite "hiccup" in Z velocity as the X axis starts to feed out - almost like it's trying to index?
I might have to resort to a exit rebate (which I use when I need to thread up to a shoulder) until resolved.
Anybody else seen this in 2.7.0 - or can try G76 with and without exit tapers and confirm it's not just a a "me moment"
Thanks in advance.
Machine Details:
Sherline Lathe with factory steppers and driver box
Digispeed spindle control using sherline spindle encoder with single pulse for spindle index
Homemade 60ppr spindle encoder for spindle RPM.
Code fragment below -
(sorry it's coded using radius - one day I'll really have to go and fix all my code to diameter. Also it's an M6 thread but it's a bit of a struggle for the sherline in stainless steel so the numbers were arrived at with a bit of iteration to make the nut fit, rather than working out what they should be first!)
Code:
(Sherline Lathe)
(Tool List )
(T20 60 degree V point thread tool)
g00 g21 g40 g49 g90 g18 g8 g64
#<Thread_Diameter>=5.8
#<Thread_Minor_Diameter>=4.5
#<Thread_Pitch>=1
#<Thread_Start>=7.5
#<Thread_Length>=13.4
#<Thread_Rebate_Width>=0
#<Tool_Thread>=20
#<Thread_Surface_Speed>=25
#<Roughing_Cut_Depth>=.125
O<Thread> if [#<Thread_Pitch> GT 0]
G0 X25 (clearance Pos)
G40
T#<Tool_Thread> M6 G43 (Change to thread cutting tool)
#<Thread_Start_Offset>=[-#<Thread_Start>+#<Thread_Pitch>*2]
#<Drive_Line_Radius>=[#<Thread_Diameter>/2+2*#<Roughing_Cut_Depth>]
#<Thread_Peak_Offset>=[#<Drive_Line_Radius>-#<Thread_Diameter>/2]
#<Thread_Depth>=[[#<Thread_Diameter>-#<Thread_Minor_Diameter>]/2]
#<Initial_Cut_Depth>=#<Roughing_Cut_Depth>
G96 D250 S#<Thread_Surface_Speed> M3
G00 Z#<Thread_Start_Offset>
G00 X#<Drive_Line_Radius>
O<ThreadRunout> if [#<Thread_Rebate_Width> GT 0]
#<Thread_Cut_Length>=-[#<Thread_Length>-[#<Thread_Rebate_Width>*0.80]]
G76 P#<Thread_Pitch> Z#<Thread_Cut_Length> I-#<Thread_Peak_Offset> J#<Initial_Cut_Depth> K#<Thread_Depth> L0 E0 H0 R1.0 Q0
O<ThreadRunout> else
#<Thread_Runout_Length>=[#<Thread_Depth>*sqrt[3]]
#<Thread_Cut_Length>=-[#<Thread_Length>+#<Thread_Runout_Length>]
G76 P#<Thread_Pitch> Z#<Thread_Cut_Length> I-#<Thread_Peak_Offset> J#<Initial_Cut_Depth> K#<Thread_Depth> L2 E#<Thread_Runout_Length> H0 R1.0 Q0
O<ThreadRunout> endif
G0 X25 (clearance Pos)
M5
O<Thread> endif
M30
%
Please Log in or Create an account to join the conversation.
- skunkworks
- Offline
- Moderator
-
Less
More
- Posts: 351
- Thank you received: 153
11 years 1 month ago #63040
by skunkworks
Replied by skunkworks on topic G76 - Pause in Z during exit taper Linux CNC 2.7.0
A developer plotted the g76 cycle in sim and it seems to be working correct.
You can see the z axis velocity stays up while x retracts.
emergent.unpythonic.net/files/sandbox/ma...he-thread-taper2.png
Could you try plotting?
Sam
You can see the z axis velocity stays up while x retracts.
emergent.unpythonic.net/files/sandbox/ma...he-thread-taper2.png
Could you try plotting?
Sam
Please Log in or Create an account to join the conversation.
- verticalperformance
- Offline
- Senior Member
-
Less
More
- Posts: 55
- Thank you received: 11
11 years 1 month ago #63044
by verticalperformance
Replied by verticalperformance on topic G76 - Pause in Z during exit taper Linux CNC 2.7.0
Further observations.... If I run the sample code fragment first up, I can't see the Z pause. If I run the full code the pause is there! If I then run the code fragment again, it now pauses too for the first time I run the code, but works fine the second and subsequent times.
The pause during tapered exit does look like the z pause at the start of motion when the axis syncs to the rotation - has the same sort of "stutter".
I've compared the modal codes before and after and the only difference is the G17/18 noted below. I thought it might be G61 / G64 but putting a G61 as first line inside threading routine made no difference.
One real oddity when looking at the modal codes is even though I program a G18 in the preamble, when the test code runs it switches (according to the active g-code in the MDI tab in axis) to a G17. The full code doesn't do this. Weird!
Silly question re halscope - the graphs plotted.... should they all be available signals, or would that depend on the way the config was set up? I can see the spindle-index-enable and I suspect Z-pos-cmd and X-pos-cmd are comparable to Zpos and Xpos, But I don't seem to have any velocity signals.
Thanks again.
Here is the full program, as it does seem that there is something there causing issues!
The pause during tapered exit does look like the z pause at the start of motion when the axis syncs to the rotation - has the same sort of "stutter".
I've compared the modal codes before and after and the only difference is the G17/18 noted below. I thought it might be G61 / G64 but putting a G61 as first line inside threading routine made no difference.
One real oddity when looking at the modal codes is even though I program a G18 in the preamble, when the test code runs it switches (according to the active g-code in the MDI tab in axis) to a G17. The full code doesn't do this. Weird!
Silly question re halscope - the graphs plotted.... should they all be available signals, or would that depend on the way the config was set up? I can see the spindle-index-enable and I suspect Z-pos-cmd and X-pos-cmd are comparable to Zpos and Xpos, But I don't seem to have any velocity signals.
Thanks again.
Here is the full program, as it does seem that there is something there causing issues!
Code:
%
(Spindle, Whistle Front)
(WH001-403 6MM)
(Stock 1/4 OD Stainless)
(Tool List )
(T1 .040 Parting Tool)
(T5 .020 Grooving Tool)
(T10 Sharp Tool)
(T20 60 degree V point thread tool)
g00 g21 g40 g49 g90 g18 g8 g64
#<Spiggot_Diameter>=4
#<Spiggot_Length>=[27.5-14-6]
#<Spiggot_Chamfer_Length>=[2/SQRT[3]]
#<Spiggot_Chamfer_Angle>=60
#<Thread_Diameter>=5.8
#<Thread_Minor_Diameter>=4.5
#<Thread_Pitch>=1
#<Thread_Start>=#<Spiggot_Length>
#<Thread_Length>=[#<Spiggot_Length>+6]
#<Thread_Rebate_Width>=0
#<Thread_Chamfer_Angle>=45
#<Thread_Chamfer_Length>=[[#<Thread_Diameter>-#<Thread_Minor_Diameter>]/2]
#<Head_Length>=17.25;[22-6.5]
#<Head_Diameter>=6.35
#<Head_Chamfer_Angle>=45
#<Head_AF>=6.35
#<Shoulder_Diameter>=#<Head_Diameter>
#<Manifold_Radius>=1
#<Manifold_Location>=[27.5-6-5]
#<Manifold_Neck_Diameter>=[#<Shoulder_Diameter>-2*#<Manifold_Radius>]
#<HoleDiameter>=0
#<HoleDepth>=0
#<Length>=[#<Head_Length>+#<Thread_Length>]
#<Stock_Dia>=#<Head_Diameter>
#<Stock_Extension_Start>=0 (Stock Extension at start)
#<Stock_Extension_End>=1.5 (Stock Extension at parting end)
#<_Chamfer_Lead_In>=0.25
#<_Chamfer_Lead_Out>=0.25
#<_Chamfer_Parallel_Lead>=1
#<Roughing_Feed>=75
#<Finishing_Feed>=50
#<Grooving_Feed>=25
#<Parting_Feed>=10
#<Tool_Turn>=10
#<Tool_Part>=1
#<Tool_Groove>=1
#<Tool_Thread>=20
#<Tool_Radius>=5
#<Turn_Surface_Speed>=80
#<Part_Surface_Speed>=30
#<Thread_Surface_Speed>=25
#<Groove_Surface_Speed>=50
#<Max_Spindle_Speed>=1500
#<Roughing_Cut_Depth>=.125
#<Finishing_Cut_Depth>=.075
#<Stock_Radius>=[#<Stock_Dia>/2]
#<Roughing_Length>=[#<Roughing_Cut_Depth>]
#<Final_Length>=[#<Finishing_Cut_Depth>]
#<Z_Start>=[#<Stock_Extension_Start>] (Z start location for OD- clearance on end face)
T#<Tool_Turn> M6 (Change to cutting tool)
G96 D#<Max_Spindle_Speed> S#<Turn_Surface_Speed> M3
G1 F#<Roughing_Feed>
(Do End Face if needed)
O<FaceEnd> if [#<Stock_Extension_Start> GT 0]
#<X_Start>=[#<Stock_Radius>+#<Roughing_Cut_Depth>] (x start location for face)
#<X_End>=[-0.05] (x end location)
#<Z_Current>=[#<Stock_Extension_Start>]
G0 X#<X_Start> Z#<Z_Current> G43 H#<Tool_Turn>
O<RoughFaceEnd> while [#<Z_Current> gt #<Roughing_Length>] (Roughing face loop)
G1 Z#<Z_Current> F#<Roughing_Feed>
G1 X#<X_End>
G1 X[#<X_End>-#<Roughing_Cut_Depth>] Z[#<Z_Current>+#<Roughing_Cut_Depth>]
G0 X#<X_Start>
#<Z_Current>=[#<Z_Current>-#<Roughing_Cut_Depth>]
O<RoughFaceEnd> endwhile
(Last Roughing Pass)
#<Z_Current>=[#<Roughing_Length>] (Last Roughing Pass)
G1 Z#<Z_Current> F#<Roughing_Feed>
G1 X#<X_End>
G1 X[#<X_End>-#<Roughing_Cut_Depth>] Z[#<Z_Current>+#<Roughing_Cut_Depth>]
G0 X#<X_Start>
(finish pass)
G1 Z0 F#<Finishing_Feed>
G1 X#<X_End>
G1 X[#<X_End>-#<Roughing_Cut_Depth>] Z[#<Roughing_Cut_Depth>]
G0 X#<X_Start>
O<FaceEnd> endif
(Do Thread OD if needed)
O<ProfileThread> if [#<Thread_Diameter> LT #<Stock_Dia>] (Don't reduce OD for thread if not needed)
#<Roughing_Radius>=[#<Thread_Diameter>/2+#<Finishing_Cut_Depth>]
#<_Final_Radius>=[#<Thread_Diameter>/2]
#<L>=#<Thread_Length>;[#<Thread_Length>+#<Thread_Start>]
#<Z_Start>=[#<Roughing_Cut_Depth>] (Z start location for OD- clearance on end face)
#<Z_End>=[-#<L>] (Z end location)
#<X_Current>=#<Stock_Radius>
T#<Tool_Turn> M6 (Change to cutting tool)
S#<Turn_Surface_Speed> M3
G1 F#<Roughing_Feed>
G0 X#<X_Current> Z#<Z_Start> G43
O<RoughProfileThread> while [#<X_Current> gt #<Roughing_Radius>] (Roughing loop)
G1 X#<X_Current> F#<Roughing_Feed>
G1 Z[#<Z_End>+#<Finishing_Cut_Depth>]
G1 X[#<X_Current>+#<Roughing_Cut_Depth>] Z[#<Z_End>+[#<Finishing_Cut_Depth>+#<Roughing_Cut_Depth>]]
G0 Z#<Z_Start>
#<X_Current>=[#<X_Current>-#<Roughing_Cut_Depth>]
O<RoughProfileThread> endwhile
#<X_Current>=[#<Roughing_Radius>] (Last Roughing Pass)
G1 X#<X_Current> F#<Roughing_Feed>
G1 Z[#<Z_End>+#<Finishing_Cut_Depth>]
G1 X[#<Stock_Radius>+#<Roughing_Cut_Depth>] Z[#<Z_End>+#<Finishing_Cut_Depth>]
(finish pass)
G0 Z#<Z_Start>
G0 X#<X_Current>
#<X_Current>=[#<_Final_Radius>]
G1 X#<X_Current> F#<Finishing_Feed>
G1 Z#<Z_End>
G1 X[#<Stock_Radius>+#<Roughing_Cut_Depth>]
G0 Z#<Z_Start>
O<ProfileThread> endif
O<ThreadSameAsSpiggot> if [#<Spiggot_Diameter> LT #<Thread_Diameter>]
(Do Spiggot OD if needed)
#<L>=[#<Spiggot_Length>]
#<Roughing_Radius>=[[#<Spiggot_Diameter>/2]+#<Finishing_Cut_Depth>]
#<_Final_Radius>=[#<Spiggot_Diameter>/2]
O<ProfileSpiggot> if [#<Spiggot_Diameter> LT #<Stock_Dia>] (Don't reduce OD for Spiggot if not needed)
G0 X25 (clearance Pos)
G40
T#<Tool_Turn> M6 (Change to cutting tool)
S#<Turn_Surface_Speed> M3
G1 F#<Roughing_Feed>
#<Z_Start>=[#<Roughing_Cut_Depth>] (Z start location for OD- clearance on end face)
#<Z_End>=[-#<L>] (Z end location)
#<X_Current>=[[#<Thread_Diameter>/2]-#<Roughing_Cut_Depth>] ;#<Stock_Radius>
G0 X#<X_Current> Z#<Z_Start> G43
O<RoughProfileSpiggot> while [#<X_Current> gt #<Roughing_Radius>] (Roughing loop)
G1 X#<X_Current> F#<Roughing_Feed>
G1 Z[#<Z_End>+#<Finishing_Cut_Depth>]
G1 X[#<X_Current>+#<Roughing_Cut_Depth>] Z[#<Z_End>+[#<Finishing_Cut_Depth>+#<Roughing_Cut_Depth>]]
G0 Z#<Z_Start>
#<X_Current>=[#<X_Current>-#<Roughing_Cut_Depth>]
O<RoughProfileSpiggot> endwhile
#<X_Current>=[#<Roughing_Radius>] (Last Roughing Pass)
G1 X#<X_Current> F#<Roughing_Feed>
G1 Z[#<Z_End>+#<Finishing_Cut_Depth>]
G1 X[[#<Thread_Diameter>/2]+#<Roughing_Cut_Depth>] Z[#<Z_End>+#<Finishing_Cut_Depth>]
(finish pass)
G0 Z#<Z_Start>
G0 X#<X_Current>
#<X_Current>=[#<_Final_Radius>]
G1 X#<X_Current> F#<Finishing_Feed>
G1 Z#<Z_End>
G1 X[[#<Thread_Diameter>/2]+#<Roughing_Cut_Depth>]
G0 Z#<Z_Start>
O<ProfileSpiggot> endif
O<ThreadSameAsSpiggot> endif
O<Chamfer> sub
(Chamfer Cut Path)
#<Current_Cut_Depth_L>=#1
#<Feed>=#2
#<Start_Z>=#3
#<Start_X>=[#<_Final_Radius>-#<Current_Cut_Depth_L>/Cos[#<_Chamfer_Angle>]]
#<Finish_Z>=[#<Start_Z>-[#<Current_Cut_Depth_L>/sin[#<_Chamfer_Angle>]]]
O<ChamferLeadInStyle> if [#<_Chamfer_Parallel_Lead> EQ 0]
G00 Z[#<Start_Z>+#<_Chamfer_Lead_In>]
G00 X[#<Start_X>] G42 L2
O<ChamferLeadInStyle> else
G00 Z[#<Start_Z>+#<_Chamfer_Lead_In>*cos[#<_Chamfer_Angle>]]
G00 X[#<Start_X>-#<_Chamfer_Lead_In>*sin[#<_Chamfer_Angle>]] G42 L2
O<ChamferLeadInStyle> endif
G01 X[#<Start_X>] Z#<Start_Z> F#<Feed>
G01 X[#<_Final_Radius>] Z[#<Finish_Z>]
O<ChamferLeadInOutStyle> if [#<_Chamfer_Parallel_Lead> EQ 0]
G01 X[#<_Final_Radius>+#<_Chamfer_Lead_Out>] Z[#<Finish_Z>]
O<ChamferLeadInOutStyle> else
G01 X[#<_Final_Radius>+[#<_Chamfer_Lead_Out>*#<_Chamfer_Parallel_Lead>]*sin[#<_Chamfer_Angle>]] Z[#<Finish_Z>-[#<_Chamfer_Lead_Out>*#<_Chamfer_Parallel_Lead>]*[cos[#<_Chamfer_Angle>]]]
O<ChamferLeadInOutStyle> endif
G40
O<Chamfer> endsub
(Chamfer end)
O<ChamferEnd> if [#<Spiggot_Chamfer_Angle> GT 0]
#<_Chamfer_Angle>=#<Spiggot_Chamfer_Angle>
#<_Chamfer_Length>=#<Spiggot_Chamfer_Length>
#<Start_Z>=0
#<Roughing_Total_Depth>=[#<_Chamfer_Length>*SIN[#<_Chamfer_Angle>]-#<Finishing_Cut_Depth>]
#<Finishing_Total_Depth>=[#<_Chamfer_Length>*SIN[#<_Chamfer_Angle>]]
#<Current_Cut_Depth>=#<Roughing_Cut_Depth>
G40
T#<Tool_Turn> M6 (Change to cutting tool)
S#<Turn_Surface_Speed> M3
G1 F#<Roughing_Feed>
O<RoughChamferEnd> while [#<Current_Cut_Depth> lt #<Roughing_Total_Depth>] (Roughing chamfer loop)
(#1=#<Current_Cut_Depth>)
(#2=#<Roughing_Feed>)
O<Chamfer> Call [#<Current_Cut_Depth>] [#<Roughing_Feed>] [#<Start_Z>]
#<Current_Cut_Depth>=[#<Current_Cut_Depth>+#<Roughing_Cut_Depth>]
O<RoughChamferEnd> endwhile
O<Chamfer> Call [#<Roughing_Total_Depth>] [#<Roughing_Feed>] [#<Start_Z>] (Last roughing path)
O<Chamfer> Call [#<Finishing_Total_Depth>] [#<Finishing_Feed>] [#<Start_Z>] (Finish path)
G40
O<ChamferEnd> endif
(Chamfer thread)
O<ChamferThread> if [#<Thread_Chamfer_Angle> GT 0]
#<_Final_Radius>=[#<Thread_Diameter>/2]
#<_Chamfer_Angle>=#<Thread_Chamfer_Angle>
#<_Chamfer_Length>=#<Thread_Chamfer_Length>
#<Start_Z>=-[#<Spiggot_Length>]
#<Roughing_Total_Depth>=[#<_Chamfer_Length>*SIN[#<_Chamfer_Angle>]-#<Finishing_Cut_Depth>]
#<Finishing_Total_Depth>=[#<_Chamfer_Length>*SIN[#<_Chamfer_Angle>]]
#<Current_Cut_Depth>=#<Roughing_Cut_Depth>
G40
T#<Tool_Turn> M6 (Change to cutting tool)
S#<Turn_Surface_Speed> M3
G1 F#<Roughing_Feed>
O<RoughChamferThread> while [#<Current_Cut_Depth> lt #<Roughing_Total_Depth>] (Roughing chamfer loop)
(#1=#<Current_Cut_Depth>)
(#2=#<Roughing_Feed>)
O<Chamfer> Call [#<Current_Cut_Depth>] [#<Roughing_Feed>] [#<Start_Z>]
#<Current_Cut_Depth>=[#<Current_Cut_Depth>+#<Roughing_Cut_Depth>]
O<RoughChamferThread> endwhile
O<Chamfer> Call [#<Roughing_Total_Depth>] [#<Roughing_Feed>] [#<Start_Z>] (Last roughing path)
O<Chamfer> Call [#<Finishing_Total_Depth>] [#<Finishing_Feed>] [#<Start_Z>] (Finish path)
G40
O<ChamferThread> endif
(Chamfer Head)
O<ChamferHead> if [#<Head_Chamfer_Angle> GT 0]
#<Head_Chamfer_Length>=[[[#<Head_Diameter>-#<Head_AF>]/2]/tan[#<Head_Chamfer_Angle>]]
#<_Final_Radius>=[#<Head_Diameter>/2]
#<_Chamfer_Angle>=#<Head_Chamfer_Angle>
#<_Chamfer_Length>=#<Head_Chamfer_Length>
#<Start_Z>=-[#<Thread_Length>];-[#<Thread_Length>+#<Spiggot_Length>]
G00 X[#<_Final_Radius>]
#<Roughing_Total_Depth>=[#<_Chamfer_Length>*SIN[#<_Chamfer_Angle>]-#<Finishing_Cut_Depth>]
#<Finishing_Total_Depth>=[#<_Chamfer_Length>*SIN[#<_Chamfer_Angle>]]
#<Current_Cut_Depth>=#<Roughing_Cut_Depth>
G40
T#<Tool_Turn> M6 (Change to cutting tool)
S#<Turn_Surface_Speed> M3
G1 F#<Roughing_Feed>
O<RoughChamferHead> while [#<Current_Cut_Depth> lt #<Roughing_Total_Depth>] (Roughing chamfer loop)
(#1=#<Current_Cut_Depth>)
(#2=#<Roughing_Feed>)
O<Chamfer> Call [#<Current_Cut_Depth>] [#<Roughing_Feed>] [#<Start_Z>]
#<Current_Cut_Depth>=[#<Current_Cut_Depth>+#<Roughing_Cut_Depth>]
O<RoughChamferHead> endwhile
O<Chamfer> Call [#<Roughing_Total_Depth>] [#<Roughing_Feed>] [#<Start_Z>] (Last roughing path)
O<Chamfer> Call [#<Finishing_Total_Depth>] [#<Finishing_Feed>] [#<Start_Z>] (Finish path)
G40
O<ChamferHead> endif
( Do Thread Rebate)
O<ThreadRebate> if [#<Thread_Rebate_Width> GT 0]
G0 X25 (clearance Pos)
G40
T#<Tool_Groove> M6 (Change to grooving tool LH tool set point = Q2)
S#<Groove_Surface_Speed> M3
G1 F#<Roughing_Feed>
#<Tool_Groove_Width>=[#5410*25.4]
O<ToolOrientation> if [#5413 EQ 1]
;G0 Z[-#<Thread_Length>+#5410*25.4] G43 H#<Tool_Groove>
#<Thread_Rebate_Start_Z> =[-#<Thread_Length>+#<Tool_Groove_Width>]
O<ToolOrientation> else
;G0 Z[-#<Thread_Length>] G43 H#<Tool_Groove>
#<Thread_Rebate_Start_Z> = [-#<Thread_Length>]
O<ToolOrientation> endif
#<Thread_Rebate_End_Z>=[#<Thread_Rebate_Start_Z>+#<Thread_Rebate_Width>-#<Tool_Groove_Width>]
#<Thread_Rebate_Z>=#<Thread_Rebate_Start_Z>
#<Thread_Rebate_Diameter>=#<Thread_Minor_Diameter>
#<Pass_Count>=0
G0 Z[#<Thread_Rebate_Z>] G43 H#<Tool_Groove>
O<ThreadRebateMultiPass> while [#<Thread_Rebate_Z> LT #<Thread_Rebate_End_Z>]
G0 Z[#<Thread_Rebate_Z>] G43 H#<Tool_Groove>
G0 X[#<Stock_Radius>+#<Roughing_Cut_Depth>]
G1 X#<Stock_Radius> F#<Grooving_Feed>
G1 X[#<Thread_Rebate_Diameter>/2]
G0 X[#<Stock_Radius>+#<Roughing_Cut_Depth>]
#<Thread_Rebate_Z>=[#<Thread_Rebate_Z>+#<Tool_Groove_Width>]
#<Pass_Count>=[#<Pass_Count>+1]
O<ThreadRebateMultiPass> endwhile
O<ThreadRebateFinalPass> if [#<Thread_Rebate_Z> NE #<Thread_Rebate_End_Z>]
G0 Z[#<Thread_Rebate_End_Z>] G43 H#<Tool_Groove>
G0 X[#<Stock_Radius>+#<Roughing_Cut_Depth>]
G1 X#<Stock_Radius> F#<Grooving_Feed>
G1 X[#<Thread_Rebate_Diameter>/2]
G0 X[#<Stock_Radius>+#<Roughing_Cut_Depth>]
#<Pass_Count>=[#<Pass_Count>+1]
O<ThreadRebateFinalPass> endif
O<ThreadRebateCleanupDiameter> if [#<Pass_Count> GT 1]
G0 Z[#<Thread_Rebate_Start_Z>] G43 H#<Tool_Groove>
G0 X[#<Stock_Radius>+#<Roughing_Cut_Depth>]
G1 X#<Stock_Radius> F#<Grooving_Feed>
G1 X[#<Thread_Rebate_Diameter>/2]
G1 Z[#<Thread_Rebate_End_Z>]
G1 X[#<Stock_Radius>+#<Roughing_Cut_Depth>]
O<ThreadRebateCleanupDiameter> endif
G0 X[#<Stock_Radius>+5]
O<ThreadRebate> endif
O<Thread> if [#<Thread_Pitch> GT 0]
G0 X5 (clearance Pos)
G40
T#<Tool_Thread> M6 G43 (Change to thread cutting tool)
#<Thread_Start_Offset>=[-#<Thread_Start>+#<Thread_Pitch>*2]
#<Drive_Line_Radius>=[#<Thread_Diameter>/2+2*#<Roughing_Cut_Depth>]
#<Thread_Peak_Offset>=[#<Drive_Line_Radius>-#<Thread_Diameter>/2]
#<Thread_Depth>=[[#<Thread_Diameter>-#<Thread_Minor_Diameter>]/2]
#<Initial_Cut_Depth>=#<Roughing_Cut_Depth>;[#<Roughing_Cut_Depth>/2]
G96 D250 S#<Thread_Surface_Speed> M3
G00 Z#<Thread_Start_Offset>
G00 X#<Drive_Line_Radius>
O<ThreadRunout> if [#<Thread_Rebate_Width> GT 0]
#<Thread_Cut_Length>=-[#<Thread_Length>-[#<Thread_Rebate_Width>*0.80]]
G76 P#<Thread_Pitch> Z#<Thread_Cut_Length> I-#<Thread_Peak_Offset> J#<Initial_Cut_Depth> K#<Thread_Depth> L0 E0 H2 R2.0 Q0 ;Q29.5
O<ThreadRunout> else
#<Thread_Runout_Length>=[#<Thread_Depth>*sqrt[3]]
#<Thread_Cut_Length>=-[#<Thread_Length>+#<Thread_Runout_Length>]
G76 P#<Thread_Pitch> Z#<Thread_Cut_Length> I-#<Thread_Peak_Offset> J#<Initial_Cut_Depth> K#<Thread_Depth> L2 E#<Thread_Runout_Length> H2 R2.0 Q0
O<ThreadRunout> endif
G0 X5 (clearance Pos)
M5
O<Thread> endif
O<CircularRebate> sub
#<Centreline_z> = #1
#<Bottom_x> = #2
#<Radius>= #3
#<Feed>=#4
G00 X[#<Bottom_x>+[2*#<Radius>]] Z#<Centreline_z>
G03 X[#<Bottom_x>+[#<Radius>]] Z[#<Centreline_z>-#<Radius>] K[0] I[-#<Radius>] F#<Feed> G43
G03 X[#<Bottom_x>+[2*#<Radius>]] Z[#<Centreline_z>] K[#<Radius>] I[0] F#<Feed>
G40
O<CircularRebate> endsub
O<Manifold_Groove> if [#<Manifold_Radius> GT 0]
G40
G0 X25
G0 Z10
T#<Tool_Radius> M6 G43 (Change to radius grooving tool)
S#<Turn_Surface_Speed> M3
G00 X10
G00 Z[-#<Manifold_Location>]
#<Roughing_Radius>=[#<Manifold_Neck_Diameter>/2+#<Finishing_Cut_Depth>]
#<X_Current>=[#<Shoulder_Diameter>/2-#<Roughing_Cut_Depth>]
O<CircularRebateLoop> while [#<X_Current> gt #<Roughing_Radius>]
O<CircularRebate> Call [-#<Manifold_Location>] [#<X_Current>] [#<Manifold_Radius>] [#<Grooving_Feed>]
#<X_Current>=[#<X_Current>-#<Roughing_Cut_Depth>]
O<CircularRebateLoop> endwhile
O<CircularRebate> Call [-#<Manifold_Location>] [#<Roughing_Radius>] [#<Manifold_Radius>] [#<Grooving_Feed>]
O<CircularRebate> Call [-#<Manifold_Location>] [[#<Manifold_Neck_Diameter>/2]] [#<Manifold_Radius>] [#<Grooving_Feed>]
G90
O<Manifold_Groove> endif
O<DrillHole> if [#<HoleDiameter> GT 0]
(DEBUG,Drill Hole Diameter #<HoleDiameter> #<HoleDepth> deep - Hit STOP or Resume)
G0 X25
Z-10
M0
M110
O<DrillHole> endif
O<PartOff> if [#<Head_Length> GT 0]
G40
G0 X25
G0 Z10
T#<Tool_Part> M6 (Change to parting tool)
G96 D#<Max_Spindle_Speed> S#<Part_Surface_Speed> M3
G1 F#<Roughing_Feed>
G0 Z[-#<Length>] G43 H#<Tool_Part>
G0 X[#<Stock_Radius>+#<Roughing_Cut_Depth>]
G1 X#<Stock_Radius> F#<Parting_Feed>
G1 X0
G0 X[#<Stock_Radius>+5]
(Change back to Cutting tool)
T#<Tool_Turn> M6
G1 F#<Roughing_Feed>
G0 X25 Z50 G43 H#<Tool_Turn>
O<PartOff> endif
G49
M30
%
Please Log in or Create an account to join the conversation.
- verticalperformance
- Offline
- Senior Member
-
Less
More
- Posts: 55
- Thank you received: 11
11 years 1 month ago #63045
by verticalperformance
Replied by verticalperformance on topic G76 - Pause in Z during exit taper Linux CNC 2.7.0
OK - figured out that axis.2.joint-vel-cmd was the z axis velocity, so attached the plots
Run #1 - Testcode fragment. No visible pause on the actual machine, but a slight "blip" in the velocity plot
Run #2 Full program. Visible pause on actual machine (as observed when making real part yesterday) Velocity plot of Z drops to zero momentarily - so LinuxCNC is telling it to pause - so not a hardware issue.
Run #3 - Testcode fragment. Visible pause on actual machine as per full program - Velocity plot as per run #2
Run#4 - Testcode fragment run again. No visible pause and velocity plot similar to run #1.
So the problem is repeatable - I just have no idea of the cause!
Thanks.
Keith.
Run #1 - Testcode fragment. No visible pause on the actual machine, but a slight "blip" in the velocity plot
Run #2 Full program. Visible pause on actual machine (as observed when making real part yesterday) Velocity plot of Z drops to zero momentarily - so LinuxCNC is telling it to pause - so not a hardware issue.
Run #3 - Testcode fragment. Visible pause on actual machine as per full program - Velocity plot as per run #2
Run#4 - Testcode fragment run again. No visible pause and velocity plot similar to run #1.
So the problem is repeatable - I just have no idea of the cause!
Thanks.
Keith.
Please Log in or Create an account to join the conversation.
- verticalperformance
- Offline
- Senior Member
-
Less
More
- Posts: 55
- Thank you received: 11
11 years 1 month ago #63047
by verticalperformance
Replied by verticalperformance on topic G76 - Pause in Z during exit taper Linux CNC 2.7.0
Just ran the full program on 2.6.9 using a "simmed" version of the sherline lathe on VMWare player image of Lucid, and it did not give the pause.
Upgraded to 2.7.0, commented out the loadrt probe_parport and tried the same file again on the sim - as you can see there is definitely a difference between 2.6.9 and 2.7.0
Find also attached the sim version of the sherline lathe config I'm using.
Hope this can help tweak this minor annoyance.
Oh, I have also noticed the occasional uncommanded axis move when moving the other axis - roughly of the order of magnitude of the backlash compensation - wonder if this has any relation. I suspect not much testing is done with backlash compensation values of other than zero. Related??
Cheers,
Keith
Upgraded to 2.7.0, commented out the loadrt probe_parport and tried the same file again on the sim - as you can see there is definitely a difference between 2.6.9 and 2.7.0
Find also attached the sim version of the sherline lathe config I'm using.
Hope this can help tweak this minor annoyance.
Oh, I have also noticed the occasional uncommanded axis move when moving the other axis - roughly of the order of magnitude of the backlash compensation - wonder if this has any relation. I suspect not much testing is done with backlash compensation values of other than zero. Related??
Cheers,
Keith
Please Log in or Create an account to join the conversation.
- skunkworks
- Offline
- Moderator
-
Less
More
- Posts: 351
- Thank you received: 153
11 years 1 month ago #63062
by skunkworks
Replied by skunkworks on topic G76 - Pause in Z during exit taper Linux CNC 2.7.0
Could you try to get it to do it in sim-> axis -> lathe? I will try to dig into your config but I cannot get it to run here because I am not running real hardware.
I am running the full program and not seeing the pause. I also added backlash comp with no effect.
What version of linuxcnc are you using? what does it say in the window - did you update to the latest 2.7.0 or are you running a 2.7.0 pre?
I am running the full program and not seeing the pause. I also added backlash comp with no effect.
What version of linuxcnc are you using? what does it say in the window - did you update to the latest 2.7.0 or are you running a 2.7.0 pre?
Please Log in or Create an account to join the conversation.
Time to create page: 2.284 seconds