![5bdcc68a5780b68871b2b39a0d310083.png](https://i-blog.csdnimg.cn/blog_migrate/bde125c78735b2ab72e57d46f5ab9648.jpeg)
这个是一个凹圆弧的通用宏程序,右旋螺纹带多头功能,分粗车精车,对于圆弧螺纹的牙深小于等于圆弧半径的任意螺纹都适用,这个程序没有空刀,刀具左右两侧间隔进刀,刀具刀刃磨损情况大体一致,节省刀具(以前的圆弧螺纹都是单刃进刀,刀具磨损快,费刀)
源程序有两个:源程序(一)应用范围最广,但是要求编程者逻辑性较强
源程序(二)比较好理解,程序本身的逻辑性强
源程序(一)详解
O0001
T105(刀具号及刀补号,用球刀或是圆弧切刀)
M03 S100(主轴正转,转速;根据实际情况选择转速)
#1=80(外径)
#2=6(圆弧半径)
#3=4(螺纹的深度)
#4=12(螺距)
#7=200(螺纹长度)
(上面的数据决定了任意一个凹圆弧螺纹,圆弧螺纹的深度小于等于圆弧半径的时适用)
#30=1(头数)(多头螺纹,一般正常情况都是一头的)
#5=2(刀具半径)
(刀具半径,刀具用圆弧刀,标准机夹刀)
#6=#3(分层)
(圆弧螺纹一刀车削不到位,需要X向多次进刀车削,相对于螺纹的每次进刀,只是这个进刀量要大些)
#8=1(分层吃刀量)(每次的进刀量)
#9=1(下刀点控制)(螺纹左右下刀点的初始赋值)
#31=5(粗车角度)
#32=2(精车角度)
(这个程序为了提高车削的效率,分粗车和精车)
#26=#4*#30(螺纹的导程)
#29=360/#30(每相邻的两个螺纹之间端面所夹的角度,也就是多头螺纹分头的角度值
用Q来表示或者叫编程的数据)
(Q值的基本单位根据不同机床系统,有不同的规定,大致是3种:360、360000、3600000。学编程加老师QQ:1156520760。这个是看机床角度后面的小数点位数来确定)
IF[#3 GT #2]GOTO2 (判断;当圆弧的深度大于圆弧的半径的时候,直接跳出不执行)
N10(程序段号,循环体用,这个循环体分层车削的循环)
#27=0(多头循环初始角度赋值)
N80(程序段号,循环体用,这个循环体多头螺纹车削的循环)
IF[#6 LT #8]THEN#31=#32(粗精车循环的判断)
#11=ASIN[[#2-#3]/#2](基准角度)
(这个角度是计算切入与切出角度的基准)
#12=#11-180(切角)
#13=-#11(切角)
这两个切角后面我们在公众号用图详细解释
IF[#9 EQ 1] GOTO50 (判断,在左侧下还是右侧下刀)
IF[#9 EQ 2] GOTO40 (判断,在左侧下还是右侧下刀)
GOTO30
N50
WHILE[#12 LE #13]DO1(角度车削循环,当#12小于等于#13循环执行,完成圆弧车削)
#14=#1+2*[#2-#3] (圆弧圆心点,X向的值)
#15=#14+2*[#2-#5]*SIN[#12]+2*#6 (在多层车削中,圆弧上所有点的集合,这里所有的点指的是X向的值)
#16=#4+[#2-#5]*COS[#12] (在多层车削中,圆弧上所有点的集合,这里所有的点指的是Z向的值)
#22=#1+2*#5 (去空刀位置计算)
#23=-#7-#4 (螺纹的车削长度,为增量编程用)
#24=#1+2*#3+2+2*#6 (X向的每次退刀计算)
IF[#15 GE #22 ]GOTO3 (判断, 去空刀,当刀具在工件上方空车削的时候,直接跳转到运算程序,机床不动作)
G0 X#15 (X向车削定位点)
Z#16(Z向车削定位点)
G32 W#23 F#26 Q#27 (螺纹的车削,#23为刀具每次相对起点所走的距离,#26为螺纹的导程,#27为多头车削的角度变量)
G0 X#24 (X向退刀)
Z#16 (Z向退刀)
N3(车削段号,用来标记去空刀跳转位置)
IF[#12 EQ #13]GOTO1(判断,当#12等#13的角度值的时候跳出车削循环)
#12=#12+#31(角度每次增量,这里是从左往右车削,所以角度是逐渐增大的,这里为加号)
IF[#12 GT #13]THEN #12=#13 (判断,当#12中的数据大于#13中的数据时,强制赋值,防止车削不到位)
END1
N1(跳出循环标记位置)
(上面的循环为左侧下刀循环)
#9=#9+1(循环体执行选择运算公式)
GOTO30(强制跳转)
N40(跳转标记,执行右侧下刀循环)
WHILE[#13 GE #12]DO1(角度车削循环,当#13大于等于#13循环执行,完成圆弧车削,这里在设置角度变量的时候正好是和上面相反的,这样才能实现左右间隔下刀)
#14=#1+2*[#2-#3] (圆弧圆心点,X向的值)
#15=#14+2*[#2-#5]*SIN[#13]+2*#6(在多层车削中,圆弧上所有点的集合,这里所有的点指的是X向的值)
#16=#4+[#2-#5]*COS[#13](在多层车削中,圆弧上所有点的集合,这里所有的点指的是Z向的值)
#22=#1+2*#5(去空刀位置计算)
#23=-#7-#4(螺纹的车削长度,为增量编程用)
#24=#1+2*#3+2+2*#6(X向的每次退刀计算)
IF[#15 GE #22]GOTO6 (判断, 去空刀,当刀具在工件上方空车削的时候,直接跳转到运算程序,机床不动作)
G0 X#15 (X向车削定位点)
Z#16(Z向车削定位点)
G32 W#23 F#26 Q#27(螺纹的车削,#23为刀具每次相对起点所走的距离,#26为螺纹的导程,#27为多头车削的角度变量)
G0 X#24(X向退刀)
Z#16(Z向退刀)
N6(车削段号,用来标记去空刀跳转位置
IF[#13 EQ #12]GOTO5(判断,当#13等#12的角度值的时候跳出车削循环)
#13=#13-#31(这里是从右往左车削,所以角度是逐渐减小的,这里为减号)
IF[#13 LT #12]THEN #13=#12(当#13中的数值减小到小于#12中的数值时,强制赋值,防止车削不到位)
END1
N5
#9=#9-1(循环体执行选择运算公式)(N20到N5之间的循环为右侧下刀循环))
N30(跳转标记)
#27=#27+#29
IF[#27 LT 360]GOTO80(多头车削循环体)
IF[#6 EQ 0]GOTO2(判断,分层车削判断,当分层车削到位时,直接跳出循环)
#6=#6-#8(每次分层的车削量,#6为每次分层后剩余的余量,#8为每次的车削量)
IF[#6 LT 0]THEN #6=0(判断,当#6小于0时,强制赋值,防止车削不到位)
IF[#6 GE 0]GOTO10(分层车削循环体)
N2
G0 X200
Z200
M30
源程序(二)详解
O0001
T105(刀具号及刀补号,用球刀或是圆弧切刀)
M03 S100(主轴正转,转速;根据实际情况选择转速)
#1=80(外径)
#2=6(圆弧半径)
#3=4(螺纹的深度)
#4=12(螺距)
#7=200(螺纹长度)
(上面的数据决定了任意一个凹圆弧螺纹,圆弧螺纹的深度小于等于圆弧半径的时适用)
#30=1(头数)(多头螺纹,一般正常情况都是一头的)
#5=2(刀具半径)(刀具半径,刀具用圆弧刀,标准机夹刀)
#6=#3(分层)(圆弧螺纹一刀车削不到位,需要X向多次进刀车削,相对于螺纹的每次进刀,只是这个进刀量要大些)
#8=1(分层吃刀量) (每次的进刀量)
#9=1(下刀点控制)(螺纹左右下刀点的初始赋值)
#31=5(粗车角度)
#32=2(精车角度) (这个程序为了提高车削的效率,分粗车和精车)
#26=#4*#30 (螺纹的导程)
#29=360/#30 (每相邻的两个螺纹之间端面所夹的角度,也就是多头螺纹分头的角度值用Q来表示或者叫编程的数据)学编程加老师QQ:1156520760(Q值的基本单位根据不同机床系统,有不同的规定,大致是3种:360、360000、3600000,这个是看机床角度后面的小数点位数来确定)
IF[#3 GT #2]GOTO2 (判断, 当圆弧的深度大于圆弧的半径的时候,直接跳出不执行)
N10(程序段号,循环体用,这个循环体分层车削的循环)
#27=0(多头循环初始角度赋值)
N80(程序段号,循环体用,这个循环体多头螺纹车削的循环)
IF[#6 LT #8]THEN#31=#32(粗精车循环的判断)
#11=ASIN[[#2-#3]/#2](基准角度)(这个角度是计算切入与切出角度的基准)
#12=#11-180(切角)
#13=-#11(切角)(这两个切角后面我们在公众号用图详细解释)
IF[#9 EQ -1] GOTO20(判断,在左侧下还是右侧下刀)
WHILE[#12 LE #13]DO1(角度车削循环,当#12小于等于#13循环执行,完成圆弧车削)
#14=#1+2*[#2-#3] (圆弧圆心点,X向的值)
#15=#14+2*[#2-#5]*SIN[#12]+2*#6(在多层车削中,圆弧上所有点的集合,这里所有的点指的是X向的值)
#16=#4+[#2-#5]*COS[#12](在多层车削中,圆弧上所有点的集合,这里所有的点指的是Z向的值)
#22=#1+2*#5(去空刀位置计算)
#23=-#7-#4(螺纹的车削长度,为增量编程用)
#24=#1+2*#3+2+2*#6(X向的每次退刀计算)
IF[#15 GE #22 ]GOTO3 (判断, 去空刀,当刀具在工件上方空车削的时候,直接跳转到运算程序,机床不动作)
G0 X#15 (X向车削定位点)
Z#16(Z向车削定位点)
G32 W#23 F#26 Q#27(螺纹的车削,#23为刀具每次相对起点所走的距离,#26为螺纹的导程,#27为多头车削的角度变量)
G0 X#24(X向退刀)
Z#16(Z向退刀)
N3(车削段号,用来标记去空刀跳转位置)
IF[#12 EQ #13]GOTO1(判断,当#12等#13的角度值的时候跳出车削循环)
#12=#12+#31(角度每次增量,这里是从左往右车削,所以角度是逐渐增大的,这里为加号)
IF[#12 GT #13]THEN #12=#13(判断,当#12中的数据大于#13中的数据时,强制赋值,防止车削不到位)
END1
N1(跳出循环标记位置)
(上面的循环为左侧下刀循环)
GOTO30(强制跳转)
N20(跳转标记,执行右侧下刀循环)
WHILE[#13 GE #12]DO1(角度车削循环,当#13大于等于#13循环执行,完成圆弧车削,这里在设置角度变量的时候正好是和上面相反的,这样才能实现左右间隔下刀)
#14=#1+2*[#2-#3] (圆弧圆心点,X向的值)
#15=#14+2*[#2-#5]*SIN[#13]+2*#6(在多层车削中,圆弧上所有点的集合,这里所有的点指的是X向的值)
#16=#4+[#2-#5]*COS[#13](在多层车削中,圆弧上所有点的集合,这里所有的点指的是Z向的值)
#22=#1+2*#5(去空刀位置计算)
#23=-#7-#4(螺纹的车削长度,为增量编程用)
#24=#1+2*#3+2+2*#6(X向的每次退刀计算)
IF[#15 GE #22]GOTO6(判断, 去空刀,当刀具在工件上方空车削的时候,直接跳转到运算程序,机床不动作)
G0 X#15 (X向车削定位点)
Z#16(Z向车削定位点)
G32 W#23 F#26 Q#27(螺纹的车削,#23为刀具每次相对起点所走的距离,#26为螺纹的导程,#27为多头车削的角度变量)
G0 X#24(X向退刀)
Z#16 (Z向退刀)
N6(车削段号,用来标记去空刀跳转位置
IF[#13 EQ #12]GOTO5(判断,当#13等#12的角度值的时候跳出车削循环)
#13=#13-#31(这里是从右往左车削,所以角度是逐渐减小的,这里为减号)
IF[#13 LT #12]THEN #13=#12(当#13中的数值减小到小于#12中的数值时,强制赋值,防止车削不到位)
END1
N5(N20到N5之间的循环为右侧下刀循环))
N30(跳转标记)
#27=#27+#29
IF[#27 LT 360]GOTO80(多头车削循环体)
IF[#6 EQ 0]GOTO2(判断,分层车削判断,当分层车削到位时,直接跳出循环)
#6=#6-#8(每次分层的车削量,#6为每次分层后剩余的余量,#8为每次的车削量)
IF[#6 LT 0]THEN #6=0(判断,当#6小于0时,强制赋值,防止车削不到位)
#9=-#9(左右间隔下刀的计算公式)
IF[#6 GE 0]GOTO10(分层车削循环体)
N2
G0 X200
Z200
M30