Technical Article
Haas G68 旋转90°:省略中心X/Y,孔位为什么偏了
Haas铣床G68省略X/Y中心时,会采用建立旋转时的当前位置。用90°旋转和三孔算例,算清同一孔为何从(-20,30)变成(10,40),并说明G68生效范围与后处理入口状态。
同一组孔,角度改成 90°,孔距和朝向都对,整组位置却偏了。检查 Haas 铣床的 G68 时,值得先看一眼旋转块:中心 X、Y 有没有写出来?按 Haas 现行铣床说明,两个中心坐标都省略时,控制器采用建立旋转时的当前位置。程序前面多走了一段,后面同样的孔位就可能落到另一处。
下面把问题放到一个明确场景里:XY 平面 G17、绝对方式 G90、毫米单位;当前工件坐标下的位置为 (10,20),尚未启用旋转,也没有缩放、镜像或其他叠加坐标变换。后续某个孔的绝对编程坐标是 (30,20),准备旋转 +90°。先只算这个点,再看整组孔会怎样。
少了 X、Y,中心就换了
在这个场景里,旋转块 G68 X0. Y0. R90. 把中心明确设在工件坐标的 (0,0)。如果改成 G68 R90.,中心就取当前的 (10,20)。两处 R 都是 90°,但旋转中心相差了 10 mm 和 20 mm。
这里的 X、Y 是中心地址。Haas 的铣床 G68 说明给出的规则是:所选平面决定中心使用哪两个轴;R 为正时,图形按逆时针方向旋转。本文按常见 XY 坐标图观察,+X 向右、+Y 向上,相当于从 +Z 侧朝 XY 平面看。
把两个中心都写成零,只有在设计确实要求绕工件原点旋转时才合适。零件若要绕另一个基准点转,就应写那个基准点在当前工件坐标中的值。
同样转 90°,落点却相差 (+30,+10)
最容易检查的算法是三步:先减去中心,旋转相对向量,再把中心加回来。对 +90° 而言,相对向量 (u,v) 变为 (−v,u)。所以中心为 C=(cx,cy)、原编程点为 P=(x,y) 时:
x′ = cx − (y − cy)
y′ = cy + (x − cx)
第一种写法明确用 C=(0,0)。孔位 P=(30,20) 相对中心仍是 (30,20),转后成为 (−20,30),加回零点后,落点就是 A=(−20,30)。
第二种写法省略中心,用 C=(10,20)。同一个孔相对这个中心是 (20,0),转后成为 (0,20),再加回 (10,20),落点就是 B=(10,40)。

于是,第二种落点相对第一种落点的差为:ΔX = 10 − (−20) = +30 mm,ΔY = 40 − 30 = +10 mm。角度并没有算错,换掉的是参与运算的中心。
中心错了,整组孔会一起平移
这个现象比单个孔偏移更容易误判。再加两个孔,原编程坐标分别为 Q=(40,20)、S=(30,30)。按相同算法计算:
绕 (0,0):P、Q、S 分别落在 (−20,30)、(−20,40)、(−30,30)。
绕 (10,20):P、Q、S 分别落在 (10,40)、(10,50)、(0,40)。
三组对应点的差都是 (+30,+10) mm。两条 10 mm 的孔间基准边仍然是 10 mm,转后的朝向也一致,整组孔却在错误位置。只量孔距,或者只看图形有没有转成 90°,都看不出这类中心偏差。

这也能直接从公式看出来。相对绕原点的结果,绕 C=(cx,cy) 旋转 +90°,每个点增加的量都是:
ΔX = cx + cy,ΔY = cy − cx。
代入 (10,20),就是 (+30,+10)。式子里已经没有孔位 x、y,所以偏移量不随孔变化。这个结论要求比较的是同一组绝对编程点、同一角度和两个固定中心;进入旋转前的定位、取消旋转后的离开动作要另外检查。
把 G68 这一行和后续孔位分开看
Haas 将旋转作用范围放在 G68 后面的程序段,G68 所在行的坐标值本身不经过这次旋转。因此,G68 X0. Y0. R90. 中的 X0、Y0 应按中心定义来读,不能当成一个已经旋转过的孔位,也不能把它当作“先定位到中心”的动作。
这正是排查时要把记录分开的原因:调用前当前位置是多少,旋转块定义了哪个中心,下一段原始孔坐标是多少,转换后的孔位又是多少。把这四件事混在一张坐标截图里,往往只剩下一个“位置不对”的结论。
本文仅比较两个中心坐标同时省略的情况。只写 X 或只写 Y 时的具体解释,应查对应控制软件的手册,不能拿这组算例补猜。本文也不沿用早期 Haas 资料中的其他中心地址写法。
后处理要固定的是中心和入口状态
如果设计要求始终绕同一个点旋转,后处理就应明确输出该点在当前工件坐标中的中心值。若有意省略中心,则“到达哪个位置以后建立 G68”必须成为程序约定的一部分。多插入一段定位、改变子程序调用入口,或从中间重新启动,都可能改变这个输入。
审查输出时,可以按下面的顺序对照,不必一开始就去改孔坐标:
看控制与选项。本文依据 Haas NGC 铣床手册与现行铣床 G68 页面中的 X/Y 语法。该功能需要机床具备相应的 Rotation and Scaling(旋转与缩放)选项,不能只凭程序里能写出 G68 判断可用。
看建立旋转的条件。记录工件坐标、G17、G90、单位、当前位置和中心值。本文显式给出 R90,避开省略角度时由 Setting 72 取值的情况;G91 配合 Setting 73 的角度累加也不属于这组算例。
看旋转范围。从建立 G68 到 G69 取消之间,逐一核对受影响的点。旋转有效期间不要切换旋转平面。若还使用刀具补偿、缩放或其他变换,要另外按原厂规定核对建立与取消顺序。
看空间位置。把转换后的孔位与工件边界、夹具、行程和 Z 向净空一起检查。G69 取消旋转并不承担抬刀或回到安全位置的工作。
更稳妥的对照方式,是在离线图形中标出中心、第一孔和另一个非重合孔;需要辨别孔组形状时,再加一个不共线点。先确定目标点确实对应,再按机床规定验证定位和进入、退出动作。站内的后处理与具体机床的适配检查和NC 程序修改后的安全检查清单可用来补齐这一步。
遇到“角度对、孔距对、整组位置偏”的情况,先把旋转中心落到坐标图上。中心一旦确定,孔位变换就能逐点复算,也能看清问题是出在几何定义还是程序入口。
参考资料
Haas:G68 Rotation(Group 16),铣床指令页,中心、作用范围、角度及使用限制。
Haas:2024 NGC 铣床操作手册,G68 与 G69 条目。
Haas:Mill — Coordinate Rotation and Scaling,RD0045,旋转与缩放功能入口。