DoorBean.cs
4.5 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
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace OnlineStore.DeviceLibrary
{
public class DoorBean
{
public static bool IsRun = false;
private static string LastMoveDO = "";
private static string LastCheckDI = "";
internal static DateTime LastEndTime = DateTime.Now;
public static void Stop()
{
if (IsRun)
{
IsRun = false;
}
}
private static bool Start(string moveDO, string checkDI, int timeOutMS = 30000)
{
if (IsRun)
{
LogUtil.error("启动[" + moveDO + "] [" + checkDI + "] 失败");
return false;
}
IsRun = true;
Task.Factory.StartNew(delegate
{
WriteAndWait(moveDO, checkDI, timeOutMS);
});
return true;
}
private static string WriteAndWait(string moveDO, string checkDI, int timeOutMS = 30000)
{
LastMoveDO = moveDO;
LastCheckDI = checkDI;
LogUtil.debug("写入信号:" + moveDO + ",等待信号:" + checkDI + "");
if (moveDO.Equals(IO_Type.Door_Up))
{
IOManager.IOMove(IO_Type.Door_Down, IO_VALUE.LOW);
}
else
{
IOManager.IOMove(IO_Type.Door_Up, 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;
}
}
}
private static bool UseDoor = true;
public static bool StartOpen(StoreMoveInfo moveInfo)
{
if (!UseDoor)
{
return false;
}
//如果门已打开直接返回
if (IOManager.IOValue(IO_Type.Door_Down).Equals(IO_VALUE.HIGH) &&
IOManager.IOValue(IO_Type.Door_Up).Equals(IO_VALUE.LOW))
{
return true;
}
if (moveInfo != null)
{
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Down, IO_VALUE.HIGH));
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Up, IO_VALUE.LOW));
}
return Start(IO_Type.Door_Down, IO_Type.Door_Down);
}
public static bool StartClose(StoreMoveInfo moveInfo)
{
if (!UseDoor)
{
return false;
}
//如果门已关闭直接返回
if (IOManager.IOValue(IO_Type.Door_Up).Equals(IO_VALUE.HIGH) &&
IOManager.IOValue(IO_Type.Door_Down).Equals(IO_VALUE.LOW))
{
return true;
}
if (moveInfo != null)
{
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Up, IO_VALUE.HIGH));
moveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Down, IO_VALUE.LOW));
}
return Start(IO_Type.Door_Up, IO_Type.Door_Up);
}
}
}