车床复合固定循环的写法:G71(外径/内径粗加工)+G70(精加工)、G72(端面)、G73(仿形循环)、G76(螺纹切削)
精加工形状只要写一次,粗加工的往复走刀就由 NC 自动生成。注意两行 U 的区别哦!


用数控车床车削台阶轴时,您是不是还在一行一行地写粗加工的往复走刀?改用复合固定循环,只需写一次精加工形状,粗加工的往复走刀、退刀直到精加工都由 NC 自动生成。本文针对外径、内径的粗加工 G71 和精加工 G70、端面的 G72、铸件和锻件的 G73、螺纹切削的 G76 ,结合示例图纸与程序,以及根据数值绘制的刀具路径图进行讲解。最后还附上了可核对 G76 切削次数与深度的计算器。
本文的写法以 FANUC 兼容的 两程序段格式(G 代码体系 A)为基准。由于 FANUC 的使用说明书一般不公开,因此通过刊载了 FANUC 兼容写法的 Siemens 的 ISO 方言[1]、三菱电机[2]的公开说明书进行核对,与Haas[3]、LinuxCNC[10]的差异则逐处注明。使用前请务必用自己机床的说明书确认。
单一型(G90、G92、G94)与复合型的区别
车床的固定循环分为用 1 个程序段完成“切入 → 切削 → 退刀 → 返回”4 个动作的单一型,以及根据精加工形状自动生成粗加工往复走刀的复合型两种[1][2]。
| 代码 | 类型 | 写法 | 适合的形状 |
|---|---|---|---|
| G90 | 单一型 | G90 X(U)_ Z(W)_ F_(锥度用 R_) | 把直的外径、内径分几次切削 |
| G92 | 单一型 | G92 X(U)_ Z(W)_ F_(F 为导程) | 螺纹。排列多行只改变 X 的程序段,逐步切入 |
| G94 | 单一型 | G94 X(U)_ Z(W)_ F_ | 把端面分几次切削 |
| G71+G70 | 复合型 | G71 U_ R_ G71 P_ Q_ U_ W_ F_ | 带台阶、锥度、圆弧的轴或孔(沿轴向切削) |
| G72 | 复合型 | G72 W_ R_ G72 P_ Q_ U_ W_ F_ | 像法兰那样直径差大、长度短的形状 |
| G73 | 复合型 | G73 U_ W_ R_ G73 P_ Q_ U_ W_ F_ | 铸件、锻件等沿形状留有余量的毛坯 |
| G76 | 复合型 | G76 P_ Q_ R_ G76 X(U)_ Z(W)_ R_ P_ Q_ F_ | 螺纹。切深的分配由 NC 计算 |
例如单一型的 G90,在 N11 G90 X80. W-42. F0.3; 之后 X70.; X60.; 接着写只改变 X 的程序段,就会分 3 次切削[1]。如果只有一个台阶,用单一型就够了;但台阶、锥度、倒角一多,程序行数和计算量都会膨胀。这时就轮到复合型登场了。另外, 它们与加工中心的 G90(绝对值指令)、G94(每分钟进给)含义完全不同,请勿混淆(固定循环一览)。
锥度的写法因机型而异。FANUC 兼容的 Siemens ISO 方言中 G90、G92、G94 都用 R;Haas 中 G90、G92 用 I,G94 用 K[1][8]。在 G 代码体系 B、C 中,代码号本身就不同。
G71+G70:外径的粗加工与精加工
G71 是 两行为一组。第 1 行指定粗加工的切深和退刀量,第 2 行指定精加工形状的范围(P~Q)和精加工余量[1][2]。
| 行 | 地址字 | 含义 | 备注 |
|---|---|---|---|
| 第 1 行 | U | 每次切深 Δd | 半径值,不带符号 |
| R | 退刀量 e | 每次切削结束后按 45° 退刀的量 | |
| 第 2 行 | P、Q | 精加工形状首尾程序段的顺序号(N) | 在 P~Q 之间写精加工形状 |
| U | X 方向精加工余量 Δu | 直径值。用符号决定余量留在哪一侧(外径为+,内径为−) | |
| W | Z 方向精加工余量 Δw | 用符号决定余量留在哪一侧 | |
| F、S、T | 粗加工的进给、转速、刀具 | 粗加工时不使用 P~Q 中的 F、S、T |
同样是 U,第 1 行和第 2 行含义不同第 1 行的 U 是切深(半径),带 P、Q 的第 2 行的 U 是精加工余量(直径)。[1]。如果把 U2. 和 U0.4 写反,就成了精加工余量 2 mm、切深 0.4 mm 这种不可能的粗加工。
示例:台阶轴的粗加工与精加工
从 φ50 的毛坯车出 φ20、锥度、φ36、φ48 的台阶轴。粗加工切深 2 mm(半径),精加工余量 X 0.4 mm(直径)、Z 0.1 mm,精加工换另一把刀用 G70。
O1000 (G71 G70 OD) G28 U0. W0. T0101 (粗车刀) G50 S2500 (转速上限) G96 S180 M03 (恒线速) G00 X52. Z2. M08 (起点 A:毛坯外侧、端面前方) G71 U2. R0.5 (第 1 行:切深 2 mm,退刀 0.5 mm) G71 P100 Q200 U0.4 W0.1 F0.25 (第 2 行:精加工形状 N100~N200) N100 G00 G42 X18. (P:只移动 X → I 型) G01 Z0. F0.12 (此处 F、S 仅在 G70 时有效) X20. Z-1. (C1 倒角) Z-20. X28. X36. Z-35. (锥度) Z-45. X46. X48. Z-46. (C1 倒角) Z-55. N200 G40 X52. (Q:退到毛坯外) G00 X100. Z100. M09 T0303 (精车刀) G96 S220 M03 G00 X52. Z2. M08 G70 P100 Q200 (精加工:沿 N100~N200 走刀) G00 X100. Z100. M09 M30
G70 只需写上与 G71 相同的 P、Q ,就会沿 N100~N200 的形状走刀 1 次完成精加工。此时起作用的是 P~Q 中写的 F、S、T ,G71 程序段中的 F0.25 不使用。反之,在 G71 粗加工期间,P~Q 中的 F、S、T 会被忽略[1][4]。如果粗加工和精加工要用不同的进给,请记住:粗加工进给写在 G71 的第 2 行,精加工进给写在 P~Q 中。G70 结束后,刀具以快速移动返回起点[4]。
图解:G71(车床)的切削方式
图解:G70(车床)的切削方式
P~Q 的规则:I 型与 II 型
写在 P~Q 中的精加工形状有一些规则。最重要的是 P 程序段(第一行)中写哪个轴,这决定了 G71 的动作方式(类型)[1][3]。
- I 型:精加工形状的 X、Z 都必须单调(一直增大或一直减小)。不能加工凹槽(pocket)[1]
- II 型:可以加工 X 方向的凹槽,但 Z 方向仍须单调。能否使用 II 型因选配功能和机型而异[1][3]
- P 程序段须以 G00 或 G01 开头。P~Q 中不能调用子程序(M98、M99)。有的机型若以倒角或拐角 R 指令结束最后的移动,会发生报警[1]
- 最后的程序段(Q)如果像示例那样做成退到毛坯外的形状,粗加工的终点就会很明确
内径粗加工:U 的符号取反
内径也可以用同样的 G71 加工。不同的是精加工余量 U 的符号和起点的位置。精加工余量表示“粗加工到把精加工形状向哪一侧偏移后的线为止”:余量留在 X 的+侧(外侧)用 U+,留在中心侧用 U−。内径的加工面朝向中心,因此为 U−[1][3]。
(用钻头钻出 φ20 预钻孔之后) T0202 (内径粗车刀) G96 S150 M03 G00 X18. Z2. M08 (起点:预钻孔内侧、端面前方) G71 U1.5 R0.5 G71 P300 Q400 U-0.4 W0.1 F0.2 (内径 U 取负值) N300 G00 X42. (P:只写 X → I 型) G01 Z0. F0.1 X40. Z-1. (C1 倒角) Z-15. X30. Z-30. N400 X18. (Q:退入预钻孔内) G00 Z100. (先沿 Z 退出孔外) X100. M09
内径要注意“退刀”和“返回”的方向加工内径时,每次切削结束后的 45° 退刀(第 1 行的 R)朝向中心侧。如果预钻孔小,刀杆背面与孔壁的间隙小于退刀量,退刀时就会撞到对面的孔壁。起点的 X 也必须小于预钻孔,否则第一次快速移动就会撞壁。加工结束后,请像示例那样先沿 Z 退出孔外,再 移动 X。
G72:端面粗加工
G72 相当于方向与 G71 不同的版本,沿 X 方向(朝向中心)往复,同时沿 Z 方向逐步切入。适合像法兰那样直径差大、长度短的形状[1][5]。
G00 X84. Z2. (起点) G72 W2. R0.5 (第 1 行:Z 向切深 2 mm,退刀 0.5 mm) G72 P500 Q600 U0.4 W0.2 F0.25 N500 G00 Z-12. (P:只移动 Z) G01 X60. F0.12 Z-6. X30. Z-1. X28. Z0. (C1 倒角) N600 X0. (Q) G70 P500 Q600 (精加工)
与 G71 的区别在于:第 1 行的切深用 W ;P 程序段中只写 Z;精加工形状要从外向中心书写[1]。第 2 行的 U、W 为精加工余量,这一点与 G71 相同。
图解:G72(车床)的切削方式
G73:铸件、锻件的仿形(封闭)循环
G73 是一边将精加工形状逐步偏移,一边沿形状反复走刀多次的循环。像铸件、锻件那样毛坯已接近成品形状、余量整体均匀时,用 G71 那样的往复走刀会产生很多空切,因此使用 G73[1][6]。
| 行 | 地址字 | 含义 |
|---|---|---|
| 第 1 行 | U | X 方向退刀总量 Δi(半径值)=第一次走刀形状的偏移量 |
| W | Z 方向退刀总量 Δk | |
| R | 重复次数 d(分割次数) | |
| 第 2 行 | P Q U W F | 与 G71 相同(精加工形状范围、精加工余量、进给) |
(从各面约有 3 mm 余量的锻造毛坯车出与 G71 示例相同的形状) G00 X60. Z5. (起点:毛坯形状之外) G73 U2.8 W2.8 R3 (第 1 行:偏移量 2.8 mm 分 3 次) G73 P100 Q200 U0.4 W0.1 F0.25 (N100~N200 与 G71 示例相同) G70 P100 Q200
Δi、Δk 以“毛坯余量减去精加工余量”为参考,按除以 R 次数后的量逐次将形状向内侧靠拢。第 1 行的 U 为半径值,第 2 行的 U 为直径值。Haas 用单程序段格式写成 G73 P Q U W I K D ,其中D 为次数(写小数点会报警),I、K 为偏移量[6]。
图解(车床):G73(车床)的切削方式
G76:螺纹切削循环
G76 只需指定牙高和第 1 次切深,分几次切、每次切多深都由 NC 计算,是一种螺纹车削循环。由于用单侧刀刃切入(单刃切削),刀尖负担轻,并且逐次减小切深,使每次的切除量保持恒定[1][2]。
| 行 | 地址字 | 含义 | 标注示例 |
|---|---|---|---|
| 第 1 行 | P | 6 位数每 2 位一组:m 精加工次数、r 螺纹收尾倒角量(以导程的 1/10 为单位)、a 刀尖角 | P011060 |
| Q | 最小切深 Δdmin(半径值)。计算出的切深小于此值时,固定为此值 | Q100(0.1 mm) | |
| R | 精加工余量 d | R0.05 | |
| 第 2 行 | X(U)、Z(W) | 螺纹终点(X 为底径) | X16.93 Z-30. |
| R | 锥度量 i(半径值。直螺纹为 0 或省略) | — | |
| P | 牙高 k(半径值) | P1534(1.534 mm) | |
| Q | 第 1 次切深 Δd(半径值) | Q450(0.45 mm) | |
| F | 螺纹的导程(多线螺纹为螺距×线数) | F2.5 | |
| 第 1 行和第 2 行的 P、Q、R 含义完全不同 | |||
示例:M20×2.5 外螺纹
T0505 (螺纹车刀 60°) G97 S800 M03 (车螺纹用恒转速) G00 X22. Z5. M08 (起点:约 2 倍导程前方) G76 P011060 Q100 R0.05 (精加工 1 次,倒角 1.0L,60°,最小 0.1,余量 0.05) G76 X16.93 Z-30. P1534 Q450 F2.5 (底径,终点,牙高 1.534,第 1 次 0.45,导程 2.5) G00 X100. Z100. M09
第 2 行的 P、Q 是不带小数点的整数按 FANUC 兼容的写法,G76 的 P、Q 用最小设定单位(通常为 0.001 mm)的整数书写。Siemens 的示例也像 G76 X60640 Z25000 P3680 Q1800 F6.0 这样不带小数点[1]。不带小数点的数值读作“mm”还是“0.001 mm”取决于机床的设置,因此 X、Z 像示例那样带上小数点书写比较安全。而 Haas 用单程序段格式,牙高 K 和第 1 次切深 D 都带小数点书写[7]。
为什么切深越来越浅:等面积(恒定切削面积)的思路
螺纹车刀的刀尖呈 V 形,切入越深,与材料接触的刃长就越长。如果每次都切入相同深度,越往后每次切除的面积(切削抗力)就越大,容易引起振刀或刀尖崩刃。因此 G76 使第 n 次的深度为 Δd × √n 。V 形槽的截面积与深度的平方成正比,深度按 √n 增加时截面积就与 n 成正比,每次切除的面积大致恒定[1][2][7]。不过次数一多,每次的切深就会变得极薄,因此用最小切深 Δdmin(第 1 行的 Q)设定下限[2][1]。
图解(车床):G76(车床):复合型螺纹切削循环
LinuxCNC 的 G76 写法完全不同,G76 P(螺距) Z I J K R Q H E L ,写在 1 行中。R 是“深度递减方式”,R2 为等面积(√n),R1 为每次相同深度。Q 为进刀角(通常 29~30°),H 为光刀(空走刀)次数[10]。
进刀角:单侧斜进还是径向直进
第 1 行的 a(刀尖角)设为 60 时,刀刃沿牙型一侧的面斜向切入(侧面进刀);设为 0 时沿半径方向直进(径向进刀)。刀具厂商的资料认为,把角度稍微减小的“改进侧面进刀”是首选,切屑流向一侧,刀具寿命长。径向进刀会产生 V 形的硬切屑,刀尖容易发热,适合细螺距[11]。对于大螺距,也可以采用左右刀刃交替切削的进刀方式(交替侧面进刀)来分散磨损[11][14]。
| 进刀方式 | 动作 | 适用对象 | 指定方法示例 |
|---|---|---|---|
| 径向进刀(直进) | 两侧刀刃同时切削。V 形切屑 | 细螺距、软材料 | FANUC 兼容 a=00,Haas A0 |
| 侧面进刀、改进侧面进刀 | 单侧刀刃切削,另一侧轻微接触 | 大多数螺纹(首选) | a=60,Haas 对 60° 螺纹推荐 A59[7]、LinuxCNC Q29.5 |
| 交替侧面进刀 | 每次交替使用左右刀刃 | 大螺距、梯形螺纹、难切削材料 | Haas P2、P4(双刃)[7]。FANUC 系因选配功能和机型而异 |
在螺纹铣削(不是车削)的实验中,也有报告称:与径向进刀相比,改进侧面进刀的刀具寿命约为 2 倍,交替进刀约为 4 倍[15]。在车削螺纹方面,也有专利提出由粗加工刀具和精加工刀具分担切深,以抑制精加工刀具的磨损[16]。进刀方式是直接影响刀具寿命和螺纹质量的选择。
计算器:G76 的切削次数与深度
按与 FANUC 兼容 G76 相同的思路(第 n 次深度 = Δd × √n,用最小切深设下限,最后留精加工余量),算出每次的深度、X 值以及两行 G76。牙高 k 按常用的参考值填入外螺纹 0.6134P、内螺纹 0.5413P (内螺纹的 0.5413P 即 JIS 的啮合高度 H1 = 0.541266P)[13]。实际深度请一边用螺纹量规检查一边确定。螺纹尺寸在螺纹尺寸与底孔直径中有介绍。
作为螺纹切削次数的参考,刀具厂商的资料中有这样的例子:螺距 1.5 mm(深度 0.94 mm)分 6 次切削,切深从 0.23 mm 逐步减至 0.10 mm[12]。次数会因材料、刀具和机床刚性而变化,计算器的结果请作为起点参考。
不同机型的写法差异
| FANUC 兼容(Siemens ISO 方言、三菱电机) | Haas | LinuxCNC | |
|---|---|---|---|
| G71 | G71 U_ R_ G71 P_ Q_ U_ W_ F_ | G71 P_ Q_ U_ W_ D_ (I_ K_) F_ D 为切深(单程序段) | 可用 G71,但在刀尖圆弧半径补偿中会报错[10] |
| G73 | G73 U_ W_ R_(R 为次数) | G73 P_ Q_ U_ W_ I_ K_ D_ D 为次数 | — |
| G76 | G76 P(m r a) Q R G76 X Z R P Q F | G76 X Z K D F A P I Q K 牙高,D 第 1 次切深,A 刀尖角,P 进刀方式,Q 为起始角 | G76 P Z I J K R Q H E L P 为螺距,不写 X |
| G76 的小数点 | P、Q 为最小设定单位的整数 | K、D 带小数点,A、Q 不带小数点 | 带小数点 |
| 最小切深、精加工余量 | 第 1 行的 Q、R(也可用参数设定)[2] | Setting 99(最小切深)、Setting 86(精加工余量)[7][9] | — |
同样的“P”“Q”在不同厂商含义不同FANUC 兼容 G76 第 1 行的 P 是 6 位数的组合,Haas 的 P 是进刀方式,LinuxCNC 的 P 是螺距。Haas 的 Q 是螺纹的起始角,与 FANUC 兼容的 Q(切深)完全是两回事[7][10]。使用 CAM 后处理程序或沿用其他机床的程序时,请务必改写。
常见错误
- 把 G71 两行中的 U 弄混:第 1 行为切深(半径),第 2 行为精加工余量(直径)[1]
- 内径加工时 U 仍为正值:精加工余量不会留在中心侧,粗加工就会切入精加工尺寸。内径用 U−
- 在 P 程序段中也写了 Z:会按 II 型动作(或因没有 II 型功能而报警)。I 型时 P 中只写 X[1][3]
- 形状不单调:I 型形状中有凹槽会报警(处理方式因机型而异)。凹槽请用另外的工序或 II 型加工
- 未确定刀尖圆弧半径补偿(G41、G42)的处理方式就编程:处理方式因机型而异。三菱电机在粗加工中也使用补偿后的形状(可用参数切换)[2],Haas 的示例在 P 程序段写 G42、在 Q 程序段写 G40,使 G71、G70 都带补偿[9]。Siemens 的 ISO 方言在 G71~G76 中不进行补偿[1]。在不补偿的机床上,锥面和圆弧会出现相当于刀尖圆弧半径的欠切或过切
- 给 G76 第 2 行的 P、Q 加了小数点/X、Z 忘了加小数点:P、Q 为整数(单位 0.001 mm)。X、Z 要带小数点[1]
- 在恒线速(G96)状态下开始车螺纹:车螺纹要用 G97 保持恒转速。起点在 Z 方向要留出让进给跟上的加速距离(示例中为导程的 2 倍)
- F 中写了螺距(多线螺纹):F 是导程。双线螺纹为螺距的 2 倍
- 把 Haas 的程序直接用于 FANUC 兼容机床(或反之):单程序段格式与两程序段格式不同,P、Q、D 的含义也不同
常见问题
- 单程序段格式和两程序段格式,应该用哪种写?
- 按机床能接受的格式写。目前 FANUC 兼容的 NC 一般用两程序段格式,Siemens 的 ISO 方言两种都接受[1]。Haas 的 G71 等用单程序段格式(用 D 指定切深)书写[3]。请查看说明书中 G71 的格式,根据是 1 行还是 2 行来判断。
- G71 和 G90 如何区分使用?
- 如果是只有 1 个台阶的简单外径,用 G90 就够了。如果有台阶、锥度、倒角、圆弧,并且要把粗加工和精加工分开,用 G71+G70 写起来更短,修改尺寸时也只需改 P~Q 中的形状。
- G70 之前可以换刀吗?
- 可以。像示例那样,用粗车刀执行 G71,再换成精车刀写 G70,是常见的做法。G70 引用同一程序中的 P~Q,因此请写与 G71 相同的顺序号。
- G76 的倒角量(r)有什么用?
- 它是螺纹收尾处刀具斜向退出的量。以导程的 1/10 为单位书写,10 即以 1.0 × 导程的长度退出[1][2]。如果螺纹末端有退刀槽,请确认退出量能落在槽内。
- Δd(第 1 次切深)该如何确定?
- 从粗加工次数反推最简单。想让粗加工为 N 次,则 Δd = (k − d) ÷ √N(受最小切深影响,次数可能会增加)。可以用上面计算器的“按粗加工次数确定 Δd”试算。
各 G、M 代码的含义汇总在 G、M 代码词典,加工中心的钻孔循环见 固定循环一览,使用变量和运算的程序见 用户宏程序入门一文中。
参考资料
- Siemens《SINUMERIK 840D sl/840Di sl ISO Turning Programming Manual》(ISO 方言,2007)
- 三菱电机《700/70 Series Programming Manual (Lathe System)》IB-1500057
- Haas Automation“G71 O.D./I.D. Stock Removal Cycle”
- Haas Automation“G70 Finishing Cycle”
- Haas Automation“G72 End Face Stock Removal Cycle”
- Haas Automation“G73 Irregular Path Stock Removal Cycle”
- Haas Automation“G76 Threading Cycle, Multiple Pass”
- Haas Automation“G90 O.D./I.D. Turning Cycle”
- Haas Automation《Lathe Programming Workbook》(PDF)
- LinuxCNC《G-Codes》(G71、G72、G76)
- 刀具厂商技术资料《How to choose infeed method in thread turning operations》
- 刀具厂商技术资料《Threading formulas and definitions》
- Red Seal(加拿大)《Machinist formulas》(PDF)
- Evaluation of infeed strategies for turning of large thread profiles(贝尔格莱德大学机械工程学院知识库)
- Ghogha 等《螺纹铣削的进刀方式与刀具磨损》Amirkabir Journal of Mechanical Engineering 53(2021)
- 日本专利公开 特开2000-117543《钢管的螺纹切削方法》


