LiftToLinesJobType.cs
5.1 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
using Common;
using System.Collections.Generic;
using System.Linq;
using DeviceLibrary.manager;
using DeviceLibrary.bean;
using DeviceLibrary.bean.job;
using System;
using DeviceLibrary.lift;
namespace DeviceLibrary
{
/// <summary>
/// 从电梯送到多条线体任务
/// </summary>
public class LiftToLinesJobType : JobType
{
/// <summary>
/// 将料从电梯送到线上任务
/// </summary>
/// <param name="currentAgv"></param>
/// <returns></returns>
public override Job GetNewJob(AgvInfo agv)
{
if (!agv.IsIdle())
return null;
else if (CheckHasSameJob(agv))
return null;
else if (CheckHasSendJob(agv))
return null;
else
{
if (agv.HasEmptyShelfInLift(out string liftname, out lift.LiftStatus lift))//!agv.Scope.Floor.Equals(1) &&
{
service.model.MissionInfo missionInfo = manager.MissionManager.GetReceiveMission(agv);
//检查是否是空台车领用 3D->4C
if (missionInfo == null && agv.Scope.Workshop.Equals(SettingString._4D))
{
missionInfo = MissionManager.Get3DTo4CReceiveMission(agv);
}
if (missionInfo != null)
{
if (!liftname.Equals(missionInfo?.liftName))
return null;
if (AgvAtPlace(agv, liftname))
return null;
if (service.model.MissionInfo.IsFinishedProdcut(missionInfo))
return null;
Node src = manager.NodeManager.GetNode(liftname, NodeType.Lift);
string[] destTmp = lift.destinationPoint.Split(',');
string[] dests = destTmp.Distinct().ToArray();
Node dest = manager.NodeManager.GetNode(dests.Length > 1 ? dests[0] : missionInfo.destinationPoint, NodeType.Node);
JobParam jobParam = new JobParam(src, dest, null, missionInfo);
if (dests.Length > 1)
{
for (int i = 1; i < dests.Length; i++)
{
Node node = manager.NodeManager.GetNode(dests[i], NodeType.Node);
if (node != null)
jobParam.TargetNodes.Add(node);
else
{
LogUtil.error($"无法生成任务,因不存在的节点:{dests[i]}");
return null;
}
}
}
LiftContext.SetLiftNodeOccupied(agv, liftname);
MissionManager.SetMissionOccupied(missionInfo, agv);
MissionManager.Log.Info($"执行任务[{agv.Name}][目的地] {JsonHelper.SerializeObject(missionInfo)}");
return new LiftToLinesJob(jobParam);
}
}
}
return null;
}
bool CheckHasSameJob(AgvInfo agv)
{
return false;
try
{
if (agv.Scope.Workshop.Equals("1F"))
{
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && !s.IP.Equals(agv.IP) && s.Scope.Workshop.Equals(agv.Scope.Workshop)
&& s.CurJob != null && (s.CurJob is LiftToLinesJob));
if (agvInfo != null)
return true;
}
else
{
return false;
}
}
catch
{
return false;
}
return false;
}
bool CheckHasSendJob(AgvInfo agv)
{
return false;
try
{
if (agv.Scope.Workshop.Equals("1F"))
{
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && !s.IP.Equals(agv.IP) && s.Scope.Workshop.Equals(agv.Scope.Workshop)
&& s.CurJob != null && s.Scope.Workshop.Equals("1F") && (s.CurJob is LineToLiftJob || s.CurJob is F1LiftC1ToLiftD2Job
|| s.CurJob is F1LiftD2ToLiftC1Job));
if (agvInfo != null)
return true;
}
else
{
AgvInfo agvInfo = AGVManager.agvInfo.Find(s => s.Auto && !s.IP.Equals(agv.IP) && s.Scope.Workshop.Equals(agv.Scope.Workshop)
&& s.CurJob != null && (s.CurJob is LineToLiftJob));
if (agvInfo != null)
return true;
}
}
catch
{
return false;
}
return false;
}
}
}