Technical Article
三菱 M80 把 G66 改成 G66.1,X20. 为什么不走了?
三菱M80把G66改成G66.1后,X20.为何不定位?按IB-1501277-U加工中心手册,用仅含M99的空宏,对照轴运动、X实参与设置块调用,逐段推演3次、4次、2次调用及G67前后的坐标。
一、先看这一行究竟交给谁处理
把 G66 P6801 L1 改成 G66.1 P6801 L1,后面的 X20. 明明还在,X轴为什么不定位了?先把宏体收敛为只有 M99 的空宏,再看这行坐标交给谁处理。
设想程序已经在 G21 毫米制、G90 绝对方式、G00 定位方式下,随后读到 X20.。在本文限定的普通三轴加工中心示例中,G66 模态会先完成这一段定位,再调用指定宏;G66.1 模态则把 X20. 作为实参送进宏,对应局部变量 #24 的值为 20。宏如果只有 M99,没有利用这个实参编写运动指令,X 轴就不会因此走到 20。
排查时先看调用方式,再看宏体有没有真正的轴运动。只把 G66 后面加上“.1”,不能保证原来那条运动链仍然成立。G66.1 并不会替一个空宏补出定位动作。

图1:同一坐标字的两条执行路径。窄屏可左右滑动看完整图。
本文依据三菱电机《M800/M80/E80/C80 Series Programming Manual (Machining Center System)》IB-1501277-U,第14章14.3、14.4.1~14.4.3节。范围是该手册中的加工中心程序格式,不套用车床、旧系列兼容格式或 M800V/M80V 手册。机床是否具备相应选项、程序号规则以及机床厂限制,仍以本机资料为准。
二、用空宏隔开“调用”与“切削”
以下只用于独立离线环境中的语义演示和调用轨迹检查,不是可直接上机的加工程序。X、Z 数值仅为计算方便,Z50. 不代表任何机床的安全高度。测试前应建立全新仿真项目,确认没有坐标变换、补偿、固定循环或嵌套宏等额外状态;程序号也不得覆盖既有程序。
示例宏体只有 M99,不启动主轴、不换刀、不写公共变量。调用次数在程序之外按执行轨迹统计。
A组主程序:
O6800 G21G90G54G00 X0.Y0.Z50. G66P6801L1 X10. X20. Z60. G67 X30. M30
单独建立的空宏:
O6801 M99
上面用 L1 明确每次触发只调用一次。所有尺寸都显式写小数点,本文的长度单位为毫米。观察范围从调用指令开始,到 G67 后面的 X30. 完成为止;开始时的演示坐标为 X0、Y0、Z50。
三、G66:三个运动段,三次调用
A组读到 G66 P6801 L1 时建立调用模态。随后 X10. 完成定位,调用 O6801 第一次;X20. 完成定位,再调用第二次;Z60. 完成定位,调用第三次。每次进入空宏都只执行 M99 返回。
因此,在 G67 之前,演示坐标已经变成 X20、Y0、Z60,累计调用三次。G67 单独取消这一层模态调用。后面的 X30. 继续按原来的 G90、G00 定位,但不再调用该宏,最后坐标为 X30、Y0、Z60。
这也解释了“我只是抬 Z,怎么又进了一次宏”:本例的 Z60. 仍是一个移动指令。操作者给它取名“退刀”或“离开工件”,不会改变程序的触发条件。如果实际宏包含下刀、测量或输出动作,多出来的一次调用就可能执行这些动作。
四、G66.1:调用四次,示例区内轴不动
B组只将 A组的 G66 P6801 L1 改成 G66.1 P6801 L1,其余保持一致。
这次进入 G66.1 的那一段自身就会调用空宏一次。后面的 X10.、X20.、Z60. 分别作为对应段的实参传入,又各调用一次。由于 O6801 仍只有 M99,没有轴运动,到 G67 前累计调用四次,演示坐标仍是 X0、Y0、Z50。
G67 结束模态调用后,X30. 才重新按普通定位段执行;这段不再调用空宏,最后坐标为 X30、Y0、Z50。
“四次”包含 G66.1 自身那一次,不能只数后面三行坐标;“轴不动”也只适用于这个没有运动指令的空宏。真实宏若读取 #24 等实参后发出轴指令,当然可能运动。要判断它会走到哪里,必须继续读宏体。
另一个边界是 G 代码处理。手册对 G66.1 下的 G、N、O 有专门规则,模态 G 信息仍会更新;不能把“轴地址传参”扩大成“所有 G 代码都失效”。为使这个演示可核对,G21、G90、G54、G00 都放在进入宏模态之前。
还要检查进入 G66.1 的第一段:本例设置块没有传入 X、Y、Z,而空宏并不读取它们,所以能直接返回。真实宏若要求这些实参,必须按宏的接口提供并校验;不能假定设置块会等到后面的坐标段才第一次执行。
五、只想在两个 X 位置调用,G67 放在哪里
C组仍使用 G66。若要求只在 X10. 和 X20. 两个位置调用,完成第二个位置后就应结束这段模态范围:
G66P6801L1 X10. X20. G67 Z60. X30.
这一组累计调用两次;随后 Z60.、X30. 仍执行定位,最终坐标与 A组相同,都是 X30、Y0、Z60。由此可见,仅看最终坐标,可能漏掉一次额外调用。
这里讨论的是单层调用。不要把孤立 G67 当成任何位置都能加的初始化指令:手册要求 G66/G66.1 与 G67 在同一程序配对,并指出没有相应 G66 时发出 G67 会产生程序错误。若程序已有嵌套调用,也不能假设一条 G67 清除了所有层级。

图2:三组独立回归。图中坐标为所示区段结束时的值,尚未执行后续 X30.。窄屏可左右滑动。
六、用三个检查点复核修改
检查点一:在 G67 前,A组为3次、B组为4次、C组为2次。
检查点二:完成 G67 后的 X30.,三组都到 X30,但 B组的 Z仍为50,A、C组的 Z为60。
检查点三:空宏中始终只有 M99,没有赋值、没有轴指令、没有其他调用。任何增加都可能改变本例的结果。
这些数值是依据手册规则做的逐段逻辑回归,未作实机验证,也不能代替机床厂要求的验证流程。若离线软件不支持三菱 G66.1 的对应语义,它显示“不动”或“动了”都不足以证明本机行为。
现场看到 X20. 没走,最值得先确认的两件事是:当前是否已处于 G66.1 模态,以及被调用宏有没有把收到的 X实参变成轴运动。确认这两点以后,再检查坐标系、程序号和本机配置,排查方向会清楚得多。
若问题出现在后处理修改之后,先用同一份刀路比对修改前后的调用指令、宏体与退出顺序,再按NC 程序修改后的最低安全检查清单分别记录代码检查、仿真和现场验证结果。
原厂依据
三菱电机 M800/M80/E80/C80 加工中心编程手册 IB-1501277-U,2025年1月版。第14章:14.3 印刷页479;地址映射页481;G66 页484–485;G66.1 页486–487;嵌套边界页492–493。对应PDF第498、500、503–506、511–512页。