讨论

FANUC机器人KAREL和TP混编怎么搞?同一台R-30iB Plus上两个程序互相调

韩建斌
韩建斌
2026/04/06 19:58

项目上碰到个情况跟大家请教一下。一台R-30iB Plus要做视觉抓取+码垛,TP里写主流程,视觉那块想拆出来用KAREL写(因为要传数组、结构体给PLC走Profinet,TP搞起来太费劲)。现在的问题是KAREL子程序跑完之后要把结果回传给TP,比如一坨坐标xyz和rxyz,TP里直接调好像只能传单个变量?有没有人这么干过,KAREL里定义个Pose类型的数组,通过FROM_KAREL或者啥方式整个丢给TP程序里的寄存器?

另外KCL文件和PC文件的关系我也没整明白,我现在是KCL写声明、PC写实现,两边都要单独编译吗?示教器上那个OLPC软件能直接编KAREL还是要回到RoboGuide里搞?

11 2

全部回复 (2)

邓立新
邓立新#1

直接用KAREL的VAR_FROM_KAREL和VAR_TO_KAREL就行,PC文件里把变量定义成GLOBAL,然后在TP里用[r]这种寄存器声明,名字要和KAREL那边对上。比如KAREL里写VAR status : INTEGER VAR_FROM_KAREL; TP里写R[10: status],名字带不带前缀都无所谓关键是能映射上。数组也支持,最多能传200个元素的数组,再大就得分包。

你说的那种Pose结构体就比较麻烦,KAREL没有现成的pose类型,得自己定义成6个REAL组成的数组。KCL和PC确实要分别编译,KCL是给TP看的接口描述,PC才是真东西,先编KCL再编PC,顺序反了会报undefined symbol。OLPC上能编简单的KAREL,但带外部库的还是老实回RoboGuide吧,那玩意儿在示教器上敲代码能把你逼疯。

2026/04/07 10:25
日进斗金
日进斗金#2

你这个需求其实用TP的寄存器数组就够了啊,KAREL能做的TP基本都能做,就是写起来啰嗦。非要上KAREL的话做好心理准备,后面维护的人看到混合代码会骂街的,调试也不方便——KAREL报错只给个行号,TP好歹还能高亮。

2026/04/08 23:38