搜索文章与案例

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 并不会替一个空宏补出定位动作。

G66先执行X20定位再调用宏;G66.1将X20作为局部实参24传入仅含M99的宏,不产生示例轴运动

图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 清除了所有层级。

A组G66晚取消调用3次,B组G66.1调用4次,C组G66提前取消调用2次,图示不含取消后的X30定位

图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页。