ShelfMoveBean.cs
4.8 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
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
{
public class ShelfMoveBean
{
public bool IsRun = false;
private int ShelfType = 1;
internal DateTime LastEndTime = DateTime.Now;
public ShelfMoveBean(int shelfType = 1)
{
this.ShelfType = shelfType;
}
public void Stop()
{
if (IsRun)
{
IsRun = false;
}
}
private bool Start(string moveDO, string closeDO, string checkDI, int timeOutMS = 30000)
{
if (IsRun)
{
LogUtil.error("启动[" + moveDO + "][" + closeDO + "] [" + checkDI + "] 失败");
return false;
}
IsRun = true;
Task.Factory.StartNew(delegate
{
WriteAndWait(moveDO, closeDO, checkDI, timeOutMS);
});
return true;
}
private string WriteAndWait(string moveDO, string closeDO, string checkDI, int timeOutMS = 30000)
{
//LastMoveDO = moveDO;
//LastCheckDI = checkDI;
LogUtil.debug("写入:" + moveDO + ",关闭:" + closeDO + ",等待信号:" + checkDI + "");
IOManager.IOMove(closeDO, IO_VALUE.LOW);
IOManager.IOMove(moveDO, IO_VALUE.HIGH);
Thread.Sleep(50);
IsRun = true;
DateTime startTime = DateTime.Now;
string result = "";
bool isStop = false;
while (true)
{
Thread.Sleep(50);
TimeSpan span = DateTime.Now - startTime;
if (!IsRun)
{
isStop = true;
result = "手动停止";
}
else if (span.TotalMilliseconds > timeOutMS)
{
isStop = true;
result = "转动超时";
}
//判断Buzy及位置是否结束
else if (IOManager.IOValue(checkDI).Equals(IO_VALUE.HIGH))
{
isStop = true;
}
if (isStop)
{
if (result.Equals(""))
{
LogUtil.info("停止运动:" + result + " [" + moveDO + "] [" + checkDI + "] ");
}
else
{
LogUtil.info("[" + moveDO + "] [" + checkDI + "] 停止运动:" + result + " " + moveDO);
}
LastEndTime = DateTime.Now;
IOManager.IOMove(moveDO, IO_VALUE.LOW);
IsRun = false;
return result;
}
}
}
public bool StartForward(StoreMoveInfo moveInfo)
{
//string forwardIO = IO_Type.LeftShelf_Forward;
//string backIO = IO_Type.LeftShelf_Back;
//if (this.ShelfType.Equals(2))
//{
// forwardIO = IO_Type.RightShelf_Forward;
// backIO = IO_Type.RightShelf_Back;
//}
////如果门已打开直接返回
//if (IOManager.IOValue(forwardIO).Equals(IO_VALUE.HIGH) &&
// IOManager.IOValue(backIO).Equals(IO_VALUE.LOW))
//{
// return true;
//}
//if (moveInfo != null)
//{
// moveInfo.WaitList.Add(WaitResultInfo.WaitIO(forwardIO, IO_VALUE.HIGH));
// moveInfo.WaitList.Add(WaitResultInfo.WaitIO(backIO, IO_VALUE.LOW));
//}
//return Start(forwardIO, backIO, forwardIO);
return true;
}
public bool StartBack(StoreMoveInfo moveInfo)
{
//string forwardIO = IO_Type.LeftShelf_Forward;
//string backIO = IO_Type.LeftShelf_Back;
//if (this.ShelfType.Equals(2))
//{
// forwardIO = IO_Type.RightShelf_Forward;
// backIO = IO_Type.RightShelf_Back;
//}
////如果门已打开直接返回
//if (IOManager.IOValue(backIO).Equals(IO_VALUE.HIGH) &&
// IOManager.IOValue(forwardIO).Equals(IO_VALUE.LOW))
//{
// return true;
//}
//if (moveInfo != null)
//{
// moveInfo.WaitList.Add(WaitResultInfo.WaitIO(backIO, IO_VALUE.HIGH));
// moveInfo.WaitList.Add(WaitResultInfo.WaitIO(forwardIO, IO_VALUE.LOW));
//}
//return Start(backIO, forwardIO, backIO);
return true;
}
}
}