Technical Article

Haas G81 为什么多钻一个孔:末孔后的 X/Y 与 G80 取消

Haas 铣床 G81 后只写 X/Y,为什么可能多钻一个孔?用两张原创孔位与状态图,区分循环仍有效、G80 取消及 G00/G01 取消,说明后处理末孔边界该怎样检查。

钻孔操作已经结束,下一段只是换个位置,机床为什么又往下钻?在 Haas 铣床上,先看末孔后到底输出了什么:如果只有 X、Y 坐标,而 G81 还有效,这一段仍可能是下一个孔。也别只凭“没找到 G80”就判错,Haas 的 G00、G01 同样能取消固定循环。

一、孔钻完了,循环状态还没结束

G81 是模态固定循环。一个孔完成,代表这一轮钻孔动作做完,并不代表控制器退出了 G81。Haas 铣床手册的固定循环章节说明,循环有效时,新的位置指令会继续执行已定义的加工动作。

所以,读到单独的 X、Y 块,不能先认定它是空走。在普通定位状态下,它可以是位置变化;在有效的 G81 后面,它可以是“到这个位置,再钻一次”。CAM 里换了操作、注释写了“钻孔结束”,都不能代替输出程序中的状态切换。

这里还有两个容易混在一起的“快速”:首孔之前写过 G00,不表示后面进入 G81 以后仍按普通定位解释;循环内部的孔间移动本来就可能快速进行,也不等于程序里出现了一条取消循环的 G00 指令。看见刀具快速横移,只能说明这一段移动很快,不能据此判断钻孔状态已退出。

二、两个计划孔,怎样变成三个

设定一个只用于读程序的例子:Haas MILL,G21 毫米、G17、G90、G94、G54,刀长补偿和主轴正转已正确建立,无坐标旋转。循环前刀尖在 Z30,工件表面 Z0;计划钻 A、B 两孔,坐标分别是(20,20)、(50,20),C(90,20)只是下一处定位点。

首孔块为 G98 G81 X20.0 Y20.0 Z-12.0 R3.0 F120.0;随后是 X50.0 Y20.0。A、B 都钻至 Z-12,再返回初始 Z30。这里的 R3.0、Z-12.0 和进给值在循环中继续沿用,B 块不用重写 G81。Haas 的 G81 官方示例也用后续 X/Y 块连续钻孔。

若 B 后面直接接 X90.0 Y20.0,且中间没有取消或替换循环,C 就会成为第三个钻孔位置,沿用孔底 Z-12。原本只打算横移 40 mm,输出却要求控制器继续做一轮钻孔。

Haas G81 模态孔位示意:计划孔 A 位于 X20 Y20、B 位于 X50 Y20,下一定位点 C 位于 X90 Y20。A 到 B 为30毫米,B 到 C 为40毫米;G81未取消时,后续纯X/Y块使C也钻至Z负12。图中程序地址显式带小数点。
图 1:坐标决定去哪里,仍有效的循环决定到达后做什么。手机可左右滑动查看大图。

示意块把坐标和 F 都写出小数点,是为了避免整数地址被设置重新解释;Haas 的设置 162涉及坐标等地址的默认小数处理,设置 77另管整数 F。这些块省略了准备和收尾过程,作用是逐块辨认状态。F120.0 在本例表示每分钟进给数值,不是给某种钻头推荐切削参数。

三、Haas 上,写了 G00 也能结束循环

Haas G80 官方说明明确:G80 取消有效固定循环,G00 或 G01 也会取消。因此,同样从 B 完孔后继续,X90.0 Y20.0 与 G00 X90.0 Y20.0 的含义不同;后者在 Haas 上不会继续按 G81 钻 C 孔。这个结论限定为本文核验的 Haas 铣床规则,不拿它推定其他系统。

同一B孔结束后的三种Haas程序分支:仅X90.0 Y20.0保持G81并钻C;G00 X90.0 Y20.0取消循环并快速定位到C;G80、G00 Z30.0、G00 X90.0 Y20.0依次显式取消、给出Z目标、定位到C。G80本身不指定新的Z位置。
图 2:三种分支都从同一个 B 孔完成状态出发,不是顺序执行的三段程序。

若希望循环边界便于复核,可以把结束写清楚:G80,再明确给出 Z 目标及后续定位方式。但 G80 本身没有新的 Z 目标,不能把“已取消”当成“已抬到安全高度”。本例 G98 已返回 Z30,接着写 G00 Z30.0 不会再抬高;换成别的返回状态,要重新检查离开路径。高度问题可对照G98、G99 与 R 平面的图解。

四、改后处理时,盯住末孔后的第一段

排查时保留首孔到下一次定位的完整片段,在每块旁边标出“循环是否有效、目标位置、到达后是否钻孔”。先数程序实际执行了几个孔,再对照 CAM 计划孔数。若异常位置前已经明确输出 G00 或 G01,就不能仅归因于漏 G80,应继续查实际运行文件及后续是否重新调用了循环。

同时把取消位置放回孔序中看:若 G80 被插在 A 与 B 之间,原来靠模态继续执行的 B 孔也会受到影响;若等到 C 后才取消,多出的那轮循环已经发生。验收时既要核对多余动作有没有消失,也要核对原有孔位有没有遗漏,不能只搜索到一个 G80 就结束检查。

后处理修改至少覆盖单孔、多孔和同一把刀连续操作三种输出,重点比较末孔后第一段运动,确认取消指令没有被放晚,也没有把正常的第二孔提前取消。只补一行代码却不看前后关系,可能消掉多余孔,又漏掉计划孔。修改前后的对照方法见改后处理先看 NC 怎么变;提供问题片段时,把控制系统和生效模态一起带上,才能判断应该改哪一段。