Job.cs
3.7 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
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>
/// 任务重发
/// </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;
}
}
}