OutputEquip_Shelf.cs 17.1 KB
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
    partial class OutputEquip
    {

        #region 出料信息
        private int OutReelHeight = -1;
        private int OutReelCount = -1; 

        #endregion

        #region 料串处理
         
        private void StartShelfMove()
        {
            if (!ShelfMoveInfo.MoveType.Equals(RobotMoveType.None))
            {
                return;
            } 
            if (IOValue(IO_Type.O_WLine_WorkOutCheck).Equals(IO_VALUE.HIGH))
            {
                return;
            }

            if (IOValue(IO_Type.O_WLine_WorkCheck).Equals(IO_VALUE.HIGH))
            {
                ShelfMoveInfo.NewMove(RobotMoveType.ShelfPro);
                OS_12_WorkCheck();
            }
            else if (IOValue(IO_Type.O_WLine_InCheck).Equals(IO_VALUE.HIGH))
            {
                ShelfMoveInfo.NewMove(RobotMoveType.ShelfPro);
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_09_WaitInWLine);
                ShelfWorkLog("接料线体入口有新料架,空料串阻挡上升,等待2000毫秒料架到达接料线体");
                IOMove(IO_Type.O_SWLine_Run, IO_VALUE.HIGH);
                IOMove(IO_Type.O_ELine_InStop, IO_VALUE.LOW);
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_InCheck, IO_VALUE.HIGH));
            }
            else if (IOValue(IO_Type.O_ELine_InCheck).Equals(IO_VALUE.HIGH))
            {
                ShelfMoveInfo.NewMove(RobotMoveType.ShelfPro);

                //判断升降盘是否在后退端
                if (TrayFixedIsBack())
                {
                    ShelfMoveInfo.NextMoveStep(StepEnum.OS_03_LocationDown);
                    ShelfWorkLog("空料串入口有新料架, 定位气缸下降,工位阻挡上升");
                    CylinderMove(ShelfMoveInfo, IO_Type.O_Work_LocationUp, IO_Type.O_Work_LocationDown);
                    IOMove(IO_Type.O_WLine_WorkStop, IO_VALUE.LOW);
                }
                else
                {
                    ShelfMoveInfo.NextMoveStep(StepEnum.OS_01_BatchAxisToP2);
                    ShelfWorkLog("空料串入口有新料架,升降盘不在后退端,提升轴回到P2");
                    BatchAxis.AbsMove(ShelfMoveInfo, Config.BatchAxisP2, Config.BatchAxis_P2Speed);
                }
            }
        }

        private void OS_12_WorkCheck()
        {
            ShelfMoveInfo.NextMoveStep(StepEnum.OS_12_WorkCheck);
            IOMove(IO_Type.O_WLine_Run, IO_VALUE.HIGH);
            ShelfWorkLog("工位检测信号亮,,在转动5000ms");
            ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(5000));
            ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_WorkCheck, IO_VALUE.HIGH));

        }

        private void ShelfMoveProcess()
        {
            if (ShelfMoveInfo.IsInWait)
            {
                CheckWait(ShelfMoveInfo);
            }
            if (ShelfMoveInfo.IsInWait)
            {
                return;
            }

            #region 准备空料架
            if (ShelfMoveInfo.IsStep(StepEnum.OS_01_BatchAxisToP2))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_02_TrayL_After);
                ShelfWorkLog("升降盘定位气缸后退");
                TrayFixedBack(ShelfMoveInfo);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_02_TrayL_After))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_03_LocationDown);
                ShelfWorkLog("定位气缸下降,工位阻挡上升");
                CylinderMove(ShelfMoveInfo, IO_Type.O_Work_LocationUp, IO_Type.O_Work_LocationDown);
                IOMove(IO_Type.O_WLine_WorkStop, IO_VALUE.LOW);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_03_LocationDown))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_04_BatchAxisToP1);
                ShelfWorkLog("升降盘不在后退端,提升轴到待机P1");
                BatchAxis.AbsMove(ShelfMoveInfo, Config.BatchAxisP1, Config.BatchAxis_P1Speed);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_04_BatchAxisToP1))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_05_WaitECheck);
                ShelfWorkLog("等待空料串入料口有信号");
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_ELine_InCheck, IO_VALUE.HIGH));
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_05_WaitECheck))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_06_TopUp);
                ShelfWorkLog("空料串,接料线体,入口顶升上升");
                CylinderMove(ShelfMoveInfo, IO_Type.O_ELine_TopDown, IO_Type.O_ELine_TopUp);
                CylinderMove(ShelfMoveInfo, IO_Type.O_WLine_TopDown, IO_Type.O_WLine_TopUp);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_06_TopUp))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_07_SWLineRun);
                ShelfWorkLog("出料料架:空料串阻挡下降,空料串链条转动,横移电机运转");
                IOMove(IO_Type.O_ELine_InStop, IO_VALUE.HIGH);
                IOMove(IO_Type.O_ELine_Run, IO_VALUE.HIGH);
                IOMove(IO_Type.O_SWLine_Run, IO_VALUE.HIGH);
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_ELine_InStop, IO_VALUE.HIGH));
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_ELine_Run, IO_VALUE.HIGH));
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_SWLine_Run, IO_VALUE.HIGH));
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_07_SWLineRun))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_08_WLineInCheck);
                ShelfWorkLog("等待入料线进口信号亮");
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_InCheck, IO_VALUE.HIGH));
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_08_WLineInCheck))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_09_WaitInWLine);
                ShelfWorkLog("空料串阻挡上升,等待2000毫秒料架到达接料线体");
                IOMove(IO_Type.O_ELine_InStop, IO_VALUE.LOW);
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(5000));
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_InCheck, IO_VALUE.HIGH));
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_09_WaitInWLine))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_10_TopDown);
                ShelfWorkLog("空料串阻挡上升,顶升下降,线体停止转动");
                IOMove(IO_Type.O_SWLine_Run, IO_VALUE.LOW);
                IOMove(IO_Type.O_ELine_InStop, IO_VALUE.LOW);
                CylinderMove(ShelfMoveInfo, IO_Type.O_ELine_TopUp, IO_Type.O_ELine_TopDown);
                CylinderMove(ShelfMoveInfo, IO_Type.O_WLine_TopUp, IO_Type.O_WLine_TopDown);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_10_TopDown))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_11_WLineRun);
                ShelfWorkLog("接料线体工位阻挡上升,接料线体转动,等待工位检测信号");
                IOMove(IO_Type.O_WLine_WorkStop, IO_VALUE.LOW);
                IOMove(IO_Type.O_WLine_Run, IO_VALUE.HIGH);
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_WorkCheck, IO_VALUE.HIGH));
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_11_WLineRun))
            {
                OS_12_WorkCheck();
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_12_WorkCheck))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_13_StopLineRun);
                ShelfWorkLog("接料线体停止转动");
                IOMove(IO_Type.O_WLine_Run, IO_VALUE.LOW);
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_Run, IO_VALUE.LOW));
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_13_StopLineRun))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_14_WLocationUp);
                ShelfWorkLog("工位定位气缸上升");
                CylinderMove(ShelfMoveInfo, IO_Type.O_Work_LocationDown, IO_Type.O_Work_LocationUp);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_14_WLocationUp))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_15_BatchAxisToP2);
                ShelfWorkLog("提升轴下降到P2");
                BatchAxis.AbsMove(ShelfMoveInfo, Config.BatchAxisP2, Config.BatchAxis_P2Speed);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_15_BatchAxisToP2))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_16_WTrayLForward);
                ShelfWorkLog("托盘定位前进");
                TrayFixedFoward(ShelfMoveInfo);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_16_WTrayLForward))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_17_BatchAxisToP3);
                ShelfWorkLog("批量轴匀速到P3点,清空出料信息=0");
                BatchAxisToP3(ShelfMoveInfo);
                OutReelHeight = 0;
                OutReelCount = 0;
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_17_BatchAxisToP3))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_18_ShelfReady);
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
                ShelfWorkLog("料架准备完成");
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_18_ShelfReady))
            {
                //判断是否需要送出料架
                if (AutoSendShelfOut && OutReelCount > 0)
                {
                    string msg = " OS_18_ShelfReady,收到AutoSendShelfOut ";
                    ShelfMoveInfo.NextMoveStep(StepEnum.OS_31_ShendShelfOut);
                    ShelfWorkLog(msg + "开始送出料架");
                }
                else
                {
                    ShelfMoveInfo.NextMoveStep(StepEnum.OS_18_ShelfReady);
                    ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
                }
            }


            #endregion

            #region 放料贴标处理

            else if (ShelfMoveInfo.IsStep(StepEnum.OS_21_BatchDownH))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_22_WaitTray);
                ShelfWorkLog("等待料盘放入料架");
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_23_TrayOK))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_24_BatchToP3);
                ShelfWorkLog("批量轴匀速到P3或信号亮");
                BatchAxisToP3(ShelfMoveInfo);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_24_BatchToP3))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_25_WaitLabel);
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
                ShelfWorkLog("等待贴标");
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_25_WaitLabel))
            {
                //TODO 此处需要验证贴标完成
                if (SecMoveInfo.MoveType.Equals(RobotMoveType.None))
                {
                    ShelfMoveInfo.NextMoveStep(StepEnum.OS_26_LabelOk);
                    ShelfWorkLog("贴标完成");
                }
                else if (SecMoveInfo.IsTimeOut(120))
                {
                    WarnMsg = SecMoveInfo.Name + "等待 贴标结束  超时[" + FormUtil.GetSpanStr(MoveInfo.StepSpan()) + "]秒";
                    LogUtil.error(WarnMsg);
                    Alarm(AlarmType.IoSingleTimeOut);
                }
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_26_LabelOk))
            {
                CheckNeedSendShelf();

            }
            #endregion

            #region 送出料架

            else if (ShelfMoveInfo.IsStep(StepEnum.OS_31_ShendShelfOut))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_32_BatchToP2);
                ShelfWorkLog("批量轴下降到P2");
                BatchAxis.AbsMove(ShelfMoveInfo, Config.BatchAxisP2, Config.BatchAxis_P2Speed);

            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_32_BatchToP2))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_33_TrayFixedBack);
                ShelfWorkLog("托盘定位气缸后退");
                TrayFixedBack(ShelfMoveInfo);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_33_TrayFixedBack))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_34_LocationDown);
                ShelfWorkLog("定位气缸下降");
                CylinderMove(ShelfMoveInfo, IO_Type.O_Work_LocationUp, IO_Type.O_Work_LocationDown);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_34_LocationDown))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_35_BatchAxisToP1);
                ShelfWorkLog("批量轴到P1");
                BatchAxis.AbsMove(ShelfMoveInfo, Config.BatchAxisP1, Config.BatchAxis_P1Speed);
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_35_BatchAxisToP1))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_36_WaitOutNoShelf);
                ShelfWorkLog("等待出口无料架");
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_WorkOutCheck, IO_VALUE.LOW));
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_OutCheck, IO_VALUE.LOW));
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_36_WaitOutNoShelf))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_37_OutStopUp);
                ShelfWorkLog("出口阻挡上升,清空出料信息=-1");

                OutReelHeight = -1;
                OutReelCount = -1;
                IOMove(IO_Type.O_WLine_OutStop, IO_VALUE.LOW);
                IOMove(IO_Type.O_WLine_WorkStop, IO_VALUE.HIGH);
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_WorkStop, IO_VALUE.HIGH));
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_37_OutStopUp))
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_38_LineRun);
                ShelfWorkLog("链条正转到出口有检测信号");
                IOMove(IO_Type.O_WLine_Run, IO_VALUE.HIGH);
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_WorkCheck, IO_VALUE.LOW));
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_WorkOutCheck, IO_VALUE.LOW));
                ShelfMoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.O_WLine_OutCheck, IO_VALUE.HIGH));
            }
            else if (ShelfMoveInfo.IsStep(StepEnum.OS_38_LineRun))
            {
                ShelfMoveInfo.EndMove();
                IOMove(IO_Type.O_WLine_Run, IO_VALUE.LOW);
                IOMove(IO_Type.O_WLine_WorkStop, IO_VALUE.LOW);
                ShelfWorkLog("送出料架完成,链条停止转动,阻挡上升 ");
            }
            #endregion

        }

        private void CheckNeedSendShelf()
        {
            //判断是否需要送出料架
            bool needSendOut = false;
            string msg = "";
            if (AutoSendShelfOut)
            {
                msg = "放料完成自动送出料架,";
                needSendOut = true;
            }
            else
            {
                int currPositon = BatchAxis.GetAclPosition();
                int tp = currPositon - Config.Height_ChangeValue * 40;
                if (tp <= Config.BatchAxisP2)
                {
                    msg = "料架已满[" + currPositon + "]";
                    needSendOut = true;
                }
            }
            if (needSendOut)
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_31_ShendShelfOut);
                ShelfWorkLog(msg + "开始送出料架");
            }
            else
            {
                ShelfMoveInfo.NextMoveStep(StepEnum.OS_18_ShelfReady);
                ShelfWorkLog("料架准备完成");
            }
        }

        private int StartMovePosition = 0;
        private void BatchAxisToP3(RobotMoveInfo moveInfo)
        {
            int targetP3 = Config.BatchAxisP3;
            int targetSpeed = Config.BatchAxis_P3Speed; 
            moveInfo.TimeOutSeconds = 200;
            moveInfo.CanWhileCount = 0;
            //  需要增加定时器,获取验证信号并停止伺服
            StartMovePosition = BatchAxis.GetAclPosition();
            moveInfo.WaitList.Add(WaitResultInfo.WaitBatchAxis(BatchAxis.Config, targetP3, targetSpeed));
            BatchAxis.Config.TargetPosition = targetP3;
            BatchAxis.AbsMove(null, targetP3, targetSpeed);
            //开始检测信号
            BatchAxis.BatchAxisStartCheck(IO_Type.O_WLine_TrayCheck,IO_VALUE.HIGH);
        }
        #endregion



    }
}