4. 任务执行工程基础

在 AMR 调度系统中,任务不是一条简单的“下发—执行—完成”指令,而是一个被持续跟踪、可中断、可恢复、可回滚的受控对象。任务执行工程的核心,就是把物理世界的不确定性收敛为调度系统可管理、可观测、可干预的状态流转过程。理解任务生命周期、任务类型、执行流程、状态机模型与异常处理机制,是后续实现任务编排、资源分配与故障恢复的基础。

一、任务生命周期:从创建到归档的五个阶段

一个 AMR 任务从产生到结束,通常经历创建、排队、分配、执行、终结五个阶段。每个阶段都有明确的进入条件、持有资源和退出条件,调度系统必须在每个阶段维护任务上下文,包括任务 ID、起点、终点、优先级、载具要求、超时阈值、依赖任务等。

  • 创建:由 WMS、MES、人工终端或调度策略生成任务,写入任务表并生成全局唯一 task_id。
  • 排队:任务进入待分配队列,按优先级、截止时间、区域约束排序,等待可用 AMR 与路径资源。
  • 分配:调度器选定 AMR,锁定目标点位与路径段,任务状态变为 ASSIGNED,并下发执行指令。
  • 执行:AMR 按路径行驶、举升/放下货架、等待电梯或通过闸机,期间持续上报位置与子状态。
  • 终结:任务完成、取消或失败后,释放 AMR、点位、路径与电梯资源,写入执行日志并归档。
任务生命周期的关键不是“状态名称”,而是每个状态下系统必须保证的资源占用与释放规则。资源泄漏往往发生在异常终结路径上,而不是正常完成路径上。

二、任务类型:不同业务语义决定不同执行约束

AMR 调度系统中的任务类型直接决定执行流程的分支。常见类型包括搬运任务、充电任务、回库任务、盘点任务、清洁任务和人工干预任务。搬运任务通常有起点和终点,充电任务有目标充电桩,回库任务有固定库位,盘点任务可能要求 AMR 在指定区域低速巡航并采集数据。

任务类型 典型参数 执行约束 异常重点
搬运任务 起点、终点、载具、优先级 路径可达、点位空闲、载具匹配 目标点被占用、货架丢失
充电任务 目标充电桩、电量阈值 充电桩可用、AMR 可自主对接 充电桩故障、对接失败
回库任务 目标库位、AMR 编号 库位空闲、路径不冲突 库位被占、路径封锁
盘点任务 区域、速度、采集周期 区域清场、低速巡航 区域有人、采集超时

三、执行流程与状态机模型

任务执行流程可以用有限状态机建模。状态集合通常包括 CREATED、QUEUED、ASSIGNED、MOVING、WAITING、EXECUTING、COMPLETED、FAILED、CANCELLED。事件包括分配成功、到达起点、到达终点、等待超时、人工取消、设备故障等。状态迁移必须满足守卫条件,例如只有 ASSIGNED 状态才能进入 MOVING,只有 MOVING 到达终点后才能进入 EXECUTING。

AMR 任务状态机与异常迁移 CREATED QUEUED ASSIGNED MOVING EXECUTING COMPLETED FAILED CANCELLED WAITING 完成 故障/超时 人工取消 等待资源 恢复 重试 状态迁移必须满足守卫条件;异常路径需显式释放 AMR、点位、路径与电梯资源 WAITING 与 FAILED 是资源回收与重试策略的关键分支点

状态机实现时,建议把状态迁移写成表驱动或事件驱动,而不是散落在业务代码中的 if-else。每次迁移记录 from_state、to_state、event、timestamp、operator 和 reason,便于复盘与审计。

task_state_transition:
  task_id: T20240518001
  from: MOVING
  to: FAILED
  event: PATH_BLOCKED_TIMEOUT
  reason: "前方通道被临时占用超过 30s"
  timestamp: 2024-05-18T10:23:41+08:00
  resource_release:
    amr: AMR-017
    point: P-1024
    path_segment: SEG-88
    elevator: null

四、异常处理机制:分类、检测、恢复与升级

异常处理不是简单的“报错重试”,而是按异常类型采取不同策略。常见异常可分为资源类、路径类、设备类、业务类和人工类。资源类包括目标点被占用、充电桩不可用;路径类包括路径封锁、交通死锁;设备类包括 AMR 失联、举升失败、电量过低;业务类包括货架不存在、任务被取消;人工类包括现场人员拦截、急停触发。

  • 检测:通过心跳超时、状态上报缺失、传感器告警、调度器超时计时器发现异常。
  • 隔离:立即冻结任务状态,禁止继续下发新动作,防止异常扩散到其他任务。
  • 恢复:按策略选择重试、换车、换点、降级执行或人工介入。
  • 升级:超过重试次数或影响范围扩大时,升级为告警工单并通知运维。
建议为每类异常定义“最大重试次数、重试间隔、是否换车、是否释放资源、是否通知人工”五个参数,形成可配置的异常策略表,而不是硬编码在流程中。

五、案例与复盘:目标点被占用导致的连锁阻塞

某仓库搬运任务 T-8801 从 A 区到 B 区,AMR-017 到达目标点 P-1024 后发现该点位被一台故障 AMR 占用。若系统只做简单重试,AMR-017 会持续等待,导致后方路径段 SEG-88 拥堵,进而影响另外三个任务。正确做法是:检测到目标点占用后,任务进入 WAITING,触发点位占用异常;调度器在 10 秒内尝试重新分配备用点位 P-1025;若备用点位也不可用,则释放 AMR-017 并让其返回最近等待点,同时将任务升级为人工处理。

常见误区:把异常处理写成“无限重试”。无限重试会掩盖真实故障,并造成路径资源长期占用。另一个误区是异常终结时只改任务状态,不释放点位、路径和电梯资源,最终导致系统“看起来空闲、实际不可用”。

任务执行工程的落地要点可以归纳为:生命周期定义清楚,任务类型区分明确,状态机迁移可审计,异常策略可配置,资源释放可验证。只有把任务当作有状态、有资源、有异常路径的受控对象,AMR 调度系统才能在真实仓库环境中稳定运行。