BoxEquip_InExecute_Partial.cs
11.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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
using CodeLibrary;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms.VisualStyles;
namespace OnlineStore.DeviceLibrary
{
partial class BoxEquip
{
#region 入库,两侧都有料
private void BothComAxis_To_P2(bool isdebugSpeed = false)
{
if (isdebugSpeed)
{
ComAxis_A.AbsMove(MoveInfo, MoveInfo.MoveParam.MoveP.ComAxis_AB_P2, Config.ComAxis_FindPosSpeed);
ComAxis_B.AbsMove(MoveInfo, MoveInfo.MoveParam.MoveP.ComAxis_AB_P2, Config.ComAxis_FindPosSpeed);
}
else
{
ComAxis_A.AbsMove(MoveInfo, MoveInfo.MoveParam.MoveP.ComAxis_AB_P2, Config.ComAxis_A_P2_Speed);
ComAxis_B.AbsMove(MoveInfo, MoveInfo.MoveParam.MoveP.ComAxis_AB_P2, Config.ComAxis_B_P2_Speed);
}
}
private void BothMiddleAxis_To_P2(bool isdebugSpeed = false)
{
MiddleAxis_A.AbsMove(MoveInfo, Config.MiddleAxis_A_P2, Config.MiddleAxis_A_P2_Speed);
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.AHorizontal_Check, IO_VALUE.HIGH));
MiddleAxis_B.AbsMove(MoveInfo, Config.MiddleAxis_B_P2, Config.MiddleAxis_B_P2_Speed);
MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.BHorizontal_Check, IO_VALUE.HIGH));
}
private void BothXAxis_To_P1(bool isdebugSpeed = false)
{
if (!XAxis_A.IsInPosition(Config.XAxis_A_P1))
{
if (isdebugSpeed)
XAxis_A.AbsMove(MoveInfo, Config.XAxis_A_P1, Config.XAxis_FindPosSpeed);
else
XAxis_A.AbsMove(MoveInfo, Config.XAxis_A_P1, Config.XAxis_A_P1_Speed);
}
if (!XAxis_B.IsInPosition(Config.XAxis_B_P1))
{
if (isdebugSpeed)
XAxis_B.AbsMove(MoveInfo, Config.XAxis_B_P1, Config.XAxis_FindPosSpeed);
else
XAxis_B.AbsMove(MoveInfo, Config.XAxis_B_P1, Config.XAxis_B_P1_Speed);
}
}
private bool InDoorBothCheck(InOutParam param)
{
if (param.PosInfo == null)
return false;
if (param.PosInfoBack == null)
return false;
if (param.PosInfo != null)
{
if (param.PosInfoBack != null)
{
return true;
}
}
return false;
}
private void BothXAxis_To_P2(bool isdebugSpeed = false)
{
if (isdebugSpeed)
XAxis_B.AbsMove(MoveInfo, Config.XAxis_B_P2, Config.XAxis_FindPosSpeed);
else
XAxis_B.AbsMove(MoveInfo, Config.XAxis_B_P2, Config.XAxis_B_P2_Speed);
if (isdebugSpeed)
XAxis_A.AbsMove(MoveInfo, Config.XAxis_A_P2, Config.XAxis_FindPosSpeed);
else
XAxis_A.AbsMove(MoveInfo, Config.XAxis_A_P2, Config.XAxis_A_P2_Speed);
}
private void AddBothReelCheck(bool hasReel)
{
//if (CheckASide())
//{
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.ForkA_Tray_Check, hasReel ? IO_VALUE.HIGH : IO_VALUE.LOW));
//}
//else
//{
// MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.ForkB_Tray_Check, hasReel ? IO_VALUE.HIGH : IO_VALUE.LOW));
//}
}
private void BothComAxis_To_P3(bool isdebugSpeed = false)
{
int diff = 0;
BoxPosition position = CSVPositionReader<BoxPosition>.GetPositon(MoveInfo.MoveParam.PosInfo.PosId);
if (position != null)
{
diff = position.BagHigh - MoveInfo.MoveParam.PosInfo.PlateH;
if (diff < 0) diff = 0;
LogInfo($"{MoveInfo.MoveParam.PosInfo.PosId}库位高度:{position.BagHigh},料盘高度:{MoveInfo.MoveParam.PosInfo.PlateH},差值:{diff},系数:{comAxis_offset}," +
$"实际值:{MoveInfo.MoveParam.MoveP.ComAxis_AB_P3 + diff * comAxis_offset}={MoveInfo.MoveParam.MoveP.ComAxis_AB_P3}加{diff * comAxis_offset}");
}
int target = MoveInfo.MoveParam.MoveP.ComAxis_AB_P3 + diff * comAxis_offset;
if (isdebugSpeed)
ComAxis_A.AbsMove(MoveInfo, target, Config.ComAxis_FindPosSpeed);
else
ComAxis_A.AbsMove(MoveInfo, target, Config.ComAxis_A_P3_Speed);
diff = 0;
LineMoveP movep = new LineMoveP(Config, MoveInfo.MoveParam.PosInfoBack.PosId);
BoxPosition position1 = CSVPositionReader<BoxPosition>.GetPositon(MoveInfo.MoveParam.PosInfoBack.PosId);
if (position1 != null)
{
diff = position1.BagHigh - MoveInfo.MoveParam.PosInfoBack.PlateH;
if (diff < 0) diff = 0;
LogInfo($"{MoveInfo.MoveParam.PosInfoBack.PosId}库位高度:{position1.BagHigh},料盘高度:{MoveInfo.MoveParam.PosInfoBack.PlateH},差值:{diff}," +
$"实际值:{movep.ComAxis_AB_P3 + diff * comAxis_offset}={movep.ComAxis_AB_P3}加{diff * comAxis_offset}");
}
target = movep.ComAxis_AB_P3 + diff * comAxis_offset;
if (isdebugSpeed)
ComAxis_B.AbsMove(MoveInfo, target, Config.ComAxis_FindPosSpeed);
else
ComAxis_B.AbsMove(MoveInfo, target, Config.ComAxis_B_P3_Speed);
}
private void BothXAxis_To_P3(bool isdebugSpeed = false)
{
if (isdebugSpeed)
XAxis_A.AbsMove(MoveInfo, MoveInfo.MoveParam.MoveP.XAxis_AB_P3, Config.XAxis_FindPosSpeed);
else
XAxis_A.AbsMove(MoveInfo, MoveInfo.MoveParam.MoveP.XAxis_AB_P3, Config.XAxis_A_P3_Speed);
if (isdebugSpeed)
XAxis_B.AbsMove(MoveInfo, MoveInfo.MoveParam.MoveP.XAxis_AB_P3, Config.XAxis_FindPosSpeed);
else
XAxis_B.AbsMove(MoveInfo, MoveInfo.MoveParam.MoveP.XAxis_AB_P3, Config.XAxis_B_P3_Speed);
}
private void ClearInDoorBothBuffer()
{
BufferDataManager.AInStoreInfo = null;
BufferDataManager.BInStoreInfo = null;
LogInfo($"入库 {MoveInfo.SLog}:取料完成,清除该暂存区的料盘信息[barcode={MoveInfo.MoveParam.PosInfo.barcode}][barcode={MoveInfo.MoveParam.PosInfoBack.barcode}]");
}
private void InstoreBothSideExecute()
{
switch (MoveInfo.MoveStep)
{
case StepEnum.SIB_00_StartInstore:
PullAxisToP1("入库");
break;
case StepEnum.SIB_01_PullAxis_Ready:
SetBoxStatus(DeviceStatus.InStoreExecute, RunStatus.Busy, MoveInfo.MoveParam.PosInfo.PosId, MoveInfo.MoveParam.PosInfo.barcode);
MoveInfo.NextMoveStep(StepEnum.SIB_01_Pull_Updown_ToPosition);
if (!IsMoveAxisInSafePos())
{
MoveAxisToSafePos();
LogInfo($"入库 {MoveInfo.SLog}:行走机构不在安全位置,先到安全位置={Config.MoveAxis_SafePos}。当前位置{MoveAxis.GetAclPosition()}");
}
break;
case StepEnum.SIB_01_Pull_Updown_ToPosition:
MoveInfo.NextMoveStep(StepEnum.SIB_01_MoveAxis_Ready);
LogInfo($"入库 {MoveInfo.SLog}:到暂存区入料口," +
$"行走机构到待机点P1,料斗升降轴到P1点,移栽升降轴到上暂存区入库取料低点P3/P9,移栽压紧轴到压紧前点P2,移栽旋转轴到取放料水平点P2,移栽X轴到P1,料斗升降轴到P1点[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
MoveAxisToP1();
PullAxis_UpdownToP1();
UpdownAxisTo_P3_P9();
BothComAxis_To_P2();
BothMiddleAxis_To_P2();
BothXAxis_To_P1();
//BuffAreaInstoreDoor(true);
break;
case StepEnum.SIB_01_MoveAxis_Ready:
MoveInfo.NextMoveStep(StepEnum.SIB_02_ToBufferArea);
startTime = DateTime.Now;
break;
case StepEnum.SIB_02_ToBufferArea:
if (!InDoorBothCheck(MoveInfo.MoveParam))
{
BuffAreaInstoreDoor(false);
SetWarnMsg($"入库 {MoveInfo.SLog}:AB入口料盘无入库信息, 任务取消");
LogInfo($"入库 {MoveInfo.SLog}:AB入口料盘因无入库信息,结束入库");
SetBoxStatus(DeviceStatus.StoreOnline, RunStatus.Runing);
Alarm(AlarmType.None);
MoveInfo.EndMove();
}
else
{
MoveInfo.NextMoveStep(StepEnum.SIB_03_VerifyBufferState);
BuffAreaInstoreDoor(true);
LogInfo($"入库 {MoveInfo.SLog}:AB入料口入库信息确认,[barcode={MoveInfo.MoveParam.PosInfo.barcode},posId={MoveInfo.MoveParam.PosInfo.PosId}][barcode={MoveInfo.MoveParam.PosInfoBack.barcode},posId={MoveInfo.MoveParam.PosInfoBack.PosId}],开始取料");
}
break;
case StepEnum.SIB_03_VerifyBufferState:
if (!CheckInputMiddleAxisInBuff())
{
MoveInfo.NextMoveStep(StepEnum.SIB_04_InOutToBuff);
LogInfo($"入库 {MoveInfo.SLog}:移栽X轴到暂存区取放点P2,行走机构到取放点P2");
BothXAxis_To_P2();
MoveAxisToP2();
}
else if (MoveInfo.IsTimeOut())
{
SetWarnMsg($"等待上料机构旋转轴离开暂存区超时");
}
break;
case StepEnum.SIB_04_InOutToBuff:
MoveInfo.NextMoveStep(StepEnum.SIB_05_GetReel);
LogInfo($"入库 {MoveInfo.SLog}:取料盘,移栽升降轴到上暂存区入库取料高点P2/P8,移栽压紧轴到压紧点P3");
AddBothReelCheck(true);
UpdownAxisTo_P2_P8();
BothComAxis_To_P3();
break;
case StepEnum.SIB_05_GetReel:
MoveInfo.NextMoveStep(StepEnum.SIB_06_InOutBackToP1FromBuff);
LogInfo($"入库 {MoveInfo.SLog}:移栽X轴到库位取放点P3,行走机构到待机点P1");
// XAxis_To_P1();
BothXAxis_To_P3();
MoveAxisToP1();
break;
case StepEnum.SIB_06_InOutBackToP1FromBuff:
MoveInfo.NextMoveStep(StepEnum.SIB_06_ClearBuffInfo);
//LogInfo($"入库 {MoveInfo.SLog}:移栽X轴到料屉库位取放料点P3[{MoveInfo.MoveParam.PosInfo.GetPosSide()}面]");
//清空暂存区料盘信息
ClearInDoorBothBuffer();
break;
case StepEnum.SIB_06_ClearBuffInfo:
{
MoveInfo.NextMoveStep(StepEnum.SI_07_MiddleToP3);
//MiddleAxis_To_P3();
BuffAreaInstoreDoor(false);
LogInfo($"入库 {MoveInfo.SLog}:对两侧料盘进行入库");//移栽旋转轴到料屉库位垂直取放料点P3
}
break;
}
}
#endregion
}
}