4. 联动接口总体设计

在AGV与MES生产任务联动的工程实施中,接口总体设计决定了整个系统的稳定性、实时性与可维护性。很多项目在联调阶段频繁出现“任务重复下发”“AGV空跑”“状态回传延迟”等问题,根源往往不在单机功能,而在于MES与AGV调度系统之间的职责边界模糊、交互模式混用、协议选型不当。本节从职责划分入手,逐层展开同步/异步交互模式、接口协议选型,并给出可直接用于设计评审的数据流图绘制方法。

一、职责划分:谁决定“做什么”,谁决定“谁来做”

MES与AGV调度系统的职责划分,核心是区分业务决策层与执行调度层。MES负责“做什么”——根据工单、BOM、工艺路线和产线节拍,决定某个物料在什么时间、从哪个工位、送到哪个工位,以及任务的优先级和业务属性。AGV调度系统负责“谁来做、怎么做”——根据车辆位置、电量、负载状态、路径拥堵情况,选择最优车辆、规划路径、控制避障与充电,并保证任务被执行到位。

具体到接口字段层面,MES下发的任务应包含:任务号(唯一)、起点工位编码、终点工位编码、物料编码、数量、优先级、要求送达时间窗、业务类型(上线/下线/转运/空框回收)。AGV调度系统回传的状态应包含:任务号、车辆编号、任务状态(已接收/执行中/已完成/异常)、当前位置、预计到达时间、异常码。这里有一个关键原则:MES不关心哪台AGV执行,AGV调度不关心物料属于哪个工单。双方只通过任务号和状态码耦合,避免业务逻辑渗透到调度层。

职责划分的验收标准:当AGV数量从10台扩展到30台时,MES侧接口代码不需要任何修改;当MES更换工单排程策略时,AGV调度侧不需要重新标定地图或路径。

二、同步与异步交互模式的选择

同步交互指MES调用接口后阻塞等待AGV调度系统返回结果,适用于“必须立即知道是否受理”的场景,例如任务下发时的受理确认。异步交互指MES发出请求后不等待执行结果,AGV调度系统通过回调或消息推送方式回传状态变化,适用于“执行过程长、状态多次变化”的场景,例如AGV从接单到送达可能经历数十秒到数分钟。

工程上推荐采用“同步受理 + 异步执行”的混合模式:MES下发任务时同步调用,AGV调度系统在200ms内返回“已受理/拒绝(含原因)”;任务执行过程中的状态变化通过异步消息推送。这样既保证了任务下发的确定性,又避免了MES长时间阻塞。需要特别注意的是,同步接口必须设置超时(建议3秒)和重试策略,且重试必须携带相同的任务号,由AGV调度系统做幂等处理,防止同一任务被重复创建。

三、接口协议选型

接口协议选型需要同时考虑实时性、可靠性、开发成本和现场网络条件。常见方案对比如下:

协议适用场景优点注意事项
REST/HTTP + JSON任务下发、查询、配置同步开发调试简单,跨语言支持好实时性一般,需配合轮询或Webhook
MQTT状态推送、事件通知轻量、支持发布订阅、断线重连需部署Broker,QoS等级要明确
TCP Socket自定义协议高频位置上报、实时控制延迟低、可控性强开发量大,需自定义粘包/心跳处理
OPC UA与PLC/设备层集成标准化、语义丰富AGV调度系统支持度参差不齐

对于大多数离散制造场景,推荐REST/HTTP用于任务下发与查询,MQTT用于状态异步推送。若AGV调度系统本身提供TCP长连接接口,且现场对位置刷新频率要求高于1Hz,可保留TCP通道用于位置流,但业务状态仍走MQTT,避免业务逻辑与实时流耦合。

四、数据流图绘制方法

数据流图不是简单的方框箭头,而应表达清楚“谁在什么时机、以什么协议、传什么数据、触发什么动作”。绘制时建议分三层:业务层(工单/任务)、接口层(消息/字段)、执行层(AGV动作/状态)。下图给出一个典型的联动接口数据流,涵盖MES任务下发、AGV调度受理、状态异步回传、异常处理四条路径。

MES 工单排程 / 任务生成 优先级 / 时间窗 任务号唯一生成 AGV调度系统 车辆分配 / 路径规划 交通管制 / 充电管理 任务状态机维护 接口层(协议与消息) REST/HTTP MQTT 任务号幂等 / 超时重试 / 异常码 下发任务 受理确认 状态推送 异步回调 执行层:AGV动作与状态变化 任务已接收 车辆锁定 执行中 路径行驶 / 避障 已完成 到达并确认 异常 阻塞 / 低电 / 故障 人工干预 重派/取消 异常码回传 → MES决策重派或取消 同步请求/受理 异步状态推送 异常回传与决策 任务号贯穿全链路,保证幂等与可追溯

绘制数据流图时,建议在评审前先确认三个问题:第一,任务号是否在所有消息中保持一致;第二,同步接口的超时与重试是否会导致重复任务;第三,异常状态是否有明确的回传路径和MES侧处理策略。图中用蓝色表示同步请求/受理,绿色表示异步状态推送,红色虚线表示异常回传与决策,橙色表示人工干预入口。实际项目中,可将该图与接口字段表配套使用,字段表定义每个箭头上传输的具体JSON结构或消息主题。

五、接口设计中的常见陷阱与规避

第一个陷阱是把AGV调度系统的车辆状态直接暴露给MES。MES若依赖“车辆编号”做业务判断,一旦车辆调度策略变化,MES逻辑就会失效。正确做法是MES只认任务号,车辆信息仅作为日志和追溯用途。第二个陷阱是异步消息丢失导致状态不一致。MQTT应至少使用QoS 1,并在MES侧建立任务状态对账机制,例如每5分钟对“执行中超过预期时长”的任务发起一次查询。第三个陷阱是同步接口无幂等。网络抖动时MES重试,AGV调度系统若未按任务号去重,会产生重复搬运。建议在AGV调度系统入口处维护一个任务号缓存表,已受理的任务号直接返回原受理结果。

接口联调前必须完成的三项检查:① 任务号生成规则双方确认并写入接口文档;② 同步接口超时时间、重试次数、幂等策略明确;③ 异常码字典双方对齐,每个异常码对应MES侧的处理动作(重派/取消/人工确认)。

综上,MES与AGV调度系统的接口总体设计,本质是在业务决策与执行调度之间划一条清晰的线,用“同步受理+异步执行”兼顾确定性与实时性,用REST+MQTT组合平衡开发效率与推送能力,再用数据流图把任务号、状态、异常三条链路串起来。设计阶段多花一天对齐职责和字段,联调阶段就能少花一周排查重复任务和状态丢失。