
最近在帮客户做一条装配线的联调PLC那边问得最多的一个问题就是怎么让我这边按一下启动机器人就自己切换程序去干活这个问题看着简单真正落地牵扯出来的东西可不少。FANUC机器人RSR/PNS模式就是专门用来解决“由外部设备远程选择程序并启动”这件事的也是产线集成里绕不开的基础功能。今天我就把它从头到尾捋一遍从UOP信号分配、系统参数配置、PLC侧的时序配合到现场踩过的坑全部摊开讲。不管你是刚接触FANUC机器人的电气工程师还是已经在搞产线集成的老手这篇内容应该都能帮你省点时间、少走点弯路。1. RSR和PNS到底是什么两个远程选程序的机制差在哪1.1 没有RSR/PNS时产线怎么控制机器人很多老产线其实是没有远程选程序这个概念的。早期做集成的时候最常见的做法是把所有料号、工位、工序全部揉进一个主程序用DI信号去判断走哪个分支。一开始程序少还行等产品种类一多主程序能写到几百行甚至上千行加一个工序就得动主程序现场设备员连碰都不敢碰。更麻烦的是PLC那边根本不知道机器人到底在跑哪个分支、干到哪一步了只能靠定时器硬等。时间给短了机器人没干完下一站直接撞上时间给长了整线节拍被拖得很慢产能上不去。这种方案在单机自动化时代凑合能用放到现在柔性产线上基本属于给自己埋雷。所以FANUC才给出了RSR/PNS这套标准机制让PLC通过一组数字信号把“程序号”送给机器人再由START信号启动对应程序。程序选的哪个、跑到什么状态PLC都能通过反馈信号看得一清二楚。1.2 RSR与PNS的核心区别RSR全称Robot Service RequestPNS全称Program Number Select。两者本质都是通过UOP标准信号来传递程序号但工作机制有明显的差别。RSR用的是RSR1~RSR8这8个信号对应UI[9]~UI[16]组合成一个1~255之间的二进制数作为程序号。我给它的定位是“带队列的连续生产模式”机器人当前程序跑着的时候PLC可以把下一个要跑的程序号也发过来机器人会把它排进队列等当前程序跑完自动启动下一个中间不需要PLC再发一次启动命令。PNS用的是PNUM1~PNUM8这8个信号对应UI[18]~UI[25]组合规则和RSR一样但它多了一个ENBL使能信号对应UI[26]同时基本不具备RSR那种队列缓冲能力。我给它的定位是“点对点的单步控制模式”PLC发一个程序号启动一次机器人跑完停住PLC再发下一个程序号和启动信号。我把两者放在一起做了个对比方便你选型时参考对比项RSRPNS程序号信号RSR1~RSR8PNUM1~PNUM8使能信号不需要需要ENBL程序号范围1~2551~255队列缓冲支持可预排队基本没有适用场景连续生产、自动排产单工位、PLC逐节拍控制启动方式STARTSTART典型行业焊接线、输送线连续搬运单站上下料、单工位装配1.3 选型判断怎么决定用RSR还是PNS我实际调试下来的体感是RSR适合“机器人自己排队干活”的场合PNS适合“PLC拍一下机器人动一下”的场合。举个例子一条输送线连续来料机器人要按顺序完成搬运、焊接、下料三个程序用RSR就非常舒服。PLC可以在机器人干第一个活的时候提前把第二个、第三个程序号发过去机器人自己排着队跑整线节拍很稳。反过来如果是一个单工位上下料站工件到位信号来了PLC选一个程序启动等干完再把工件放走这种一步一步领着走的场景用PNS更直接。PNS对PLC的程序逻辑要求低不容易出“队列里还压着上一个程序”这种意外。再补一句如果产线后期要上MES或者要和WMS对接我个人建议直接上RSR。队列能力在后面做生产管理、异常恢复时都能派上用场PLC那边也好写调度逻辑。2. 硬件侧准备UOP信号怎么分配、怎么接线2.1 先弄懂UOP信号编号体系先别急着去翻那一堆几百页的信号表。我建议你打开机器人的I/O画面切到UOP标签把UI开头的输入信号从头到尾过一遍。你会看到急停、暂停、安全速度、周期停止、复位、启动这些基础控制信号然后是RSR1~RSR8、PNUM1~PNUM8、ENBL这些和程序选择直接相关的信号。这里必须提醒一句FANUC不同版本、不同选项包下UOP信号的实际编号和可用项会有差异我下面写的编号是R-30iB系列最常看到的布局但你在现场一定以自己机器人I/O画面里实际显示为准。核心的信号大致是这么几类UI[1]~UI[8]基础控制信号包括IMSTP紧急停止、HOLD暂停、SFSPD安全速度、CSTPCI周期停止、RES复位、START启动、*FAULT_RESET故障复位、*USE_TP使用示教器。UI[9]~UI[16]RSR1~RSR8RSR模式的程序号输入。UI[18]~UI[25]PNUM1~PNUM8PNS模式的程序号输入。UI[26]ENBLPNS模式的程序号使能信号。输出侧FAULT、BUSY、HELD、SNACK等状态反馈信号具体编号也要以现场画面为准。搞懂这套编号体系你才不会在配置的时候把信号张冠李戴。2.2 DI/DO地址映射从UI编号到物理接线端子UI是机器人侧的“逻辑信号名”它不是直接接到接线端子上的。你要在I/O分配画面里把UI[6] START、UI[9] RSR1这些逻辑信号映射到你实际接线的那一组DI地址上。举个例子。PLC的输出模块接到机器人DI[101]~DI[110]那你就在I/O分配画面里把UI[6] START映射到DI[101]把RSR1映射到DI[102]RSR2映射到DI[103]以此类推。这样PLC侧只需要控制DO[101]~DO[110]这一组地址就能完成启动和选号。我这边的习惯是留出固定的一段地址专门给UOP用避免和其他传感器、气缸信号混在一起。推荐一套映射给你参考UOP逻辑信号分配的DI地址说明UI[6] STARTDI[101]启动UI[9] RSR1DI[102]RSR程序号位1UI[10] RSR2DI[103]RSR程序号位2UI[11] RSR3DI[104]RSR程序号位4UI[12] RSR4DI[105]RSR程序号位8UI[13] RSR5DI[106]RSR程序号位16UI[14] RSR6DI[107]RSR程序号位32UI[15] RSR7DI[108]RSR程序号位64UI[16] RSR8DI[109]RSR程序号位128UI[26] ENBLDI[110]PNS使能分配完之后我建议你重启一下控制器。有些版本不重启也能生效但重启一次最稳妥省得调试到一半发现信号不刷新。2.3 接线方式源型还是漏型硬件这块最容易翻车的就是源型、漏型搞反。FANUC机器人UOP接口的DI/DO一般支持24V直流但源型和漏型的接线方式完全不同。源型接法下信号端给24V公共端接0V漏型接法下信号端给0V公共端接24V。你要先确认你手里这批I/O模块是什么极性再画原理图。我的习惯是第一次对接时不要盲信图纸直接拿一根线短接测试。在PLC侧强制一个DO输出然后看机器人I/O画面对应的DI有没有亮。亮了极性就对了没亮反过来再试一次。这个办法虽然土但比翻半天手册靠谱得多。还有一类信号要特别注意就是带星号的比如*FAULT_RESET。带星号表示低电平有效也就是说信号为0的时候才触发复位。很多电气工程师第一次接触FANUC看到FAULT_RESET就习惯性写“置1复位”结果机器人报警之后怎么按复位都没反应。这类反逻辑信号PLC程序里一定要反向处理。3. 系统参数配置把控制器真正切到远程模式3.1 进入受控启动并修改Program Select信号分配好了但模式没切PLC发再多信号也白搭。FANUC机器人默认是本地模式程序选择权在示教器上。要启用RSR/PNS必须进系统配置把Program Select项改掉。操作路径是这样的先把控制器断电然后重新上电开机时按住示教器上的F1和F5键进入受控启动模式。R-30iB系列常见的是这个操作但不同版本或者配置了Boot Monitor菜单的机器操作会不一样有些是开机进BOOT MONITOR菜单再选Controlled Start具体以随柜手册为准。进入受控启动后走MENU → SYSTEM → Config找到Program Select这一项把它改成RSR/1或者PNS/1保存配置然后重启控制器。改完这一项控制器的程序选择权就正式移交给UOP信号了。顺便说一句Program Select里的/1和/2在不同版本中含义略有差别现场调试一般不需要深究默认用/1就行。真需要区分拉到该画面下的帮助说明里看一眼。3.2 AUTO模式、钥匙开关和启动权限有兄弟第一次做远程启动配置全部搞完了PLC那边信号也发了机器人就是不动。排查半天发现示教器钥匙开关没拨到AUTO。这是FANUC的硬性联锁不管系统配置里Program Select设置得多对示教器钥匙不拨到AUTOSTART信号就是无效的。钥匙拨过去之后示教器上会显示远程模式这时候PLC的启动命令才能真正接管机器人。还有一个细节拨到AUTO之后示教器上的启动键、急停键这些物理按键仍然是可以用的但程序选择相关操作会被锁定。这也是安全设计的一部分防止操作员在远程模式下误改程序。你要知道这个逻辑现场调试遇到“信号发了没反应”先看钥匙位置准没错。3.3 程序号的对应关系程序名建议直接用数字RSR/PNS通过程序号选程序那机器人拿到程序号之后去哪找程序最直接、最不容易出问题的办法就是把机器人程序名直接命名成数字。程序号是1机器人就去运行名字叫“1”的程序程序号是101机器人就去运行名字叫“101”的程序。就这么简单粗暴。我见过不少项目程序名起得很有规律比如“PROG_1”“WORK_2”结果一切到远程模式就报警找不到程序就是因为名字对不上。有些系统版本支持在程序选择列表里做映射把数字程序号对应到任意程序名。能用数字命名就尽量用数字少一层转换就少一个坑。我的习惯是主程序全部用数字命名子程序正常用语义化名字这样远程选程序的主线非常清晰示教器上也好看。4. 程序切换全流程信号时序PLC该按什么顺序发信号4.1 RSR模式的完整时序链先给一套典型的RSR启动步骤这套动作我给好几个项目验证过可靠PLC先把RSR1~RSR8组合成目标程序号。等待50~200ms让程序号信号稳定。置位STARTUI[6]。机器人收到START后把BUSY反馈置ON开始运行对应程序。程序跑完BUSY变OFF同时SNACK输出一个完成脉冲。PLC检测到完成信号后撤销START。为什么中间非要加这50~200ms延时因为PLC扫描周期、继电器响应时间、机器人信号采集周期三者之间是有偏差的。程序号信号还没稳定就发START机器人有可能采到一个错乱的程序号。我以前遇到过一个现场RSR信号走中继转接PLC一置位START就马上发结果十次里有两三次机器人跑错程序。后来在程序号输出和START置位之间加了200ms延时问题就消失了。RSR的队列特性也在这个时序里体现出来机器人正在运行1号程序的时候PLC可以直接把2号程序发过去再次置位START机器人会把2号程序排进队列1号跑完自动接上2号。这对连续生产来说太有用了。4.2 PNS模式的完整时序链和ENBL的作用PNS的顺序和RSR有点不一样正确动作是先把ENBL置ON。把PNUM1~PNUM8组合成目标程序号。等待信号稳定。置位START启动。程序跑完撤销START和ENBL结束本次调度。ENBL这个信号很多人理解不到位觉得它就是一个总开关上电之后一直置ON就行。实际不是这样。ENBL真正的作用是“锁存程序号”在它ON的期间PNUM信号的当前状态被机器人接收ENBL为OFF的时候PNUM怎么变机器人都不理会。如果ENBL常ON问题会在切换程序号的时候暴露出来。你改了PNUM机器人有可能没反应过来下次启动还在跑上一个程序。正确做法是只在需要切换程序的那个时间窗口里把ENBL置ON等PNUM信号到位了再发START。这样才能保证每次切换都稳定可靠。4.3 状态反馈信号让PLC知道机器人干到哪一步了选程序、发启动只是单向的PLC还得知道机器人到底干到哪了不然没法判断下一步什么时候走。UOP输出侧常用的反馈信号有FAULT、BUSY、HELD、SNACK这几个。FAULT是报警状态ON表示机器人有报警BUSY是运行状态ON表示正在执行程序HELD是暂停状态ON表示程序被暂停SNACK是程序完成信号程序正常跑完会给出一个脉冲。判断一个循环是否结束我建议用SNACK或者BUSY的下降沿来判定不要只盯BUSY。因为机器人暂停的时候BUSY也有状态变化跟正常结束容易被混淆。你可以在PLC里做一段上升沿/下降沿捕捉逻辑把“结束”和“暂停”区分开这样调度逻辑才干净。5. PLC侧对接编码逻辑、梯形图思路和扩展玩法5.1 程序号二进制编码怎么算RSR1~RSR8、PNUM1~PNUM8这8个信号本质上就是8位二进制数。RSR1对应1RSR2对应2RSR3对应4RSR4对应8RSR5对应16RSR6对应32RSR7对应64RSR8对应128。哪个信号为ON就把对应数值加起来就是程序号。这个对应关系我用表格列一下现场算的时候直接查不容易错信号对应数值RSR1 / PNUM11RSR2 / PNUM22RSR3 / PNUM34RSR4 / PNUM48RSR5 / PNUM516RSR6 / PNUM632RSR7 / PNUM764RSR8 / PNUM8128举个例子程序号6需要RSR22加RSR34同时为ON。程序号7是RSR1加RSR2加RSR31加2加4。程序号8是RSR4单独为ON因为8对应的是2的3次方不是RSR3的4再加RSR4。这块我在现场见过很多人算错特别是从4加8这种组合开始绕的一看就是没把二进制位权吃透。5.2 一套可以直接抄的PLC逻辑我不打算绑死某个PLC品牌这里给一段结构化文本风格的逻辑你移植到西门子、三菱、基恩士都很容易// 假设目标程序号保存在变量 iTargetProg 中INT类型 // 输出信号用数组 aRSR 表示下标0对应RSR1下标7对应RSR8 IF bSwitchCmd THEN // 第一步清空原有输出 FOR i : 0 TO 7 DO aRSR[i] : FALSE; END_FOR; // 第二步按位拆解目标程序号 FOR i : 0 TO 7 DO IF (iTargetProg AND SHL(1, i)) 0 THEN aRSR[i] : TRUE; END_IF; END_FOR; // 第三步延时稳定 // TON延时TIME : T#200MS // 第四步置位START bStart : TRUE; END_IF; // 检测到BUSY反馈后撤销START IF bBusy THEN bStart : FALSE; bSwitchCmd : FALSE; END_IF;有几个细节要提醒aRSR是上升沿触发切换的不要每个扫描周期都在执行置位START的动作否则机器人会重复启动。START的撤销时机最好是在机器人BUSY信号起来之后立刻撤不要等到程序跑完再撤万一中途有异常START一直挂着会导致机器人状态判断混乱。5.3 多工位调度的扩展一台机器人服务多个工位时程序号就是你最好的分配标签。我的做法是把工位号和产品号拼成一个程序号工位A用1~10工位B用11~20工位C用21~30以此类推。这样PLC只要根据“当前哪个工位要料、要的是哪个产品”这两个信息就能直接算出目标程序号。机器人程序内部我还会在程序开头用一个R寄存器把工位信息接住。比如程序号12表示“工位B、产品2”机器人运行到取料那一段时直接读R寄存器里的工位号后续的取料偏移、放料位置都用这个寄存器去计算。这样即使后面加新产品也不需要新增完整的机器人程序改寄存器偏移量就够了。多台机器人协同的时候建议每台机器人的程序号段错开比如1号机用1~1002号机用101~200。现场排查故障的时候一看程序号就知道是哪台机器人在干什么效率高很多。6. 实测中常见的坑报警、掉线、启动无反应6.1 SYST-212这类报警是怎么回事我在现场切RSR模式的时候遇到过刚把模式切过去机器人在远程状态下一启动就报SYST-212的报警提示需要应用DCS参数。这个报警一般不是RSR/PNS本身的问题而是控制器里安全配置DCS的参数没有被正式应用。出现这种报警处理办法不复杂受控启动进系统找到DCS相关配置画面执行一次参数应用操作然后重启控制器。要注意的是DCS涉及安全功能如果你对这套安全配置不熟悉最好让懂的人来操作不要自己乱改万一改错安全功能失效那是要出大事的。顺带说一句远程模式本身也属于安全相关的模式切换所以有些产线在调试时会把安全配置和远程模式一起动两者叠加就容易触发这类报警。你心里有数就行。6.2 程序号不匹配和“找不到程序”的排查链路“机器人启动之后报警找不到程序”是RSR/PNS调试里最高频的问题。我的排查顺序固定是四步第一步去机器人的I/O画面看DI的实际亮灭状态确认RSR1~RSR8组合出来的二进制数到底是多少。很多时候是PLC程序写错了信号组合出来跟你以为的完全不是一回事。第二步确认机器人里有没有名字等于这个数字的程序。程序名必须是纯数字而且不能有隐藏空格或者全角字符。FANUC程序名看着像数字实际上混了全角字符的情况我碰到过不止一次。第三步确认程序号是从1开始还是从0开始。RSR/PNS的有效程序号一般从1开始但有些PLC工程师习惯从0开始编码以为0号就对应1号程序结果信号全0机器人去找0号程序当然找不到。第四步确认程序的版本和内容是否正常。在示教器上手动运行一次能跑通再切远程模式不要远程模式一次都没跑过就直接联调。6.3 启动信号没反应时的排查顺序最后这种情况最折磨人程序号看起来是好的PLC也确实发了启动但机器人一点反应都没有。我建议你按下面的顺序排查不要一上来就怀疑机器人配置钥匙开关是不是在AUTO位置。机器人I/O画面上UI[6] START是不是亮了。没亮查信号映射和接线。程序号信号组合出来的值是不是对应一个存在的程序。看BUSY、ALARM状态是不是机器人本身就报警或者正在运行别的程序。最容易被忽略的一步检查安全回路和急停。远程模式下安全回路任何一环断开比如安全门开了、急停被拍下去START都会被屏蔽掉。我遇到过好几次PLC工程师排了半天信号最后发现是安全门没关严。这类问题最高效的排查方式就是先在示教器上看I/O画面的状态再拿万用表量接线最后才去怀疑配置和逻辑顺序反了会浪费大量时间。还有一点经验调试RSR/PNS的时候我不建议两边工程师各写各的。先在白板上列一张信号时序表谁先发、谁后回、延时多少、哪个信号是完成标志两边对着这张表敲代码一次通过率能高很多。另外把程序号相关信号做到HMI上调试时能直接看到当前选的是几号程序能少跑很多冤枉路。FANUC的RSR/PNS功能并不复杂核心就是把程序号编码、时序控制和状态反馈这三件事吃透。把这套东西理顺了后续不管接MES、接WMS还是做柔性线改造你手里都有底子。