# 换盘任务完整流程分析 ## 任务参数 | 参数 | 值 | |------|-----| | 流向 | **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` | 触发入库,清理状态 |