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。

ABB机器人视觉数据交互通道与数据流 视觉系统 相机 / 视觉控制器 输出:X,Y,Z,Rx,Ry,Rz 或 字符串结果 Socket / TCP 字符串 / 字节流,灵活自定义 Profinet 周期性I/O,字节映射 EtherNet/IP 隐式I/O / 显式报文 ABB机器人 RAPID程序 SocketReceive / SocketSend Profinet I/O 映射 EtherNet/IP 映射 坐标解析 → 位姿 → 运动指令 视觉结果字符串示例(Socket/TCP 常用格式) "X=523.41,Y=-118.76,Z=402.15,Rx=178.2,Ry=0.5,Rz=92.7,OK" "1,523.41,-118.76,402.15,178.2,0.5,92.7" 字段顺序、单位、分隔符、坐标系必须在视觉端与机器人端严格一致。 Profinet/EtherNet/IP:坐标按 REAL 或 DINT 映射到输入字节区,需约定字节序与偏移。

二、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则需要注意“数据新鲜度”。视觉结果写入输入区后,机器人应在下一个扫描周期读取,避免读到上一帧的旧数据。可在数据区中增加一个递增的帧计数器,机器人比较计数器变化来判断是否为新结果。

常见问题:Socket通信中字符串未带结束符导致机器人一直等待;Profinet字节序不一致导致坐标值变成极大或极小的错误数;欧拉角顺序错误导致机器人姿态翻转。这三类问题在现场出现频率最高,建议在联调前逐项确认。

综合来看,ABB机器人视觉数据交互的核心是“通道选型 + 格式约定 + 解析转换 + 时序兜底”。Socket适合快速打通链路,Profinet/EtherNet/IP适合产线级稳定集成;字符串格式要固定、简洁、可解析;坐标数据要明确坐标系、单位、姿态表示和字节序;程序里要有超时、状态判断和异常跳过。把这四件事做扎实,视觉引导系统才能从“能跑”走向“稳定跑”。