数控车床编程入门:在浏览器中运行的模拟器与带评分的练习题
输入、运行、出错,在实践中记住吧。在这里机床可不会坏哦


数控车床的程序要记的代码不多,难点却在于很难确认“写的东西到底对不对”。在机床上试要做准备,一旦出错还会损坏刀具或机床。所以在本文中制作了一个在浏览器中运行的数控车床模拟器。输入程序并按下 ▶,刀具就会移动,材料被切削,同时显示转速、加工时间,以及碰撞和漏写小数点的警告。后半部分有自动判定是否按图纸车出的带评分的练习题 5 道。写好的程序可以生成链接发给别人,也可以用来请前辈帮忙检查。
写法以众多机床采用的 FANUC 兼容 G 代码体系 A 为基准。由于 FANUC 的使用说明书一般不公开,FANUC 兼容的写法依据 Siemens 的 ISO 方言[1]和三菱电机[2]的公开说明书进行核对,与Haas 等的差异则在相应处逐一注明。在实际机床上,请务必遵循该机床的说明书和公司内部的规定。
先动手试试:数控车床模拟器
上方的图是从正上方俯视车床的剖面(卡盘在左,刀具从中心线上侧= +X 侧切削),下方黑色栏是 NC 程序。浅色的线是刀具接下来要走的路径。请按下▶ 运行试试。程序可以改写。改改数字,或者故意写错,看看会发生什么。
┅ 快速移动 G00━ 切削进给━ 车螺纹
- 灰色虚线为快速移动(G00),绿线为切削进给(G01、G02、G03),橙色线为车螺纹。图下方的黑色条(DRO)显示当前的 X、Z、转速、刀具、经过时间以及正在执行的行
- 点击消息,编辑器中就会选中对应的行。写好的程序会保存在此浏览器中(用“恢复为初始程序”可清除)
- 按下“复制此程序的链接”,就会生成包含当前程序的链接。打开链接的人的画面上,该程序会自动运行
- 在日本高专(高等专门学校)等的机械加工课程中,也有报告介绍先用仿真在画面上确认刀具动作和切削过程、再上实机的教学方法[18][19][20]。国外职业学校的报告指出,使用可以反复试验、不必担心事故的模拟器的学生,在上实机前的信心和理解程度更高[23]
- 另一方面,在让初学者使用 5 轴机床 VR(戴上头显进入机床内部的教材)的实验中,虽然看起来有趣,但注意力被操作分散,理解测试的成绩反而更低[24]。本模拟器之所以特意只显示剖面 2D,正是这个原因。观察对象只限于“程序与刀具动作的对应关系”
- 本模拟器是学习用的简易版。刀尖为一个点(刀尖圆弧=0),刀具形状经过简化,不处理孔(内径)。快速移动速度(12 m/min)和机床最高转速(4000 min⁻¹)也是假定值
坐标:X 为直径,Z 为长度,原点在端面中心
车床有 2 根轴。Z 轴为主轴方向(工件长度方向),X 轴为与之垂直的半径方向。X、Z 两轴都规定刀具远离工件的方向为正(JIS B 6310/ISO 841)[17][2]。也就是说,离开卡盘的向右方向为 +Z,从中心向外的方向为 +X。
- X 按直径编写:图纸尺寸标注的是直径,因此车床通常用直径来指令 X(直径编程)[1][2]。写 X30. 即表示“直径 30 mm 的位置”。切深 1 mm 时,X 值减少 2 mm
- 原点设在精加工后端面的中心(X0 为主轴中心线,Z0 为端面),这是一般做法[13][1]。这样,端面右侧(刀具等待的一侧)为 Z 正,切削部分为 Z 负
- 从机床原点(机床坐标)到工件原点的偏移量,不写在程序中,而是输入到刀具补偿(偏置)或工件坐标系画面中。这样程序里就可以直接写图纸尺寸
程序格式:O 号、程序段、字
NC 程序是在每一行(程序段)中排列“字母+数字”形式的字而构成的。1 个程序段的结尾为 EOB(画面上显示为 ;),程序开头写 O 号。这种格式由 ISO 6983-1(JIS B 6315-1)规定[17][2]。
大多数程序都是在下面这种固定的开头和结尾之间,夹入切削动作的形式。
O0001 (程序号) G28 U0 W0 (返回机床原点:U、W 是增量,所以是“从当前位置”返回) T0101 (用 1 号补偿调用 1 号刀具) G50 S3000 (转速上限 3000 min-1) G96 S150 M03 (以恒线速 150 m/min 使主轴旋转) G99 (进给为每转 mm) G00 X44. Z2. M08 (快速移动到工件附近、开切削液) ... 切削动作 ... G00 X100. Z100. M09 (离开、关切削液) G28 U0 W0 (返回机床原点) M05 (主轴停止) M30 (程序结束、返回开头)
| 代码 | 含义 | 备注 |
|---|---|---|
| M03、M04、M05 | 主轴正转、反转、停止 | 根据刀具的安装方向(刀刃朝上或朝下)选用。哪个方向是正转,请查阅机床说明书[12][2] |
| M08、M09 | 开切削液、关切削液 | |
| M00、M01 | 程序暂停、选择停止 | M01 仅在操作面板上的开关打开时才停止。用于测量或清除切屑 |
| M30 | 程序结束 | 返回程序开头 |
| T0101 | 选刀 | 前 2 位为刀具(刀塔工位),后 2 位为补偿号[1][2] |
| G28 U0 W0 | 返回原点 | 以“当前位置”为中间点返回机床原点。若写成 G28 X0 Z0,会试图经过工件原点,很危险[22][5][2] |
( ) 内是注释,NC 会跳过不读。有些机型无法显示日文、中文等文字,注释用英文和数字书写比较稳妥。本模拟器也会跳过 ( ) 内的内容。
主轴:G50、G96、G97 与转速
切削速度 Vc(m/min)、直径 D(mm)与转速 n(min⁻¹)的关系为 n = 1000 × Vc ÷ (π × D) 。[16]车床上,根据是否把这一关系交给 NC 处理,有 2 种写法。
| 代码 | S 的含义 | 用途 |
|---|---|---|
| G96 S150 | 保持线速度(切削速度)150 m/min。直径越小,转速越高 | 外圆、端面、锥面等直径变化的切削 |
| G97 S800 | 转速恒定为 800 min⁻¹ | 车螺纹、钻孔、中心孔等在中心附近切削,或不想改变转速时[10][1] |
| G50 S3000 | 转速上限 3000 min⁻¹(体系 A) | 务必写在 G96 之前。体系 B、C 中为 G92 S |
用 G96 车端面时,刀具越接近中心转速越高,理论上在中心处为无穷大。实际上转速会升到机床最高转速,卡盘夹紧力因离心力而下降,工件有飞出的危险。所以要 在 G96 之前用 G50 S 设定上限[8][9][13][22]。请用下面的滑块确认直径变小时转速如何升高。
动作:G00、G01、G02、G03
| 代码 | 动作 | 写法 | 注意 |
|---|---|---|---|
| G00 | 快速移动(定位) | G00 X_ Z_ | 不能用于切削。X 和 Z 同时移动时,各轴以各自的快速移动速度运动,因此路径不一定是直线[1] |
| G01 | 直线切削 | G01 X_ Z_ F_ | X 和 Z 写在同一行即为斜向移动(倒角、锥面) |
| G02 | 圆弧切削(顺时针) | G02 X_ Z_ R_ | 写终点和半径 R(超过 180° 的圆弧 R 取负值)。若用圆心指定,则用 I、K(从起点到圆心的增量。即使在直径编程的机床上,I 也是半径值)[1][2] |
| G03 | 圆弧切削(逆时针) | G03 X_ Z_ R_ | 同上 |
G02 与 G03:如何判断旋转方向
圆弧的方向,是指把车床的加工平面(ZX 平面,G18) 从 Y 轴正方向看时的顺时针、逆时针方向[2][1][3]。本文的图和模拟器是按从上方俯视刀架位于中心线另一侧(后置)的机床的方向(+X 朝上)绘制的,因此看起来顺时针的就是 G02 。从端面侧朝卡盘方向车外圆时,凸出的角(凸 R)为 G03,凹进的角(凹 R)为 G02。
在前置刀架机床的图中,方向看起来相反从上方俯视刀架位于操作者一侧的车床(+X 朝向操作者)时,图形上下翻转,同一个 G02 看起来是逆时针。程序是相同的,改变的只是看起来的方向。三菱电机的说明书在后置和前置刀架两种图中都把同一形状写作同一个 G02,LinuxCNC 的说明书也提醒“从上方看时 G2、G3 看起来是相反的”[2][15]。请先确认教材或图纸的方向与自己机床的方向,再来阅读。
忘写小数点会变成 1/1000
许多 FANUC 兼容的 NC 会把不带小数点的数按最小设定单位(0.001 mm)读取。X30 不是 30 mm,而是 0.03 mm 。[1][2]这是刀具冲向中心的典型事故原因。在模拟器中输入 X30 ,会出现警告,并真的移动到 0.03 mm。勾选“无小数点的数也按 mm 读取(计算器型)”后,就会像设为计算器型小数点输入的机床那样动作。
绝对值 X、Z 与增量值 U、W
体系 A 中,X、Z 为距原点的位置(绝对值)、U、W 为距当前位置的移动量(增量值)。U 与 X 一样是直径值,U-2. 表示“按直径向内 2 mm(半径 1 mm)”。G28 U0 W0 中的 U0、W0 意为“从当前位置不动”,以此为中间点返回原点[1][2]。请注意,不是像加工中心那样用 G90、G91 切换(体系 A 车床的 G90 是外圆固定循环)。
进给:F 与加工表面
车床的进给通常按 每转 mm(每转进给)编写。体系 A 中, G99 为每转进给,G98 为每分钟进给。[2][11]电源接通时处于哪种状态由机床设定决定,所以在程序开头写上 G99 更可靠。在体系 B、C 中,相同的功能是 G95、G94,而 G98、G99 则是钻孔循环返回位置这一不同含义[2][1]。F0.2 表示主轴每转一圈刀具前进 0.2 mm。用 G96 时直径变小、转速升高,每分钟的进给速度也随之提高(模拟器的加工时间也计算了这一点)。
加大进给能车得更快,但表面会变粗。设刀尖圆弧半径为 r、进给为 f,理论上的表面粗糙度高度为 h ≒ f² ÷ (8r) 。例如 f=0.2 mm/rev、r=0.8 mm 时约为 6.3 µm[16]。
| 进给 f(mm/rev) | 刀尖圆弧 R0.4 | 刀尖圆弧 R0.8 | 刀尖圆弧 R1.2 |
|---|---|---|---|
| F0.1 | 3.1 µm | 1.6 µm | 1.0 µm |
| F0.15 | 7.0 µm | 3.5 µm | 2.3 µm |
| F0.2 | 12.5 µm | 6.3 µm | 4.2 µm |
| F0.25 | 19.5 µm | 9.8 µm | 6.5 µm |
| F0.3 | 28.1 µm | 14.1 µm | 9.4 µm |
表中为理论值。实际粗糙度随刀具磨损、积屑瘤、振刀和材料而变化。基本原则是粗加工进给大、精加工进给小。
刀具与补偿:T0101、刀尖圆弧半径补偿
T0101 的后 2 位是补偿号,其中存储的刀具长度偏差(X、Z 形状补偿)和磨损补偿会生效。因为有补偿,程序里不必写刀具长度,只写图纸尺寸即可[1][2]。
另一个重要的是刀尖圆弧半径补偿。刀片的刀尖是圆的(刀尖圆弧),但 NC 移动的是 X 方向与 Z 方向切削刃线的交点(假想刀尖)。平行于 X 或 Z 切削时没有问题,但车锥面或圆弧时,圆形刀尖的接触点会偏离假想刀尖,导致尺寸不准[1][7]。
设锥面角度为 θ(从 Z 轴量起)、刀尖圆弧半径为 r,不加补偿切削时,垂直于表面的残留余量厚度为 r(sin θ + cos θ − 1),X 方向(半径)上为 r(1 + tan θ − 1/cos θ)(这是由几何关系推出的公式,与 Haas 说明书中的补偿量表一致)[14]。
| 刀尖圆弧 | 锥面 30° | 锥面 45° | 锥面 60° |
|---|---|---|---|
| R0.4 | φ偏大 0.34 mm | φ偏大 0.47 mm | φ偏大 0.59 mm |
| R0.8 | φ偏大 0.68 mm | φ偏大 0.94 mm | φ偏大 1.17 mm |
| R1.2 | φ偏大 1.01 mm | φ偏大 1.41 mm | φ偏大 1.76 mm |
- 朝卡盘方向车外圆时用 G42(相对刀具前进方向向右侧补偿),车内径用 G41(左侧),用G40 取消补偿[1][2][7]
- 进行补偿时,要事先在补偿画面中输入刀尖圆弧半径值,以及表示刀尖朝向的假想刀尖号(0〜9)。在 +X 朝上、+Z 朝右绘制的图中,普通外圆车刀为 3 号 (Siemens、三菱电机、Haas 的编号相同)。号码错了,尺寸反而会偏[1][2][14]
- 在补偿开始(写 G41、G42 的程序段)和结束(G40)时,刀具会按补偿量斜向移动,所以要在远离工件的位置开始补偿,也在远离工件的位置取消
切槽与螺纹:G04、G32、G92
切槽时,基本做法是用 G01 将切槽刀沿 X 方向送入,在槽底插入 G04(暂停=原地等待),让槽底至少光一整圈后再退回。G04 X0.5 或 G04 U0.5 为 0.5 秒,G04 P500 为 500 毫秒(P 不带小数点)[1][2][4]。暂停时间根据转速确定。例如以 500 min⁻¹ 想转 2 圈,则为 60 ÷ 500 × 2 = 0.24 秒。
车螺纹时,需要让主轴旋转与 Z 向进给严格同步,因此要用 G97 使转速恒定,并在 F 中写入导程(每转前进的量。单线螺纹即为螺距)。G32 只执行一次螺纹切削进给,G92 则是把“切入 → 车螺纹 → 退刀 → 返回”4 个动作合在一起的单一固定循环,在其下方排列只写 X 的程序行,就会逐步加深并重复切削[1][2][6]。车螺纹时,进给与主轴每转一次的信号同步开始,因此无论重复多少次,刀都会切入同一条螺旋槽。
- 螺纹的起始和结束处,由于进给追上转速、以及停止之前存在滞后,导程不准确(不完整螺纹部分),所以编程时要在所需的螺纹长度上加上加速距离和退出距离进行编程[1][2]。所需长度随转速、导程和机床而变,请用机床说明书中的公式确认(练习题 5 从端面前方 5 mm 处开始)
- 螺纹末端有退刀槽时,刀具可以安全退出(练习题 5)
- 如果要让 NC 计算切深的次数和每次切深,就用 G76(车床复合固定循环)
练习题:能否按图纸车出(带评分)
蓝色虚线是图纸形状。在程序的“(---- ... ----)”行写入缺少的动作并按 ▶,就会把切出的形状与图纸比较并评分(直径 ±0.02 mm)。出现警告或错误时也会判为“还差一点”。答案示例在每道题的下方。
第 1 题车端面
毛坯为 φ40,端面留有 1 mm 的切削余量。刀具(外圆车刀 T0101)已移动到 X44. Z0. 处。请从这里以切削进给车到中心,把端面精加工到 Z0。
提示
写 1 行只移动 X 的 G01。进给取 F0.15 左右。
┅ 快速移动 G00━ 切削进给━ 车螺纹┅ 图纸轮廓线
查看答案示例
O0001 G28 U0 W0 T0101 G50 S3000 G96 S150 M03 G99 G00 X44. Z0. M08 G01 X0. F0.15 G00 Z2. G00 X100. Z100. M09 G28 U0 W0 M05 M30
第 2 题分 2 刀车台阶
把 φ40 的毛坯从端面起长 25 mm 的部分车成 φ30。这把刀的切深最大为半径 2.5 mm。第 1 刀(X35.)已经写好,请用第 2 刀精车到 X30.。
提示
格式与第 1 刀相同,只把 X 改为 30.。最后别忘了退到 X42.。
┅ 快速移动 G00━ 切削进给━ 车螺纹┅ 图纸轮廓线
查看答案示例
O0001 G28 U0 W0 T0101 G50 S3000 G96 S150 M03 G99 G00 X42. Z2. M08 X35. G01 Z-25. F0.2 X42. G00 Z2. X30. G01 Z-25. X42. G00 Z2. G00 X100. Z100. M09 G28 U0 W0 M05 M30
第 3 题C1 倒角与锥面
毛坯为 φ30。把端面的角倒成 C1(1 mm × 45°),将 φ26 车到 Z-15,再从那里车出到 Z-25 处变为 φ30 的锥面。
提示
倒角和锥面都一样,把 X 和 Z 写在同一行就会斜向移动(G01 X26. Z-1.)。
┅ 快速移动 G00━ 切削进给━ 车螺纹┅ 图纸轮廓线
查看答案示例
O0001 G28 U0 W0 T0101 G50 S3000 G96 S150 M03 G99 G00 X24. Z2. M08 G01 Z0. F0.15 X26. Z-1. Z-15. X30. Z-25. X32. G00 Z2. G00 X100. Z100. M09 G28 U0 W0 M05 M30
第 4 题凸圆弧与凹圆弧
毛坯为 φ24。把端部的角车成 R3 圆角(φ14 → φ20),将 φ20 车到 Z-18,根部用 R2 圆角过渡到 φ24。
提示
端部的圆角(凸 R)用 G03,根部的圆角(凹 R)用 G02。两者都要写终点的 X、Z 和 R。
┅ 快速移动 G00━ 切削进给━ 车螺纹┅ 图纸轮廓线
查看答案示例
O0001 G28 U0 W0 T0101 G50 S3000 G96 S150 M03 G99 G00 X14. Z2. M08 G01 Z0. F0.12 G03 X20. Z-3. R3. G01 Z-18. G02 X24. Z-20. R2. G01 X26. G00 Z2. G00 X100. Z100. M09 G28 U0 W0 M05 M30
第 5 题退刀槽与螺纹 M20×1.5
毛坯为 φ20(已车到螺纹大径)。用切槽刀 T0202(宽 3 mm,位置基准为左侧=卡盘侧的刀尖)在 Z-20〜Z-23 车出 φ17 的退刀槽,再用螺纹车刀 T0303 以 G92 车削 M20×1.5 外螺纹。最后的 X 为 18.16(= 20 − 2 × 0.6134 × 1.5)。
提示
槽用 G01 X17. 切入,再用 G04 稍作暂停。螺纹在 G92 下方排列只写 X 的行,就会逐步加深、重复同一个循环。
┅ 快速移动 G00━ 切削进给━ 车螺纹┅ 图纸轮廓线
查看答案示例
O0005 G28 U0 W0 T0202 (GROOVE W3) G97 S600 M03 G00 X22. Z-23. M08 G01 X17. F0.05 G04 X0.5 G00 X22. G28 U0 W0 T0303 (THREAD 60DEG) G97 S800 M03 G00 X22. Z5. G92 X19.4 Z-21.5 F1.5 X18.9 X18.5 X18.3 X18.16 G00 X100. Z100. M09 G28 U0 W0 M05 M30
常见失误(模拟器也会发出警告)
- 忘写小数点:
X30会变成 0.03 mm,刀具冲向中心[1][2] - 不写 G50 就用 G96:车端面接近中心时,转速会升到机床的最高转速[8][9]
- 以 G00 切入材料:忘了切换为 G01。以快速移动撞上会损坏刀具和机床
- 在工件附近换刀:刀塔转位时,相邻的刀具会撞上工件。应在 G28 U0 W0 或足够远的位置换刀
- 忘写 M03、没有 S:刀具撞上不旋转的工件
- 在 G96 状态下车螺纹:转速一变,每一刀的切入位置(螺纹相位)就会错开。车螺纹要用 G97[1][2]
- 把 G02 和 G03 弄反:请记住凸 R 与凹 R 不同,刀架位置(后置、前置)不同,看起来的方向也不同
- 一刀切得太深:超过刀具的推荐切深会崩刃、振刀。应分几刀切削
- 不用刀尖圆弧半径补偿就精车锥面、圆弧:尺寸不对(见上图)
常见问题
- 这个模拟器的动作与实际机床一样吗?
- 不,这是学习用的简易版。它能读取 FANUC 兼容体系 A 的基本代码(G00〜G03、G04、G28、G32、G50、G90、G92、G94、G96〜G99 和主要的 M 代码),但不考虑刀尖圆弧、刀具形状、机床的加减速和参数设置。G71 等复合固定循环、用户宏程序和内径加工不能运行。
- G50 与 G92 有什么区别?
- 不同的 G 代码体系中编号不同。体系 A 的 G50 S(转速上限)、G50 X Z(坐标系设定)在体系 B、C 中是 G92。体系 A 的 G92 是螺纹切削循环,所以挪用其他体系机床的程序时请注意[1]。
- 为什么要把 X 进给到负值?
- 车端面到中心时,由于刀尖圆弧的缘故,中心处会残留余料,所以实际上有时会进给到越过中心约刀尖圆弧半径 2 倍的 X(例如 X-1.6)。可以越过多少由刀具和机床决定。
- 也能用来备考日本的技能检定(数控车床作业)吗?
- 可以用来亲手确认程序的基础。考试课题和历年真题,请到日本中央职业能力开发协会(JAVADA)的公开页面确认[25][26](公开网站上的试题仅供浏览,禁止复制和二次使用)。
下一步可以阅读:把粗加工交给 NC 的 车床复合固定循环(G71、G70、G76)、使用变量和运算的 用户宏程序入门;各个代码的含义见 G、M 代码词典,转速和进给的计算见 车削切削条件计算。学会期刊上的入门文章还有《精密工学会志》的《初次编写 NC 程序》(2026,日文)[21]。
参考资料
- Siemens《SINUMERIK ISO Dialects Turning Programming Manual》(ISO 方言,2007)
- 三菱电机《700/70 Series Programming Manual (Lathe System)》IB-1500057
- Haas Automation《G02 CW / G03 CCW Circular Interpolation Motion》(车床)
- Haas Automation《G04 Dwell》(车床)
- Haas Automation《G28 Return to Machine Zero Point》(车床)
- Haas Automation《G32 Thread Cutting》(车床)
- Haas Automation《G41 / G42 Tool Nose Compensation》(车床)
- Haas Automation《G50 Spindle Speed Limit》(车床)
- Haas Automation《G96 Constant Surface Speed ON》(车床)
- Haas Automation《G97 Constant Surface Speed OFF》(车床)
- Haas Automation《G99 Feed Per Revolution》(车床)
- Haas Automation《M03 / M04 / M05 Spindle On Fwd / Rev / Stop》(车床)
- Haas Automation《Lathe Programming Workbook》(PDF)
- Haas Automation《Lathe Operator’s Manual(NGC, 2018)》5.7 刀尖圆弧半径补偿
- LinuxCNC《Lathe User Information》(刀具朝向、车床的圆弧)
- 刀具厂商的技术资料(车削表面粗糙度、切削速度公式)
- 日本规格协会《JIS 手册 2023 机床》目录(JIS B 6310:2003=ISO 841:2001 IDT,JIS B 6315-1:2013=ISO 6983-1:2009 MOD)
- 冈本邦夫、矢口久雄、浅见博《利用机械加工仿真开展多轴加工教育》群马高专 Review 37(2018)(日文)
- 鹿又祐二、朝比奈奎一《都立工业高专利用机械仿真开展的机械加工教育》日本机械学会 技术与社会部门讲演会论文集(2005)(日文)
- 今井慎一、新谷翠《面向实践教育、兼顾安全性的 NC 机床的开发及其实践》工学教育 63(3)(2015)(日文)
- 西田勇《初次编写 NC 程序》精密工学会志 92(3)(2026)(日文)
- 日本厚生劳动省《数控车床作业篇》(“制造业大师”制度中技能检定课题的解说)(日文)
- 《A Case Study of using Swansoft CNC Simulator Software in Vocational Education》Atlantis Press(职业学校的案例)
- 《The Cognitive Cost of Immersion: Experimental Evidence from VR-Based Technical Training》Applied Sciences 15(23)(2025)
- 日本中央职业能力开发协会《技能检定 作业内容》(机械加工 数控车床作业)(日文)
- 日本中央职业能力开发协会《技能检定试题公开网站》(日文)

