我注意到你在程序中把G41 D2单独写成一个程序段,可见你对刀具半径补偿不够了解。系统提供的建立半径补偿指令G41、G42和注销半径补偿G40。系统规定:建立半径补偿时用G41或G42中的一个要与G01或者G00中的一个,再与轴移动指令和半径补偿地址组合在一起使用。例如:G41 G01 X30. Y10. D02;进行刀具半径补偿只能用字地址D。在刀具从当前点向指令坐标点X、Y进给或者定位的过程中,建立起刀具半径补偿,起始点的补偿量为零,到达指定点时达到补偿量的全值。系统允许与G00配合使用建立半径补偿,效率虽然高一点,但是有刀具与工件发生干涉的风险,所以使用G00建立半径补偿时要慎重。系统还规定:不允许在圆弧插补的进给中建立刀具半径补偿。如果在圆弧插补中建立半径补偿,从圆弧起始点到终点,半径值是时刻都在变化的,因此系统就无法确定圆心的位置,圆心的位置不能确定,就不能计算插补的点在不在园上。如果把建立补偿G41或了者G42与圆弧插补G02或者G03配合使用,系统将会因为无法计算而停机并发出34#报警。刀具半径补偿值是个二维向量,也叫矢量,二维向量包括数值的大小和补偿的方向。数控系统会控制铣刀走到下一个进给路线的起始点上,并使铣刀中心处在起始点的法线方向线上,如果下一个是直线,就是与直线起始点垂直的方向,如果是圆弧,就是与过圆弧起始点的切线相垂直的一条直线,叫做法线。换句话说,就是铣刀中心停留在过圆弧起始点的圆弧半径线上。与起始点的距离正好是铣刀的半径值。由于每个轮廓线段铣削结束后,带有半径补偿的铣刀中心应该走到在哪里,再开始走下一段轮廓线,要看下一个进给路线的方向才能确定,所以系统规定,刀具半径补偿及注销指令G41,G42和G40只能在程序中使用,在手动数据输入MDI中不能使用。因为MDI只能输入一个程序段,系统不知道进给结束时刀具半径补偿方向放在哪里,就会停机报警。另外由于同样的原因,在程序中不允许连续两个程序段没有补偿轴移动的指令。因为系统运行程序的时候,一般只读进三个程序段,临时存放在缓冲寄存器中,一个程序段执行,两个在等待,执行第三个程序段时再读进三个,如此反复读取存储器中的程序文件。如果连续两个程序段没有补偿轴的移动指令,系统不知道最后把补偿方向放在哪里,就会停机发出37#报警。注销半径补偿。工件轮廓铣削完毕,要用G40把刀具半径补偿注销掉,同样要在G01或者G00再加上移动指令X或Y和G40把半径补偿注销,使刀具移动到不会切削到工件的安全的地方,再将Z轴返回机床零点。像建立刀具半径补偿不能同时用圆弧插补指令一样,系统规定:注销半径补偿G40也不能在G02下,或者在G03下注销半径补偿。在程序段中,只有一个G40指令是危险的。执行G40的时候,系统会撤消刀具补偿的矢量,即向补偿矢量相反的方向移动一个刀具半径值。假如此时刀具离工件远于刀具半径尚无危险。如果G01刚刚出刀,就执行只有一个G40的程序段,会把工件啃出一个圆弧坑,造成废品。