工业热回收 · 智能制造 · B2B 供需信息门户

宏程序IF条件判断与GOTO跳转的踩坑日记

发布: 2026-10-01 14:27:51 来源: 新工业网 浏览: 167
宏程序IF条件判断与GOTO跳转的踩坑日记

周三夜班,一台立加的程序死循环了,主轴转了一夜,第二天早上发现工件废了、刀断了、电还费了不少。查了半天,问题出在宏程序的 IF 判断上——变量更新语句漏了。

IF 的三种格式

FANUC 宏程序的 IF 有三种用法:

IF [条件] GOTO n    (条件成立跳到 n 行)
IF [条件] THEN 语句  (条件成立执行 then 后面)
IF [条件] GOTO n
  ...
IF [条件] GOTO m    (配合 GOTO 做循环)

最常用的是第一种,配合 GOTO 实现条件跳转。

死循环的根源

那天夜班的程序是这样的:

N100 #100 = 1
N110 #101 = #100 * 2.
N120 G01 X#101 F500
N130 IF [#100 LT 10] GOTO 110
N140 ...

看着像循环 10 次对吧?问题在 N110——#100 赋值后永远是 1,因为循环体里没人改 #100。N130 的条件永远成立,就无限跳到 N110。

正确写法:

N100 #100 = 1
N110 #101 = #100 * 2.
N120 G01 X#101 F500
N130 #100 = #100 + 1
N140 IF [#100 LE 10] GOTO 110

把 #100 的更新写在跳转判断之前,循环就能正确退出。

条件表达式的陷阱

比较运算符必须是两个字母:EQ、NE、GT、GE、LT、LE。新手有时写成单个字母或者用符号 < >,系统直接报警。

还有空格问题。IF [#100 EQ 5] GOTO 200 里的空格最好别省,有些系统解析器对空格敏感。

GOTO 的行号管理

行号 N 是跳转目标。我一般把行号当标签用,不连续编号:

N10 (循环开始)
N20 ...
N30 IF [#100 GT 20] GOTO 90
N40 ...
N50 GOTO 10
N90 (循环结束)

N10 到 N90 之间留足空间,方便以后插代码。跳转目标用整十数,一眼看出逻辑分段。

安全保护:跳出死循环

现在我写宏程序都会加一个保护变量:

#199 = 0     (循环计数保护)
N10 #199 = #199 + 1
IF [#199 GT 500] GOTO 999  (超限强制退出)
...
GOTO 10
N999 #3000 = 1 (TOOL LOOP LIMIT)

#3000 是系统报警变量,触发后程序停机并显示报警信息。这一招救过我好几次,调试阶段特别有用。

宏程序的逻辑错误比坐标错误更隐蔽——坐标错了看尺寸,逻辑错了直接撞机。写完之后自己模拟跑一遍,确认循环次数对得上。

让您的工业品牌被更多客户看见

提交需求,获取专属信息化与营销推广方案

免费提交需求
↑
电话 15753355505 在线留言 微信 15753355505