FrmAutoRunLocations.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
using CtuDeviceLib;
using DeviceLibrary.CtuService;
using Mushiny;
using OnlineStore.Common;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
namespace TheMachine
{
public partial class FrmAutoRunLocations : Form
{
List<uint> StartPointCodes = new List<uint>();
List<uint> EndPointCodes = new List<uint>();
List<CTU> allCtus { get { return CTUManager.GetCTUs(); } }
CTU curCtu = null;
AutoInOutTestTask InOutTestTask = null;
public FrmAutoRunLocations()
{
InitializeComponent();
allCtus.ForEach(s => AGVList.Items.Add(s.Name));
var pcs = LandMarks.GetPointCodes()?.Where(a => a.Type == LandmarkType.Shelves).Select(a => a.Id).ToList();
StartPointCodes = pcs;
EndPointCodes = pcs;
StartPointCodes?.ForEach(s => StartLandCode.Items.Add(s));
EndPointCodes?.ForEach(s => EndLandCode.Items.Add(s));
}
PosInfo curShelf = null;
List<PathPoint> curPathPoint;
DateTime lastSendTime = DateTime.MaxValue;
/// <summary>
/// 开始运行
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StartRun_Click(object sender, EventArgs e)
{
if (isRun)
{
MessageBox.Show($"{curCtu.Name}已在跑库位,请先停止!");
return;
}
curCtu = allCtus.Find(s => s.Name.Equals(AGVList.SelectedItem.ToString()));
if (curCtu.Enabled)
{
MessageBox.Show($"{curCtu.Name}已启用,请先停用后再开始运行!");
return;
}
if (curCtu.RunState != RunState.Executing)
{
MessageBox.Show($"{curCtu.Name}未回原,请先回原后再开始运行!");
return;
}
InOutTestTask = new AutoInOutTestTask(curCtu);
isRun = true;
uint startcode = uint.Parse(StartLandCode.SelectedItem.ToString());
uint endcode = uint.Parse(EndLandCode.SelectedItem.ToString());
InOutTestTask.shelfCodes = GetShelvesList(startcode, endcode);
editControl(false);
}
void editControl(bool edit)
{
AGVList.Enabled = edit;
StartLandCode.Enabled = edit;
EndLandCode.Enabled = edit;
}
private void EndTask_Click(object sender, EventArgs e)
{
isRun = false;
logInfo("点击结束运行");
}
/// <summary>
/// 获取货架信息
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public List<string> GetShelvesList(uint start, uint end)
{
List<string> landcodelist = new List<string>();
var pos = PosInfos.GetAllPosInfos();
bool left = rdbLeft.Checked;
bool right = rbdRight.Checked;
bool leftRight = rdbLeftRight.Checked;
while (start <= end)
{
List<string> poslist = new List<string>();
if (leftRight)
poslist = pos.Where(a => a.PointCode == start).OrderBy(s => s.Row).Select(a => a.Name).ToList();
else if (left)
{
poslist = pos.Where(a => a.PointCode == start && a.Dir == 1).OrderBy(s => s.Row).Select(a => a.Name).ToList();
}
else if (right)
{
poslist = pos.Where(a => a.PointCode == start && a.Dir == 2).OrderBy(s => s.Row).Select(a => a.Name).ToList();
}
landcodelist.AddRange(poslist);
start++;
}
logInfo($"本次共计算{landcodelist.Count}个出入库任务:");
landcodelist.ForEach(s => logInfo(s));
return landcodelist;
}
void logInfo(string msg)
{
LogUtil.info($"【{curCtu?.Name}】跑库位【{curShelf?.PointCode}】【{curShelf?.ShelveCode}】:{msg}");
}
bool isRun = false;
CTU ctu;
DateTime dateTime;
private void FrmAutoRunLocations_FormClosed(object sender, FormClosedEventArgs e)
{
isRun = false;
}
private void button1_Click(object sender, EventArgs e)
{
curCtu?.CtuTask?.ReSendCurPathPoint();
logInfo("重发当前动作");
}
}
}