讨论

发那科程序里这种写法见过没?PROG带参数调用老出错

超哥
超哥
2026/03/20 17:53

刚干机器人应用三个月,现在跟的项目用的发那科R-30iB,手上有个程序PROG1想调用PROG2并传几个位置参数过去,我看手册写的是CALL PROG2(AR[1]=P[1])这种格式,但是每次跑到这行就报警,说参数数量不匹配,VR-0023啥的根本查不到原因。

PROG2里面参数是这么写的:1:R[1]=100,2:R[2]=200,3:R[3]=0。我传的是AR[1]=P[1]、AR[2]=P[2]、AR[3]=3,是不是写错了?还是说得先把P寄存器转成实数再传?

21 4

全部回复 (4)

强姐
强姐#1

你这个写法就有问题,CALL子程序传参是按位置一一对应的,不是按名字映射的。你PROG2里定义的1、2、3号R寄存器就是形参列表,CALL的时候第一个值给1号,第二个给2号,第三个给3号。你传P寄存器进去类型不匹配,肯定报警。

解决办法两个:一是把P[1]、P[2]用POSITION指令拆成X、Y、Z、YAW、PITCH、ROLL六个实数分别传过去(PROG2里也得对应定义6个R参数),二是用寄存器间接寻址,把P[1]的X坐标存到R[10]、Y存到R[11]这样,然后在CALL里直接传R[10]、R[11]、3就行。实数型参数是FANUC的标准做法,0.1秒就能传完,比整型灵活得多。

另外VR系列报警是版本和变量解析的错误,一般重启控制器就好了,长期解决要把程序里所有未声明的临时变量都在一开始初始化一遍,别让系统自动分配。

2026/03/21 11:18
一本万利
一本万利#2

等下,你入行三个月就直接碰程序调用了?没人带你吗,这种问题一般项目组里熟的人帮你看一眼就解决了。你说报警VR-0023,FANUC的手册上根本没有这个代码,你确定是这个?FANUC子程序参数不匹配一般是SRVO-063或者SYST-035报出来,VR开头的报警一般是非标集成商二次开发挂的脚本才有的。

你把报警界面的完整截图发一下,包括下面那行黄字提示,把报警号和提示文字都打出来。不同品牌控制器报警体系完全不一样,发那科是SRVO和SYST两大类,你这个VR-0023听着像是越疆或者节卡那种国产控制器的编号。

2026/03/24 20:39
胡元明
胡元明#3

我们厂里干法跟你不一样,我从来不写带参数的子程序,太容易出岔子了。我都是把需要传递的值直接写到全局R寄存器里,主程序把数据存到R[50]到R[60]这一段,子程序直接读这几个寄存器,调试的时候在DATA界面里就能直接看数值改数值,不用跑程序看报警。

带参调用那套是欧美工程师搞出来的规范,咱们现场调试的没人这么写,一个项目几十个调用点,光理参数对应关系就能把人搞疯。你用R寄存器间接传递完全够用,速度上肉眼根本看不出区别,FANUC控制器R寄存器读写也就几十微秒的事。

2026/03/27 00:46
董志成
董志成#4

P寄存器能直接传给R寄存器吗?我记得P寄存器是位置寄存器,内部是结构体不是简单数值,得用专门的转换指令吧。

2026/03/28 15:21