Job.cs
4.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
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
142
143
144
145
146
147
148
149
150
151
152
using Common;
using DeviceLibrary.bean;
using DeviceLibrary.manager;
using System;
namespace DeviceLibrary
{
public abstract class Job
{
public Job(JobParam jobParam) {
JobParam = jobParam;
WarehouseSigManager.Reset();
}
public JobParam JobParam { get; private set; }
public JobStep<RunStep> JobRunStep = new JobStep<RunStep>(RunStep.NONE);
/// <summary>
/// Job里的agv任务信息
/// </summary>
public AgvTask Task { get; set; }
/// <summary>
/// 运行信息
/// </summary>
public string RunInfo { get { return $"{JobName}{TaskStateInfo}{FixInfo}:{runInfo}"; } }
/// <summary>
/// agv任务状态信息
/// </summary>
public string TaskStateInfo = "";
public string FixInfo = "";
public string runInfo = "";
/// <summary>
/// 根据任务状态继续执行任务
/// </summary>
public Job Execute(Agv_Info agv)
{
SetRunInfo(agv);
return Run(agv);
}
public abstract Job Run(Agv_Info agv);
/// <summary>
/// 设置相关运行信息
/// </summary>
/// <param name="agv"></param>
public void SetRunInfo(Agv_Info agv)
{
JobRunStep.StepRunInfo.SetInfo(agv.Name.PadLeft(4, '0'), JobName, agv.Place.AliceName, JobRunStep.CurStep(), runInfo, StartJobTime, DateTime.Now);
TaskStateInfo = agv.TaskRunState.ToTaskInfo();
FixInfo = JobParam.FixMissionInfo != null ? JobParam.FixMissionInfo.ToTxt():"";
StartJobTime = JobRunStep.startTime;
}
/// <summary>
/// Job开始时间
/// </summary>
public DateTime StartJobTime { get; set; } = DateTime.Now;
/// <summary>
/// Job名称
/// </summary>
public string JobName { get; set; } = "";
protected void AllocateTask(Agv_Info agv, string taskName)
{
Task = AgvTaskManager.GetTaskByName(taskName);
AgvTaskManager.AssignMission(agv, taskName);
}
protected void AdjustWidth(Agv_Info agv,manager.FixType fixType)
{
int val = (int)fixType;
int times = 0;
while(!MiR_API.Set_Register(agv, 50, val))
{
if (times > 5)
break;
}
AllocateTask(agv, SettingString.Adjust);
}
/// <summary>
/// 设置PLC值
/// </summary>
/// <param name="agv"></param>
/// <param name="port"></param>
/// <param name="val"></param>
protected void SetPlc(Agv_Info agv,int port,int val)
{
int times = 0;
while (!MiR_API.Set_Register(agv, port, val))
{
if (times > 5)
break;
}
}
/// <summary>
/// 入库类型-1
/// </summary>
/// <param name="agv"></param>
protected void SetPlcWithToInstore(Agv_Info agv)
{
SetPlc(agv, 51, 1);
}
/// <summary>
/// 出库类型-2
/// </summary>
/// <param name="agv"></param>
protected void SetPlcWithToOutstore(Agv_Info agv)
{
SetPlc(agv, 51, 2);
}
protected void CloseSound(Agv_Info agv)
{
SetPlc(agv, 51, 0);
}
/// <summary>
/// 任务重发
/// </summary>
/// <returns></returns>
public bool ResendTask(Agv_Info agv)
{
bool rtn = false;
if (!agv.TaskRunState.Task.Equals(Task))//agv运行的任务与Job任务不同
{
rtn = AgvTaskManager.AssignMission(agv, Task.Name);
if (rtn)
{
return true;
}
}
else if (!agv.TaskRunState.TaskID.Equals(-1))
{
if (agv.TaskRunState.TaskState.Equals(SettingString.Aborted) || agv.TaskRunState.TaskState.Equals(SettingString.Invalid))
{
rtn = AgvTaskManager.AssignMission(agv, Task.Name);
if (rtn)
{
return true;
}
}
}
else if (agv.TaskRunState.TaskID.Equals(-1))//任务发送失败,重新发送
{
rtn = AgvTaskManager.AssignMission(agv, Task.Name);
if (rtn)
{
return true;
}
}
return false;
}
}
}