2. MERLIC软件架构与机器人集成接口
MERLIC 的软件架构可以理解为“两层工具 + 一组通讯接口”的组合:Creator 负责离线构建视觉应用,Runtime 负责在线执行视觉任务,而通讯接口则把 Runtime 的检测结果、状态和触发信号传递给机器人控制器。理解这三者的分工与连接方式,是后续完成机器人视觉引导集成的前提。
Creator 与 Runtime 的职责边界
Creator 是开发态工具,用于搭建视觉流程、配置相机、标定、设定工具参数以及设计结果输出。它面向工程师,允许反复调试、保存和版本管理。Runtime 是运行态引擎,它不提供图形化编辑能力,只加载 Creator 导出的 MERLIC 应用(.mvtc 或已部署的应用包),按配置执行图像采集、工具链计算和结果输出。Runtime 可以独立运行,也可以被外部程序通过通讯接口调用。
两者之间通过“应用”这一交付物衔接:Creator 中完成的设计被保存为应用,Runtime 加载后按既定逻辑运行。因此,集成工作的核心不是修改 Runtime 内部逻辑,而是通过通讯接口向 Runtime 发送触发命令、读取结果,并让机器人控制器根据结果做出运动决策。
通讯接口总览
MERLIC Runtime 对外提供多种通讯方式,常见的有 TCP/IP、OPC UA、Modbus 和 REST。它们并不是互斥的,而是面向不同集成场景:
- TCP/IP:最直接、最通用的方式。Runtime 作为服务端监听端口,机器人控制器或上位机作为客户端建立连接,发送触发字符串,接收结果字符串。适合快速验证和轻量集成。
- OPC UA:面向工业互操作的标准协议,支持信息模型、节点地址和订阅机制。适合与 PLC、SCADA 或支持 OPC UA 的机器人控制器集成,便于统一数据语义。
- Modbus:轻量、广泛支持的现场总线协议,通常以寄存器方式读写数据。适合与 PLC 或机器人控制器进行周期性数据交换,但表达复杂结构的能力有限。
- REST:基于 HTTP 的接口,适合上位机、MES 或非实时系统调用,便于用 JSON 传递结构化结果,但不适合硬实时触发。
选择哪种接口,取决于机器人控制器的能力、实时性要求、数据结构和现场已有网络。例如,若机器人控制器支持 OPC UA,优先用 OPC UA 统一语义;若只支持简单 Socket,则用 TCP/IP;若需要与 PLC 周期交换寄存器,则用 Modbus。
机器人控制器的连接方式
机器人视觉引导的典型连接方式是:机器人控制器作为客户端或主站,MERLIC Runtime 作为服务端或从站。机器人控制器在需要拍照时发送触发信号,Runtime 执行一次视觉任务,返回结果(如目标位姿、偏差、合格标志),机器人控制器解析结果后修正运动轨迹。
以 TCP/IP 为例,Runtime 端配置好通讯接口后,会监听指定端口。机器人控制器通过 Socket 连接,发送约定的触发命令,例如 TRIGGER 或带任务编号的字符串。Runtime 执行完成后返回结果字符串,机器人控制器按分隔符解析出 X、Y、角度等字段。这种方式实现简单,但需要双方约定好命令格式、编码和超时处理。
OPC UA 方式则更结构化:Runtime 暴露若干节点,机器人控制器通过读写节点完成触发和结果获取。触发可以写一个布尔节点,结果从对应节点读取。OPC UA 支持订阅,机器人控制器可以在结果更新时收到通知,减少轮询。Modbus 方式通常把触发和结果映射到寄存器地址,机器人控制器按地址读写,适合与 PLC 配合。REST 方式则通过 HTTP 请求触发,返回 JSON,适合非实时系统。
集成时的关键参数与判断依据
无论采用哪种接口,都需要明确以下内容:触发命令的格式、结果字段的含义与顺序、坐标系定义、超时时间、错误码以及重试策略。例如,结果中的 X、Y 通常表示目标在图像或机器人坐标系下的偏移量,角度表示旋转偏差。坐标系定义必须在标定阶段与机器人控制器保持一致,否则会出现方向相反或偏移量符号错误。
判断集成是否成功,可以观察:机器人发送触发后,Runtime 是否在预期时间内返回结果;返回结果中的字段是否与视觉工具输出一致;机器人根据结果修正后,抓取或装配是否到位。若出现超时,检查网络连通性、端口占用和 Runtime 是否处于运行状态;若结果字段解析错误,检查分隔符、编码和字段顺序。
配置示例:TCP/IP 触发与结果解析
下面给出一个简化的 TCP/IP 集成示例,用于说明触发命令和结果格式的约定方式。示例参数为教学假设,实际使用时需根据 Runtime 配置和机器人控制器能力调整。
# Runtime 端(示意)
通讯接口:TCP/IP Server
监听端口:5000
触发命令:TRIGGER
结果格式:OK,X=12.34,Y=-5.67,A=1.23
错误格式:ERR,CODE=1001
# 机器人控制器端(伪代码)
socket.connect("192.168.1.10", 5000)
socket.send("TRIGGER\n")
response = socket.receive()
if response.startswith("OK"):
x, y, a = parse(response)
robot.adjust_offset(x, y, a)
else:
handle_error(response)
在这个示例中,机器人控制器发送 TRIGGER 后等待结果。若返回 OK,则解析 X、Y、A 三个字段并修正机器人偏移;若返回 ERR,则根据错误码决定重试或报警。实际集成时,还需要考虑连接断开重连、结果超时、多次触发去重等问题。
接口选择与集成检查要点
选择接口时,可以从实时性、数据结构、现场设备和开发成本四个维度判断。TCP/IP 开发成本低、实时性中等,适合快速验证;OPC UA 语义清晰、支持订阅,适合标准化集成;Modbus 适合与 PLC 周期交换,但结构表达弱;REST 适合非实时系统,不适合硬触发。
集成完成后,建议按以下要点检查:触发命令是否被 Runtime 正确接收;结果字段是否与视觉工具输出一致;坐标系方向是否与机器人控制器一致;超时和错误处理是否覆盖;网络断开后是否能恢复。只有这些环节都验证通过,机器人视觉引导才能稳定运行。