ChargeJob.cs
3.7 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
using DeviceLib.Model.AGV;
namespace DeviceLib.BLL
{
public class ChargeJob : ImpJob
{
public ChargeJob(JobParam jobParam) : base(jobParam)
{
JobName = "充电任务";
}
public override Job Run(Robot robot)
{
Job job = this;
switch (JobRunStep.CurStep)
{
case RunStep.None:
ToNextStep(RunStep.Charge_01_Start, $"开始充电任务");
break;
case RunStep.Charge_01_Start:
// ToNextStep(RunStep.DeliverShelf_02_CrossDoor, $"准备去目标车间");
// GenJobCallBack(this.GetType(), RunStep.Charge_03_CrossDoorSuccess, JobParam);
// job = new CrossDoorJob(JobParam);
// break;
////case RunStep.Charge_02_CrossDoor:
//// break;
//case RunStep.Charge_03_CrossDoorSuccess:
ToNextStep(RunStep.Charge_04_ToDst, $"准备去充电桩");
MoveToNode(robot, JobParam.CurDstNode);
break;
case RunStep.Charge_04_ToDst:
ToNextStep(RunStep.Charge_05_Charging, $"到达充电桩");
StartCharge(robot);
break;
case RunStep.Charge_05_Charging:
if (ChargeOk(robot))
{
ToNextStep(RunStep.Charge_07_ChargingSuccess, $"充电中...");
SetRobotState(robot, RobotState.充电中);
}
else if (JobRunStep.IsTimeOut(60))
{
ToNextStep(RunStep.Charge_06_ChargingError, $"充电失败");
}
break;
case RunStep.Charge_06_ChargingError:
ToNextStep(RunStep.Charge_05_Charging, $"重新尝试充电");
StartCharge(robot);
break;
case RunStep.Charge_07_ChargingSuccess:
//该机器人已经开始充电,找到其他电量低于当前车电量的小车
if (ChargeStandJobType.FindOtherLowerRobor(robot))
{
ToNextStep(RunStep.Charge_08_LeaveCharge, $"发现其他低电量的机器人");
MoveToNode(robot, Common.Setting_Str.standby);
}
else if (ChargeStandJobType.CanSearchJob(robot))//电量大于最低电量,搜索运输任务
{
bool newJob = JobManager.CheckNewJob(robot);
if (newJob)
{
ToNextStep(RunStep.Charge_08_LeaveCharge, $"检测到运输任务");
MoveToNode(robot, Common.Setting_Str.standby);
}
}
else if (ChargeStandJobType.CanCancelCharge(robot))//充电完成
{
ToNextStep(RunStep.Charge_08_LeaveCharge, $"电量充足");
MoveToNode(robot, Common.Setting_Str.standby);
}
break;
case RunStep.Charge_08_LeaveCharge:
if (MissionIsOk())
ToNextStep(RunStep.Charge_09_End, $"充电结束,小车离开充电桩");
break;
case RunStep.Charge_09_End:
SetRobotState(robot, RobotState.空闲);
job = null;
break;
}
return job;
}
}
}