MainMachine _LabelProcess.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
using CodeLibrary;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DeviceLibrary
{
partial class MainMachine
{
void LabelProcess()
{
if (CheckWait(LabelMoveInfo))
return;
switch (LabelMoveInfo.MoveStep)
{
case MoveStep.Lbl01:
Label_X_Axis.AbsMove(LabelMoveInfo, Config.Label_X_P2, Config.Label_X_P2_speed);
Label_Y_Axis.AbsMove(LabelMoveInfo, Config.Label_Y_P2, Config.Label_Y_P2_speed);
Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P2, Config.Label_Z_P2_speed);
LabelMoveInfo.NextMoveStep(MoveStep.Lbl_WaitPrint);
LabelMoveInfo.log("Label_XYZ转到取标点,等待标签打印完毕");
break;
case MoveStep.Lbl_Printted:
LabelMoveInfo.NextMoveStep(MoveStep.Lbl02);
CylinderMove(LabelMoveInfo, IO_Type.LabelCylinder_Bck, IO_Type.LabelCylinder_Fwd);
IOMove(IO_Type.LabelCylinder_Work, IO_VALUE.HIGH);
LabelMoveInfo.log("标签打印完毕,取标气缸下降,开始吸气.");
break;
case MoveStep.Lbl02:
CylinderMove(LabelMoveInfo, IO_Type.LabelCylinder_Fwd, IO_Type.LabelCylinder_Bck);
LabelMoveInfo.NextMoveStep(MoveStep.Lbl03);
LabelMoveInfo.log("标签打印完毕,取标气缸上升,取起标签.");
break;
case MoveStep.Lbl03:
if (LeftMoveInfo.MoveStep == MoveStep.L20_WaitLabel)
{
LabelMoveInfo.NextMoveStep(MoveStep.Lbl10);
}
else if (LabelMoveInfo.IsTimeOut(60)) {
LabelMoveInfo.log("等待左侧料窜可贴标.");
}
break;
case MoveStep.Lbl10:
//照片中料盘中心点像素位置
Point Right_Batch_Point = new Point(RobotManage.Config.Right_Batch_X, RobotManage.Config.Right_Batch_Y);
//不同尺寸料盘需要在照片上便宜的贴标像素
int widthOffset = Config.Label_Offset_Pixel_7;
switch (LabelMoveInfo.MoveParam.PlateW) {
case 13:
widthOffset = Config.Label_Offset_Pixel_13;
break;
case 15:
widthOffset = Config.Label_Offset_Pixel_15;
break;
}
//计算照片中贴标的像素位置
Point p = Common.CalcLabelPoint(LabelMoveInfo.MoveParam.codeInfos, Right_Batch_Point, widthOffset, out int labelAngle);
//匹配照片角度与贴标旋转轴的角度差
labelAngle += Config.Label_R_Angle_Diff;
//计算贴标角度的脉冲值
int labelAxisPos = Config.Label_R_360 / 360 * labelAngle;
//计算像素点位与中心点的差
Point p1 = new Point(p.X - Right_Batch_Point.X , p.Y - Right_Batch_Point.Y);
//计算像素*脉冲像素比得到脉冲值+中心点基准脉冲
p1.X = (int)(p1.X * Config.Cam_Pixel_X_Ratio) + Config.Label_X_Base;
p1.Y = (int)(p1.Y * Config.Cam_Pixel_Y_Ratio) + Config.Label_Y_Base;
LabelMoveInfo.log($"计算贴标像素点位为{p},轴点位为{p1},角度{labelAngle},R轴{labelAxisPos},盘宽{LabelMoveInfo.MoveParam.PlateW}");
Label_X_Axis.AbsMove(LabelMoveInfo, p.X, Config.Label_X_P2_speed);
Label_Y_Axis.AbsMove(LabelMoveInfo, p.Y, Config.Label_Y_P2_speed);
Label_R_Axis.AbsMove(LabelMoveInfo, labelAxisPos, Config.Label_R_P2_speed);
Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P3, Config.Label_Z_P3_speed);
LabelMoveInfo.NextMoveStep(MoveStep.Lbl11);
LabelMoveInfo.log("Label_XYZ转到贴标点.");
break;
case MoveStep.Lbl11:
LabelMoveInfo.NextMoveStep(MoveStep.Lbl12);
CylinderMove(LabelMoveInfo, IO_Type.LabelCylinder_Bck, IO_Type.LabelCylinder_Fwd);
IOMove(IO_Type.LabelCylinder_Work, IO_VALUE.LOW);
LabelMoveInfo.log("取标气缸下降,关闭吸气.");
break;
case MoveStep.Lbl12:
CylinderMove(LabelMoveInfo, IO_Type.LabelCylinder_Fwd, IO_Type.LabelCylinder_Bck);
LabelMoveInfo.NextMoveStep(MoveStep.Lbl13);
LabelMoveInfo.log("取标气缸上升.");
break;
case MoveStep.Lbl13:
LeftMoveInfo.NextMoveStep(MoveStep.L30_LabelFinish);
LabelMoveInfo.NextMoveStep(MoveStep.Lbl01);
LabelMoveInfo.log("完成贴标.");
break;
default:
LabelMoveInfo.log($"未找到对应步骤:{LabelMoveInfo.MoveStep}");
break;
}
}
string LabelState() {
string state = "";
if (LabelMoveInfo.MoveStep >= MoveStep.Lbl_Printted) {
state += "标签已打印,当前ReelID:" + LabelMoveInfo.MoveParam.WareCode;
}
if (LabelMoveInfo.MoveStep == MoveStep.Lbl01)
{
state += "等待标签打印";
}
return state;
}
}
}