202606 机械臂与输送线上下料 — RCS-2000 任务编排
本项目有两类 AMR 对接场景:顶升车给机械臂料台做托盘上下料,滚筒移载车与输送线做滚筒对滚筒的物料交接。调度侧为海康 RCS-2000,在任务编排中搭了三条流程:机械臂上料、机械臂下料、输送线上下料。三条流程共用一套设计:到关键位置先"通知业务系统",等业务系统握手完成后用"继续执行消息事件"放行;机械臂流程用半盲举 + 同车锁车链保证载具闭环与同车接力,输送线流程不做载具管理,最后用 SDK 表达式释放小车。
场景概述
现场两类对接:
- 机械臂料台(顶升 车):两台机械臂,每台管三个料台(左/右上满料出空托、侧位集隔板)。AMR 驮着托盘进出料台,进出前必须与机械臂做光幕握手——车到等待点后申请进入,机械臂关光幕、允许进入后车才能进臂位。
- 输送线(滚筒移载车):车在上料输送线对接位收料,再到下料输送线对接位放料,物料经车上滚筒直接交接,不涉及托盘载具。
握手由业务系统(LogiMaster)完成:流程节点开"通知业务系统",RCS 回调业务系统;业务系统通过 Modbus 与机械臂/输送线交互,完成后调 RCS 的任务继续接口,触发流程中的"继续执行消息事件"放行下一步。
接口序号约定
机械臂流程有三个提交参数,按 targetRoute 序号依次为:
| 序号 | 含义 | 上料 | 下料 |
|---|---|---|---|
| 1 | 起点(载具所在) | 满料区/起点站点 | 机械臂位 |
| 2 | 等待点 | 料台等待点 | 料台等待点 |
| 3 | 终点 | 机械臂位 | 目标站点 |
终点放在最后一个序号:提交任务的基类按最大序号推导终点编码,这样记录的起终点天然正确,业务侧无需覆写。输送线流程只有对接位参数(上料对接位、下料对接位各一个序号)。
机械臂上料流程
流程:申请载具 → 申请站点 → 查找AMR类型 → 搬运任务(取货到等待点)→ 继续执行消息事件 → 申请站点 → 搬运任务(进臂位放料)→ 空车移动(回等待点)。

申请载具:载具获取方式选"接口参数"、接口序号 1(起点),申请策略"先进先出"。扩展属性里"载具类型"用表达式从提交参数取:${submitParam.extra.carrierType};载具编号留空——按"起点位置 + 载具类型"过滤申请站点上已登记的真实载具记录,这是半盲举的关键(见后文)。
第一段搬运任务(起点取货到等待点):

- 终点搬运模式 = 举升锁车:到等待点后托盘不放下,车被锁定,后续动作保证同车执行;
- 终点记载具开启:载具记录跟着车走到等待点;
- 通知业务系统 = 是:到达等待点后回调业务系统,触发光幕握手(申请进入机械臂位)。
之后流程停在"继续执行消息事件"上,等业务系统握手完成调用任务继续接口放行。
第二段搬运任务(进臂位放料):

起始站点获取方式选"载具对象"、起始参数值"载具变量(carrier)"——起点就是车上这个载具;目标为申请到的机械臂位(储位模型 finalSite);终点搬运模式 = 放下锁车:托盘放进臂位、载具记录绑定到机械臂位,但车仍锁定,接着走末段"空车移动"退回等待点后流程结束。留在机械臂位的载具记录,正好是下料流程申请载具的来源。
机械臂下料流程
流程:申请载具 → 申请站点 → 查找AMR类型 → 空车移动(到等待点)→ 继续执行消息事件 → 搬运任务(进臂位取货回等待点)→ 申请站点 → 搬运任务(送目标站点释放)。

申请载具配置与上料一致(接口序号 1 此时指向机械臂位),申请到的就是上料流程留在臂位的载具记录。
空车移动到等待点:

目标站点获取方式"站点对象"、参数值"储位模型(waitSite)";AMR 系列/编号用 ${amr.amrCategory}、${amr.robotCode} 绑定查找到的车;终点锁定机器人开启——空车移动本身不锁车,不开这个开关,车到等待点后会被调度派走,后面取货换车执行;通知业务系统开启,到位后触发"申请进入"握手。
取货段搬运任务(等握手放行后进臂位取货返回等待点):

同样是举升锁车 + 终点记载具 + 通知业务系统。这里的通知是"已取出"——任务还在执行中,业务系统收到后及时打开光幕,不必等整条任务结束。
送货段搬运任务(到目标站点):

起点"载具对象(carrier)",终点"储位模型(targetSite)",终点记载具开启;终点搬运模式 = 释放去暂驻点:放下托盘的同时解除锁车,整条锁车链在这里收尾。
输送线上下料流程
流程:空车移动(上料对接位)→ 继续执行消息事件 → 空车移动(下料对接位)→ 继续执行消息事件 → SDK释放小车。物料经车上滚筒交接,全程不做载具管理。

空车移动:目标站点获取方式"接口参数"(对接位由提交参数直接给出,不经申请站点,同一对接位的并发由业务系统派单侧控制);AMR 系列 = 移载车;终点锁定机器人开启;通知业务系统开启——到位后业务系统与输送线做滚筒交接握手(启动滚筒、光电到位确认),完成后继续任务。第二段空车移动用 ${amr.robotCode} 绑定同一台车。
SDK 释放小车:两段移动都靠"终点锁定机器人"锁车,流程里没有搬运释放动作,最后必须显式解锁。用一个表达式节点完成:

${amrSdk.freeAmrToRcs(moveTask.robotCode)}
实现类型选"表达式",把锁定的车释放回调度池。漏掉这个节点,车会一直占着不接新任务。
关键设计点
半盲举:不扫码,但载具全程可追溯
机械臂流程的取货 是半盲举——不扫托盘码,但载具走真实记录:
- 取货段搬运关探测(不扫码直接钻底举升);
- 申请载具的载具编号留空,按"位置 + 载具类型"申请站点上已登记的真实载具记录:起点库位仍需在 RCS 载具管理里有记录,只是车到位后不再扫码核验,直接信任记录;
- 每段搬运开"终点记载具",载具记录跟着托盘走:上料终点(机械臂位)留下的记录就是下料申请载具的来源,全程闭环。
与全盲举(生成临时载具码)的区别:半盲举的载具是真实业务数据,可追溯;与扫码方案的唯一差别是去掉了到位后的扫码核验。
同车接力:锁车链
一条流程的所有移动/搬运必须同一台车执行,靠锁车动作串起来:
- 上料:首段搬运举升锁车 → 进臂位放下锁车 → 末段空移回等待点后流程结束;
- 下料:空移终点锁定机器人 → 取货举升锁车 → 末段释放去暂驻点解锁;
- 输送线:两段空移都锁车 → 末尾 SDK 释放小车解锁。
中途任何一段忘记锁车,车就可能被调度派走、后续动作换车执行——下料流程的首段空移实测踩过这个坑。