PackageLine_BuffShelf.cs 14.6 KB
 using OnlineStore.LoadCSVLibrary;
using System.Diagnostics;

namespace OnlineStore.DeviceLibrary
{
    partial class PackageLine
    {

        /// <summary>
        /// 双层线右侧缓存步骤
        /// </summary>
        public enum RBUFF_TRANVERSE_STEP
        {
            NONE,
            #region 右侧上层工作位到缓存位
            /// <summary>
            /// 右侧上层缓存位需要料架
            /// </summary>
            SW2B_R1_GetShelf,
            /// <summary>
            /// 右侧横移上升
            /// </summary>
            SW2B_R2_Tranverse_Up,
            /// <summary>
            /// 右侧横移正传
            /// </summary>
            SW2B_R3_Tranverse_Run,
            /// <summary>
            /// 料架到达横移缓存位置
            /// </summary>
            SW2B_R4_Shelf_To_Buf,
            /// <summary>
            /// 横移下降
            /// </summary>
            SW2B_R5_Tranverse_Down,
            /// <summary>
            /// 料架离开横移
            /// </summary>
            SW2B_R6_Shelf_Leave_Buf,

            #endregion
            #region 右侧上层缓存位到工作位
            SB2W_R0_None,
            /// <summary>
            /// 左侧工作位需要料架
            /// </summary>
            SB2W_R1_GetShelf,
            /// <summary>
            /// 左侧缓存横移上升
            /// </summary>
            SB2W_R2_Tranverse_Up,
            /// <summary>
            /// 左侧横移反传
            /// </summary>
            SB2W_R3_Tranverse_Run,
            /// <summary>
            /// 料架到达横移工作位位置
            /// </summary>
            SB2W_R4_Shelf_To_Buf,
            /// <summary>
            /// 横移下降
            /// </summary>
            SB2W_R5_Tranverse_Down,
            /// <summary>
            /// 料架离开横移
            /// </summary>
            SB2W_R6_Shelf_Leave_Buf,
            #endregion
        }

        public StepInfo<RBUFF_TRANVERSE_STEP> rHBuffTransStep = new StepInfo<RBUFF_TRANVERSE_STEP>(RBUFF_TRANVERSE_STEP.NONE);


        private Stopwatch rightNeedWatch = new Stopwatch();
        private Stopwatch rightFullWatch = new Stopwatch();
        /// <summary>
        /// 右侧上层缓存功能
        /// </summary>
        private void ProcessRBufferTranverse()
        {

            if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.NONE))
            {
                if(benQInFromOutStep.GetCurStep()>=BenQ_IN_FROM_OUT_STEP.NONE && benQInFromOutStep.GetCurStep() <= BenQ_IN_FROM_OUT_STEP.MANNUAL_SHELF_LEAVE_SUCCESS)//无料架从右侧进入
                {
                    //右侧缓存位有料架,工作位无料架
                    if (IOValue(IO_Type.RHigh_StopCheck2).Equals(IO_VALUE.LOW))
                    {
                        if (IOValue(IO_Type.Right_Buf_Full_Shelf_Sig).Equals(IO_VALUE.HIGH))
                        {
                            if (LineManager.checkWatch(rightFullWatch, 5000, true))
                            {
                                //开始料架转移处理
                                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SB2W_R0_None);
                                rHBuffTransStep.Msg = "右侧双层线_" + "上层需要料架,且缓存有料架 开始料架转移处理";
                            }
                        }
                        else
                        {
                            CheckAndMove(IO_Type.Right_Buf_Run, IO_VALUE.LOW);
                            IOMove(IO_Type.Right_Buf_BackRun, IO_VALUE.HIGH, 10000);
                            rightFullWatch.Stop();
                        }
                    }
                    else
                    {
                        rightFullWatch.Stop();
                    }

                    //右侧工作位有料架,缓存位无料架
                    if (IOValue(IO_Type.RHigh_StopCheck1).Equals(IO_VALUE.HIGH))
                    {
                        if (IOValue(IO_Type.Right_Buf_Full_Shelf_Sig).Equals(IO_VALUE.LOW))
                        {
                            if (LineManager.checkWatch(rightNeedWatch, 5000, true))
                            {
                                //开始料架转移处理
                                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SW2B_R1_GetShelf);
                                rHBuffTransStep.Msg = "右侧双层线_" + "缓存层需要料架,且工作位有料架 开始料架转移处理";
                            }
                        }
                        else
                        {
                            CheckAndMove(IO_Type.Right_Buf_BackRun, IO_VALUE.LOW); 
                            IOMove(IO_Type.Right_Buf_Run, IO_VALUE.HIGH, 10000);
                            rightNeedWatch.Stop();
                        }
                    }
                    else
                    {
                        rightNeedWatch.Stop();
                    }
                }
            }

            RTransBuff2WorkProcess();
            RTransWork2BuffProcess();
        }

         void RTransBuff2WorkProcess()
        {

            if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SB2W_R0_None))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SB2W_R1_GetShelf);
                rHBuffTransStep.Msg= "右侧缓存料架放到横移上";
                IOMove(IO_Type.Right_Buf_Out_StopDown, IO_VALUE.HIGH, 2000);
                CheckAndMove(IO_Type.Right_Buf_Run, IO_VALUE.LOW);
                CheckAndMove(IO_Type.Right_Buf_BackRun, IO_VALUE.HIGH);
                CheckAndMove(IO_Type.Right_Tranverse_Down, IO_VALUE.HIGH);
                CheckAndMove(IO_Type.Right_Tranverse_Up, IO_VALUE.LOW);
                IOMove(IO_Type.Right_Buf_Near_StopDown, IO_VALUE.HIGH, 2000);
                rHBuffTransStep.AddTimeWait(1000);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Down, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Up, IO_VALUE.LOW);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Buf_Tranverse_Shelf_Sig, IO_VALUE.HIGH);
            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SB2W_R1_GetShelf))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SB2W_R2_Tranverse_Up);
                rHBuffTransStep.Msg = "左侧横移上升";
                CheckAndMove(IO_Type.Right_Tranverse_Down, IO_VALUE.LOW);
                CheckAndMove(IO_Type.Right_Buf_BackRun, IO_VALUE.LOW);
                IOMove(IO_Type.Right_Tranverse_Up, IO_VALUE.HIGH);
                rHBuffTransStep.AddTimeWait(1000);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Down, IO_VALUE.LOW);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Up, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Up_Sig1, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Up_Sig2, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Buf_Tranverse_Up_Sig1, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Buf_Tranverse_Up_Sig2, IO_VALUE.HIGH);
            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SB2W_R2_Tranverse_Up))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SB2W_R3_Tranverse_Run);
                rHBuffTransStep.Msg = "左侧横移电机反转";
                CheckAndMove(IO_Type.Right_Tranverse_Run, IO_VALUE.LOW);
                IOMove(IO_Type.Right_Tranverse_BackRun, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_BackRun, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Run, IO_VALUE.LOW);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_InPosition_Sig, IO_VALUE.HIGH);
                rHBuffTransStep.AddTimeWait(2000);
            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SB2W_R3_Tranverse_Run))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SB2W_R4_Shelf_To_Buf);
                rHBuffTransStep.Msg = "料架到达工作横移位置";
                IOMove(IO_Type.Right_Tranverse_BackRun, IO_VALUE.LOW);
                IOMove(IO_Type.Right_Tranverse_Up, IO_VALUE.LOW);
                CheckAndMove(IO_Type.Right_Tranverse_Down, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_BackRun, IO_VALUE.LOW);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Up, IO_VALUE.LOW);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Down, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Down_Sig1, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Down_Sig2, IO_VALUE.HIGH);
            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SB2W_R4_Shelf_To_Buf))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SB2W_R5_Tranverse_Down);
                rHBuffTransStep.Msg = "左侧横移下降";
                CheckAndMove(IO_Type.Right_Buf_Far_StopDown, IO_VALUE.LOW);
                IOMove(IO_Type.RHigh_LineRun, IO_VALUE.HIGH);
                IOMove(IO_Type.Right_Tranverse_StopDown, IO_VALUE.HIGH, 2000);
                rHBuffTransStep.AddIoWait(IO_Type.RHigh_StopCheck1, IO_VALUE.HIGH);

            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SB2W_R5_Tranverse_Down))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SB2W_R6_Shelf_Leave_Buf);
                rHBuffTransStep.Msg = "料架离开左侧工作位横移";
                rHBuffTransStep.AddTimeWait(10000);
            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SB2W_R6_Shelf_Leave_Buf))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.NONE);
                rHBuffTransStep.Msg = "料架移到左侧工作位完成,停止链条";
                CheckAndMove(IO_Type.RHigh_LineRun, IO_VALUE.LOW);
            }
        }
        /// <summary>
        /// 左侧工作位到缓存位
        /// </summary>
        void RTransWork2BuffProcess()
        {

            if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SW2B_R1_GetShelf))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SW2B_R2_Tranverse_Up);
                rHBuffTransStep.Msg = "左侧横移上升";
                CheckAndMove(IO_Type.Right_Tranverse_Down, IO_VALUE.LOW);
                IOMove(IO_Type.Right_Tranverse_Up, IO_VALUE.HIGH);
                rHBuffTransStep.AddTimeWait(1000);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Down, IO_VALUE.LOW);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Up, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Up_Sig1, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Up_Sig2, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Buf_Tranverse_Up_Sig1, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Buf_Tranverse_Up_Sig2, IO_VALUE.HIGH);
            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SW2B_R2_Tranverse_Up))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SW2B_R3_Tranverse_Run);
                rHBuffTransStep.Msg = "左侧横移电机正传";
                CheckAndMove(IO_Type.Right_Tranverse_BackRun, IO_VALUE.LOW);
                IOMove(IO_Type.Right_Tranverse_Run, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_BackRun, IO_VALUE.LOW);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Run, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Buf_Tranverse_InPosition_Sig, IO_VALUE.HIGH);
                rHBuffTransStep.AddTimeWait(2000);
            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SW2B_R3_Tranverse_Run))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SW2B_R4_Shelf_To_Buf);
                rHBuffTransStep.Msg = "料架到达缓存横移位置";
                IOMove(IO_Type.Right_Tranverse_Run, IO_VALUE.LOW);
                IOMove(IO_Type.Right_Tranverse_Up, IO_VALUE.LOW);
                CheckAndMove(IO_Type.Right_Tranverse_Down, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Run, IO_VALUE.LOW);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Up, IO_VALUE.LOW);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Tranverse_Down, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Buf_Tranverse_Down_Sig1, IO_VALUE.HIGH);
                rHBuffTransStep.AddIoWait(IO_Type.Right_Buf_Tranverse_Down_Sig2, IO_VALUE.HIGH);
            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SW2B_R4_Shelf_To_Buf))
            {
                if (IOValue(IO_Type.Right_Buf_Full_Shelf_Sig).Equals(IO_VALUE.LOW))
                {
                    rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SW2B_R5_Tranverse_Down);
                    rHBuffTransStep.Msg = "左侧横移下降";
                    CheckAndMove(IO_Type.Right_Buf_Far_StopDown, IO_VALUE.LOW);
                    CheckAndMove(IO_Type.Right_Buf_BackRun, IO_VALUE.LOW);
                    IOMove(IO_Type.Right_Buf_Run, IO_VALUE.HIGH);
                    rHBuffTransStep.AddIoWait(IO_Type.Right_Buf_Full_Shelf_Sig, IO_VALUE.HIGH);
                }
                else
                {
                    rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.NONE);
                    rHBuffTransStep.Msg = "左侧缓存已满,无法将料架运离横移,结束处理";
                    MoveInfo.EndMove();
                }
            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SW2B_R5_Tranverse_Down))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.SW2B_R6_Shelf_Leave_Buf);
                rHBuffTransStep.Msg = "料架离开左侧缓存横移";
                IOMove(IO_Type.Right_Buf_Far_StopDown, IO_VALUE.HIGH, 5000);
                rHBuffTransStep.AddTimeWait(10000);
            }
            else if (rHBuffTransStep.IsStep(RBUFF_TRANVERSE_STEP.SW2B_R6_Shelf_Leave_Buf))
            {
                rHBuffTransStep.ToNextStep(RBUFF_TRANVERSE_STEP.NONE);
                rHBuffTransStep.Msg = "料架移到左侧缓存完成,停止链条";
                CheckAndMove(IO_Type.Right_Buf_BackRun, IO_VALUE.LOW);
                CheckAndMove(IO_Type.Right_Buf_Run, IO_VALUE.LOW);
            }
        }
    }
}