MainMachine_LabelProcess.cs 9.1 KB
using OnlineStore;
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
    {

        bool LabelBusy { get => LabelMoveInfo.MoveStep >= MoveStep.Lbl_10; }
        Point Label_p3;
        void LabelProcess()
        {
            if (CheckWait(LabelMoveInfo))
                return;

            switch (LabelMoveInfo.MoveStep)
            {
                case MoveStep.Wait:                    
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_01);
                    Label_R_Axis.AbsMove(LabelMoveInfo, Config.Label_R_P2, Config.Label_Z_P2_speed);

                    Label_X_Axis.AbsMove(LabelMoveInfo, Config.Label_X_P1, Config.Label_X_P1_speed);
                    Label_Y_Axis.AbsMove(LabelMoveInfo, Config.Label_Y_P1, Config.Label_Y_P1_speed);
                    Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P1, Config.Label_Z_P2_speed);
                    LabelMoveInfo.log("xy待机点");

                    break;
                case MoveStep.Lbl_01:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_02);
                    Label_R_Axis.AbsMove(LabelMoveInfo, Config.Label_R_P2, Config.Label_Z_P2_speed);
                    LabelMoveInfo.log("Label_R转到取标点");
                    if (OutMoveInfo.MoveStep == MoveStep.Out_WaitForLabel)
                    {
                        OutMoveInfo.NextMoveStep(MoveStep.Out_LabelFinished);
                        LabelMoveInfo.log("通知OutMoveInfo贴标完成");
                    }
                    break;
                case MoveStep.Lbl_02:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_03);                    
                    Label_X_Axis.AbsMove(LabelMoveInfo, Config.Label_X_P2, Config.Label_X_P1_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.log("xyz取标前点");
                    break;
                case MoveStep.Lbl_03:
                    if (PrintMoveInfo.MoveStep == MoveStep.Print_WaitTakeLabel)
                    {
                        LabelMoveInfo.NextMoveStep(MoveStep.Lbl_04);
                        LabelMoveInfo.MoveParam = CurrentPrintJob.clone();
                        LabelMoveInfo.log($"贴标机构读取到贴标参数:" + LabelMoveInfo.MoveParam.ToDetailStr());
                        PrintMoveInfo.NextMoveStep(MoveStep.Print_LabelTaked);
                    }
                    else {
                        LabelMoveInfo.log("等待标签打印完毕");
                    }                    
                    break;
                case MoveStep.Lbl_04:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_05);
                    IOMove(IO_Type.Unloading_LabelVacuum_On, IO_VALUE.HIGH);
                    Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P3, Config.Label_Z_P3_speed);
                    LabelMoveInfo.log("标签打印完毕,取标气缸下降,开始吸气.");
                    break;
                case MoveStep.Lbl_05:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_06);
                    LabelMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1500));
                    break;
                case MoveStep.Lbl_06:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_07);
                    Label_Z_Axis.AbsMove(LabelMoveInfo, Config.Label_Z_P2, Config.Label_Z_P2_speed);                
                    LabelMoveInfo.log("标签打印完毕,取标气缸上升,取起标签.");
                    break;
                case MoveStep.Lbl_07:
                    if (OutMoveInfo.MoveStep == MoveStep.Out_WaitForLabel)
                    {
                        LabelMoveInfo.NextMoveStep(MoveStep.Lbl_10);
                        LabelMoveInfo.MoveParam.CurrentStringNum = OutCurrentStringNum;
                    }
                    else {
                        LabelMoveInfo.log("等待出料机构完成放料.");
                    }
                    break;
                case MoveStep.Lbl_10:
                    //照片中料盘中心点像素位置
                    Point Pixel_Center_Point = new Point(Config.Graphe_Center_X, Config.Graphe_Center_Y);

                    

                    var cc = RobotManage.LabellingPostion["Labelling_T"+ LabelMoveInfo.MoveParam.CurrentStringNum];
                    LabelMoveInfo.log("贴标盘位:"+ "Labelling_T" + LabelMoveInfo.MoveParam.CurrentStringNum);
                    Point Axis_Center_Point = new Point(cc.X_Base, cc.Y_Base);


                    //计算照片中贴标的像素位置
                    Point p = Common.CalcLabelPoint(LabelMoveInfo.MoveParam, Pixel_Center_Point, (int)cc.Label_R_Offset_Angle, 0, out int labelAngle);
                    LabelMoveInfo.log($"源坐标:{p}");
                    var x = p.X;
                    var y = p.Y;
                    if (x == 0 && y == 0) {
                    
                    }

                    p.Y= 5472 - x;
                    p.X = y;
                    LabelMoveInfo.log($"变换坐标:{p}");
                    
                    labelAngle = 360 - labelAngle;
                    LabelMoveInfo.log($"贴标逆时针角度:{labelAngle}");
                    if (labelAngle > 180)
                        labelAngle-= 180;
                    LabelMoveInfo.log($"贴标逆时针角度:-180={labelAngle}");

                    labelAngle += 90;
                    if (labelAngle > 180)
                        labelAngle -= 180;
                    Pixel_Center_Point = new Point(Config.Graphe_Center_Y, 5472 - Config.Graphe_Center_X);

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

                    LabelMoveInfo.log($"计算贴标像素点位为{p},轴点位为{Label_p3},角度{labelAngle},R轴{labelAxisPos},盘宽{LabelMoveInfo.MoveParam.PlateW}");
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_11);
                    Label_X_Axis.AbsMove(LabelMoveInfo, Label_p3.X, Config.Label_X_P1_speed);
                    Label_Y_Axis.AbsMove(LabelMoveInfo, Label_p3.Y, Config.Label_Y_P1_speed);
                    Label_R_Axis.AbsMove(LabelMoveInfo, labelAxisPos, Config.Label_R_P2_speed);
                    Label_Z_Axis.AbsMove(LabelMoveInfo, cc.Label_Z_P4, Config.Label_Z_P1_speed);                    
                    LabelMoveInfo.log("Label_X,Y,Z转到贴标点.");
                    break;
                case MoveStep.Lbl_11:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_12);
                    cc = RobotManage.LabellingPostion["Labelling_T" + LabelMoveInfo.MoveParam.CurrentStringNum];
                    Label_Z_Axis.AbsMove(LabelMoveInfo, cc.Label_Z_P5, Config.Label_Z_P1_speed);
                    LabelMoveInfo.log("下降.");
                    break;
                case MoveStep.Lbl_12:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_13);
                    IOMove(IO_Type.Unloading_LabelVacuum_On, IO_VALUE.LOW);
                    LabelMoveInfo.log("关闭吸气.");
                    break;
                case MoveStep.Lbl_13:
                    LabelMoveInfo.NextMoveStep(MoveStep.Lbl_14);
                    cc = RobotManage.LabellingPostion["Labelling_T" + LabelMoveInfo.MoveParam.CurrentStringNum];
                    Label_Z_Axis.AbsMove(LabelMoveInfo,cc.Label_Z_P4, Config.Label_Z_P1_speed);
                    LabelMoveInfo.log("上升.");
                    break;
                case MoveStep.Lbl_14:
                    //OutMoveInfo.NextMoveStep(MoveStep.Out_LabelFinished);
                    LabelMoveInfo.NextMoveStep(MoveStep.Wait);
                    LabelMoveInfo.log("完成贴标.");
                    break;
                default:
                    LabelMoveInfo.log($"未找到对应步骤:{LabelMoveInfo.MoveStep}");
                    break;
            }
        }

        string LabelState() {
            string state = "";
            if (LabelMoveInfo.MoveStep == MoveStep.Lbl_03)
            {
                state += "空闲中";
            }else if (LabelMoveInfo.MoveStep > MoveStep.Lbl_03)
            {
                state += "取标中";
            }else if (LabelMoveInfo.MoveStep > MoveStep.Lbl_07)
            {
                state += "贴标中";
            }else if (LabelMoveInfo.MoveStep >= MoveStep.Wait)
            {
                state += "空闲中";
            }
            return state;
        }


    }
}