StorageJob.cs
4.2 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
using System;
using Model;
namespace BLL
{
public class StorageJob : IJob
{
private int delayGetSignal; //延迟获取信号
private int dockTime; //停靠次数
private AgvInfo _info;
private MoveJob move;
private string mission;
//private DateTime _getTime;
private JobStep<StorageStep> storageStep;
public StorageJob()
{
storageStep = new JobStep<StorageStep>(StorageStep.None);
Common.log.Debug("加载StorageStep");
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (storageStep.Equals(StorageStep.None))
{
if (_info.Is4DWorkshop())
MoveStorage();
else
PassDoor();
}
else if (storageStep.Equals(StorageStep.PassDoor))
{
move.Execute(_info);
if (move.IsEnd)
MoveStorage();
}
else if (storageStep.Equals(StorageStep.MoveStorage))
{
move.Execute(_info);
if (move.IsEnd)
{
storageStep.NextStep(StorageStep.GetSingle);
storageStep.Msg = info.Name + "已到位,等待离开信号";
delayGetSignal = 0;
dockTime = 0;
}
}
else if (storageStep.Equals(StorageStep.GetSingle))
{
if (Common.StorageDockFinish)
{
SteelManage.StorageWorkDel(info.Place);
storageStep.Msg = info.Name + "已到位,等待离开信号";
storageStep.NextStep(StorageStep.WaitStorageLeave);
}
else
{
if (delayGetSignal >= 3)
{
if (dockTime >= 3)
{
storageStep.Msg = info.Name + "对接仓库连续3次信号没有到位";
storageStep.NextStep(StorageStep.Error);
dockTime = 0;
//小车报警任务
}
else
{
dockTime++;
MoveStorage();
}
}
delayGetSignal++;
}
}
else if (storageStep.Equals(StorageStep.WaitStorageLeave))
{
if (SteelManage.FindStorageWorkLeave())
{
SteelManage.StorageWorkDelLeave();
storageStep.Msg = info.Name + "收到离开信号";
return new StandbyJob();
}
else if (SteelManage.FindNewSteelWork(info))
{
return new SendNewJob();
}
}
else if (storageStep.Equals(StorageStep.Error))
{
}
else if (storageStep.Equals(StorageStep.End))
{
}
return this;
}
private void MoveStorage()
{
mission = Common.MISSION_MOVE_STORAGE;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
storageStep.NextStep(StorageStep.MoveStorage);
storageStep.Msg = _info.Name + "发送任务" + mission;
}
private void PassDoor()
{
mission = Common.MISSION_PASS_DOOR_INTO + _info.Workshop;
_info.Place = mission;
move = new MoveJob(mission);
move.Execute(_info);
storageStep.NextStep(StorageStep.PassDoor);
storageStep.Msg = _info.Name + "发送任务" + mission;
}
private enum StorageStep
{
None,
End,
PassDoor,
MoveStorage,
WaitStorage,
GetSingle,
WaitStorageLeave,
Error
}
}
}