MainMachine _MiddleProcess.cs 8.5 KB
using CodeLibrary;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLibrary
{
    partial class MainMachine
    {
        
        void MiddleProcess()
        {
            if (CheckWait(MiddleMoveInfo))
                return;

            switch (MiddleMoveInfo.MoveStep)
            {
                case MoveStep.M_Standby:
                    if (RightMoveInfo.MoveStep == MoveStep.R10_WaitReelLeave)
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M02);
                        Take_Middle_Axis.AbsMove(MiddleMoveInfo, Config.Take_Middle_P2, Config.Take_Middle_P2_speed);
                        Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P2, Config.Take_UpDown_P2_speed);
                        electricClamp.Release();
                        //复制右侧料盘信息
                        MiddleMoveInfo.MoveParam = RightMoveInfo.MoveParam.clone();
                        MiddleMoveInfo.log("右侧可以取料,旋转轴/上下轴转到P2点");
                        MiddleMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.RightArm_Check, IO_VALUE.HIGH));
                    }
                    else if (MiddleMoveInfo.IsTimeOut(60)) {
                        MiddleMoveInfo.log("等待右侧可以取料");
                    }
                    break;
                case MoveStep.M02:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M03);
                    Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P3, Config.Take_UpDown_P3_speed);
                    MiddleMoveInfo.log("右侧可以取料,上下轴转到P3点,开始取料");
                    break;
                case MoveStep.M03:
                    if (electricClamp.Clamp())
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M04);
                        MiddleMoveInfo.log("取料气缸夹紧");
                    }
                    break;
                case MoveStep.M04:
                    Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P2, Config.Take_UpDown_P2_speed);
                    MiddleMoveInfo.NextMoveStep(MoveStep.M05);
                    MiddleMoveInfo.log("上下轴返回P2点");
                    break;
                case MoveStep.M05:
                    if (electricClamp.IsClamp)
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M06);
                        RightMoveInfo.NextMoveStep(MoveStep.R11_NextReel);
                        MiddleMoveInfo.log("通知右侧料串,料已取走");
                    }
                    else if (LeftMoveInfo.MoveStep == MoveStep.L10_WaitReelPut){
                        if (MiddleMoveInfo.MoveParam.IsNg)
                        {
                            Msg.add("抓料失败请手动处理,请将料盘放入:NG箱,按右侧按钮继续", MsgLevel.warning);
                        }
                        else {
                            Msg.add("抓料失败请手动处理,请将料盘放入: 左侧料串,按右侧按钮继续", MsgLevel.warning);
                        }

                        if (IOValue(IO_Type.Right_BTN).Equals(IO_VALUE.HIGH))
                        {
                            RightMoveInfo.NextMoveStep(MoveStep.R11_NextReel);
                            if (MiddleMoveInfo.MoveParam.IsNg)
                            {
                                MiddleMoveInfo.NextMoveStep(MoveStep.M_ReturnToP1);
                            }
                            else {
                                MiddleMoveInfo.NextMoveStep(MoveStep.M06);
                            }
                        }
                    }
                    else if (MiddleMoveInfo.IsTimeOut(60))
                    {
                        MiddleMoveInfo.log("抓料失败,等待左侧允许放料");
                    }
                    break;
                case MoveStep.M06:
                    if (MiddleMoveInfo.MoveParam.IsNg)
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M20_ToNgBox);
                        MiddleMoveInfo.log("判断为NG料");
                    }
                    //等待右侧料窜计算盘高
                    else if (RightMoveInfo.MoveStep >= MoveStep.R06_GettedReelHigh && RightMoveInfo.MoveStep <= MoveStep.R10_WaitReelLeave)
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M07);
                        MiddleMoveInfo.MoveParam.PlateH = LastHeight;

                        MiddleMoveInfo.NextMoveStep(MoveStep.M07);
                        MiddleMoveInfo.log($"已获取盘高,开始往左侧料窜移栽,{MiddleMoveInfo.MoveParam.ToStr()}");

                    }
                    else if (MiddleMoveInfo.IsTimeOut(60))
                    {
                        MiddleMoveInfo.log("等待计算盘高");
                    }
                     break;
                case MoveStep.M07:
                    if (LeftMoveInfo.MoveStep == MoveStep.L10_WaitReelPut)
                    {
                        MiddleMoveInfo.NextMoveStep(MoveStep.M08);
                        if (electricClamp.IsClamp)
                        {
                            Take_Middle_Axis.AbsMove(MiddleMoveInfo, Config.Take_Middle_P3, Config.Take_Middle_P3_speed);
                            Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P4, Config.Take_UpDown_P4_speed);
                            MiddleMoveInfo.log("左侧允许放料,旋转轴/上下周到P3/P4");
                            MiddleMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LeftArm_Check, IO_VALUE.HIGH));
                        }
                        else {
                            //Take_Middle_Axis.AbsMove(MiddleMoveInfo, Config.Take_Middle_P1, Config.Take_Middle_P1_speed);
                            //Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P1, Config.Take_UpDown_P1_speed);
                            MiddleMoveInfo.log("没有抓到料,继续下一步");
                        }
                    }
                    else if (MiddleMoveInfo.IsTimeOut(60))
                    {
                        MiddleMoveInfo.log("等待左侧允许放料");
                    }
                    break;
                case MoveStep.M08:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M_ReturnToP1);
                    electricClamp.Release();
                    LeftMoveInfo.MoveParam = MiddleMoveInfo.MoveParam.clone();
                    LeftMoveInfo.NextMoveStep(MoveStep.L11_ReelPutted);                    
                    MiddleMoveInfo.log("取料夹爪放松,通知左侧料窜已放入,左侧等待3秒");
                    LeftMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
                    break;
                case MoveStep.M_ReturnToP1:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M_Standby);
                    Take_Middle_Axis.AbsMove(MiddleMoveInfo, Config.Take_Middle_P1, Config.Take_Middle_P1_speed);
                    Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P1, Config.Take_UpDown_P1_speed);
                    MiddleMoveInfo.log("放料完成,旋转轴/上下轴返回待机点");
                    break;
                case MoveStep.M20_ToNgBox:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M21);
                    Take_Middle_Axis.AbsMove(MiddleMoveInfo, Config.Take_Middle_P5, Config.Take_Middle_P5_speed);
                    Take_UpDown_Axis.AbsMove(MiddleMoveInfo, Config.Take_UpDown_P5, Config.Take_UpDown_P5_speed);
                    MiddleMoveInfo.log("旋转轴/上下轴转到P5 NG位置");
                    break;
                case MoveStep.M21:
                    MiddleMoveInfo.NextMoveStep(MoveStep.M_ReturnToP1);
                    electricClamp.Release();
                    MiddleMoveInfo.log("取料夹爪放松,放料入NG位置.");
                    break;
                default:
                    MiddleMoveInfo.log($"未找到对应步骤:{MiddleMoveInfo.MoveStep}");
                    break;
            }
        }

        string MiddleState() {
            string state = "";
            if (MiddleMoveInfo.MoveStep == MoveStep.M_Standby || MiddleMoveInfo.MoveStep == MoveStep.Wait)
                state += "等待中";
            else
                state += "当前ReelID:" + MiddleMoveInfo.MoveParam.WareCode;

            return state;
        }



    }
}