InOutDevice_OUT.cs
5.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
using OnlineStore.Common;
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);
CurrnetDirection = InOutDirectionE.OUT;
MoveInfo.MoveParam.PosID= jobInfo.PosId;
MoveInfo.MoveParam.hSerial= jobInfo.hSerial;
MoveInfo.log("开始出库任务");
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("出口末端为检测到料箱", MsgLevel.alarm);//出口X39没有检测到周转箱
}
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接走周转箱"+MoveInfo.MoveParam.WareCode, 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($"检测到周转箱已离开,结束出库");
RobotManage.mainMachine.IsClearWarnMsg = true;
MoveInfo.EndMove();
}
else if(MoveInfo.IsTimeOut(60*ConfigHelper.Config.Get("OutWaitAgvLeaveTimeout",5)))
{
Msg.add($"出口料箱未下降", MsgLevel.warning);//等待周转箱[{MoveInfo.MoveParam.WareCode}]离开超时
RobotManage.mainMachine.IsClearWarnMsg = false;
}
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);
MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
}
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;
}
}
}
}