
结合《ICS 系统接口协议》与 MES 上位机对接代码,拆解一条“请求—执行—回调—再确认”的完整闭环。一、场景:AGV 不是孤岛在锂电/切卷切叠这类产线上,AGV/AMR 从来不是一个独立产品,而是被三层系统共同驱动的执行末端:┌─────────────┐ ① addTask / continueTask / cancelTask ┌──────────────┐ │ MES / WMS │ ─────────────────────────────────────────► │ ICS │ │ 第三方系统 │ │ 集成控制系统 │ │ │ ◄───────────────────────────────────────── │ (RCS 之上) │ └─────────────┘ ② ResponseTask 状态回调 (webhook) └──────┬───────┘ │ │ 调度 │ ③ 直接读写 PLC (欧姆龙 CIP) ▼ ▼ ┌──────────┐ ┌─────────────┐ │ RCS / AMR│ │ 产线 PLC │ ◄───────── 物理信号握手 (允许上料/离开) ──────► └──────────┘ └─────────────┘ICS(集成控制系统)对第三方只暴露 HTTP 接口,屏蔽内部 RCS 调度、点位映射、车型差异;MES既是任务下发方,又是 AGV 状态的接收方,同时还要直接和产线 PLC 打交道;AMR到位后会反向回调 MES,由 MES 决定“放行还是取消”。本文的全部技术要点,都藏在这张图的箭头里。二、协议侧:三个接口,一个闭环ICS 提供的接口看似只有三个,但恰好覆盖了任务的全生命周期:下发 → 执行中暂停/续行 → 终止。2.1 任务下发:POST /ics/taskOrder/addTask所有任务的入口,核心参数如下:参数说明技术点modelProcessCode业务流程模板编号任务模板化:点位、路径、数量规则都在 RCS 配置,第三方不硬编码流程orderId任务单号,必须全局唯一幂等基石,后续所有回调/取消都靠它对齐fromSystem来源系统(MES/WMS…)多系统共用一个入口的隔离手段priority4 高 / 6 中 / 8 低(默认 6)高优先级抢占调度taskOrderDetail[].taskPath起始点、目标点,逗号分隔点位名称可由第三方自定义,ICS 通过映射表转成 AGV 可用点位taskOrderDetail[].extraInfobatteryType(314/340)、anodeOrCathode(1 正/0 负)业务语义透传,用于下游判定releaseRobot/deviceNum是否释放车辆 / 指定车辆车辆资源的占用与复用loadType空/半满/全满同一台车不同负载下差异化限速shelfModel方架/长方架/牵引/栈板/叉车料箱…负载形态决定取放策略两个设计细节值得单独拎出来:releaseRobot的“锁车”语义:默认任务结束释放 AMR;若置 1 则不释放,可再用deviceNum指定同一台车执行后续任务。这是多工序连续作业(如上料→搬运)省去重复调度开销的关键。点位自定义 + 映射/