黄杰, 2017-08-16
root[a]linuxsand.info
大概两三年前,我在调试 FANUC 机器人时,对于这个话题是耿耿于怀:尽管在当时公司并不需要在项目中用到该技术,但仍然是想要掌握它。但是谈何容易,FANUC 相关的技术资料是如此稀少。当时唯一的线索是《B-82974EN/02 Ethernet Function OPERATOR'S MANUAL》的第十章 SOCKET MESSAGING。
这期间,我渐渐不再使用 FANUC,甚至越来越多地把注意力从工业机器人方面移开,开始关心其它工控技术。
一个契机来了。在过去的几个月前,有业界朋友使用 FANUC 控制器的 Ethernet/IP 功能和 LabView,实现了在 PC 上读取控制器数据的功能。闲聊中,我重新提起了这个方法:使用 KAREL 语言编写 socket server 程序,运行在 FANUC 控制器上;在 PC 编写相应的 socket client(任意语言、平台),完成通讯。
但是……总是没有抽出时间去做这个事情,哪怕是一个简单的 DEMO。好在,这几天终于逼自己一把,利用出差间隙做了一个 DEMO 出来。
目前这个 DEMO 的不足之处,主要是说 KAREL socket server:
R[41]
,显然需要拓展我不打算在此时此刻将源代码发出来,因为我对这个玩意儿有些私心,期待它能在稳定工作后,能够带来一些小小的经济收益,来补偿设计开发它所消耗的时间。
介绍一下这个 DEMO 包含的程序:
J_SERV.PC
是 KAREL 编写的 socket server 程序,它在 PC 客户端发送请求时,固定读取 R[41]
的值,返回给客户端ADD_R41.TP
是 TP 程序,它每过 0.5 秒将 R[41]
的值加 1TEST_JSERV.TP
是测试主程序,它同时运行上面的 J_SERV.PC
和 ADD_R41.TP
j_client.py
是使用 Python 编写 socket client 程序,它每隔 0.1 秒向 FANUC 控制器请求一次值(R[41]
)播放优酷视频:
下图是需要加载到 FANUC 控制器的 ADD_R41.TP
和 TEST_JSERV.TP
。
下图是 DEMO 运行时的截图。
FANUC 示教器分成 3 个区域:
R[41]
)。最底下的黑色 console,是使用 Python 编写的、简单的 socket client,它不停在读取 R[41]
的值并刷新到当前行。
下图是当天更新过的,可灵活查询不同寄存器的值,同时发生连接中断时,服务端能自动恢复。