Job.cs
3.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
using Common;
using System;
namespace DeviceLibrary
{
public abstract class Job
{
/// <summary>
/// 是否任务正在执行,防止任务执行时间过长产生多线程问题
/// </summary>
public bool IsProcess { get; set; }
/// <summary>
/// 运行信息
/// </summary>
public abstract string RunInfo { get; }
public string runInfo = "";
/// <summary>
/// 根据任务状态继续执行任务
/// </summary>
public abstract Job Execute(Agv_Info agv);
public long CurTaskID { get; set; } = -1;
/// <summary>
/// 当前的任务目的地(与任务GUID对应)
/// </summary>
public string CurTarName { get; set; } = "";
/// <summary>
/// 当前任务的执行状态
/// </summary>
public string CurTaskState { get; set; } = "Wait";
/// <summary>
/// Job开始时间
/// </summary>
public DateTime StartJobTime { get; set; } = DateTime.Now;
/// <summary>
/// Job名称
/// </summary>
public string JobName { get; set; } = "";
protected void RecordRunLog(Agv_Info agv, string JobStep, string runInfo, string targetPlace)
{
AGVManager.RunLogInfo(new RunInfo(agv.Name.PadLeft(4, '0'), JobName, targetPlace, JobStep, runInfo, StartJobTime));
}
/// <summary>
/// 更新任务信息
/// </summary>
/// <param name="curTaskName"></param>
/// <param name="curTaskId"></param>
protected void UpdateJobTaskInfo(Agv_Info agv)
{
CurTaskID = agv.CurTaskID;
CurTarName = agv.CurTarName;
CurTaskState = MissionSys.GetTakJobState(agv);
}
/// <summary>
/// 任务重发
/// </summary>
/// <returns></returns>
public bool ResendTask(Agv_Info agv)
{
bool rtn = false;
if (!CurTaskID.Equals(-1) && MiR_API.Get_Task_State(agv, out string stateStr))
{
if (stateStr.Equals(SettingString.Aborted) || stateStr.Equals(SettingString.Invalid))
{
rtn = MissionSys.AssignMission(agv, CurTarName);
if (rtn)
{
UpdateJobTaskInfo(agv);
return true;
}
}
}
else if (!CurTarName.Equals("") && !MissionSys.GetMissionGuidByTaskName(CurTarName).Equals(agv.CurTaskGUID))//Job的当前任务与agv最新任务不一致
{
rtn = MissionSys.AssignMission(agv, CurTarName);
if (rtn)
{
UpdateJobTaskInfo(agv);
return true;
}
}
else if (CurTaskID.Equals(-1))//任务发送失败,重新发送
{
rtn = MissionSys.AssignMission(agv, CurTarName);
if (rtn)
{
UpdateJobTaskInfo(agv);
return true;
}
}
return false;
}
}
}