JobType.cs
5.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
135
136
137
138
139
140
141
using Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DeviceLibrary
{
public class JobType
{
public JobType()
{
}
public virtual Job GetNewJob(Agv_Info agv)
{
return null;
}
/// <summary>
/// 需要离开料架
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeName"></param>
/// <param name="rfid"></param>
/// <param name="empty">料架类型</param>
/// <returns></returns>
public static bool FindNeedLeave(Agv_Info agv, string nodeName, out string rfid, bool empty)
{
rfid = "";
int nodeIdx = Context.FindNode(nodeName);
if (nodeIdx > -1)
{
if (!empty)
nodeIdx = Context.nodeInfo.FindIndex(s => s.Name.Equals(nodeName) && s.Action.Equals(Agv.ClientAction.NeedLeave) && s.Shelf.Equals(Agv.ClientShelf.Full));
else
nodeIdx = Context.nodeInfo.FindIndex(s => s.Name.Equals(nodeName) && s.Action.Equals(Agv.ClientAction.NeedLeave));
if (nodeIdx > -1)
{
if (Context.nodeInfo[nodeIdx].RFID.StartsWith(SettingString.ReelString_RFID_Prefix))
{
rfid = Context.nodeInfo[nodeIdx].RFID;
return true;
}
else
{
agv.AddDisplayBoard(nodeName, "Using." + nodeName, "出口为出料任务,但是RFID状态异常:rfid="+ Context.nodeInfo[nodeIdx].RFID);
}
}
}
else
{
agv.AddDisplayBoard(nodeName, "Using." + nodeName, "调用关闭");
}
return false;
}
/// <summary>
/// 需要进入料架
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeName"></param>
/// <param name="empty">料架类型</param>
/// <returns></returns>
static bool FindNeedEnter(Agv_Info agv, string nodeName, bool empty)
{
int nodeIdx = Context.FindNode(nodeName);
if (nodeIdx > -1)
{
if (empty)
nodeIdx = Context.nodeInfo.FindIndex(s => s.Name.Equals(nodeName) && s.Action.Equals(Agv.ClientAction.NeedEnter) &&
(s.Shelf.Equals(Agv.ClientShelf.Empty) || s.Shelf.Equals(Agv.ClientShelf.None)));
else
nodeIdx = Context.nodeInfo.FindIndex(s => s.Name.Equals(nodeName) && s.Action.Equals(Agv.ClientAction.NeedEnter) &&
s.Shelf.Equals(Agv.ClientShelf.Full));
if (nodeIdx > -1)
return true;
}
else
{
agv.AddDisplayBoard(nodeName, "Using." + nodeName, "调用关闭");
}
return false;
}
/// <summary>
/// 寻找需要进料架[满/空]的节点
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeName"></param>
/// <param name="empty">需要的料架类型,默认是空料架</param>
/// <returns></returns>
public static bool FindNeedEnterMission(Agv_Info agv, string nodeName, bool empty)
{
if (FindNeedEnter(agv, nodeName, empty))
{
int idx = Context.agvInfo.FindIndex(s => !s.IP.Equals(agv.IP) && s.CurJob != null &&
(
s.CurJob is SendShelfJob && (((SendShelfJob)s.CurJob).TargetPlace.Equals(nodeName)) ||
s.CurJob is RecycleEmptyShelf && (((RecycleEmptyShelf)s.CurJob).TargetPlace.Equals(nodeName))
));
if (idx == -1)
{
LogUtil.debug(string.Format("{0} FindNeedEnterMission ", agv.Name));
return true;
}
}
return false;
}
/// <summary>
/// 查询节点出料架[满/空]任务
/// </summary>
/// <param name="agv"></param>
/// <param name="nodeName"></param>
/// <param name="RFID"></param>
/// <param name="empty">料架类型</param>
/// <returns></returns>
public static bool FindNeedLeaveMission(Agv_Info agv, string nodeName, out string RFID,bool empty)
{
RFID = "";
if (FindNeedLeave(agv, nodeName, out string rfid,empty))
{
int idx = Context.agvInfo.FindIndex(s => !s.IP.Equals(agv.IP) && s.CurJob != null &&
(
(s.CurJob is GetShelfJob && (((GetShelfJob)s.CurJob).TargetPlace.Equals(nodeName)))||
(s.CurJob is GetFullShelfJob && (((GetFullShelfJob)s.CurJob).TargetPlace.Equals(nodeName)))
)
);
if (idx == -1)
{
RFID = rfid;
LogUtil.debug(string.Format("{0} FindNeedLeaveMission", agv.Name));
return true;
}
}
return false;
}
}
}