搜索文章与案例

Technical Article

LinuxCNC 2.9圆弧圆心:G90不等于G90.1,I/J从哪里算

LinuxCNC 2.9中G90不等于G90.1。用偏置圆心R10圆弧、两组等价G3代码与起终半径验算,说明G91.1增量圆心和G90.1绝对圆心的I/J写法。

程序头写了G90,圆弧行的I、J是不是就要写圆心的绝对坐标?在LinuxCNC 2.9里,不能这样推断。G90/G91管运动终点的坐标方式,G90.1/G91.1另管圆弧圆心的坐标方式。小数点后面的“.1”不是可有可无的写法。

一个常见排错场景是:后处理输出了绝对圆心I20 J10,程序却仍按相对起点的圆心偏移解释。终点看起来正确,圆弧却报起终半径不一致。下面用一条圆心不在原点的R10圆弧,把两套坐标分开验算。

1. 先固定几何,再选择I、J的写法

限定G21毫米制、G17的XY平面、G40无刀具半径补偿,受控点起点S=(30,10),终点E=(20,20),圆心C=(20,10)。这是一条半径10 mm、从右侧起点转到上方终点的90°逆时针圆弧,使用G3。本文不加入Z螺旋运动、旋转轴联动或坐标旋转。

在G90下,两种圆心模式的终点都写X20 Y20。变化的只有I、J的参照位置:

  • G91.1增量圆心:I=Cx−Sx=20−30=−10,J=Cy−Sy=10−10=0,写I-10 J0。

  • G90.1绝对圆心:I=Cx=20,J=Cy=10,写I20 J10。这里的绝对值相对当前坐标零点,不是无条件按机床坐标解释。

LinuxCNC同一R10圆弧,G91.1从起点量I-10 J0,G90.1从当前坐标零点量I20 J10
图1:终点相同,圆心相同;两种I/J写法对应不同参照位置。原创几何示意,非控制器截图。

2. 两段等价代码:G90保持不动,只切圆心模式

以下是互相替代的教学片段,不应前后连起来执行。各组进入前均假定受控点已经处于X30 Y10、安全Z平面,所选工作坐标系、刀长补偿和运动空间已经单独核验;片段不含定位、抬刀、主轴或完整加工准备。

(A: G90 + G91.1)
G21 G17 G90 G94 G40
G91.1
G3 X20 Y20 I-10 J0 F300

(B: G90 + G90.1)
G21 G17 G90 G94 G40
G90.1
G3 X20 Y20 I20 J10 F300

A与B的理论路径相同。G90并没有强制A使用绝对圆心,也没有替代B里的G90.1。LinuxCNC文档把增量圆心模式列为默认行为,但排查实际文件时仍应查找有效的G90.1/G91.1,不要用“默认”代替当前状态核对。

对于本文的G17平面,G90.1绝对圆心模式需要I和J两个圆心字。即便某一坐标恰好为0,也应按要求显式给出,不能照搬增量圆心写法中的省略习惯。这个要求与终点X、Y是否需要全部出现是不同问题。

3. 把绝对圆心当增量偏移,会把圆心推到哪里

仍从S=(30,10)出发,假设程序行写I20 J10,却处于G91.1。控制器按相对起点偏移解释,得到错误圆心C′=(30+20,10+10)=(50,20)。

从起点到C′的距离为√[(30−50)²+(10−20)²]=√500≈22.3607 mm;从终点E=(20,20)到C′的距离为30 mm。两个半径相差约7.6393 mm,显然不能构成这条预期的R10圆弧。

正确圆心20,10时起终半径均为10;I20 J10误按增量解释产生圆心50,20和22.3607、30两种半径
图2:先由当前模式还原圆心,再比较起终半径。图中的直线为验算辅助线,不是刀具执行路径。

反过来也一样:将I-10 J0放在G90.1下,圆心会成为(-10,0)。起点半径√1700≈41.2311 mm,终点半径√1300≈36.0555 mm,相差约5.1755 mm。这不是简单的“圆弧方向反了”,更不该先靠交换G2/G3来修。

LinuxCNC的圆弧章节列有起终半径差的容许条件。本文两种误配都相差数毫米,远不是末位舍入导致的细小偏差。遇到这类错误,应先纠正圆心参照方式,不应通过放宽圆弧容差掩盖错误。

4. 如果终点切成G91,圆心模式仍要单独判断

对同一几何,终点相对起点的位移是X-10 Y10。若使用G91终点增量模式和G91.1增量圆心,圆弧行可写为:

(C: START X30 Y10)
G21 G17 G91 G94 G40
G91.1
G3 X-10 Y10 I-10 J0 F300

此时X-10 Y10表示“终点减起点”,I-10 J0表示“圆心减起点”。两组数字恰好共享同一个X偏移,含义仍不同。不要见到G91就改写所有I/J,也不要见到G90就把I/J换成绝对坐标。后续程序若要恢复绝对终点和某个圆心模式,应按需要明确建立两种状态,本文不假定片段结束后存在一个通用的自动恢复动作。

5. 后处理排错,沿着这五项核对

  1. 控制器与版本。确认目标是LinuxCNC 2.9对应配置。G90.1/G91.1的支持及默认行为不能直接推广到FANUC、西门子或其他系统。

  2. 实际起点。沿最终NC前序运动确定S,不能只取CAM中理想的圆弧起点。坐标系、补偿、平面或起点不一致时,I/J即便看起来合理也可能不匹配。

  3. 两套模式。分别找G90/G91和G90.1/G91.1。还要核G17/G18/G19;本文只验算G17的I/J,不把这组字母直接套到其他平面。

  4. 还原圆心。增量模式用C=S+(I,J),绝对模式用C=(I,J),再分别计算|S−C|和|E−C|。半径一致只是几何必要检查,还需核G2/G3方向、弧段大小及加工意图。

  5. 比对输出与验证输入。保留报错行、前序起点和模态,确认仿真读入的是修改后的最终NC,并支持相应圆心模式。CAM源刀路显示正常,不能证明输出NC的I/J解释已经正确。

如果圆心模式正确而半径只差很小,再检查输出小数位、端点舍入和圆弧拟合。官方文档提示,毫米制少于三位小数、英寸制少于四位小数时可能引发舍入相关错误;这些位数也不是所有几何条件下的免检保证。相关流程可参见Mastercam圆弧报警的IJK、R、平面与精度检查。

修改程序后的核验顺序,参见NC程序修改后的最低安全检查清单。不要在未知当前模态、未知刀具位置时从本文圆弧行直接续跑。

资料依据与适用边界

依据:LinuxCNC 2.9官方G-Codes文档,G2/G3的Center Format Arcs,以及同页G90/G91 Distance Mode、G90.1/G91.1 Arc Distance Mode。核对日期:2026年11月7日。本文仅对G17平面的圆心格式作计算示例,未验证具体机床的扩展功能或自定义解释器。

两张技术图为原创示意,数据已做独立计算复核;未开展LinuxCNC运行测试、实机空运行或试切。记住这条分工即可开始排错:先用G90/G91读终点,再用G90.1/G91.1读圆心,两者不能互相代替。