ToLinesJob.cs
3.4 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
using DeviceLib.Model.AGV;
namespace DeviceLib.BLL
{
public class ToLinesJob : ImpJob
{
/// <summary>
/// 运送任务
/// </summary>
public ToLinesJob(JobParam jobParam) : base(jobParam)
{
JobName = "运输料箱任务";
}
public override Job Run(Robot robot)
{
Job job = this;
switch (JobRunStep.CurStep)
{
case RunStep.None:
if(NodeManager.CheckNodeIsOccupied(JobParam.LineNode))
{
ToNextStep(RunStep.ToLine_05_ToTmpPlace, $"{JobParam.LineNode.name}有小车,去临时点");
GenJobCallBack(this.GetType(), RunStep.ToLine_01_CheckTarget, JobParam);
job = new TmpPlaceJob(JobParam);
}
else
{
ToNextStep(RunStep.ToLine_01_CheckTarget, $"{JobParam.LineNode.name}无小车");
}
break;
case RunStep.ToLine_01_CheckTarget:
ToNextStep(RunStep.ToLine_01_ToPlace, $"开始运输任务,去目标点");
SetRobotState(robot, RobotState.忙碌中);
SetOrderState(JobParam.OrderId, 5);
Context.SetNodeOccupied(robot.id, JobParam?.LineNode?.name ?? "");
MoveToNode(robot, JobParam.CurDstNode);
break;
case RunStep.ToLine_01_ToPlace:
if (MissionIsOk())
{
ToNextStep(RunStep.ToLine_02_ConfirmProcess, $"到达目标点");
GenJobCallBack(this.GetType(), RunStep.ToLine_02_ConfirmProcess, JobParam);
job = new ManualConfirmJob(JobParam);
}
break;
case RunStep.ToLine_02_ConfirmProcess:
JobParam.SetCurNodeFinished();
if (JobParam.HasNextDst())
ToNextStep(RunStep.ToLine_03_CheckNextLine, $"有下一个目的地");
else
{
ToNextStep(RunStep.ToLine_04_LeaveLine, $"无下一个目的地,离开线体");
MoveToNode(robot, Common.Setting_Str.outplace);
//if (JobParam.OrderId.StartsWith("A"))
// RobotManager.SetLoadInfo(robot.id, GetFullSide(robot, out string shelfId), ShelfType.Empty, shelfId);
}
break;
case RunStep.ToLine_03_CheckNextLine:
ToNextStep(RunStep.ToLine_01_ToPlace, $"去下一任务点");
MoveToNode(robot, JobParam.CurDstNode);
break;
case RunStep.ToLine_04_LeaveLine:
if(MissionIsOk())
{
ToNextStep(RunStep.ToLine_04_Finish, $"任务结束");
Context.SetNodeOccupied(robot.id,"");
}
break;
case RunStep.ToLine_04_Finish:
SetOrderState(JobParam.OrderId, 100);
SetRobotState(robot, RobotState.空闲);
job = null;
break;
}
return job;
}
}
}