待解决

发那科监视指令那块,TP里到底怎么写能稳定跑起来

军哥
军哥
2026/04/30 21:05

最近接了个小活,汽车零部件焊接线,10台R-30iB Plus配2台视觉,要做整线状态监控。把机器人当前位置、速度、报警代码、IO状态每200ms往上位机发一次,用的FANUC的KAREL监视指令。

我自己写的方案是开一个BG程序跑DOUT/读$GROUP[1].$CURPOS,结果实机跑下来两台机器人偶尔丢包,串口通信那边说收到的数据帧长度对不上、有时候还夹着半个坐标值。我怀疑是BG程序里读位置指令和串口发送抢资源了,但又没证据。

有没有实际干过这块的,这种实时性要求高的数据采集,TP里到底怎么写最稳?要不用专门的监视指令比如MONITOR/KAREL的CMOVT之类的?工期压得紧,客户那边15天要看到第一版,求个能落地的写法,别让我自己再瞎试了。

14 3

全部回复 (3)

3963086869
3963086869#1

直接上KAREL的CN_CURPOS和ALM_PRG,别用BG逻辑里嵌套那套,数据竞争你猜得没错。200ms的周期走SER通道的话,先把$TERMINAL.$OUT_PORT.$BUF_SIZE改到4096,缓冲不够就拆包。再就是上位机那边用MODBUS TCP别用RS232,10台同时丢包就是因为232带宽撑不住。我上个月刚做完一个8台的项目,周期100ms稳跑一周没出过事,PLC那边是三菱MC协议收的。

2026/05/01 01:34
和气生财
和气生财#2

焊接线你上视觉加机器人数据同传200ms一次,工期才15天?你先把项目砍一半吧,能交付就不错了。要监控直接上位机走Profinet读FANUC的$变量,干嘛非要在机器人里写采集程序?多此一举。

2026/05/01 05:34
8888
8888#3

BG程序里读$GROUP[1].$CURPOS本身没问题,但你要往串口写数据就别在同一个BG里塞,两件事拆开跑。另外你那个报警代码是直接读$ER[$ERRNO]还是读历史报警表?这俩数据长度不一样,上位机解析肯定错。

2026/05/03 17:57