G76 - Pause in Z during exit taper Linux CNC 2.7.0
- verticalperformance
-
Topic Author
- Offline
- Senior Member
-
Less
More
- Posts: 59
- Thank you received: 14
26 Sep 2015 18:56 #63020
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. ![:( :(](/media/kunena/emoticons/sad.png)
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"![;) ;)](/media/kunena/emoticons/wink.png)
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.
![:( :(](/media/kunena/emoticons/sad.png)
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"
![;) ;)](/media/kunena/emoticons/wink.png)
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!)
(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: 376
- Thank you received: 150
27 Sep 2015 04:15 #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
-
Topic Author
- Offline
- Senior Member
-
Less
More
- Posts: 59
- Thank you received: 14
27 Sep 2015 09:11 #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!
%
(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
-
Topic Author
- Offline
- Senior Member
-
Less
More
- Posts: 59
- Thank you received: 14
27 Sep 2015 10:04 #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!![:unsure: :unsure:](/media/kunena/emoticons/unsure.png)
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!
![:unsure: :unsure:](/media/kunena/emoticons/unsure.png)
Thanks.
Keith.
Please Log in or Create an account to join the conversation.
- verticalperformance
-
Topic Author
- Offline
- Senior Member
-
Less
More
- Posts: 59
- Thank you received: 14
27 Sep 2015 12:14 #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: 376
- Thank you received: 150
27 Sep 2015 19:58 #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.
- verticalperformance
-
Topic Author
- Offline
- Senior Member
-
Less
More
- Posts: 59
- Thank you received: 14
28 Sep 2015 02:02 #63085
by verticalperformance
Replied by verticalperformance on topic G76 - Pause in Z during exit taper Linux CNC 2.7.0
Went straight from 2.6.9 to 2.7.0 (not pre)
The config attached is a sim config. Should run without gardware. I run it in a virtual session using vmware player. I was quite suprised to see same blip on the physical machine and the virtual machine too. I'll have a ho with sim axis tonight.
Thanks for all the help with this.
The config attached is a sim config. Should run without gardware. I run it in a virtual session using vmware player. I was quite suprised to see same blip on the physical machine and the virtual machine too. I'll have a ho with sim axis tonight.
Thanks for all the help with this.
Please Log in or Create an account to join the conversation.
- skunkworks
- Offline
- Moderator
-
Less
More
- Posts: 376
- Thank you received: 150
28 Sep 2015 02:39 #63087
by skunkworks
Replied by skunkworks on topic G76 - Pause in Z during exit taper Linux CNC 2.7.0
Jeff has been goofing around with it. Could you see if setting F0 before the g33/g76 fixes the problem?
Sam
Sam
Please Log in or Create an account to join the conversation.
- verticalperformance
-
Topic Author
- Offline
- Senior Member
-
Less
More
- Posts: 59
- Thank you received: 14
28 Sep 2015 09:58 #63105
by verticalperformance
Replied by verticalperformance on topic G76 - Pause in Z during exit taper Linux CNC 2.7.0
I'll have a go when I get home, assuming I can sneak out to the shed
. F0 interesting thought. The test code fragment nowhere sets the feed rate using an F code, but the full version does for the prior operations. That might explain why running the test code after the full version still hiccups - the last F code is still active. Not sure why running the test code again works though.
Might also try without the G96 - I'll just set a constant spindle RPM and see if any difference.
Did you observe the flip to G17 during running of the test code BTW - or is that just me too![:unsure: :unsure:](/media/kunena/emoticons/unsure.png)
As always, thanks.
Keith
![;) ;)](/media/kunena/emoticons/wink.png)
Might also try without the G96 - I'll just set a constant spindle RPM and see if any difference.
Did you observe the flip to G17 during running of the test code BTW - or is that just me too
![:unsure: :unsure:](/media/kunena/emoticons/unsure.png)
As always, thanks.
Keith
Please Log in or Create an account to join the conversation.
- verticalperformance
-
Topic Author
- Offline
- Senior Member
-
Less
More
- Posts: 59
- Thank you received: 14
28 Sep 2015 17:26 #63125
by verticalperformance
Replied by verticalperformance on topic G76 - Pause in Z during exit taper Linux CNC 2.7.0
Genius! ![:cheer: :cheer:](/media/kunena/emoticons/cheerful.png)
If I set F0 prior to G76, I just get that tiny glitch you can see in the test code, but the velocity dropping to zero goes away.
If I run the code again and set say an F100 before the G76, the pause where zvel drops to zero reappears.
I can see the same effect in the HAL-SIM-LATHE sample config - so problem identified, and temporary work around found.
Now somebody needs to dig into the code and see why it would need an F0 before invoking G76 (and I suspect the fix will be invoke a F0 internally as part of the G76 internals!)
Anybody else using G76 on 2.7.0 put an F0 in just to be sure!
Thanks a lot guys, most appreciated.
![:cheer: :cheer:](/media/kunena/emoticons/cheerful.png)
If I set F0 prior to G76, I just get that tiny glitch you can see in the test code, but the velocity dropping to zero goes away.
If I run the code again and set say an F100 before the G76, the pause where zvel drops to zero reappears.
I can see the same effect in the HAL-SIM-LATHE sample config - so problem identified, and temporary work around found.
Now somebody needs to dig into the code and see why it would need an F0 before invoking G76 (and I suspect the fix will be invoke a F0 internally as part of the G76 internals!)
Anybody else using G76 on 2.7.0 put an F0 in just to be sure!
Thanks a lot guys, most appreciated.
Please Log in or Create an account to join the conversation.
Time to create page: 0.279 seconds