DoorControl.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
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
{
partial class AC_SA_BoxBean
{
Thread DoorRunMonitorThread;
void InitDoorRunMonitor() {
DoorRunMonitorThread = new Thread(new ThreadStart(DoorRunMonitor));
DoorRunMonitorThread.Start();
GC.KeepAlive(DoorRunMonitorThread);
LogUtil.info(StoreName + "出料门运行监控开始");
}
bool DoorRunMonitorEnable = false;
public void OpenDoor(bool needwait = true)
{
if (DoorIsOpen())
return;
IOManager.IOMove(IO_Type.Door_Moto_Rev, IO_VALUE.LOW);
IOManager.IOMove(IO_Type.Door_Moto_Run, IO_VALUE.HIGH);
//if (IOManager.DOValue(IO_Type.StartOrStopBlow).Equals(IO_VALUE.LOW))
//{
// IOManager.IOMove(IO_Type.StartOrStopBlow, IO_VALUE.HIGH);
// openBlow = true;
//}
DoorRunMonitorEnable = true;
if (needwait)
{
StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Down, IO_VALUE.LOW));
StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Up, IO_VALUE.HIGH));
}
}
/// <summary>
/// 记录是否是因为开门打开的吹气
/// </summary>
bool openBlow = false;
public void CloseDoor(bool needwait = true)
{
if (DoorIsClose())
return;
IOManager.IOMove(IO_Type.Door_Moto_Rev, IO_VALUE.HIGH);
IOManager.IOMove(IO_Type.Door_Moto_Run, IO_VALUE.HIGH);
//if (openBlow) {
// IOManager.IOMove(IO_Type.StartOrStopBlow, IO_VALUE.LOW);
// openBlow = false;
//}
DoorRunMonitorEnable = true;
if (needwait)
{
StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Down, IO_VALUE.HIGH));
StoreMove.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Door_Up, IO_VALUE.LOW));
}
}
private bool DoorIsClose()
{
//&& IOManager.IOValue(IO_Type.Door_Up).Equals(IO_VALUE.LOW)
if (IOManager.IOValue(IO_Type.Door_Down).Equals(IO_VALUE.HIGH))
{
//IOManager.IOMove(IO_Type.StartOrStopBlow, IO_VALUE.LOW);
return true;
}
return false;
}
private bool DoorIsOpen()
{
//IOManager.IOValue(IO_Type.Door_Down).Equals(IO_VALUE.LOW) &&
if (IOManager.IOValue(IO_Type.Door_Up).Equals(IO_VALUE.HIGH))
{
return true;
}
return false;
}
void DoorRunMonitor()
{
while (true) {
if (DoorRunMonitorEnable)
{
Thread.Sleep(10);
}
else {
//检测到门在运行立刻开始监控
if (IOManager.DOValue(IO_Type.Door_Moto_Run).Equals(IO_VALUE.HIGH)) {
DoorRunMonitorEnable = true;
continue;
}
Thread.Sleep(200);
continue;
}
if (IOManager.IOValue(IO_Type.Motor_Error).Equals(IO_VALUE.HIGH)) {
SetWarnMsg(ResourceControl.WaitSingleTimeOut);
continue;
}
//开门检测
if (IOManager.DOValue(IO_Type.Door_Moto_Run).Equals(IO_VALUE.HIGH)
&& IOManager.DOValue(IO_Type.Door_Moto_Rev).Equals(IO_VALUE.LOW)
&& IOManager.IOValue(IO_Type.Door_Up).Equals(IO_VALUE.HIGH))
{
IOManager.IOMove(IO_Type.Door_Moto_Run, IO_VALUE.LOW);
DoorRunMonitorEnable = false;
continue;
}
//关门检测
if (IOManager.DOValue(IO_Type.Door_Moto_Run).Equals(IO_VALUE.HIGH)
&& IOManager.DOValue(IO_Type.Door_Moto_Rev).Equals(IO_VALUE.HIGH)
&& IOManager.IOValue(IO_Type.Door_Down).Equals(IO_VALUE.HIGH))
{
IOManager.IOMove(IO_Type.Door_Moto_Run, IO_VALUE.LOW);
DoorRunMonitorEnable = false;
continue;
}
}
}
}
}