ToStoreJob.cs
6.0 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
using Common;
using DeviceLib.Model.AGV;
namespace DeviceLib.BLL
{
public class ToStoreJob : ImpJob
{
/// <summary>
/// 运送任务
/// </summary>
public ToStoreJob(JobParam jobParam) : base(jobParam)
{
JobName = "去料仓取箱任务";
}
public override Job Run(Robot robot)
{
Job job = this;
switch (JobRunStep.CurStep)
{
case RunStep.None:
ToNextStep(RunStep.ToStore_01_ToStore, $"开始运输任务,AGV无料箱面对接出料口");
SetRobotState(robot, RobotState.忙碌中);
MoveToStore(robot, JobParam.CurDstNode, GetNoneSide(robot));
SetOrderState(JobParam.OrderId, 1);
break;
case RunStep.ToStore_01_ToStore:
if (MissionIsOk())
{
ToNextStep(RunStep.ToStore_02_RequestLeave, $"到达{JobParam.CurDstNode.Name},与出料口通讯");
GenJobCallBack(this.GetType(), RunStep.ToStore_03_EnterAGVOK, JobParam);
job = new CommLineJob(JobParam);
}
break;
case RunStep.ToStore_02_RequestLeave:
break;
case RunStep.ToStore_03_EnterAGVOK:
SetOrderState(JobParam.OrderId, 2);
ToNextStep(RunStep.ToStore_04_ReToStore, $"AGV空料箱面对接出料口");
MoveToStore(robot, JobParam.CurDstNode, GetEmptySide(robot));
JobParam.JobGoal = JobGoal.Send;
SetOrderState(JobParam.OrderId, 3);
break;
case RunStep.ToStore_04_ReToStore:
if (MissionIsOk())
{
ToNextStep(RunStep.ToStore_05_RequestEnter, $"到达{JobParam.CurDstNode.Name},与出料口通讯");
GenJobCallBack(this.GetType(), RunStep.ToStore_06_LeaveAGVOK, JobParam);
job = new CommLineJob(JobParam);
}
break;
case RunStep.ToStore_05_RequestEnter:
break;
case RunStep.ToStore_06_LeaveAGVOK:
ToNextStep(RunStep.ToStore_07_CheckIsNeedToShelfPlace, $"检查是否需要去料架处");
SetOrderState(JobParam.OrderId, 4);
break;
case RunStep.ToStore_07_CheckIsNeedToShelfPlace:
if (NeedToShelfPlace(robot,JobParam.FullBoxId, out string targetLines))
{
JobParam.LineNode = NodeManager.GetLineNodeByName(targetLines);
if (JobParam.LineNode != null)
{
ToNextStep(RunStep.ToStore_08_ToShelfPlace, $"有料架任务,去料架处。目的产线:{targetLines}");
JobParam.JobGoal = JobGoal.Send;
JobParam.TargetNodes.Clear();
JobParam.TargetNodes.AddRange(NodeManager.GetNodesState(AppConfigSetting.GetStrVal(Setting_Str.ShelfPlace, "B-1-1")));
JobParam.TargetNodes.AddRange(NodeManager.GetLineNodesState(targetLines));
}
else
{
ToNextStep(RunStep.ToStore_10_End, $"获取不到目标点位数据,结束任务:{targetLines}");
OrderManager.DeleteOrderById(JobParam.OrderId, out string res, true);
}
}
else
{
if (string.IsNullOrEmpty(targetLines))
{
ToNextStep(RunStep.ToStore_10_End, $"目的产线为空,结束任务:{targetLines}");
OrderManager.DeleteOrderById(JobParam.OrderId, out string res, true);
}
else
{
JobParam.LineNode = NodeManager.GetLineNodeByName(targetLines);
if (JobParam.LineNode != null)
{
ToNextStep(RunStep.ToStore_09_ToLine, $"无料架任务,直接去产线。目标产线:{targetLines}");
JobParam.JobGoal = JobGoal.Send;
JobParam.TargetNodes.Clear();
JobParam.TargetNodes.AddRange(NodeManager.GetLineNodesState(targetLines));
}
else
{
ToNextStep(RunStep.ToStore_10_End, $"获取不到目标点位数据,结束任务:{targetLines}");
OrderManager.DeleteOrderById(JobParam.OrderId, out string res, true);
}
}
}
break;
case RunStep.ToStore_08_ToShelfPlace:
Context.SetNodeOccupied(robot.id, "");
RobotManager.SetLoadInfo(robot.id, GetFullSide(robot, out string shelfId), ShelfType.Empty, shelfId);
job = new ToLinesJob(JobParam);
break;
case RunStep.ToStore_09_ToLine:
Context.SetNodeOccupied(robot.id, "");
RobotManager.SetLoadInfo(robot.id, GetFullSide(robot, out shelfId), ShelfType.Empty, shelfId);
job = new ToLinesJob(JobParam);
break;
case RunStep.ToStore_10_End:
Context.SetNodeOccupied(robot.id, "");
RobotManager.SetLoadInfo(robot.id, GetFullSide(robot, out shelfId), ShelfType.Empty, shelfId);
job = null;
break;
}
return job;
}
}
}