编辑 | blame | 历史 | 原始文档

换盘任务完整流程分析

任务参数

参数
流向 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轮:全部放货完成 → 入库

步骤 方法 Phase 操作

| 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 触发入库,清理状态