FANUC PMC 跳转指令 JMP LBL 详解:4 种写法

FANUC PMC 跳转指令是顺序程序里控制流程的核心工具。写在梯形图里,条件判断靠触点串联就够了。但总有些场景触点接不出来——比如”某条件成立时,跳过中间连续 20 行去执行后面的动作”。

这时候就得用跳转指令。

FANUC PMC 顺序程序里的跳转主力是 JMP(无条件跳转)和 LBL(标号),配合 CJMP(条件跳转)完成条件分支。

但也是它最容易用出死循环和漏执行。 我见过太多程序逻辑全对,因为一个 JMP 写错,整个顺序程序卡死。

这篇把 4 种写法讲透,把坑提前标出来。

一、JMP / LBL 指令格式解析

FANUC PMC 跳转指令的书写格式:

JMP  LBL n
CJMP  LBL n
LBL  n
指令名称作用
JMP n无条件跳转忽略条件,直接跳到标号 n
CJMP n条件跳转条件成立时跳到标号 n,否则继续往下
LBL n标号跳转目标,一个号只能标一次

工作逻辑一句话说清:

JMP 是”无条件回头”,LBL 是”回头后的落脚点”。两者必须成对使用,JMP 找不到对应 LBL 就报错,JMP 指向的位置不当就会漏执行或死循环。

标号 n 是跳转的唯一线索。同一个程序里,一个标号只能写一次,重复标号是常见低级错误。

安全警示:跳转指令属于顺序程序控制逻辑,修改后可能直接改变机床动作时序。请在机床处于安全状态(各轴静止、急停生效)时进行,或确保有资深工程师在场指导。修改前务必备份原始梯形图与顺序程序! 逻辑错误的跳转可能导致设备异常动作或进入死循环。

二、FANUC PMC 跳转指令第 1 种写法:无条件跳转 JMP

最简单的形式:执行到 JMP,就直接跳到对应 LBL 继续。

       …
   JMP  LBL 20        ← 无条件跳
       …              ← 这段被跳过,不执行
       …
   LBL 20             ← 落脚点
       …

实际用途:跳过暂时不需要执行的成段功能。

比如某台机床加了客户定制的可选功能,普通机型不需要,用 JMP 跳过:

   JMP  LBL 30        ← 非本机型配置,直接跳过
   (可选功能 A 的完整逻辑,约 15 行)
   LBL 30

这个写法有个前提条件必须讲清楚:跳过的那段内容里,不能有”跳转出口”以外的分支。

如果被跳过的段里还有别的 JMP 指向段外,跳过的同时那些 JMP 也失效了,可能造成后面找不到落脚点。

三、FANUC PMC 跳转指令第 2 种写法:条件跳转 CJMP

最常用的一种。 条件成立跳过去,不成立继续往下。

   CJMP LBL 50        ← 条件成立,跳到 50
   (条件成立时要执行的逻辑)
   LBL 50

典型场景——按机床配置选择执行路径:

   X10.0(配置开关)
   CJMP LBL 60
   (标准配置逻辑)
   JMP LBL 70
   LBL 60
   (特殊配置逻辑)
   LBL 70

注意这个结构里CJMP 和 JMP 必须配套:CJMP 跳走了,如果不在中间补一个 JMP 直接落到 LBL 70,那么条件不成立时会顺着往下执行 LBL 60 的内容,产生逻辑错乱。

记住这个规律:CJMP 跳走,就必须有一道 JMP 兜底回来,否则两条分支会串在一起。

四、FANUC PMC 跳转指令第 3 种写法:循环控制(死循环重灾区)

这是 JMP 最强大的用法,也是最容易写成死循环的地方。

标准循环结构:

   LBL 100            ← 循环起点
   (循环体,一圈要做的事)
   (计数器累加 / 条件判断)
   CJMP LBL 100       ← 条件未完成,跳回起点,再来一圈
   (循环结束后执行)

逻辑:条件未完成就跳回起点重来,完成了才往下走。

这个结构的核心是退出条件必须存在。只要退出条件不成立,程序就在 LBL 100 和 CJMP 之间无限循环。

死循环是怎么产生的

现场几种典型死循环成因:

成因表现排查方法
循环体内没有退出条件PMC 卡死,机床无响应检查 CJMP 条件来源地址
退出条件用错地址循环永远不结束在线监控该地址是否真会变
退出条件只在循环内赋值第一次判断时条件恒成立把状态位放到循环外
计数器永远到不了预置循环不退出查计数是否真在累加

最容易踩的是第二种:退出条件引用的状态位,在循环内被清掉了,等于每次判断都是”没完成”,于是无限循环。

一个实用建议

在循环体里加一个计数器或超次数保护,做兜底:

   LBL 100
   (循环体)
   (累加循环次数计数器)
   (次数超过预设值 → 强制退出并报警)
   CJMP LBL 100

这样即使现场条件异常,也不会把 PMC 彻底卡死,而是给出报警让人去查原因。这一条在现场非常实用。

五、FANUC PMC 跳转指令第 4 种写法:子程序调用与返回

当某段逻辑需要在多处重复调用时,与其复制粘贴,不如做成子程序。

FANUC PMC 用 SUB 定义子程序起点,ENDSUB 定义结束。在顺序程序里用 CALL 调用。

   (主程序)
   CALL 1              ← 调用 1 号子程序
   …
   SUB 1               ← 1 号子程序开始
   (要重复使用的逻辑)
   ENDSUB              ← 子程序结束,自动返回调用处

这个写法解决的核心问题是”重复代码的维护成本”。

如果同一段”换刀到位检测 + 超时报警”的逻辑在 5 个地方用到,用子程序就是写一遍;不用子程序就要改 5 处——漏改一处,就是隐蔽的隐患。

注意:部分 FANUC 系统顺序程序对子程序嵌套层数有严格限制,具体可嵌套层数与地址范围请查阅本机手册确认,不要凭经验假设。另外要注意子程序里不要写会改变主程序执行路径的跳转,否则返回位置会错乱。

六、4 种写法速查表

写法指令组合典型用途最容易错在哪
FANUC PMC JMP / LBL 四种写法对照
无条件跳转JMP n + LBL n跳过可选功能段跳过的段里藏了别的出口
条件跳转CJMP n + LBL n按配置选路径漏写兜底 JMP,两分支串行
循环控制LBL n … CJMP n轮询等待条件成立无退出条件 → 死循环
子程序调用CALL n + SUB n + ENDSUB多处复用同一段逻辑嵌套超层、影响返回位置

七、FANUC PMC 跳转指令常见故障速查表

现象可能原因排查方向
死循环成因与超次数保护
PMC 卡死,机床无动作响应死循环,退出条件不成立查 CJMP 的条件地址与赋值时机
跳过了本该执行的逻辑跳转目标选错,或标号写错位核对 LBL 号与 JMP 号一一对应
分支逻辑串在一起执行CJMP 后没写兜底 JMP补上JMP 落到另一分支起点
提示找不到标号JMP 的号与 LBL 的号不一致全局搜索该号确认是否成对
编译报错,标号重复同一个 LBL 写了多次一个号只能标一次
子程序执行完不返回程序末尾缺 ENDSUB补齐子程序结束指令
改了一个地方其他位置全乱复制代码导致标号冲突用子程序替代复制粘贴

关于”提示找不到标号”这条:这类报错系统一般能直接看出来,现场更多的情况是编译能过但运行不对——那基本就是标号号对了、位置错了,属于逻辑问题而非语法问题。

八、与梯形图配合使用的注意事项

JMP/LBL 是顺序程序指令,但很多工程师习惯从梯形图角度理解,这里有个常见混淆要澄清:

混淆点正确认知
把 JMP 当成梯形图的触点串联两者机制不同,JMP 是顺序程序层面的流程控制
以为 JMP 能替代所有条件判断简单条件用触点串联更清晰,JMP 用于触点接不出的复杂流程
在 JMP 循环里直接操作 Y 输出不检查限位循环内必须有退出保护和超时报警

一条经验:能用梯形图触点解决的,别用 JMP。JMP 是复杂度溢出时的工具,不是常规写法。 顺序程序越短、跳转越少,故障排查越容易——这是现场血泪教训。

小结

FANUC PMC 跳转指令写对,只记四条:

  1. JMP 与 LBL 必须成对,一个标号只能标一次
  2. CJMP 跳走要配 JMP 兜底,否则分支串行
  3. 循环必须有退出条件,再加一个超次数保护更稳
  4. 能用触点解决的别用 JMP,短程序是好程序

把这篇和 FANUC PMC 定时器 TMR 指令详解、FANUC PMC 计数器 CTR 指令详解连起来看,会更清楚 FANUC PMC 指令体系的分工:TMR 管时间,CTR 管次数,JMP/LBL 管流程。循环里用计数器做退出计数,正好是两者的典型配合。

如果 JMP/LBL 之外还有指令想搞清楚的,推荐从 零基础学习发那科PMC 梯形图教程 这篇开始,把顺序程序和梯形图的基本结构搞熟,再啃跳转、循环这些进阶内容会顺很多。遇到具体报警或者程序跑不通,也可以翻 FANUC PMC 故障排查实战 里的实例对照分析。


标签: FANUC系统 · 机床梯形图 · 学习内容 · 基础知识 · 维修案例

免责声明:本文内容基于 CNCShare 团队实战经验整理,仅供参考。不同机床配置、系统版本可能存在差异,实际操作请以设备官方手册为准。因据此操作导致的损失,CNCShare 不承担责任。文中标号、指令写法与嵌套层数限制仅用于说明通用逻辑,具体配置需现场验证。

© 版权声明
THE END
喜欢就支持一下吧
点赞14赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容