TakeBoxFromShelfTask.cs
3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using CtuDeviceLib;
using Mushiny;
namespace DeviceLibrary.CtuService.CtuTask.Common
{
public class TakeBoxFromShelfTask : TakeBoxBase
{
public TakeBoxFromShelfTask(CTU ctu, RobotTask robotTask) : base(ctu, robotTask)
{
Name = "去货架取料箱";
}
public override void Excute()
{
//当前位置不是目的地,就重新规划路线
if (MoveInfo.MoveStep != RunStep.Wait && MoveInfo.MoveStep != RunStep.Outstore_TakeBoxFromShelf_01_MoveToDst)
{
if (ctu.CurLandMark != destination)
{
MoveInfo.NextMoveStep(RunStep.Wait);
MoveInfo.Info($"当前不在目标点【{DstName}】【{destination}】,重新进入出库流程");
}
}
switch (MoveInfo.MoveStep)
{
case RunStep.Wait:
if (!CalcDst())
{
Msg.add($"规划去【{DstName}】失败,请检查", MsgLevel.warning);
return;
}
UpdateLocInfo(TaskStatus.EXECUTING, SmfTaskType.OutStore);
MoveInfo.NextMoveStep(RunStep.Outstore_TakeBoxFromShelf_01_MoveToDst);
MoveInfo.Info($"去【{DstName}】【{destination}】");
break;
case RunStep.Outstore_TakeBoxFromShelf_01_MoveToDst:
if (IsFinished)
{
MoveInfo.NextMoveStep(RunStep.Outstore_TakeBoxFromShelf_02_AtDst);
MoveInfo.Info($"到达【{DstName}】【{destination}】");
}
else
{
Move();
}
break;
case RunStep.Outstore_TakeBoxFromShelf_02_AtDst:
MoveInfo.NextMoveStep(RunStep.Outstore_TakeBoxFromShelf_03_TakeBox);
ShelfOrEquipToBasket();
MoveInfo.Info($"取料箱【{boxCode}】");
break;
case RunStep.Outstore_TakeBoxFromShelf_03_TakeBox:
if (IsFinished)
{
var rtn = SMFManager.boxOutFromShelf(boxCode);
if (!rtn)
{
MoveInfo.Error($"上报从货架【{DstName}】取料箱【{boxCode}】失败");
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
return;
}
MoveInfo.NextMoveStep(RunStep.Outstore_TakeBoxFromShelf_04_UpdateBoxLoc);
MoveInfo.Info($"料箱【{boxCode}】放入背篓完成");
UpdateLocInfo(TaskStatus.OUT_ON_AGV, SmfTaskType.OutStore);
UpdateBoxLoc(GenCtuLoc());
MoveInfo.Info($"上报已从【{DstName}】取料箱【{boxCode}】完成");
}
break;
case RunStep.Outstore_TakeBoxFromShelf_04_UpdateBoxLoc:
MoveInfo.NextMoveStep(RunStep.CtuTask_ProcessFinished);
break;
case RunStep.CtuTask_ProcessFinished:
break;
}
}
}
}