PackageLine_S1RightMove.cs 2.5 KB
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
    partial class PackageLine
    {

        /// <summary>
        /// 上料工位放料架步骤
        /// </summary>
        public enum S1_R_LEAVE_SHELF_STEP
        {
            /// <summary>
            /// 检查是否有待离开的料架
            /// </summary>
            NONE,
            /// <summary>
            /// 等待离开完成
            /// </summary>
            WAIT_LEAVE,
        }

        public StepInfo<S1_R_LEAVE_SHELF_STEP> s1RLeaveStep = new StepInfo<S1_R_LEAVE_SHELF_STEP>(S1_R_LEAVE_SHELF_STEP.NONE);


        private void S1_R_CanMoveProcess()
        {
            if (s1RLeaveStep.IsStep(S1_R_LEAVE_SHELF_STEP.NONE))
            {
                bool hasWaitShelf = IOValue(IO_Type.AftS1_StopCheck).Equals(IO_VALUE.HIGH);
                //有等待的料架
                if (hasWaitShelf)
                {
                    //验证料架是否可用
                    if (LineManager.Line.S2CanGetShelf)
                    {
                        s1RLeaveStep.Msg = "S1工位右侧发现料架,AftS1_StopCylinder(2秒),打开S1工位链条, 将其送出";
                        s1RLeaveStep.ToNextStep(S1_R_LEAVE_SHELF_STEP.WAIT_LEAVE);
                        CheckAndMove(IO_Type.S1_LineRun, IO_VALUE.HIGH);
                        CheckAndMove(IO_Type.R_LineRun, IO_VALUE.HIGH);
                        IOMove(IO_Type.AftS1_StopCylinder, IO_VALUE.HIGH, 2000);
                        s1RLeaveStep.AddIoWait(IO_Type.AftS1_StopCheck,IO_VALUE.LOW,1000);
                    }
                }
            }
            else if(s1RLeaveStep.IsStep(S1_R_LEAVE_SHELF_STEP.WAIT_LEAVE))
            {
                if(s1RLeaveStep.IsFinished())
                {
                    s1RLeaveStep.Msg = "S1工位右侧发现料架送出完成";
                    s1RLeaveStep.ToNextStep(S1_R_LEAVE_SHELF_STEP.NONE);
                    CheckAndMove(IO_Type.S1_LineRun, IO_VALUE.LOW);
                    CheckAndMove(IO_Type.R_LineRun, IO_VALUE.LOW);
                    s1RLeaveStep.AddTimeWait(2000);
                }
                else if(s1RLeaveStep.IsTimeOut(20000))
                {
                    s1RLeaveStep.ToNextStep(S1_R_LEAVE_SHELF_STEP.NONE);
                    CheckAndMove(IO_Type.S1_LineRun, IO_VALUE.LOW);
                    CheckAndMove(IO_Type.R_LineRun, IO_VALUE.LOW);
                }
            }
        }
    }
}