TaskRunState.cs
3.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
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Common;
namespace DeviceLibrary
{
/// <summary>
/// AGV任务运行信息
/// </summary>
public class TaskRunState
{
/// <summary>
/// AGV任务ID
/// </summary>
public long TaskID { get; set; } = -1;
/// <summary>
/// 任务开始时间戳
/// </summary>
public string TaskTimeStamp { get; set; }
/// <summary>
/// 正在分配任务
/// </summary>
public bool IsAllocatingTask = false;
/// <summary>
/// AGV任务
/// </summary>
public AgvTask Task { get; set; } = new AgvTask();
/// <summary>
/// 等待任务执行队列
/// </summary>
public ConcurrentQueue<AgvTask> WaitExecuteTask = new ConcurrentQueue<AgvTask>();
/// <summary>
/// 任务状态
/// </summary>
public string TaskState { get; set; } = SettingString.Wait;
/// <summary>
/// 重置
/// </summary>
public void ResetInfo()
{
TaskID = -1;
ResetState();
}
/// <summary>
/// 重置状态
/// </summary>
public void ResetState()
{
TaskState = SettingString.Wait;
}
/// <summary>
/// 检查任务是否分配成功,分配成功时任务id!=-1且能获取到任务状态
/// </summary>
/// <returns></returns>
public bool CheckAllocateOk()
{
return !TaskID.Equals(-1) && !TaskState.Equals(SettingString.Wait);
}
public bool CheckTaskFinished(string name = "")
{
LogUtil.debug(name + " 检查任务是否结束: " + ToTaskState());
return TaskState.Equals(SettingString.Done);
}
public void EnWaitTaskQueue(AgvTask task)
{
if (string.IsNullOrEmpty(task.Name) || task.Type.Equals(TaskType.InOut))
return;
WaitExecuteTask.Enqueue(task);
}
public bool DeWaitTaskQueue(out AgvTask task)
{
task = null;
if (WaitExecuteTask.Count > 0)
{
if (WaitExecuteTask.TryDequeue(out task))
{
return true;
}
}
return false;
}
public void ClearWaitTaskQueue()
{
System.Threading.Tasks.Task.Factory.StartNew(new Action(() =>
{
while (WaitExecuteTask.Count > 0)
{
WaitExecuteTask.TryDequeue(out AgvTask task);
}
}));
}
public string ToTaskInfo()
{
return $" [{Task.AliceName}] [{TaskID}] ";
}
public string ToTaskShowInfo()
{
return $" [{Task.AliceName}]\r\n[{TaskID}] ";
}
public string ToTaskState()
{
return $"[{Task.AliceName}] [{TaskID}] [{TaskState}]";
}
}
}