InOutDevice_OUT.cs
5.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DeviceLibrary
{
partial class InOutDevice
{
public bool IsOutLiftEmpty
{
get
{
return IOValue(IO_EndMaterialTop_Check).Equals(IO_VALUE.LOW) && Lift.isAtTOP && MoveInfo.MoveStep== MoveStep.WaitOutBox;
}
}
public bool TurnToOut(JobInfo jobInfo) {
if (MoveInfo.MoveStep != MoveStep.Wait)
return false;
MoveInfo.NewMove(MoveStep.Out01);
MoveInfo.MoveParam.PosID= jobInfo.PosId;
return true;
}
void OutProcess()
{
if (mainMachine.CheckWait(MoveInfo))
return;
switch (MoveInfo.MoveStep)
{
case MoveStep.Wait:
break;
case MoveStep.Out01:
MoveInfo.NextMoveStep(MoveStep.Out02);
Lift.LiftUp(MoveInfo);
FrontStop(MoveInfo, IO_VALUE.HIGH);
MiddleStop(MoveInfo, IO_VALUE.HIGH);
MoveInfo.log("准备开始接料,顶升上升");
break;
case MoveStep.Out02:
if (IOValue(IO_EndMaterialTop_Check).Equals(IO_VALUE.LOW))
{
MoveInfo.NextMoveStep(MoveStep.WaitOutBox);
MoveInfo.log("可以继续出库");
}
else
{
Msg.add("周转箱顶升感应到有物料,无法继续出库", MsgLevel.info);
MoveInfo.log("周转箱顶升感应到有物料,无法继续出库");
}
break;
case MoveStep.WaitOutBox:
Msg.add("等待出库周转箱", MsgLevel.info);
break;
case MoveStep.OutBoxPutOn:
if (IOValue(IO_EndMaterialTop_Check).Equals(IO_VALUE.LOW))
{
Msg.add("出口X39没有检测到周转箱", MsgLevel.alarm);
}
else
{
MoveInfo.NextMoveStep(MoveStep.Out05);
Lift.LiftDown(MoveInfo);
MoveInfo.log($"顶升机构下降");
}
break;
case MoveStep.Out05:
MoveInfo.NextMoveStep(MoveStep.Out06);
Line.LineRun("work", true, 999);
MiddleStop(MoveInfo,IO_VALUE.LOW);
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_F_Stop_Out, IO_VALUE.HIGH));
MoveInfo.log($"线体转动");
break;
case MoveStep.Out06:
MoveInfo.NextMoveStep(MoveStep.Out07);
Line.LineStop("work");
MoveInfo.log($"料箱抵达出口");
break;
case MoveStep.Out07:
MoveInfo.NextMoveStep(MoveStep.OutWaitAgv);
mainMachine.ServerCM.SendStoreState(MoveInfo.MoveParam.PosID, StoreStatus.OutStoreEnd);
//IOMove(DO_Agv_Rsp, IO_VALUE.HIGH);
MoveInfo.log($"等待agv接走周转箱");
break;
case MoveStep.OutWaitAgv:
Msg.add("等待AGV接走周转箱", MsgLevel.info);
if (IOValue(IO_AgvOut_Req).Equals(IO_VALUE.HIGH))
{
MoveInfo.NextMoveStep(MoveStep.Out08);
IOMove(DO_Agv_Rsp, IO_VALUE.HIGH);
FrontStop(MoveInfo, IO_VALUE.LOW);
Line.LineRun("work", true, 999);
MoveInfo.log($"收到agv抵达信号, 开始送出周转箱");
}
if (IOMonitor.IODebound(IO_F_Stop_Out,Config,IO_VALUE.LOW,2000)) {
MoveInfo.log($"检测到周转箱已离开,结束出库");
MoveInfo.EndMove();
}
break;
case MoveStep.Out08:
if (IOValue(IO_F_Stop_Out).Equals(IO_VALUE.LOW)
&& IOValue(IO_F_Stop_In).Equals(IO_VALUE.LOW))
{
MoveInfo.NextMoveStep(MoveStep.Out09);
Line.LineRun("work", true, 3);
}
else if (MoveInfo.IsTimeOut(15))
{
Msg.add("周转箱转出至AGV超时",MsgLevel.alarm);
MoveInfo.log($"周转箱转出超时");
}
break;
case MoveStep.Out09:
IOMove(DO_Agv_Rsp, IO_VALUE.LOW);
FrontStop(MoveInfo, IO_VALUE.HIGH);
MiddleStop(MoveInfo, IO_VALUE.HIGH);
MoveInfo.EndMove();
break;
}
}
}
}