4. ABB机器人通信接口与视觉数据交互
在视觉引导系统中,ABB机器人并不是“看见”工件,而是通过通信接口接收视觉系统输出的结果数据,再把数据转换成机器人可执行的位姿或动作指令。因此,通信方式的选择、数据格式的约定、收发时序的控制,直接决定了视觉引导能否稳定落地。本节围绕Socket/TCP、Profinet、EtherNet/IP三类典型通道,说明在ABB机器人上的配置思路,以及视觉结果字符串与坐标数据的收发方法。
一、三类通信方式的定位与选择
ABB机器人支持多种工业通信方式,视觉引导中最常用的是以下三类:
- Socket/TCP:机器人作为客户端或服务端,与视觉工控机通过TCP/IP直接收发字符串或字节流。灵活、无需额外硬件,适合快速验证、非标项目、视觉结果格式自定义的场景。
- Profinet:ABB通过Profinet Device或Controller角色与西门子PLC、视觉控制器交换周期性I/O数据。实时性好、抗干扰强,适合产线级集成,视觉结果通常映射为固定长度的输入字节区。
- EtherNet/IP:与罗克韦尔PLC、康耐视/基恩士视觉系统配合较多,通过隐式I/O或显式报文交换数据,适合北美体系产线。
选择原则可以概括为:验证阶段优先Socket,量产集成优先现场总线。Socket适合把视觉算法先跑通,Profinet/EtherNet/IP适合把系统嵌入产线节拍。若视觉系统只提供字符串结果,Socket是最直接的通道;若视觉结果需要与PLC、安全信号、夹具动作严格同步,则应走Profinet或EtherNet/IP。
二、Socket/TCP 的配置与字符串收发
Socket通信是ABB机器人上最直接的视觉数据通道。机器人可作为客户端主动连接视觉工控机,也可作为服务端等待视觉系统连接。实际项目中,通常让机器人作为客户端,视觉工控机作为服务端,因为视觉系统往往需要同时服务多台设备,服务端模式更便于统一管理。
在RobotStudio或示教器中使用Socket通信,需要先建立连接,再循环接收数据。以下是一个典型的RAPID代码框架:
VAR socketdev clientSocket;
VAR string recvStr;
VAR num x, y, z, rx, ry, rz;
PROC main()
SocketCreate clientSocket;
SocketConnect clientSocket, "192.168.1.100", 5000;
WHILE TRUE DO
SocketReceive clientSocket \Str:=recvStr;
! 解析字符串,例如 "523.41,-118.76,402.15,178.2,0.5,92.7"
ParseVisionData recvStr, x, y, z, rx, ry, rz;
! 构造目标位姿
pTarget := [[x, y, z], [rx, ry, rz]];
MoveL pTarget, v500, fine, tool0;
ENDWHILE
SocketClose clientSocket;
ENDPROC
关键点有三个:第一,SocketReceive默认以换行或指定分隔符结束,视觉端发送时必须带结束符,否则机器人会一直等待;第二,字符串解析要处理异常值,例如视觉未识别到工件时发送“NG”或空字符串,机器人应跳过本次动作而不是解析失败停机;第三,通信超时要有兜底,可在SocketReceive后判断接收长度,或使用带超时参数的接收方式。
字符串格式建议采用“固定字段顺序 + 固定分隔符”,例如逗号分隔的六个浮点数,最后可附加状态位。这样解析逻辑简单,不易出错。若视觉系统输出的是带标签的字符串,如“X=...Y=...”,则需要在RAPID中用字符串查找函数逐段截取,代码量会明显增加,因此量产项目更推荐纯数值列表格式。
三、Profinet 与 EtherNet/IP 的数据映射
当视觉系统需要与PLC、机器人、夹具在同一节拍内协同工作时,Socket的“请求—应答”模式可能不够稳定,此时应使用Profinet或EtherNet/IP。ABB机器人通过选项板支持Profinet Device、Profinet Controller以及EtherNet/IP Scanner/Adapter。配置时需要在RobotStudio的“I/O System”中导入对应的设备描述文件(GSDML或EDS),然后定义输入输出字节区。
以Profinet为例,视觉控制器通常作为Profinet Device,向机器人发送固定长度的输入数据。假设约定输入区为32字节,前24字节为6个REAL型坐标值,第25字节为状态字,第26字节为工件编号。机器人侧通过Profinet Input映射到RAPID的num或dnum变量。由于Profinet传输的是字节流,而RAPID的num是32位浮点,必须确认字节序。ABB机器人默认使用大端序,若视觉端为小端序,需要在视觉端转换或使用Pack/Unpack类指令处理。
EtherNet/IP的配置逻辑类似,区别在于使用EDS文件,且隐式I/O的刷新周期由RPI(Requested Packet Interval)决定。视觉结果通常映射为Input Assembly,机器人通过EtherNetIP_Input读取。对于坐标数据,建议在视觉端就转换为REAL数组,避免在机器人侧做复杂的字节拼接。
四、坐标数据的解析与位姿构造
视觉系统输出的坐标通常是在相机坐标系或标定后的工件坐标系下。机器人接收到的数值不能直接用于运动,必须先经过坐标变换,转换到机器人基坐标系或工件坐标系。若视觉系统已经完成手眼标定并直接输出机器人基坐标系下的位姿,则机器人只需构造robtarget即可。
构造位姿时要注意姿态角的表示方式。ABB机器人使用四元数表示姿态,而视觉系统常输出欧拉角(Rx,Ry,Rz)。RAPID中可用OrientZYX函数将欧拉角转换为四元数:
pTarget := [[x, y, z], OrientZYX(rz, ry, rx), [0,0,0,0], [0,0,0,0,0,0]];
注意OrientZYX的参数顺序是Z、Y、X,与视觉端常见的X、Y、Z顺序相反,这是现场最容易出错的地方之一。若视觉端输出的是旋转矩阵或四元数,则应使用对应的转换函数,避免角度顺序混淆。
此外,视觉结果中还应包含有效性判断。例如状态字为1表示识别成功,为0表示未识别。机器人程序应在构造位姿前判断状态字,只有有效时才执行运动,否则应报警或跳过。对于多工件场景,视觉系统可能一次输出多个坐标,此时需要约定数量字段,机器人循环解析并依次抓取。
五、收发时序与异常处理
视觉引导的稳定性不仅取决于数据格式,还取决于收发时序。Socket通信中,机器人发送触发信号后,视觉系统开始拍照、处理、返回结果,这个周期可能从几十毫秒到几百毫秒不等。机器人不能一直阻塞等待,应设置合理的超时时间。若超时,应记录日志并重新触发,而不是直接停机。
Profinet/EtherNet/IP的周期性I/O则需要注意“数据新鲜度”。视觉结果写入输入区后,机器人应在下一个扫描周期读取,避免读到上一帧的旧数据。可在数据区中增加一个递增的帧计数器,机器人比较计数器变化来判断是否为新结果。
综合来看,ABB机器人视觉数据交互的核心是“通道选型 + 格式约定 + 解析转换 + 时序兜底”。Socket适合快速打通链路,Profinet/EtherNet/IP适合产线级稳定集成;字符串格式要固定、简洁、可解析;坐标数据要明确坐标系、单位、姿态表示和字节序;程序里要有超时、状态判断和异常跳过。把这四件事做扎实,视觉引导系统才能从“能跑”走向“稳定跑”。