独立数控机床维修服务 · 技术资料与故障排查 手机 / 微信 18025212569

FANUC G65与M98:为什么子程序改了#1,有时主程序看不到?

发布于

依据0i-D通用操作手册,用无运动的变量跟踪表比较G65和M98。解释参数A传入#1、局部变量层级恢复,以及公共变量不受这层隔离的影响。

文章目录
  1. 先区分程序复用与变量作用域
  2. 不让轴运动,也能把结果算清楚
  3. “局部恢复”不代表所有状态都会恢复
  4. 验证重点是调用链,而不只是变量号

同样调用一段含变量赋值的程序,改用G65后,返回时主程序里的#1似乎“没变”;改回M98,数值却保留下来。这常常是调用语义的差异,并不说明CNC丢失了赋值。

先区分程序复用与变量作用域

本文适用于具备相应自定义宏功能的0i-D/0i Mate-D。原厂B-64304EN/02公开镜像,§14.7,第206页区分两者:G65可传递宏实参,并改变局部变量层级;M98子程序调用不具备该实参传递方式,也不改变局部变量层级。不能只因两种调用都能找到同一个O程序,就将它们视为等价。

不让轴运动,也能把结果算清楚

下面是自拟逻辑跟踪,假定没有中断、复位或其他赋值。调用前当前层的#1=20.0,被调用程序仅把它所见的#1赋为9.0,然后正常返回。

观察点G65并传入A4.0M98普通子程序调用
被调用程序开始时的#1新层中的4.0原层中的20.0
执行赋值后的#1新层变为9.0原层变为9.0
返回调用方后的#1恢复原层20.0仍为9.0

§14.7.1第207–208页给出A与#1的对应;第211页说明宏调用保存上一层局部变量,M99返回时恢复。表中使用带小数点的实参,避免把无小数点地址的最小输入单位规则混进本例。它是变量作用域示意,不是可直接上机的完整程序。

“局部恢复”不代表所有状态都会恢复

同章第211页把公共变量列为可跨宏层级读写的量。由此可知,若计算结果必须返回调用方,接口应明确规定输出保存在哪里;不能把子宏的#1当成会自动传出的返回值,也不能随意借用机床厂家已占用的公共变量。

例如将输入、临时量和输出分开后,外层用于计算孔距的#1可以不受内层临时计算影响。反过来,原本靠M98共享局部变量的旧程序,如果只替换调用指令而不重审数据接口,可能让外层读到旧值。

验证重点是调用链,而不只是变量号

审查时标出每一次调用的方式、进入时局部层级和返回后预期值,再用不含运动与I/O写入的逻辑模型比对。若同一个编号在不同层分别出现,要把它们当作不同存储位置分析。宏功能与宏编译器也不能混为一谈,相关功能范围见OPTION栏目。

相关技术资料

FANUC可选旋转轴控制:绝对指令的正负号如何指定转向FANUC方向相关高速位置开关:同一坐标为何可能出现不同输出?FANUC柔性同步控制:速度追平与相位对齐是两个条件