PackageLine_S1RightMove.cs 3.3 KB
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Diagnostics;
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 Stopwatch stopwatch = new Stopwatch();
        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)//&& LineManager.checkWatch(stopwatch,5000)
                {
                    //验证料架是否可用
                    if (LineManager.Line.S2CanGetShelf && LineManager.checkWatch(stopwatch, 5000))
                    {
                        s1RLeaveStep.Msg = "S1工位右侧发现料架,AftS1_StopCylinder(2秒),打开S1工位链条, 将其送出";
                        s1RLeaveStep.ToNextStep(S1_R_LEAVE_SHELF_STEP.WAIT_LEAVE);
                        CheckAndMove(IO_Type.S1_LineRun, IO_VALUE.HIGH);
                        IOMove(IO_Type.AftS1_StopCylinder, IO_VALUE.HIGH);
                        s1RLeaveStep.AddIoWait(IO_Type.AftS1_StopCheck,IO_VALUE.LOW);
                    }
                }
                else
                {
                    stopwatch.Stop();
                }
            }
            else if(s1RLeaveStep.IsStep(S1_R_LEAVE_SHELF_STEP.WAIT_LEAVE))
            {
                if(s1RLeaveStep.IsFinished())
                {
                    IOMove(IO_Type.AftS1_StopCylinder, IO_VALUE.LOW);
                    if (outShelfStep.IsStep(SHELF_TO_LEAVE_STATION.WAIT_OUT_IO))
                    {
                        //上一个料架流出未完成
                        s1RLeaveStep.Msg = "料架流出工位1完成,但上一个料架未到出口";
                    }
                    else
                    {
                        s1RLeaveStep.Msg = "工位1放行料架完成";
                        //CheckAndMove(IO_Type.S1_LineRun, IO_VALUE.LOW);
                        s1RLeaveStep.ToNextStep(S1_R_LEAVE_SHELF_STEP.NONE);
                        //右侧下方线体是否停止,要根据情况来
                        outShelfStep.ToNextStep(SHELF_TO_LEAVE_STATION.SHELF_OUT_S1);
                    }
                }
                else
                {
                    KeepLineRun(IO_Type.S1_LineRun);
                    KeepLineRun(IO_Type.R_LineRun);
                    if (s1RLeaveStep.IsTimeOut(20000))
                    {
                        s1RLeaveStep.ToNextStep(S1_R_LEAVE_SHELF_STEP.NONE);
                        s1RLeaveStep.Msg = "工位1放行料架20秒仍未完成,重新放行";
                    }
                }

            }

        }
    }
}