ToShelfPlaceJob.cs
6.9 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
using DeviceLib.Model.AGV;
namespace DeviceLib.BLL
{
public class ToShelfPlaceJob : ImpJob
{
/// <summary>
/// 运送任务
/// </summary>
public ToShelfPlaceJob(JobParam jobParam) : base(jobParam)
{
JobName = "运输任务";
}
public override Job Run(Robot robot)
{
Job job = this;
switch (JobRunStep.CurStep)
{
case RunStep.None:
ToNextStep(RunStep.DeliverShelf_01_Start, $"开始运输任务");
SetRobotState(robot, RobotState.忙碌中);
break;
case RunStep.DeliverShelf_01_Start:
ToNextStep(RunStep.DeliverShelf_02_CrossDoor, $"准备去目标车间");
GenJobCallBack(this.GetType(), RunStep.DeliverShelf_03_CrossDoorSuccess, JobParam);
job = new CrossDoorJob(JobParam);
break;
//case RunStep.DeliverShelf_02_CrossDoor:
// break;
case RunStep.DeliverShelf_03_CrossDoorSuccess:
ToNextStep(RunStep.DeliverShelf_04_ToTmpPlace, $"准备去临时点");
GenJobCallBack(this.GetType(), RunStep.DeliverShelf_05_ToTmpPlaceSuccess, JobParam);
job = new TmpPlaceJob(JobParam);
break;
//case RunStep.DeliverShelf_04_ToTmpPlace:
// break;
case RunStep.DeliverShelf_05_ToTmpPlaceSuccess:
ToNextStep(RunStep.DeliverShelf_07_ToDst, $"在临时点停留完成");
break;
case RunStep.DeliverShelf_06_ReadyToDst:
ToNextStep(RunStep.DeliverShelf_07_ToDst, $"去目标点");
MoveToNode(robot, JobParam.CurDstNode);
break;
case RunStep.DeliverShelf_07_ToDst:
ToNextStep(RunStep.DeliverShelf_08_CheckAction, $"到达目标点");
GenJobCallBack(this.GetType(), RunStep.DeliveryShelf_15_ActionSuccess, JobParam);
break;
case RunStep.DeliverShelf_08_CheckAction:
switch (JobParam.CurAction.ActionType)
{
case ActionType.PickShelf:
ToNextStep(RunStep.DeliverShelf_09_PickAction, $"执行拾取任务");
break;
case ActionType.PutShelf:
ToNextStep(RunStep.DeliverShelf_10_PutAction, $"执行放下任务");
break;
case ActionType.ManaulConfirm:
ToNextStep(RunStep.DeliverShelf_12_ManualConfirmAction, $"执行手动确认任务");
break;
case ActionType.GetShelfFromLift:
ToNextStep(RunStep.DeliverShelf_13_GetShelfFromLiftAction, $"执行从电梯取料任务");
break;
case ActionType.SendShelfToLift:
ToNextStep(RunStep.DeliverShelf_14_SendShelfToLiftAction, $"执行向电梯送料任务");
break;
case ActionType.CommonToLine:
ToNextStep(RunStep.DeliverShelf_11_CommLineAction, $"执行向线体通讯任务");
break;
}
break;
case RunStep.DeliverShelf_09_PickAction:
job = new PickShelfJob(JobParam);
break;
case RunStep.DeliverShelf_10_PutAction:
job = new PutShelfJob(JobParam);
break;
case RunStep.DeliverShelf_11_CommLineAction:
job = new CommLineJob(JobParam);
break;
case RunStep.DeliverShelf_12_ManualConfirmAction:
job = new ManualConfirmJob(JobParam);
break;
case RunStep.DeliverShelf_13_GetShelfFromLiftAction:
job = new GetShelfFromLiftJob(JobParam);
break;
case RunStep.DeliverShelf_14_SendShelfToLiftAction:
job = new SendShelfToLiftJob(JobParam);
break;
case RunStep.DeliveryShelf_15_ActionSuccess:
JobParam.SetCurNodeFinished();
if (JobParam.HasNextDst())
ToNextStep(RunStep.DeliveryShelf_16_CheckNextDst, $"有下一个目的地");
else
ToNextStep(RunStep.DeliverShelf_17_CheckNextStep, $"无下一个目的地");
break;
case RunStep.DeliveryShelf_16_CheckNextDst:
ToNextStep(RunStep.DeliverShelf_01_Start, $"去下一个目的地");
break;
case RunStep.DeliverShelf_17_CheckNextStep:
if (JobParam.JobGoal.Equals(JobGoal.Get))
{
ToNextStep(RunStep.DeliverShelf_18_SendShelf, $"取料任务完成,准备执行送料任务");
}
else if (JobParam.JobGoal.Equals(JobGoal.Send))
{
if (JobParam.ReturnDstNode != null)
{
ToNextStep(RunStep.DeliverShelf_19_ReturnShelf, $"送料任务完成,准备执行料架返回任务");
}
else
{
ToNextStep(RunStep.DeliveryShelf_20_End, $"送料任务完成");
}
}
else if (JobParam.JobGoal.Equals(JobGoal.Return))
{
ToNextStep(RunStep.DeliveryShelf_20_End, $"料架返回任务完成");
}
else
{
ToNextStep(RunStep.DeliveryShelf_20_End, $"不存在的任务类型,直接结束");
}
break;
case RunStep.DeliverShelf_18_SendShelf:
ToNextStep(RunStep.None, "执行送料任务");
SetOrderState(JobParam.OrderId, 3);
JobParam.JobGoal = JobGoal.Send;
break;
case RunStep.DeliverShelf_19_ReturnShelf:
ToNextStep(RunStep.None, "执行料架返回任务");
SetOrderState(JobParam.OrderId, 4);
JobParam.JobGoal = JobGoal.Return;
break;
case RunStep.DeliveryShelf_20_End:
SetOrderState(JobParam.OrderId, 100);
SetRobotState(robot, RobotState.空闲);
job = null;
break;
}
return job;
}
}
}