PackageLine_S1RightMove.cs 4.1 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);
                        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())
                {
                    if (outShelfStep.IsStep(SHELF_TO_LEAVE_STATION.WAIT_OUT_IO))
                    {
                        //上一个料架流出未完成
                        s1RLeaveStep.Msg = "料架流出工位1完成,但上一个料架未到出口";
                    }
                    else
                    {
                        s1RLeaveStep.Msg = "工位1放行料架完成,停止工位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_S2);
                    }
                }
                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秒仍未完成,重新放行";
                    }
                }

            }

        }
    }
}
//        if (s2StationStep.IsFinished())
//        {
//            if (outShelfStep.IsStep(SHELF_TO_LEAVE_STATION.WAIT_OUT_IO))
//            {
//                //上一个料架流出未完成
//                s2StationStep.Msg = "料架流出工位2完成,但上一个料架未到出口";
//            }
//            else
//            {
//                s2StationStep.Msg = "工位2放行料架完成,停止工位2线体";
//                s2StationStep.ToNextStep(S2_STATION_STEP.NONE);
//                IOMove(IO_Type.S2_LineRun, IO_VALUE.LOW);
//                //右侧下方线体是否停止,要根据情况来
//                outShelfStep.ToNextStep(SHELF_TO_LEAVE_STATION.SHELF_OUT_S2);
//            }
//        }
//        else
//        {
//            KeepLineRun(IO_Type.R_LineRun);
//            if (s2StationStep.IsTimeOut(15000))
//            {
//                s2StationStep.Msg = "工位2放行料架15秒仍未完成,重新放行";
//                s2StationStep.ToNextStep(S2_STATION_STEP.OUT_SHELF);
//            }
//        }