ChargeJob.cs
3.6 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
using System;
using Model;
namespace BLL
{
public class ChargeJob : IJob
{
private AgvInfo _info;
private MissionJob move;
private string mission;
private JobStep<ChargeStep> chargeStep;
private const int CHARGE_PLC = 20;
public ChargeJob()
{
IsEnd = false;
chargeStep = new JobStep<ChargeStep>(ChargeStep.None);
Common.log.Debug("加载ChargeJob");
}
public bool IsEnd { get; private set; }
public string Msg
{
get
{
return chargeStep.Msg;
}
}
public IJob Execute(AgvInfo info)
{
_info = info;
if (chargeStep.Equals(ChargeStep.None))
{
_info.Place = "去充电位";
_info.LogJson.SetMissionStart("充电任务", "充电桩");
_info.LogJson.SetMissionStep("开始执行任务", ChargeStep.None.ToString());
SendCharge();
}
else if (chargeStep.Equals(ChargeStep.MoveStation))
{
move.Execute(_info);
MoveStation();
}
else if (chargeStep.Equals(ChargeStep.Charging))
{
move.Execute(_info);
if (_info.Battery == Common.BatteryMax)
{
chargeStep.NextStep(ChargeStep.End);
chargeStep.Msg = string.Format("{0} 电量达到{1}%,充电工作结束,回待机位", _info.Name, Common.BatteryMax);
_info.LogJson.SetMissionStep("结束充电", ChargeStep.Charging.ToString());
}
else if (_info.Battery > Common.BatteryMin)
{
IJob job = ManageWork.GetJob();
if (job != null)
{
_info.Place = "";
_info.LogJson.SetMissionStep("结束充电", ChargeStep.Charging.ToString());
Common.mir.Del_Mission(_info.IP, _info.Authorization);
Common.log.Info(_info.Name + " 获取到任务,结束ChargeJob");
return job;
}
}
}
else if (chargeStep.Equals(ChargeStep.End))
{
IsEnd = true;
_info.Place = "";
Common.mir.Del_Mission(_info.IP, _info.Authorization);
return new StandbyJob();
}
return this;
}
private void SendCharge()
{
mission = Common.MISSION_CHARGE;
_info.ExistShelf = -1;
move = new MissionJob(mission);
move.Execute(_info);
chargeStep.NextStep(ChargeStep.MoveStation);
chargeStep.Msg = string.Format("{0} 去充电位,[{1}]", _info.Name, mission);
}
private void MoveStation()
{
bool rtn = Common.mir.Get_Register(_info.IP, _info.Authorization, CHARGE_PLC, out int value);
if (rtn)
{
if (value == 1)
{
_info.Place = "充电中";
chargeStep.NextStep(ChargeStep.Charging);
chargeStep.Msg = _info.Name + " 到达充电位,准备充电";
_info.LogJson.SetMissionStep("到达充电位", ChargeStep.MoveStation.ToString());
}
}
}
private enum ChargeStep
{
None,
End,
MoveStation,
Charging
}
}
}