Technical Article
三菱 M80 在 G91 下写 G45 X0,为什么会走10毫米
三菱M80加工中心在G91且有效位置补偿量为正10毫米时,G45 X0为何仍移动?按U版官方手册复算正零、负零、G90零移动量与D号沿用,说明后处理清理负零可能产生的20毫米终点差。
程序明明写着 X0,轴怎么还走了10毫米?如果这一段处在 G91 增量方式,调用的有效位置补偿量又是 +10 毫米,G45 X0 就会产生正向10毫米的位移。把 X0 改成 X-0,方向还会反过来。
这里讨论的是三菱 M800/M80 加工中心系统的刀具位置补偿,依据官方 U 版编程手册第12.6节。算例统一用公制、单一直线轴,固定循环已经结束,没有另外叠加刀具半径补偿或坐标变换。D01 对应的本段有效补偿量记作 L,并假定 L=+10.000 毫米。以下内容是手册推导和算术核对,没有实机运行记录。
G45 会给这一段的移动量加上补偿
手册把 G45~G48 称为 Tool Position Offset,即刀具位置补偿。G45 沿本段原定运动方向延长一份补偿量,G46 缩短一份;G47、G48 分别延长和缩短两份。这里先看 L 为正数的情况。
G91 下原本准备向正方向走20毫米,使用 G45 后,位移为 20+10=30 毫米。准备向负方向走20毫米,使用 G45 后,位移为 −(20+10)=−30 毫米。轴字给出零时,手册仍保留了正零和负零的方向区别。
假设当前 X=100 毫米,已确认 G94 每分钟进给方式、刀具与周围空间安全,并且本段 D01 的有效补偿量确为 +10 毫米。下面这一行只用于解释动作,不能当作完整的上机程序:
G91 G01 G45 X0 D01 F100.;
G01 指定直线插补;在本例公制 G94 条件下,F100. 表示每分钟100毫米。X 的增量字面值为0,G45 增加10毫米,理论终点就是 X=110。G45 自己不选择快移或工进,程序中若省略 G00/G01,还要查进入这一行之前的运动方式。
X-0 的负号不能随手清掉
同样从 X=100 出发,把上一行改成 G91 G01 G45 X-0 D01 F100.,理论位移变为 −10 毫米,终点为 X=90。两种写法的终点相差20毫米。
三菱手册第369页直接列出四种零位移写法。代入本例 L=+10 毫米后,G45 X0 对应 +10,G45 X-0 对应 −10,G46 X0 对应 −10,G46 X-0 对应 +10。下图各行分别从自己的起点计算,没有把四段串起来执行。

后处理里常见“清理负零”的格式规则。如果原程序明确需要 G45 X-0,把它统一输出成 G45 X0,就会把本例终点从90改到110。把值为零的轴字全部删掉,也不能只当成文字整理。检查程序时,要连同 G45/G46、G90/G91、D 号一起判断该轴字的用途。
反过来,普通计算中的微小负数被四舍五入成 −0,也不代表编程者打算增加一段负向补偿。需要分别检查坐标计算误差、数字格式规则和这段程序原本要完成的动作,不能给所有指令一律保留负零。
G90 下说的零位移,要从当前位置算
手册同一页还写明,绝对方式下如果本段移动量为零,就不会为了位置补偿再移动。这句话容易被看成“G90 写 X0 就不动”。
当前在 X100,G90 G45 X100. D01 的目标仍是100,原定移动量为0,因而没有补偿位移。若写成 G90 G45 X0 D01,目标坐标是0,原定移动量为 0−100=−100 毫米;再按 G45 沿负向延长10毫米,理论终点为 X=−10。这是一个110毫米的负向行程,不能按空动作处理。

D01 是补偿编号,10毫米要另外核实
D01 选择第1号刀具位置补偿数据。本手册用 H 指定刀长补偿,用 D 指定这里的位置补偿;本例不能把 D01 换写成 H01。D 后面的01不代表1毫米,也不能拿刀具的实测直径直接代入上面的 L。
有效补偿值怎样得到,要结合本机的补偿存储类型看。官方手册第12.1节分别说明不同存储方式;采用 Type II(第Ⅱ类存储)时,D 对应的值还涉及半径形状量和磨损量的合计。算例里的 +10 毫米是已经核清的有效值,不等于要求操作者在某一个刀补格里填10。
如果有效 L 为负数,上面的移动结果也会改变。第364页分别给出了正、负补偿量的运算例。不能为了让教学算例成立去改机床参数或生产刀补;也不要把别的补偿功能中的半径、直径换算直接搬到 G45 上。
G45 只管本段,D 号仍可能沿用
G45~G48 是非模态指令,只对写有该指令的程序段生效。后面只写一段普通的 G91 G01 X0,不会因为上一段出现过 G45,就再次自动增加同一份补偿。已经走到的位置也不会自动退回。
但下一次使用 G45~G48 时,如果没有重新写 D 号,手册第365页允许沿用先前保存的刀具位置补偿编号。检查第二处 G45 时,只盯着这一行很容易漏掉前面选过的 D。每次再次执行 G45,按所选的完整补偿量计算;不能把它理解成新旧补偿值之间的差额。若本例连续执行两次相同的 G91 G45 X0,两次可合计移动 +20 毫米。G91 和 G01 也不会随着 G45 的结束自动恢复成原来的模式。
另外,第369页明确要求在固定循环之外使用这些位置补偿指令;固定循环期间指定会被忽略。因此,从钻孔循环中截一行出来,与循环结束后的同样字符比较,也可能得到不同结果。
改后处理时,留下几组能对得上的预期
以每组独立从 X100 开始、有效 L=+10 毫米为共同前提,可以先核对四个零位移例。G91 G45 X0 的终点应为110,G91 G45 X-0 应为90,G91 G46 X0 应为90,G91 G46 X-0 应为110。
再核对绝对方式的两组边界。G90 G45 X100. 应停在100,G90 G45 X0 应到 −10。补偿量改为负值的测试则应另起一组;例如有效 L=−10 时,G91 G45 X0 的理论位移为 −10,不能继续沿用正补偿的结论。
这些数字是供审程序使用的手册预期。本次只做了文字、公式和图示复算,尚未完成对应机床或控制器仿真验证。现场校验需要按机床厂家的流程建立安全位置与模态,核实刀补、行程、刀具和夹具空间,再由合格人员进行受控验证。本文的短片段缺少完整启动、状态恢复与退刀安排,不应直接拼进生产程序。
交接时可结合站内的《NC 程序修改后的最低安全检查清单》,保留修改前后的 NC、实际 D 数据来源和每组预期终点。对本例而言,清掉 X-0 的一个负号,就能带来20毫米的终点差;这项差异值得在交付记录里单独写清。
官方依据与适用范围
依据三菱电机《M800/M80/E80/C80 Series Programming Manual (Machining Center System)》,IB-1501277-U / IB-1501278-U。官方目录登记版本为 U,修订登记时间为2025年1月。本文限定其中的 M800/M80 加工中心系统,不把规则扩大到同名车床指令、其他品牌或不同格式的机床。
补偿数据来源见第12.1节,印刷第277~279页;G45~G48 的公式、D 号沿用和非模态属性见第12.6节,第363~365页,每次使用完整补偿量的说明见第368页;固定循环限制、G91 的正零/负零与 G90 零移动量规则见第369页。合并版 PDF 的页面序号分别比上述印刷页码多19页,例如印刷第369页是 PDF 第388页。