换盘任务完整流程分析
任务参数
| 参数 |
值 |
| 流向 |
Flow A (isFlowA = true, 源地址 LineCode = "11001") |
| 源地址 |
11001 |
| 目标地址 |
2101 |
| 正常电芯数量 |
33 |
| 假电芯数量 |
48 - 33 = 15 |
| 目标总数 |
48 |
阶段状态定义
| Phase |
含义 |
| 0 |
未开始 |
| 1 |
取正常电芯 |
| 2 |
放正常电芯 |
| 3 |
取假电芯(Flow A: 从5号位取) |
| 4 |
放假电芯(Flow A: 放到目标托盘) |
| 5 |
等待入库完成 |
完整代码执行流程(33 正常 + 15 假 = 48 总计)
初始状态
ChangePalletPhase = 0
currentCompletedCount = 0
targetNormalCount = 33
第1轮:Pick 1-4 正常电芯
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingNormal |
操作 |
| 1 |
HandlePutFinishedStateAsync |
1 |
0 |
33 - 0 = 33 |
PickBatch(1, 4) → Phase=2 |
| 2 | (机械手执行取货) | - | - | - | - |
| 3 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished, task状态=RobotPickFinish |
| 4 | HandlePickFinishedStateAsync | 2 | 0 | 33 - 0 = 33 | PutBatch(1, 4) → Phase=1 |
| 5 | (机械手执行放货) | - | - | - | - |
| 6 | HandlePutFinishedAsync | - | 4 | - | currentCompletedCount+=4, task.RobotTaskTotalNum-=4 |
第2轮:Pick 5-8 正常电芯
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingNormal |
操作 |
| 7 |
HandlePutFinishedStateAsync |
1 |
4 |
33 - 4 = 29 |
PickBatch(5, 8) → Phase=2 |
| 8 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 9 | HandlePickFinishedStateAsync | 2 | 4 | 33 - 4 = 29 | PutBatch(1, 4) → Phase=1 |
| 10 | HandlePutFinishedAsync | - | 8 | - | currentCompletedCount+=4 |
第3轮:Pick 9-12 正常电芯
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingNormal |
操作 |
| 11 |
HandlePutFinishedStateAsync |
1 |
8 |
33 - 8 = 25 |
PickBatch(9, 12) → Phase=2 |
| 12 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 13 | HandlePickFinishedStateAsync | 2 | 8 | 33 - 8 = 25 | PutBatch(1, 4) → Phase=1 |
| 14 | HandlePutFinishedAsync | - | 12 | - | currentCompletedCount+=4 |
第4轮:Pick 13-16 正常电芯
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingNormal |
操作 |
| 15 |
HandlePutFinishedStateAsync |
1 |
12 |
33 - 12 = 21 |
PickBatch(13, 16) → Phase=2 |
| 16 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 17 | HandlePickFinishedStateAsync | 2 | 12 | 33 - 12 = 21 | PutBatch(1, 4) → Phase=1 |
| 18 | HandlePutFinishedAsync | - | 16 | - | currentCompletedCount+=4 |
第5轮:Pick 17-20 正常电芯
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingNormal |
操作 |
| 19 |
HandlePutFinishedStateAsync |
1 |
16 |
33 - 16 = 17 |
PickBatch(17, 20) → Phase=2 |
| 20 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 21 | HandlePickFinishedStateAsync | 2 | 16 | 33 - 16 = 17 | PutBatch(1, 4) → Phase=1 |
| 22 | HandlePutFinishedAsync | - | 20 | - | currentCompletedCount+=4 |
第6轮:Pick 21-24 正常电芯
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingNormal |
操作 |
| 23 |
HandlePutFinishedStateAsync |
1 |
20 |
33 - 20 = 13 |
PickBatch(21, 24) → Phase=2 |
| 24 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 25 | HandlePickFinishedStateAsync | 2 | 20 | 33 - 20 = 13 | PutBatch(1, 4) → Phase=1 |
| 26 | HandlePutFinishedAsync | - | 24 | - | currentCompletedCount+=4 |
第7轮:Pick 25-28 正常电芯
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingNormal |
操作 |
| 27 |
HandlePutFinishedStateAsync |
1 |
24 |
33 - 24 = 9 |
PickBatch(25, 28) → Phase=2 |
| 28 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 29 | HandlePickFinishedStateAsync | 2 | 24 | 33 - 24 = 9 | PutBatch(1, 4) → Phase=1 |
| 30 | HandlePutFinishedAsync | - | 28 | - | currentCompletedCount+=4 |
第8轮:Pick 29-32 正常电芯
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingNormal |
操作 |
| 31 |
HandlePutFinishedStateAsync |
1 |
28 |
33 - 28 = 5 |
PickBatch(29, 32) → Phase=2 |
| 32 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 33 | HandlePickFinishedStateAsync | 2 | 28 | 33 - 28 = 5 | PutBatch(1, 4) → Phase=1 |
| 34 | HandlePutFinishedAsync | - | 32 | - | currentCompletedCount+=4 |
第9轮:Pick 33 正常电芯(最后1个)
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingNormal |
操作 |
| 35 |
HandlePutFinishedStateAsync |
1 |
32 |
33 - 32 = 1 |
PickBatch(33, 33) → Phase=2 |
| 36 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 37 | HandlePickFinishedStateAsync | 2 | 32 | 33 - 32 = 1 | PutBatch(33, 33) → Phase=1 |
| 38 | HandlePutFinishedAsync | - | 33 | - | currentCompletedCount+=1 |
第10轮:正常电芯全部完成 → 切换 Phase 3
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingNormal |
操作 |
| 39 |
HandlePutFinishedStateAsync |
1 |
33 |
33 - 33 = 0 → ≤0 |
切换 Phase=3, Pick fake from 5号位 |
Flow A 特性:正常电芯取完后,源托盘(11001)已空。此时机械手携带最后一批正常电芯放到目标托盘后,源托盘自动空出回库。代码中不需要显式处理这个回库动作——由输送线自动完成。
第11轮:Pick 1-4 假电芯(从5号位)
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingFake |
操作 |
| 40 |
HandlePutFinishedStateAsync |
3 |
33 |
15 - 0 = 15 |
Pick fake from 5号位(1,4) → Phase=4 |
| 41 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 42 | HandlePickFinishedStateAsync | 4 | 33 | 15 - 0 = 15 | Put fake to target(BatchStart=34, 4个) → Phase=3 |
| 43 | HandlePutFinishedAsync | - | 37 | - | currentCompletedCount+=4 |
第12轮:Pick 5-8 假电芯
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingFake |
操作 |
| 44 |
HandlePutFinishedStateAsync |
3 |
37 |
15 - 4 = 11 |
Pick fake from 5号位(5,8) → Phase=4 |
| 45 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 46 | HandlePickFinishedStateAsync | 4 | 37 | 15 - 4 = 11 | Put fake to target(BatchStart=38, 4个) → Phase=3 |
| 47 | HandlePutFinishedAsync | - | 41 | - | currentCompletedCount+=4 |
第13轮:Pick 9-12 假电芯
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingFake |
操作 |
| 48 |
HandlePutFinishedStateAsync |
3 |
41 |
15 - 8 = 7 |
Pick fake from 5号位(9,12) → Phase=4 |
| 49 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 50 | HandlePickFinishedStateAsync | 4 | 41 | 15 - 8 = 7 | Put fake to target(BatchStart=42, 4个) → Phase=3 |
| 51 | HandlePutFinishedAsync | - | 45 | - | currentCompletedCount+=4 |
第14轮:Pick 13-15 假电芯(最后3个)
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingFake |
操作 |
| 52 |
HandlePutFinishedStateAsync |
3 |
45 |
15 - 12 = 3 |
Pick fake from 5号位(13,15) → Phase=4 |
| 53 | HandlePickFinishedAsync | - | - | - | CurrentAction=PickFinished |
| 54 | HandlePickFinishedStateAsync | 4 | 45 | 15 - 12 = 3 | Put fake to target(BatchStart=46, 3个) → Phase=3 |
| 55 | HandlePutFinishedAsync | - | 48 | - | currentCompletedCount+=3 |
第15轮:假电芯全部完成 → 切换 Phase 5
| 步骤 |
方法 |
Phase |
currentCompletedCount |
remainingFake |
操作 |
| 56 |
HandlePutFinishedStateAsync |
3 |
48 |
15 - 15 = 0 → ≤0 |
切换 Phase=5, 等待入库 |
第16轮:全部放货完成 → 入库
| 57 | HandlePutFinishedAsync | - | PutFinished → allputfinished |
| 58 | ExecuteAsync | - | 检测 allputfinished → RobotSimpleCommandHandler 处理 |
| 59 | RobotSimpleCommandHandler | 5 | Phase=5 → 调用 HandleInboundTaskAsync(useSourceAddress=false) 入库到 HCSC1 |
| 60 | - | - | 删除任务记录,重置状态,发送 "Group,diskFinished" |
数据流汇总
currentCompletedCount 变化
0 → 4 → 8 → 12 → 16 → 20 → 24 → 28 → 32 → 33 → 37 → 41 → 45 → 48
| | | | | | | | | | | | | |
正常电芯批次 正常完成 假电芯批次 总完成
(每批4个) +0 (每批4个) +3
Phase 切换图
Phase=0 ──(初始化)──► Phase=1 ──► Phase=2 ──► Phase=1 ──► ... ──► Phase=1
(Pick 1-4) (Put 1-4) (Pick 5-8) (Pick 33)
↓
Phase=2 ──► ... ──► Phase=2
(Put 5-8) (Put 33)
↓
┌──────────────────────────────────────┐
│ Phase=1 (remainingNormal=0) │
│ ↓ │
│ Phase=3 (取假电芯) │
│ Pick fake → Phase=4 → Put fake │
│ ↺ │
│ 直到 remainingFake=0 │
│ ↓ │
│ Phase=5 (入库) │
└──────────────────────────────────────┘
关键数据对照表
| 轮次 |
Phase |
操作 |
currentCompletedCount |
remainingNormal |
remainingFake |
发送指令 |
| 1 | 1→2 | Pick 1-4 | 0 | 33 | - | PickBatch(1,4) |
| 1 | 2→1 | Put 1-4 | 4 | 33 | - | PutBatch(1,4) |
| 2 | 1→2 | Pick 5-8 | 4 | 29 | - | PickBatch(5,8) |
| 2 | 2→1 | Put 5-8 | 8 | 29 | - | PutBatch(1,4) |
| 3 | 1→2 | Pick 9-12 | 8 | 25 | - | PickBatch(9,12) |
| 3 | 2→1 | Put 9-12 | 12 | 25 | - | PutBatch(1,4) |
| 4 | 1→2 | Pick 13-16 | 12 | 21 | - | PickBatch(13,16) |
| 4 | 2→1 | Put 13-16 | 16 | 21 | - | PutBatch(1,4) |
| 5 | 1→2 | Pick 17-20 | 16 | 17 | - | PickBatch(17,20) |
| 5 | 2→1 | Put 17-20 | 20 | 17 | - | PutBatch(1,4) |
| 6 | 1→2 | Pick 21-24 | 20 | 13 | - | PickBatch(21,24) |
| 6 | 2→1 | Put 21-24 | 24 | 13 | - | PutBatch(1,4) |
| 7 | 1→2 | Pick 25-28 | 24 | 9 | - | PickBatch(25,28) |
| 7 | 2→1 | Put 25-28 | 28 | 9 | - | PutBatch(1,4) |
| 8 | 1→2 | Pick 29-32 | 28 | 5 | - | PickBatch(29,32) |
| 8 | 2→1 | Put 29-32 | 32 | 5 | - | PutBatch(1,4) |
| 9 | 1→2 | Pick 33 | 32 | 1 | - | PickBatch(33,33) |
| 9 | 2→1 | Put 33 | 33 | 0 | - | PutBatch(33,33) |
| 10 | 1→**3** | 切换 | 33 | 0 | 15 | Pick fake(5号位 1-4) |
| 11 | 3→4 | Pick fake 1-4 | 33 | 0 | 15 | PickBattery,5,1-4 |
| 11 | 4→3 | Put fake 34-37 | 37 | 0 | 11 | PutBatch(34,37) |
| 12 | 3→4 | Pick fake 5-8 | 37 | 0 | 11 | PickBattery,5,5-8 |
| 12 | 4→3 | Put fake 38-41 | 41 | 0 | 7 | PutBatch(38,41) |
| 13 | 3→4 | Pick fake 9-12 | 41 | 0 | 7 | PickBattery,5,9-12 |
| 13 | 4→3 | Put fake 42-45 | 45 | 0 | 3 | PutBatch(42,45) |
| 14 | 3→4 | Pick fake 13-15 | 45 | 0 | 3 | PickBattery,5,13-15 |
| 14 | 4→3 | Put fake 46-48 | 48 | 0 | 0 | PutBatch(46,48) |
| 15 | 3→**5** | 切换 | 48 | 0 | 0 | 等待入库 |
| 16 | 5 | 入库 | - | - | - | allputfinished → HandleInboundTaskAsync → HCSC1 |
代码职责对照
| 方法 |
何时调用 |
职责 |
| HandlePutFinishedStateAsync |
ExecuteAsync 检测 PutFinished |
发送 Pick 指令,更新 Phase |
| HandlePickFinishedStateAsync |
ExecuteAsync 检测 PickFinished |
发送 Put 指令 |
| HandlePickFinishedAsync |
prefix command pickfinished |
更新状态 CurrentAction |
| HandlePutFinishedAsync |
prefix command putfinished |
更新 currentCompletedCount 计数 |
| RobotSimpleCommandHandler |
命令 allpickfinished / allputfinished |
触发入库,清理状态 |