4. 联动接口总体设计
在AGV与MES生产任务联动的工程实施中,接口总体设计决定了整个系统的稳定性、实时性与可维护性。很多项目在联调阶段频繁出现“任务重复下发”“AGV空跑”“状态回传延迟”等问题,根源往往不在单机功能,而在于MES与AGV调度系统之间的职责边界模糊、交互模式混用、协议选型不当。本节从职责划分入手,逐层展开同步/异步交互模式、接口协议选型,并给出可直接用于设计评审的数据流图绘制方法。
一、职责划分:谁决定“做什么”,谁决定“谁来做”
MES与AGV调度系统的职责划分,核心是区分业务决策层与执行调度层。MES负责“做什么”——根据工单、BOM、工艺路线和产线节拍,决定某个物料在什么时间、从哪个工位、送到哪个工位,以及任务的优先级和业务属性。AGV调度系统负责“谁来做、怎么做”——根据车辆位置、电量、负载状态、路径拥堵情况,选择最优车辆、规划路径、控制避障与充电,并保证任务被执行到位。
具体到接口字段层面,MES下发的任务应包含:任务号(唯一)、起点工位编码、终点工位编码、物料编码、数量、优先级、要求送达时间窗、业务类型(上线/下线/转运/空框回收)。AGV调度系统回传的状态应包含:任务号、车辆编号、任务状态(已接收/执行中/已完成/异常)、当前位置、预计到达时间、异常码。这里有一个关键原则:MES不关心哪台AGV执行,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侧处理策略。图中用蓝色表示同步请求/受理,绿色表示异步状态推送,红色虚线表示异常回传与决策,橙色表示人工干预入口。实际项目中,可将该图与接口字段表配套使用,字段表定义每个箭头上传输的具体JSON结构或消息主题。
五、接口设计中的常见陷阱与规避
第一个陷阱是把AGV调度系统的车辆状态直接暴露给MES。MES若依赖“车辆编号”做业务判断,一旦车辆调度策略变化,MES逻辑就会失效。正确做法是MES只认任务号,车辆信息仅作为日志和追溯用途。第二个陷阱是异步消息丢失导致状态不一致。MQTT应至少使用QoS 1,并在MES侧建立任务状态对账机制,例如每5分钟对“执行中超过预期时长”的任务发起一次查询。第三个陷阱是同步接口无幂等。网络抖动时MES重试,AGV调度系统若未按任务号去重,会产生重复搬运。建议在AGV调度系统入口处维护一个任务号缓存表,已受理的任务号直接返回原受理结果。
综上,MES与AGV调度系统的接口总体设计,本质是在业务决策与执行调度之间划一条清晰的线,用“同步受理+异步执行”兼顾确定性与实时性,用REST+MQTT组合平衡开发效率与推送能力,再用数据流图把任务号、状态、异常三条链路串起来。设计阶段多花一天对齐职责和字段,联调阶段就能少花一周排查重复任务和状态丢失。