MainMachine_OutMove.cs 15.4 KB
using CodeLibrary;
using OnlineStore;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace DeviceLibrary
{
    partial class MainMachine
    {
        OutCarReelPostion OutFromPos;
        OutCarReelPostion OutToPos;
        int takeretry = 0;
        void OutMoveProcess()
        {
            if (CheckWait(OutMoveInfo))
                return;
            
            switch (OutMoveInfo.MoveStep)
            {
                case MoveStep.Wait:
                     if (CountMoveInfo.MoveStep== MoveStep.Count_ReadyOut) {
                        OutMoveInfo.NewMove(MoveStep.Out_01);
                        OutMoveInfo.MoveParam = CountMoveInfo.MoveParam.clone();
                        OutFromPos = RobotManage.OutCarReelPostion["Unloading_Counting"];
                        OutMoveInfo.log($"点料区料盘已经准备好:"+OutMoveInfo.MoveParam.ToDetailStr());
                        var cc = OutMoveInfo.MoveParam.codeInfos.Select((a) => a.CodeType + ":" + a.CodeStr);
                        OutMoveInfo.log(String.Join("##", cc));
                    }
                    break;
                case MoveStep.Out_01:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_02);
                    Unloading_InOut_Axis.AbsMove(OutMoveInfo, Config.Unloading_InOut_Axis_P1, Config.Unloading_InOut_Axis_P1_speed);
                    OutMoveInfo.log($"进出轴回到p1");
                    break;
                case MoveStep.Out_02:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_03);
                    CylinderMove(OutMoveInfo, IO_Type.Counting_ExitDoor_Close, IO_Type.Counting_ExitDoor_Open, IO_VALUE.HIGH);
                    OutMoveInfo.log($"打开点料机出口大门");
                    break;
                case MoveStep.Out_03:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_04);
                    Unloading_Middle_Axis.AbsMove(OutMoveInfo, OutFromPos.Middle_P2, Config.Unloading_Middle_Axis_P1_speed);
                    Unloading_UpDown_Axis.AbsMove(OutMoveInfo, OutFromPos.UpDown_P2, Config.Unloading_UpDown_Axis_P1_speed);
                    OutMoveInfo.log($"旋转轴到达p1点,升降轴到取料P2");
                    break;
                case MoveStep.Out_04:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_05);
                    Unloading_InOut_Axis.AbsMove(OutMoveInfo, OutFromPos.InOut_P2, Config.Unloading_InOut_Axis_P1_speed);
                    OutMoveInfo.log($"进出轴达取料p2点");
                    takeretry = 0;
                    break;
                case MoveStep.Out_05:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_06);
                    var pos = OutFromPos.UpDown_P3 - (OutMoveInfo.MoveParam.PlateH - 8) * Config.Unloading_UpDown_Axis_MMtoPOS;
                    if (pos < 0)
                        pos = 0;
                    Unloading_UpDown_Axis.AbsMove(OutMoveInfo, pos, Config.Unloading_UpDown_Axis_P1_speed);
                    OutMoveInfo.log($"升降轴到达取料p3点,pos:{pos},PlateH:{OutMoveInfo.MoveParam.PlateH}");
                    break;
                case MoveStep.Out_06:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_07);
                    IOMove(IO_Type.Unloading_ReelVacuum_On, IO_VALUE.HIGH);
                    OutMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                    OutMoveInfo.log($"打开吸盘");
                    break;
                case MoveStep.Out_07:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_08);
                    Unloading_UpDown_Axis.AbsMove(OutMoveInfo, OutFromPos.UpDown_P2, Config.Unloading_UpDown_Axis_P1_speed);
                    OutMoveInfo.log($"升降轴到达取料p2点");
                    break;
                case MoveStep.Out_08:
                    if (IOValue(IO_Type.Unloading_VacuumDegree_Check).Equals(IO_VALUE.HIGH))
                    {
                        OutMoveInfo.NextMoveStep(MoveStep.Out_09);
                        Unloading_InOut_Axis.AbsMove(OutMoveInfo, Config.Unloading_InOut_Axis_P1, Config.Unloading_InOut_Axis_P1_speed);
                        OutMoveInfo.log($"进出轴到达p1点");
                    }
                    else
                    {
                        takeretry++;
                        OutMoveInfo.MoveParam.PlateH= OutMoveInfo.MoveParam.PlateH-2;
                        OutMoveInfo.log($"未取到料盘");
                        if (takeretry < 3 && OutMoveInfo.MoveParam.PlateH>=8)
                        {
                            OutMoveInfo.NextMoveStep(MoveStep.Out_05);
                            OutMoveInfo.log($"重试取盘:"+ OutMoveInfo.MoveParam.PlateH);
                        }
                        else
                        {
                            Msg.add("出口取盘失败", MsgLevel.alarm);
                            RobotManage.UserPause("出口取盘失败");
                        }
                    }
                    break;
                case MoveStep.Out_09:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_10);
                    CylinderMove(null, IO_Type.Counting_ExitDoor_Close, IO_Type.Counting_ExitDoor_Open, IO_VALUE.LOW);
                    OutMoveInfo.log($"关闭点料机入口大门");
                    if (OutMoveInfo.MoveParam.IsNg)
                        OutMoveInfo.NextMoveStep(MoveStep.Out_20);

                    if (CountMoveInfo.MoveStep == MoveStep.Count_ReadyOut)
                        CountMoveInfo.NextMoveStep(MoveStep.Count_Outted);
                    break;
                case MoveStep.Out_10:
                    if (string.IsNullOrEmpty(OutMoveInfo.MoveParam.ReeID)) {
                        OutMoveInfo.log($"没有获得Reelid");
                        OutMoveInfo.MoveParam.IsNg = true;
                        OutMoveInfo.MoveParam.NgMsg = "没有获得Reelid";
                        OutMoveInfo.NextMoveStep(MoveStep.Out_20);
                        return;
                    }
                    if (CountList.ContainsKey(OutMoveInfo.MoveParam.ReeID))
                    {
                        OutMoveInfo.NextMoveStep(MoveStep.Out_11);
                        OutMoveInfo.MoveParam.QTY = CountList[OutMoveInfo.MoveParam.ReeID];
                        OutMoveInfo.log($"获得点料结果:{OutMoveInfo.MoveParam.QTY}");
                        lock (CountList)
                        {
                            CountList.Remove(OutMoveInfo.MoveParam.ReeID);
                        }
                        if (OutMoveInfo.MoveParam.QTY >= 0)
                            SetPrintJob(OutMoveInfo);
                        else {
                            OutMoveInfo.MoveParam.IsNg = true;
                            OutMoveInfo.MoveParam.NgMsg = "点料结果为0";
                            OutMoveInfo.NextMoveStep(MoveStep.Out_20);
                        }

                    }
                    else if (OutMoveInfo.IsTimeOut(10)) {
                        OutMoveInfo.log($"等待点料结果超时, NG处理");
                        OutMoveInfo.MoveParam.IsNg = true;
                        OutMoveInfo.MoveParam.NgMsg = "点料超时";
                        OutMoveInfo.NextMoveStep(MoveStep.Out_20);
                    }
                    break;
                case MoveStep.Out_11:
                    if (false && LabelBusy)
                    {
                        OutMoveInfo.log("等待贴标工作完毕");
                    }
                    else
                    {
                        OutMoveInfo.NextMoveStep(MoveStep.Out_20);
                    }
                    
                    break;

                case MoveStep.Out_20:
                    if (OutMoveInfo.MoveParam.IsNg)
                    {
                        OutToPos = RobotManage.OutCarReelPostion["Unloading_NgBox"];
                        if (Setting_Init.Temp_NGBox_Count >= Setting_Init.Temp_NG_BOX_MAXCOUNT)
                        {
                            Msg.add("NG箱已满,等待清理", MsgLevel.alarm);
                            OutMoveInfo.log($"NG箱已满,等待清理");
                        }
                        else
                        {
                            OutMoveInfo.NextMoveStep(MoveStep.Out_21);
                            Unloading_Middle_Axis.AbsMove(OutMoveInfo, OutToPos.Middle_P2, Config.Unloading_Middle_Axis_P1_speed);
                            Unloading_UpDown_Axis.AbsMove(OutMoveInfo, OutToPos.UpDown_P2, Config.Unloading_UpDown_Axis_P1_speed);
                            OutMoveInfo.log($"旋转轴,升降轴到达p2点NG");

                        }
                    }
                    else if (OutCarMoveInfo.MoveStep == MoveStep.OutCarReadyPut)
                    {
                        OutMoveInfo.MoveParam.CurrentStringNum = OutCurrentStringNum;
                        var topos = "Unloading_T" + OutCurrentStringNum;
                        OutToPos = RobotManage.OutCarReelPostion[topos];
                        OutMoveInfo.NextMoveStep(MoveStep.Out_21);
                        Unloading_Middle_Axis.AbsMove(OutMoveInfo, OutToPos.Middle_P2, Config.Unloading_Middle_Axis_P1_speed);
                        Unloading_UpDown_Axis.AbsMove(OutMoveInfo, OutToPos.UpDown_P2, Config.Unloading_UpDown_Axis_P1_speed);
                        OutMoveInfo.log($"旋转轴,升降轴到达p2点");
                    }
                    else {
                        Msg.add("等待出口料车可以放料", MsgLevel.info);
                        LogUtil.info("等待出口料车可以放料");
                    }
                    break;
                case MoveStep.Out_21:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_22);
                    Unloading_InOut_Axis.AbsMove(OutMoveInfo, OutToPos.InOut_P2, Config.Unloading_InOut_Axis_P1_speed);
                    OutMoveInfo.log($"进出轴达p2点");                    
                    break;
                case MoveStep.Out_22:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_23);
                    var pos1 = OutToPos.UpDown_P3 - (OutMoveInfo.MoveParam.PlateH - 8) * Config.Unloading_UpDown_Axis_MMtoPOS;
                    if (pos1 < 0)
                        pos1 = 0;
                    Unloading_UpDown_Axis.AbsMove(OutMoveInfo, pos1, Config.Unloading_UpDown_Axis_P1_speed);
                    OutMoveInfo.log($"升降轴到达放料p3点,pos:{pos1},PlateH:{OutMoveInfo.MoveParam.PlateH}");
                    //Unloading_UpDown_Axis.AbsMove(OutMoveInfo, OutToPos.UpDown_P3, Config.Unloading_UpDown_Axis_P1_speed);
                    //OutMoveInfo.log($"升降轴到达p3点");
                    break;
                case MoveStep.Out_23:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_24);
                    IOMove(IO_Type.Unloading_ReelVacuum_On, IO_VALUE.LOW);
                    OutMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(500));
                    OutMoveInfo.log($"关闭吸盘");
                    break;
                case MoveStep.Out_24:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_25);
                    Unloading_UpDown_Axis.AbsMove(OutMoveInfo, OutToPos.UpDown_P2, Config.Unloading_UpDown_Axis_P1_speed);
                    OutMoveInfo.log($"升降轴到达p2点");
                    break;
                case MoveStep.Out_25:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_26);
                    Unloading_UpDown_Axis.AbsMove(OutMoveInfo, OutToPos.UpDown_P2, Config.Unloading_UpDown_Axis_P1_speed);
                    OutMoveInfo.log($"升降轴到达p2点");
                    break;
                case MoveStep.Out_26:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_27);
                    Unloading_InOut_Axis.AbsMove(OutMoveInfo, Config.Unloading_InOut_Axis_P1, Config.Unloading_InOut_Axis_P1_speed);
                    OutMoveInfo.log($"进出轴到达p1点");
                    break;
                case MoveStep.Out_27:
                    if (OutMoveInfo.MoveParam.IsNg)
                    {
                        OutMoveInfo.NextMoveStep(MoveStep.Out_LabelFinished);
                        Setting_Init.Temp_NGBox_Count = Setting_Init.Temp_NGBox_Count + 1;
                    }
                    else
                        OutMoveInfo.NextMoveStep(MoveStep.Out_28);
                    Unloading_Middle_Axis.AbsMove(OutMoveInfo, Config.Unloading_Middle_Axis_P1, Config.Unloading_Middle_Axis_P1_speed);
                    Unloading_UpDown_Axis.AbsMove(OutMoveInfo, Config.Unloading_UpDown_Axis_P1, Config.Unloading_UpDown_Axis_P1_speed);
                    OutMoveInfo.log($"旋转轴,升降轴到达p1点,完成出口放料");
                    break;
                case MoveStep.Out_28:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_29);
                    var pos3 = Unloading_Batch_Axis.GetAclPosition();
                    pos3 = pos3 - Config.Unloading_UpDown_Axis_MMtoPOS * 30;
                    if (pos3 < 0)
                        pos3 = 0;
                    Unloading_Batch_Axis.AbsMove(OutMoveInfo, pos3, Config.Unloading_Batch_Axis_P1_speed);
                    //Unloading_Batch_Axis.RelMove(OutMoveInfo.MoveParam.PlateH/2 * Config.Unloading_UpDown_Axis_MMtoPOS*-1, Config.Unloading_UpDown_Axis_P1_speed);
                    OutMoveInfo.log($"批量轴高速下降:{pos3}");
                    break;
                case MoveStep.Out_29:
                        OutMoveInfo.NextMoveStep(MoveStep.Out_30);
                        BatchAxisToP2(OutMoveInfo, Unloading_Batch_Axis, OutGetReelCheckIOList(OutCurrentStringNum), IO_VALUE.LOW, Config.Unloading_Batch_Axis_P1, Config.Unloading_Batch_Axis_P1_speed);
                        OutMoveInfo.log($"批量轴快速下降到监测点灭");
                    break;
                case MoveStep.Out_30:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_31);
                    BatchAxisToP2(OutMoveInfo, Unloading_Batch_Axis, OutGetReelCheckIOList(OutCurrentStringNum), IO_VALUE.HIGH, Config.Unloading_Batch_Axis_P2, Config.Unloading_Batch_Axis_P2_speed);
                    OutMoveInfo.log($"批量轴慢速上升到检测点亮");
                    break;
                case MoveStep.Out_31:
                    OutMoveInfo.NextMoveStep(MoveStep.Out_WaitForLabel);
                    break;
                case MoveStep.Out_WaitForLabel:
                    Msg.add("等待贴标", MsgLevel.info);
                    OutMoveInfo.log($"等待贴标");
                    break;
                case MoveStep.Out_LabelFinished:
                    if (OutCarMoveInfo.MoveStep==MoveStep.OutCarReadyPut)
                        OutCarMoveInfo.NextMoveStep(MoveStep.OutCarReelPut);
                    OutMoveInfo.log("完成贴标");
                    OutMoveInfo.EndMove();
                    break;
                default:
                    OutMoveInfo.log($"未找到对应步骤:{OutMoveInfo.MoveStep}");
                    break;
            }
        }
        string OutMoveState()
        {
            string state = "";
            if (OutMoveInfo.MoveStep == MoveStep.Wait)
            {
                return "空闲中";
            }
            else if (OutMoveInfo.MoveStep > MoveStep.Wait)
            {
                state = "放料位置"+":"+ OutMoveInfo.MoveParam?.CurrentStringNum;
            }
            return state;
        }
    }
}