控制器如何读取一个 CNC G 代码程序段
程序不是按一堆独立行来读取的。大多数 G 代码是模态的:一旦出现 G01,后续每个轴移动都是进给移动,直到被另一个运动代码替换。控制器把该状态保存在内存中,并应用到每个新程序段。这就是为什么快速退刀前漏写 G00,刀具会以进给速度穿过零件;或者前面三行多了一个 G02,直线切削就变成了圆弧。
程序段是一行指令。控制器从左到右解析,然后把整行作为一个运动命令执行。程序段内的顺序很重要:G 代码设定模式,X/Y/Z 字给出目标位置,F 或 S 字设定进给和转速。在某些老式控制器上,如果 F 字出现在轴字之后,进给会在下一段生效,而不是当前段。Fanuc 和 Haas 的处理方式不同,因此后处理必须与控制器匹配。
如果不注意,模态状态还会跨越程序边界。在一个子程序中调用的 G41 会一直有效,直到 G40 取消它。程序中途换刀时,新刀具会继承旧刀具的模态平面和补偿,除非后处理将其复位。我们在审查中看到的大多数撞机都来自这种继承,而不是坐标写错。
实用规则:每把刀开始时复位模态状态。写一行 G17 G40 G49 G80 作为安全行。只花一个程序段,就能消除一整类故障。
- 1模态代码持续有效G00–G03、G17–G19、G40/G41/G42、G43/G49 在被更改前一直有效。
- 2一次性代码G04、G28、G53、G65 执行一次,不向后传递。
- 3安全行每次换刀时用 G17 G40 G49 G80 复位常见陷阱。
CNC G 代码详解中的六个代码组
G 代码按族划分,每个族同一时间只有一个成员有效。如果在同一程序段中写入同一族的两个代码,控制器要么取最后一个,要么报警。了解这些族是读懂陌生程序最快的方法。
运动代码设定路径形状。G00 是快速定位,G01 是直线进给,G02 和 G03 是顺时针和逆时针圆弧。G02/G03 需要通过 I、J、K 给出圆弧中心,或通过 R 给出半径。超过 180° 的圆弧用 I、J、K;R 在半圆以上有歧义,控制器会选择短弧。这一个细节造成的报废内孔比任何其他圆弧错误都多。
平面和补偿代码设定参考坐标系。G17 选择 XY,G18 选择 XZ,G19 选择 YZ。刀具补偿 G41(左)和 G42(右)按偏置表中存储的刀具半径偏移路径。精加工时,偏置值 0.01 mm 的误差会直接反映在零件上。G40 取消补偿。
坐标和偏置代码设定零点位置。G54 到 G59 选择工件坐标系。G43 用 H 号应用刀具长度补偿,G49 取消。G92 平移坐标系,在现代控制器上最好避免使用,因为难以追溯。
固定循环和控制代码处理重复动作。G81 钻孔、G83 啄钻、G84 攻丝、G85 镗孔覆盖大多数孔加工。G04 是暂停,G28 返回参考点,G80 取消循环。G98 和 G99 设定孔间刀具返回初始平面还是 R 平面,这会改变一块有上百个孔的板的加工节拍。
- 1运动:G00–G03快速、直线、两个圆弧方向。
- 2平面和补偿:G17–G19、G40–G42参考平面和刀具半径偏置。
- 3偏置:G54–G59、G43/G49工件零点和刀具长度。
- 4循环:G80–G89钻孔、啄钻、攻丝、镗孔。
为什么刀具补偿是 CNC G 代码中最锋利的刀刃
G41 和 G42 让你编程零件轮廓,由控制器按刀具半径偏移路径。好处是可以在机床上调整尺寸而无需修改几何:把偏置值改 0.02 mm,壁面就移动 0.02 mm。这就是操作工不重新后处理就能在内孔上保持 ±0.005 mm 的方法。
代价是控制器必须建立切入和切出。轮廓开始前需要至少一个刀具半径长的直线移动,否则会报警过切或干涉错误。在内角比刀具半径更紧时,控制器无法容纳偏置而停止。这是几何限制,不是编程错误。
当偏置使圆弧半径变为负值时,带 R 字的圆弧补偿也会失败。补偿圆弧用 I、J、K。绝不要在刀具已经切入时开启补偿;G41 之后的第一个移动必须是切入开放材料的进刀。
对于薄壁或长悬伸零件,补偿让你用弹簧刀路逐步逼近尺寸。粗加工留 0.15 mm,测量,然后调整偏置。这个流程比用 CAM 重新生成来追公差更可靠。在钜亮五金(GreatLight),我们在五轴和车铣复合加工中采用这一做法,因为重新后处理会多一次装夹。
- 1切入长度轮廓前至少一个刀具半径的直线移动。
- 2内角圆角半径必须大于刀具半径,否则补偿报警。
- 3圆弧方式补偿圆弧用 I、J、K,不用 R。
CNC G 代码在车床上有何不同,以及它的边界在哪
车削使用相同的代码组,但字母含义不同。G71 是粗车循环,G70 是精车循环,G76 是螺纹循环。在车床上,X 通常是直径而非半径,所以 0.01 mm 的偏移变化使表面移动 0.01 mm,但 X 字变化 0.02 mm。从铣削转车削的程序员仅因这一点就会报废零件。
用 G76 车螺纹需要螺距、牙高、首刀深度和弹簧刀次数。牙高错了,螺纹就偏小或偏大。控制系统不会替你修正。英制螺纹牙高约为螺距的 0.6495 倍;公制螺纹请查标准表,不要猜。
手写代码有极限。带自由曲面、过渡圆角或五轴侧刃壁的零件需要 CAM 输出,G 代码变成一长串小的 G01 移动。这很正常。后处理的价值在于正确管理模态状态、刀具偏置和退刀。
所以边界是:简单 2.5D 特征、装夹移动和试切用手写代码。任何有雕塑曲面或三轴以上联动的用 CAM。控制器不在乎程序块是谁写的,但调试的人在乎。
对于原型和小批量,我们会在空中空运行新程序,并在批量加工前按图纸检查首件。检测报告可按需提供,出货前 100% 全检是标准流程。
- 1车床 X 是直径偏置使表面移动量为 X 字变化量的一半。
- 2G76 车螺纹设定螺距、牙高、首刀、弹簧刀。
- 3CAM 领域雕塑曲面和五轴联动。
G 代码组及其控制内容
每组同一时间只有一个激活代码。
| 类别 | 常用代码 | 控制措施 | 何时出问题 |
|---|---|---|---|
| 运动 | G00、G01、G02、G03 | 路径形状与进给或快速移动 | 超过 180° 的圆弧用 R 而非 I、J、K |
| 平面 | G17、G18、G19 | 激活的插补平面 | G18 保持激活会把端面切削变成侧面切削 |
| 刀具补偿 | G40、G41、G42 | 刀具半径左偏或右偏 | 引入段短于刀具半径会报警 |
| 长度偏置 | G43、G49 | 按 H 号应用刀具长度 | H 号错误会把刀具扎进工作台 |
| 工件偏置 | G54–G59 | 设定工件零点位置 | 两个装夹共用 G54,第二个会丢位置 |
| 固定循环 | G81、G83、G84、G85 | 钻孔、啄钻、攻丝、镗孔模式 | G98 与 G99 改变厚板上的加工节拍 |
| 取消与暂停 | G04、G80 | 停止循环或原地暂停 | 漏写 G80 会把下一个孔当钻孔循环执行 |
G 代码常见问题
控制器能告诉我当前激活的模态状态吗?
大多数 Fanuc 和 Haas 控制器有模态或当前指令画面,列出激活的 G 代码。试切时,逐块看那个画面,而不是看刀路图形。
如果控制器没有该功能,在每次换刀处加一行安全指令:G17 G40 G49 G80。这会复位最容易导致意外移动的组。
为什么我的圆弧只是偶尔报警?
常见原因是超过 180° 的圆弧用了 R 字编程。控制器选择短弧,端点与几何不符,于是报错。
任何超过半圆的圆弧,以及所有在刀具补偿下运行的圆弧,都用 I、J、K 圆心偏移。
G41/G42 在车床上能用吗?
能,但约定不同。车削时 G41 和 G42 指刀尖方向而非切削侧,刀尖圆弧半径偏置从偏置表应用。
正确设置刀尖方向号,否则螺纹和台阶几何会因刀尖圆弧半径而偏差。
刀具补偿对加工节拍影响多大?
每条轮廓增加引入和引出移动,通常各零点几秒。零件上有几十个小型腔时,累积起来不少。
代价换来的是能在机床上调整尺寸,通常省下的时间比引入移动花的多。
检查新程序最快的方法是什么?
用单段执行,进给倍率调低,快速倍率设 25%,盯着剩余距离显示。这样能在刀具到达零件前发现偏置和模态错误。
然后空中空运行,再切一件试件并测量,之后才批量加工。
