MainMachine _LabelProcess.cs 7.2 KB
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:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_WaitPrint);
                    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);
                    Label_R_Axis.AbsMove(LabelMoveInfo, Config.Label_R_P2, Config.Label_Z_P2_speed);                    
                    LabelMoveInfo.log("Label_XYZ转到取标点,等待标签打印完毕");
                    break;
                case MoveStep.Lbl_WaitPrint:
                    if (LastPrintStatus == Asa.PrintLabel.PrinterStatus.Idle) {
                        LabelMoveInfo.NextMoveStep(MoveStep.Lbl_Printted);
                    }
                    break;
                case MoveStep.Lbl_Printted:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl03);
                    LastPrintStatus = Asa.PrintLabel.PrinterStatus.Unknown;
                    IOMove(IO_Type.LabelCylinder_Work, IO_VALUE.HIGH);
                    Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P3, Config.Label_Z_P3_speed);
                    //CylinderMove(LabelMoveInfo, IO_Type.LabelCylinder_Bck, IO_Type.LabelCylinder_Fwd);
                    
                    LabelMoveInfo.log("标签打印完毕,取标气缸下降,开始吸气.");
                    break;
                case MoveStep.Lbl03:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl04);
                    LabelMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(500));
                    break;
                case MoveStep.Lbl04:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl05);
                    Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P2, Config.Label_Z_P2_speed);
                    //CylinderMove(LabelMoveInfo, IO_Type.LabelCylinder_Fwd, IO_Type.LabelCylinder_Bck);                    
                    LabelMoveInfo.log("标签打印完毕,取标气缸上升,取起标签.");
                    break;
                case MoveStep.Lbl05:
                    if (LeftMoveInfo.MoveStep == MoveStep.L20_WaitLabel)
                    {
                        LabelMoveInfo.NextMoveStep(MoveStep.Lbl10);
                    }
                    else if (LabelMoveInfo.IsTimeOut(60)) {
                        LabelMoveInfo.log("等待左侧料串可贴标.");
                    }
                    break;
                case MoveStep.Lbl10:
                    if (!Label_Y_Axis.IsSafe(Config.Label_Y_P3,out string msg)) {
                        Msg.add(msg, MsgLevel.warning);
                        return;
                    }
                    //照片中料盘中心点像素位置
                    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, Right_Batch_Point, Config.Label_R_Offset, Config.Label_R_Angle_Diff, out int labelAngle);

                    if (labelAngle > 350)
                        labelAngle = 350;

                    //计算贴标角度的脉冲值
                    int labelAxisPos = Config.Label_R_360 / 350 * labelAngle;
                    //计算像素点位与中心点的差
                    Point Label_p3 = new Point(p.X - Right_Batch_Point.X , p.Y - Right_Batch_Point.Y);
                    //计算像素*脉冲像素比得到脉冲值+中心点基准脉冲
                    Label_p3.X = (int)(Label_p3.X * Config.Cam_Pixel_X_Ratio) + Config.Label_X_P3;
                    Label_p3.Y = (int)(Label_p3.Y * Config.Cam_Pixel_Y_Ratio) + Config.Label_Y_P3;

                    LabelMoveInfo.log($"计算贴标像素点位为{p},轴点位为{Label_p3},角度{labelAngle},R轴{labelAxisPos},盘宽{LabelMoveInfo.MoveParam.PlateW}");
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl11);
                    Label_X_Axis.AbsMove(LabelMoveInfo, Label_p3.X, Config.Label_X_P3_speed);
                    Label_Y_Axis.AbsMove(LabelMoveInfo, Label_p3.Y, Config.Label_Y_P3_speed);
                    Label_R_Axis.AbsMove(LabelMoveInfo, labelAxisPos, Config.Label_R_P2_speed);
                    Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P4, Config.Label_Z_P4_speed);
                    
                    LabelMoveInfo.log("Label_XYZ转到贴标点.");
                    break;
                case MoveStep.Lbl11:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl12);
                    Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P5, Config.Label_Z_P5_speed);
                    LabelMoveInfo.log("下降.");
                    break;
                case MoveStep.Lbl12:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl13);
                    IOMove(IO_Type.LabelCylinder_Work, IO_VALUE.LOW);
                    LabelMoveInfo.log("关闭吸气.");
                    break;
                case MoveStep.Lbl13:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl14);
                    Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P4, Config.Label_Z_P4_speed);                    
                    LabelMoveInfo.log("上升.");
                    break;
                case MoveStep.Lbl14:
                    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 += "等待标签打印";
            }
            if (LabelMoveInfo.MoveStep == MoveStep.Wait)
            {
                state += "等待中";
            }
            return state;
        }


    }
}