搜索文章与案例

Technical Article

FANUC 宏参数没传和传 0,为什么不能先加 0?

依据FANUC 21i-MB宏程序手册,解释G65未传X参数与显式X0的区别、空变量直接赋值与加0后的变化,以及为什么应先用EQ #0判空再计算。

宏程序允许 X 取 0,但也要识别“调用时根本没传 X”。这两种输入不能都按零处理。最容易丢掉区别的一行,恰恰是看似无害的 #2=#24+0:原本为空的 #24 经过运算后,#2 已经是数值 0,再去判断它是不是空值就晚了。

本文只按 FANUC Series 21i-MB《OPERATOR’S MANUAL》B-63614EN/01 的 Custom Macro 规则讨论:机床具备该宏功能,使用 G65 单次调用及参数指定方式 I,X 对应局部变量 #24。不把这些语义直接套给其他品牌、不同宏执行器或机床厂自定义循环;这里也不讨论用 M98 调用后沿用原有局部变量的情形。

先把“未传”和“零值”分开

在上述 G65 调用条件下,省略的参数地址对应局部变量被置为空值。因此,未写 X 时 #24 为空;显式传入 X0. 时 #24 是数值 0。空值不是“精度很小的零”,也不是显示器没有刷新。手册将 #0 定义为始终为空、只能读取的变量,不能通过给 #0 赋值来改变它。

区别会直接影响地址输出。假设 #24 为空,程序里的 X#24 这一整个地址字会被忽略;#24 等于数值 0 时,它则成为 X0。这里仅说明地址解释,不提供运动程序:X0 到底对应绝对坐标零点还是增量零位移,还取决于所在程序的 G90/G91 等实际状态,不能把“地址省略”和“移到零点”混为一谈。

FANUC21i-MB空值与数值0的对照:直接赋值保留空值,先加0会将空值变为数值0

直接复制保留空值,参与算术会改变结果

设 #24 为空。执行 #2=#24 时,#2 仍为空;改成 #2=#24+0,#2 就是数值 0。若 #24 本来就是 0,两条赋值的结果都是数值 0。图一的两个输入分支在运算后的结果中汇合,正是“先加零再校验”出错的原因。

所以不要先用加零、乘系数等运算把输入“规范化”,然后再问它有没有传入。先在原始参数上识别空值,再处理数值。注意,#2=#24+0 改变的是 #2 的结果,不会自动把原始 #24 也改成零。这个顺序也适用于后处理输出的宏调用:省略 X 和输出 X0 是两种不同的接口含义,不应为了让每行格式整齐而自动补零。

判空用 EQ #0,不用 EQ 0 代替

本手册明确区分 EQ、NE 条件中的空值和数值 0。因此,IF [#24 EQ #0] GOTO 100 检查的是“#24 为空”;把 #0 改成 0,就变成检查数值零,不能替代缺参判断。GE、GT 等关系判断也不是检查参数存在性的替代办法。

下面是宏内部的教学片段,只演示“有效输入加 5,缺输入则把结果保留为空”。不含轴运动,不是完整可上机子程序;#2 须由该宏明确留作临时结果。先将 #2 置为空,再用 NE #0 判断“确实传入了数值”,满足条件才执行 THEN 后的赋值。这里只检查是否缺参,不包含数值范围等其他校验。

#2=#0
IF [#24 NE #0] THEN #2=#24+5.

当输入是 X0.,结果 #2 为 5;输入是 X-2.,结果为 3;未传 X 时条件不成立,#2 仍为空。这些是按手册规则推导的教学结果,不是实机运行记录。片段中的局部变量属于当前宏调用层,不能据此认为 M99 返回后,调用者会从同名 #2 读到这个结果。

先用#24 EQ #0判断是否缺参,再选择保留空值或输入加5;示例0加5得5,负2加5得3

缺参怎么处理,要由宏接口决定

上面的保留空值只是用来展示语义,不是所有生产宏都该采用的默认策略。如果 X 是必填坐标,缺参分支应在任何相关运动前进入该机床已定义的报错或退出流程;不要继续拼接运动段,指望地址自动省略就等于安全。若 X 是可选项,也要明确省略表示“不改变该轴”、使用何种默认值,还是跳过整个功能。

排查时可以先看调用行究竟是省略 X 还是输出 X0,再顺着宏内第一次读取 #24 的位置往下找。若发现先做了 +0、比例运算等处理,随后又用处理结果代替原始输入判空,应保留原始输入并前移缺参分支。不要只把最终 X0 删除,否则下一次重新后处理还可能复现。

这篇解决的是参数值的含义。若问题是调用方式本身,应先看G65 与 M98 的调用差异;要把判空约定落实到输出逻辑,可结合Mastercam 后处理安全修改核对变更范围。

核对依据

FANUC Series 21i-MB《OPERATOR’S MANUAL》B-63614EN/01:第15章 Custom Macro,印刷页285–287的变量与空值规则,印刷页305的条件赋值,以及15.6.1单次调用在印刷页310–312的参数对应、省略规则和局部变量层级。采用该厂商手册的公开镜像PDF核对,镜像托管方不是FANUC官网。两张示意图均按上述规则原创绘制。