First post on the Forum, so I'll introduce myself first. I'm a Frenchy leaving in China. I recently opened a workshop to produce anchor bars and coupling sleeve to connect the bars together.

I produce the bar on a thread rolling mill and the coupling sleeve on a CNC Lathe SYMG HTC40E with a Fanuc Oi-TF Plus controller (2 axis X and Z one encoder on the spindle).

My first thread on the forum concerns the ways to produce the internal rope thread.

The first way which I'll call the "traditional way" is about to repeat a G32 along the shape of the thread profile.

To achieve that I made a parametric program :

(Be carefull: G code system GSA , Tool compensation parameters has been customized TXXXX -> TXX DXX)

(Stock Parameter)

SETVN500[SL,SOD,SID]

[#SL]=192(Stock lengh)

[#SOD]=42(Stock Outer Diameter)

[#SID]=26(Stock Inner Diameter)

(Finish product Parameter)

SETVN503[PL,PICL,PICA,POCL,POCA,POCR,MSW,GR,XBD,TH,TR1,TR2,TP,TA]

[#PL]=190(Product Lenght)

[#PICL]=2(Product inner chemfer Lenght)

[#PICA]=45(Product inner chemfer angle)

[#POCL]=3(Product outer chemfer Lenght)

[#POCA]=30(Product outer chemfer angle)

[#POCR]=2(Product outer chemfer radius)

[#MSW]=3.5(Middle stop width)

[#GR]=7.924(Groove radius)

[#XBD]=28.485(D1 Boring diameter, 27=min boring diameter of T2)

[#TH]=1.6(H)

[#TR1]=5.5(R1)

[#TR2]=6.0(R2)

[#TP]=12.7(Pitch)

[#TA]=20.57246577(Thread flange angle should be able to be calculated)

[#_MSGSTP]=1(Set Quantity of needed parts in #100 and Insert Stock)

(To do Find parameter to read a natural number and read the input button)

[#_PRTSN]=#100(set number of needed part)

[#_PRTSA]=0(Reset number of turned part)

(T1 parameter Turning tool DWLNL2525M-08JCT_WNMG080408PH_CA525)

SETVN520[TN1,TN1VC,TN1FR,TN1AP,TN1TL]

[#TN1]=01(facing tools number)

[#TN1VC]=220(Facing cuting speed)

[#TN1FR]=0.4(Facing feed rate)

[#TN1AP]=6(Facing rought cuting depth)

([#TN1TL]= to do add tool life parameter)

(T2 parameter boring tool E25T-SCLCL09-27AE_CCMT09T308HQ_PR930)

SETVN525[TN2,TN2VC,TN2FR,TN2AP,TN2TL]

[#TN2]=02(Boring tool number)

[#TN2VC]=90(Boring cuting speed)

[#TN2FR]=0.21(Boring feed rate)

[#TN2AP]=2(Boring cuting depth)

([#TN2TL]=to do add tool life parameter)

(T3 parameter copying tool E20S-SDUCL11-27A_DCMT11T308HQ_PR930)

SETVN530[TN3,TN3R,TN3VC,TN3TVC,TN3FR,TN3AP,TN3TAP,TN3TF,TN3TL]

[#TN3]=03(Copying tool number)

[#TN3R]=0.8(Insert radius)

[#TN3VC]=100(Grooving cuting speed)

[#TN3TVC]=60(Thread cutting speed)

[#TN3FR]=0.2(Grooving feed rate)

[#TN3AP]=1.5(Grooving cuting depth)

[#TN3TAP]=1.6(Threading cuting depth)

[#TN3TF]=0.19(Threading Feed)

([#TN2TL]= to do add tool life parameter)

(Position Variable)

SETVN540[XOC,ZRA,ZRC,ZSA,XRA,XRC,ZTC,XTC]

[#XOC]=1(X over cut during facing)

[#ZRA]=2(Retract amount on Z Approach and tool change)

[#ZRC]=0.5(Retract amount on Z during cycle)

[#ZSA]=[[#SL]-[#PL]]/2(Stock allowance on Z)

[#XRA]=2(Retract amount on X Approach outer diameter)

[#XRC]=0.5(Retract amount on X during cycle inner diameter)

[#ZTC]=320(Tool Change position on Z)

[#XTC]=150(Tool Change position on x)

(Radius adjustment for threading)

[#TR1]=[#TR1]-[#TN3R]

[#TR2]=[#TR2]+[#TN3R]

(Initialisation at first start)

(Retract tail clamp, Start chips belt, ZX plane, Input in mm, Cancel tool nose radius compensation, Cancel tool lenght compensation, Cancel Coordinate system rotation cancel, Cancel canned cycle, Feed per revolution)

M33G18G21G40G49G64G69.1G80G99

M74

G28U0.W0.M19S0(Go to reference position, X,Z and Chuck angle)

M20(Turning Mode)

N10(OP10 FACING)

M34(Chuck max clamping force)

...

N21(Calculation)

#9=[#SID](X Approach point)

#10=[#ZSA]+[#PL]+[#ZRA](Z Approach point)

#11=[#XBD]+[2*[[#PICL]+[#ZRA]*SIN[[#PICA]]]](X point E, *2 due to diameter)

#12=[#XBD](x Point F & G)

#13=[#ZSA]+[#PL]-[#PICL](Z Point F)

#14=[#ZSA]+[[#PL]/2]-[#MSW]-0.5(Z Point G)

(Calcul of Z tool change position)

[#ZTC]=[#ZSA]+[#PL]+[#ZRA]+136(136 difference in Z between T1 and T2)

N31(Calculation)

#15=[#XBD]-[2*[#XRC]](X approach point, H and K, *2 due to diameter)

#16=[#ZSA]+[#PL]+[#ZRA](Z approach point outside the part)

#17=[#ZSA]+[[#PL]/2]+[[#MSW]/2]+12.8+[[#XRC]*COS[30]](Z approach point inside the part & Point H)

#18=[#XBD]+2*[2.438*TAN[30]](X point I & J, *2 due to diameter)

#19=[#ZSA]+[[#PL]/2]+[[#MSW]/2]+12.8-2.438(Z point I)

#20=[#ZSA]+[[#PL]/2]+[[#MSW]/2]+2.438(Z point J)

#21=[#ZSA]+[[#PL]/2]+[[#MSW]/2]-[[#XRC]*COS[30]](Z point K)

(Calcul of Z tool change position)

[#ZTC]=[#ZSA]+[#PL]+[#ZRA]+10(10 difference in Z between T2 and T3)

N32(Tool Change to T3)

G0G40Z[#ZTC](Go to tool change position)

T[#TN3]G43.7D[#TN3](Change to T3)

G96S[#TN3VC]M3(Defined Vc)

G50S4500(Max RPM)

N40(OP40 THREADING ROPE THREAD)

N41(Calculation)

#22=[#XBD]-2*[#XRC](X approach point)

#23=[#ZSA]+[#PL]+[#TP](Z approach point)

#24=[#ZSA]+[[#PL]/2]+[[#MSW]/2]+[12.8/2]-2*[#TN3R](Z Threadin end point)

#25=[1000*[#TN3TVC]]/[[#_PI]*[[#XBD]+[#TH]]](Calcul of Theorical RPM)

(Check of Feed rate and RPM)

IF[#25*[#TP]LT9500]THEN

#25=#25

ELSE

#25=9500/[#TP]

ENDIF

#26=[#XBD](Initialisation of Threading start point in X)

#27=#23(Initialisation of Threading start point in Z and correction de rayon)

#28=#23+2.3895(Z Point A including radius compensation for R0.8)

#29=#23+4.6985(Z point B including radius compensation for R0.8)

#30=#23+8.0015(Z point C including radius compensation for R0.8)

#31=#23+10.3105(Z point D including radius compensation for R0.8)

#32=[#XBD]+2*0.4336(X point A and D including radius compensation for R0.8)

#33=[#XBD]+2*1.3003(X point B and C including radius compensation for R0.8)

N42(Threading)

G97S#25M3(Set RPM)

WHILE[#27LE#28]DO1(Threading to point A)

#27=#27+[#TN3TF]

#26=[#XBD]+2*[#TR2]-2*[#TR2]*COS[ATAN[[#27-#23]/[#TR2]]]

G0X#22Z#23(Go to approach point)

G1X#26Z#27(Go to start point)

G32Z#24F[#TP](Threading)

G1X#22(X retract)

G0Z#23(Back to start point)

END1

WHILE[#27LE#29]DO1(Threading to point B)

#27=#27+[#TN3TF]

#26=#32+2*[#27-#28]*SIN[[#TA]]

G0X#22Z#23(Go to approach point)

G1X#26Z#27(Go to start point)

G32Z#24F[#TP](Threading)

G1X#22(X retract)

G0Z#23(Back to start point)

END1

WHILE[#27LE#30]DO1(Threading to point C)

#27=#27+[#TN3TF]

#26=[#XBD]+2*[#TH]-2*[#TR1]+2*[#TR1]*COS[ATAN[[#23+[#TP]/2-#27]/[#TR1]]]

G0X#22Z#23(Go to approach point)

G1X#26Z#27(Go to start point)

G32Z#24F[#TP](Threading)

G1X#22(X retract)

G0Z#23(Back to start point)

END1

WHILE[#27LE#31]DO1(Threading to point D)

#27=#27+[#TN3TF]

#26=#33-[2*[#27-#30]*SIN[[#TA]]]

G0X#22Z#23(Go to approach point)

G1X#26Z#27(Go to start point)

G32Z#24F[#TP](Threading)

G1X#22(X retract)

G0Z#23(Back to start point)

END1

WHILE[#27LE[#23+[#TP]]]DO1(Threading to point E)

#27=#27+[#TN3TF]

#26=[#XBD]+2*[[#TR2]-[#TR2]*COS[ATAN[[#23+[#TP]-#27]/[#TR2]]]]

G0X#22Z#23(Go to approach point)

G1X#26Z#27(Go to start point)

G32Z#24F[#TP](Threading)

G1X#22(X retract)

G0Z#23(Back to start point)

END1

N50(Flip Stock)

(Calcul of Z tool change position)

[#XTC]=[#SOD]+100(100 allowance in X)

G0X[#XTC](Let space to flip the stock)

M9

M5

(M11 Unclamp the part to add after tool life set up)

M00(Flip the side of the part)

.... (repeat without stock allowance /2)

M11(Unclamp the part)

M00(Stop program Remove part D insert stock)

IF[[#_PRTSA]LE[#_PRTSN]]THEN(Check number of parts turned)

[#_PRTSA]=[#_PRTSA]+1(increment the number of part turned)

(To do stop cycle time and reset)

GOTO10(Return to the begining)

ELSE

[#_PRTSA]=0(reset the numbert of turned part)

ENDIF

M75(Stop chips belt)

M30(Stop program)

This program manage to produce coupling sleeve with relative accuracy due to tool deflection. Unfortunately I cannot use stronger tools due to internal diameter. I manage to use mastercam to create a similar program which is not parametric but I had some roughing passe on the threading. With this roughing passes, the depth of cut is reduce and the accuracy greater.

Anyway this traditional way has some limits for the productivity. It require many passes and the cutting condition lead to some chartering as in threading F is fixed by the pitch of the thread (in this case 12.7mm) and the machine having a maximum cutting speed of 10 000m/min I can't reach a proper cutting speed.

There is other way to produce this thread

The excentric turning as it is done by okuma on external threading

The question is how to read the value of the encoder either parameter 445 or parameter 446 that I can program excentric turning.

something like x=[#XBD]+2*1.6*cos[PRM[446]]

Already try that but the machine reject it.

If someone have that little hint, I could finish a parametric program after some mathematics and share it.

This excentric turning is anyway just a step to the next level as it also got some limits for productivity. Acceleration of the machine abuse of the x axis calculation ability of the system Y compensation to be calculated... my machine doesn't have any Y axis. But with the proper tool and being awear of it I should be able to compensate that.

So the final step would be to do an hybrid between the traditional and the excentric.

Some excentric turning with lawer feed and increase the feed in Z with multiple passes maybe F3.175 with 4 passes. the advantage would be to save the X axis from the full excentric turning and save some passes from the traditional way. It should lead to a better accuracy and nicer surface finish.

Thank you in advance for any suggestion or interest on that topics.