2. 输送分拣设备对象建模

在WCS任务编排中,设备对象建模是连接“业务任务”与“物理动作”的桥梁。WCS并不直接控制电机转动,而是向设备下发“把包裹从A送到B”这类语义指令,再由设备控制器翻译为具体动作。因此,建模的核心不是复刻机械结构,而是抽象出能力与状态两个维度:能力回答“这台设备能做什么、边界在哪里”,状态回答“它现在能不能做、做到哪一步了”。

本节以输送线、交叉带分拣机、滑块分拣机、AGV接驳口、扫码站、供包台六类典型对象为例,说明如何建立统一、可编排的设备模型。

一、能力抽象:把机械差异收敛为可编排接口

能力抽象的目标是让上层编排算法不必关心设备品牌和机械形式。建议每类设备至少抽象出四组能力属性:处理能力(吞吐率、节拍)、空间能力(可服务的位置集合)、动作能力(可执行的动作类型)、约束能力(尺寸、重量、间距限制)。

以输送线为例,其能力可抽象为:可承载包裹的区段集合(如Z1~Z8)、每段的运行方向(正向/反向/停止)、最大线速(如1.2 m/s)、单段缓存容量(如每段2件)。交叉带分拣机的能力则表现为:环线小车数量(如320台)、格口数量与编号(如200个格口)、单件分拣节拍(如2.2 s/件)、可处理包裹尺寸范围。滑块分拣机的能力是入口数量、出口/格口布局、滑块动作响应时间与允许包裹间距。AGV接驳口的能力是可停靠位数量、对接高度、允许的AGV车型与交接节拍。扫码站的能力是可识别条码类型、最大通过速度、读码率与安装朝向。供包台的能力是供包节拍、可缓存件数、人工/自动模式与与主线的合流方式。

这些能力属性一旦结构化,编排层就可以用统一的方式查询:“哪台设备能处理这个包裹?它的节拍是否满足当前任务的时间窗?”

二、状态描述:让编排层看到设备的实时可调度性

仅有能力还不够,WCS必须知道设备当前是否可用。状态建模建议分为三层:运行状态(运行/停止/故障/维护)、占用状态(空闲/占用/满载/阻塞)、任务状态(无任务/已分配/执行中/已完成/异常)。

以输送线区段为例,状态可表示为:Z3: {run: RUNNING, occupancy: OCCUPIED, task: EXECUTING, packageId: PKG20240501}。交叉带分拣机的状态需要细化到小车与格口:Cart_117: {position: 42.3m, load: EMPTY, assignedTask: null},Chute_08: {status: NORMAL, bufferCount: 3, capacity: 5}。滑块分拣机的状态重点是入口排队长度与滑块动作就绪。AGV接驳口的状态是停靠位占用与对接就绪信号。扫码站的状态是在线/离线、最近读码结果与连续失败计数。供包台的状态是待供包裹数、当前供包节拍与人工在岗信号。

状态描述的关键是时间戳与置信度。例如扫码站上报“读码成功”时,必须附带时间戳和条码内容;若超过500 ms未更新,编排层应将该站标记为“状态陈旧”,避免基于过期数据下发任务。

三、对象关系与数据流:从设备到任务的映射

六类设备在一条典型分拣链路中的关系是:供包台将包裹送入输送线,输送线将包裹送至扫码站完成识别,识别后的包裹经输送线进入交叉带或滑块分拣机,分拣机按格口将包裹分流,AGV接驳口则负责将已分拣的集包袋或容器转运至下一环节。WCS的任务编排本质上是在这条链路上为每个包裹选择一条“设备能力+状态”都满足的路径。

WCS设备对象建模:能力与状态在分拣链路中的映射 供包台 能力:节拍 1800件/h 状态:待供 12 件 输送线 能力:Z1~Z8,1.2 m/s 状态:Z3 占用,Z5 空闲 扫码站 能力:≤2.0 m/s,读码率99.5% 状态:在线,最近成功 交叉带 / 滑块分拣机 能力:320小车,200格口,2.2 s/件 状态:Chute_08 缓存 3/5 AGV接驳口 能力:4 停靠位,对接高度 600 mm 状态:2 位占用,2 位就绪 WCS 编排层数据流 能力查询 → 状态校验 → 任务分配 → 指令下发 → 状态回传 关键字段:deviceId、capability、state、timestamp、packageId 状态分层模型 运行状态:RUNNING / STOP / FAULT 占用状态:IDLE / OCCUPIED / FULL 任务状态:ASSIGNED / EXECUTING 异常:STALE / ERROR 注:状态上报须带时间戳;超过阈值未更新则标记为 STALE,编排层暂停向该设备分配新任务。

四、建模落地:从字段定义到编排可用

实际工程中,建议为每类设备定义一份对象描述表,字段至少包括:设备ID、设备类型、能力参数、状态字段、状态更新周期、指令接口。例如输送线区段的描述表可写为:

deviceId: CONV_Z3
type: CONVEYOR_SEGMENT
capability: { direction: FORWARD, maxSpeed: 1.2, capacity: 2 }
state: { run: RUNNING, occupancy: OCCUPIED, task: EXECUTING, packageId: PKG20240501 }
updateCycle: 200ms
command: { setDirection, stop, release }

交叉带分拣机的描述表则需增加小车级与格口级子对象:

deviceId: SORTER_CB_01
type: CROSS_BELT_SORTER
capability: { carts: 320, chutes: 200, rate: 2.2s/piece, sizeRange: [100,600]mm }
state: { run: RUNNING, cart_117: EMPTY, chute_08: { buffer: 3, capacity: 5 } }
command: { assignCart, openChute, hold }

有了这些字段,编排算法就可以执行如下判断:当包裹到达扫码站并成功读码后,查询目标格口chute_08的buffer是否小于capacity;若满足,则查询交叉带分拣机是否有空闲小车;若满足,则分配小车并下发assignCart指令。若格口缓存已满,则任务进入等待队列,或改派至备用格口。

建模检查要点:能力参数必须可量化(节拍、速度、容量、尺寸范围);状态字段必须可观测(由设备控制器或传感器上报);每个状态字段必须有明确的更新周期与超时判定;指令接口必须与能力一一对应,避免出现“能力支持但无指令可下发”的悬空能力。

五、常见建模误区与规避

第一个误区是把设备型号当能力。例如“交叉带分拣机A型”并不能告诉编排层它能否处理600 mm长包裹,必须显式写出sizeRange。第二个误区是状态字段缺少时间维度。扫码站上报“读码成功”但未带时间戳,编排层无法判断该结果是否对应当前包裹。第三个误区是能力与状态混用。例如把“当前缓存3件”写进能力字段,导致能力参数随运行变化,编排层无法做静态规划。正确做法是:能力是静态或准静态的,状态是动态的,两者分开存储、分开更新。

第四个误区是忽略AGV接驳口与分拣机的耦合。AGV接驳口的停靠位占用状态会直接影响分拣机格口的释放节奏。若接驳口4个停靠位全部占用,分拣机对应格口应暂停向该接驳口分流,否则包裹会在格口处堆积。因此,建模时应在接驳口与格口之间建立关联关系,使编排层能够感知这种耦合。

综上,设备对象建模的产出不是一张静态的设备清单,而是一套可被编排算法实时查询和推理的能力-状态模型。输送线、交叉带分拣机、滑块分拣机、AGV接驳口、扫码站、供包台六类对象虽然机械形式不同,但通过统一的能力字段、状态分层和指令接口,可以在WCS中形成一致的可编排视图,为后续的任务分配、路径选择和异常处理提供可靠的数据基础。