DoubleLineBean_bufShelf.cs 18.5 KB
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
    partial class DoubleLineBean
    {
        #region 缓存线运行

        private Stopwatch leftFullWatch = new Stopwatch();

        private Stopwatch leftNeedWatch = new Stopwatch();
        private Stopwatch leftWatch = new Stopwatch();
        private bool LeftProcess = false;
        private bool LeftBufBackProcess = false;
        /// <summary>
        /// 检查工作位料架
        /// </summary>
        private void WorkShelfCheck()
        {
            //工作位未满,直接放料架过去
            if (IOValue(IO_Type.Left_Tranverse_Down_Sig1).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.Left_Tranverse_Down_Sig2).Equals(IO_VALUE.HIGH) &&
                 IOValue(IO_Type.Left_Tranverse_BackRun).Equals(IO_VALUE.LOW) && IOValue(IO_Type.Left_Tranverse_Run).Equals(IO_VALUE.LOW) &&
                (IOValue(IO_Type.LHigh_StopCheck2).Equals(IO_VALUE.LOW) || IOValue(IO_Type.LHigh_StopCheck1).Equals(IO_VALUE.LOW)) &&
                IOValue(IO_Type.Left_Tranverse_Shelf_Sig).Equals(IO_VALUE.HIGH) && LeftProcess.Equals(false)
                )
            {
                if (LineManager.checkWatch(leftWatch, 3000))
                {
                    leftWatch.Stop();
                    //左侧上层需要放个料架
                    Task.Factory.StartNew(delegate
                    {
                        LeftProcess = true;
                        MoveInfo.Msg = ("左侧双层线_" + "左上工作位未满,放料架离开横移");
                        IOMove(IO_Type.LHigh_LineRun, IO_VALUE.HIGH, 30000);
                        CheckAndMove(IO_Type.Left_Buf_BackRun, IO_VALUE.LOW);
                        IOMove(IO_Type.Left_Buf_Run, IO_VALUE.HIGH, 10000);
                        IOMove(IO_Type.Left_Buf_Far_StopDown, IO_VALUE.HIGH,10000);
                        IOMove(IO_Type.Left_Buf_Near_StopDown, IO_VALUE.HIGH, 5000);
                        IOMove(IO_Type.Left_Tranverse_StopDown, IO_VALUE.HIGH, 3000);
                        //if (WaitIo(IO_Type.LHigh_StopCheck1, IO_VALUE.HIGH, 30000, "左侧_上层放料架离开横移"))
                        //{
                        //}
                        LeftProcess = false;
                    });
                }
            }
            else
            {
                leftWatch.Stop();
            }
            //左侧工作位有料架
            if (
                IOValue(IO_Type.Left_Tranverse_Down_Sig1).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.Left_Tranverse_Down_Sig2).Equals(IO_VALUE.HIGH) &&
                 IOValue(IO_Type.Left_Tranverse_BackRun).Equals(IO_VALUE.LOW) && IOValue(IO_Type.Left_Tranverse_Run).Equals(IO_VALUE.LOW) && 
                 IOValue(IO_Type.Left_Buf_Tranverse_InPosition_Sig).Equals(IO_VALUE.LOW) && IOValue(IO_Type.Left_Buf_Tranverse_Shelf_Sig).Equals(IO_VALUE.LOW)&&
                IOValue(IO_Type.Left_Tranverse_Shelf_Sig).Equals(IO_VALUE.HIGH) && IOValue(IO_Type.LHigh_StopCheck1).Equals(IO_VALUE.HIGH))
            {
                if (IOValue(IO_Type.Left_Buf_Full_Shelf_Sig).Equals(IO_VALUE.LOW))
                {
                    if (MoveInfo.MoveType.Equals(LineMoveType.None) && LineManager.checkWatch(leftFullWatch, 3000, true))
                    {
                        MoveInfo.Msg = ("左侧双层线_" + "上层工作位满,缓存位未满 开始料架转移处理");
                        //开始料架转移处理
                        MoveInfo.NewMove(LineMoveType.LTransWork2Buf, MoveStep.SW2B_L1_GetShelf);

                    }
                }
                else
                {
                    leftFullWatch.Stop();
                }
            }
            else
            {
                leftFullWatch.Stop();
            }

            
            if (IOValue(IO_Type.LHigh_StopCheck2).Equals(IO_VALUE.LOW))
            {
                if (IOValue(IO_Type.Left_Buf_Full_Shelf_Sig).Equals(IO_VALUE.HIGH))//左侧缓存位有料架,工作位无料架
                {
                    if (MoveInfo.MoveType.Equals(LineMoveType.None) && LineManager.checkWatch(leftNeedWatch, 3000, true))
                    {
                        MoveInfo.Msg = ("左侧双层线_" + "上层工作位需要料架,且缓存位有料架 开始料架转移处理");
                        //开始料架转移处理
                        MoveInfo.NewMove(LineMoveType.LTransBuf2Work, MoveStep.SB2W_L0_None);

                    }
                }
                else if (IOValue(IO_Type.Left_Buf_Full_Shelf_Sig).Equals(IO_VALUE.HIGH))//左侧缓存横移有料架,工作位无料架
                {
                    if (MoveInfo.MoveType.Equals(LineMoveType.None) && LineManager.checkWatch(leftNeedWatch, 3000, true))
                    {
                        MoveInfo.Msg = ("左侧双层线_" + "上层工作位需要料架,且缓存横移上有料架 开始料架转移处理");
                        //开始料架转移处理
                        MoveInfo.NewMove(LineMoveType.LTransBuf2Work, MoveStep.SB2W_L1_GetShelf);

                    }
                }
                else if(!LeftBufBackProcess && LineManager.checkWatch(leftNeedWatch, 3000, true))//左侧缓存位无料架,工作位无料架
                {
                    leftNeedWatch.Stop();
                    Task.Factory.StartNew(delegate
                    {
                        LeftBufBackProcess = true;
                        CheckAndMove(IO_Type.Left_Buf_Run, IO_VALUE.LOW);
                        CheckAndMove(IO_Type.Left_Buf_Near_StopDown, IO_VALUE.LOW);
                        IOMove(IO_Type.Left_Buf_Far_StopDown, IO_VALUE.HIGH);
                        IOMove(IO_Type.Left_Buf_BackRun, IO_VALUE.HIGH);
                        if (WaitIo(IO_Type.Left_Buf_Full_Shelf_Sig, IO_VALUE.HIGH, 120000, "左侧_上层缓存位反转,检查是否有料架"))
                        {
                            IOMove(IO_Type.Left_Buf_BackRun, IO_VALUE.LOW);
                            IOMove(IO_Type.Left_Buf_Far_StopDown, IO_VALUE.LOW);
                            //LogUtil.info("左侧_上层缓存位有空料架,缓存位反转停止,远横移阻挡上升");
                        }
                        LeftBufBackProcess = false;
                    });
                }
            }
            else
            {
                leftNeedWatch.Stop();
            }


        }
        /// <summary>
        /// 左侧缓存位到工作位
        /// </summary>
        internal void LTransBuff2WorkProcess()
        {
            if (MoveInfo.IsInWait)
            {
                CheckWait(MoveInfo);
            }
            if (MoveInfo.IsInWait)
            {
                return;
            }

            if (MoveInfo.MoveStep.Equals(MoveStep.SB2W_L0_None))
            {
                MoveInfo.NextMoveStep(MoveStep.SB2W_L0_GetShelf);
                //IOMove(IO_Type.Left_Buf_Out_StopDown, IO_VALUE.HIGH, 2000);
                CheckAndMove(IO_Type.Left_Buf_Run, IO_VALUE.LOW);
                CheckAndMove(IO_Type.Left_Buf_BackRun, IO_VALUE.HIGH);
                CylinderMove(MoveInfo, IO_Type.Left_Tranverse_Up, IO_Type.Left_Tranverse_Down);
                //CheckAndMove(IO_Type.Left_Tranverse_Up, IO_VALUE.LOW);
               // CheckAndMove(IO_Type.Left_Tranverse_Down, IO_VALUE.HIGH);
                IOMove(IO_Type.Left_Buf_Near_StopDown, IO_VALUE.HIGH, 2000);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Down, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Up, IO_VALUE.LOW));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Tranverse_Shelf_Sig, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(5000));
                MoveInfo.Msg = "链条反转,横移下降,近端阻挡下降2s,左侧缓存料架放到横移上";
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SB2W_L0_GetShelf))
            {
                MoveInfo.NextMoveStep(MoveStep.SB2W_L1_GetShelf);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(5000));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Tranverse_Shelf_Sig, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_InPosition_Sig, IO_VALUE.LOW));
                MoveInfo.Msg = " 左侧缓存料架到达横移上,等待5秒";
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SB2W_L1_GetShelf))
            {
                MoveInfo.NextMoveStep(MoveStep.SB2W_L2_Tranverse_Up);
                CheckAndMove(IO_Type.Left_Buf_BackRun, IO_VALUE.LOW);
                CheckAndMove(IO_Type.Left_Buf_Run, IO_VALUE.LOW);
                //CheckAndMove(IO_Type.Left_Tranverse_Down, IO_VALUE.LOW);
                //IOMove(IO_Type.Left_Tranverse_Up, IO_VALUE.HIGH);
                CylinderMove(MoveInfo, IO_Type.Left_Tranverse_Down, IO_Type.Left_Tranverse_Up); 
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Up_Sig1, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Up_Sig2, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Tranverse_Up_Sig1, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Tranverse_Up_Sig2, IO_VALUE.HIGH));
                MoveInfo.Msg = " 左侧横移上升";
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SB2W_L2_Tranverse_Up))
            {
                MoveInfo.NextMoveStep(MoveStep.SB2W_L3_Tranverse_Run);
                MoveInfo.Msg = " 左侧横移电机反转";
                CheckAndMove(IO_Type.Left_Tranverse_Run, IO_VALUE.LOW);
                IOMove(IO_Type.Left_Tranverse_BackRun, IO_VALUE.HIGH);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_BackRun, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Run, IO_VALUE.LOW));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_InPosition_Sig, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SB2W_L3_Tranverse_Run))
            {
                MoveInfo.NextMoveStep(MoveStep.SB2W_L4_Shelf_To_Buf);
                MoveInfo.Msg = "料架到达工作横移位置";
                IOMove(IO_Type.Left_Tranverse_BackRun, IO_VALUE.LOW);
                //IOMove(IO_Type.Left_Tranverse_Up, IO_VALUE.LOW);
               // CheckAndMove(IO_Type.Left_Tranverse_Down, IO_VALUE.HIGH);
                CylinderMove(MoveInfo, IO_Type.Left_Tranverse_Up, IO_Type.Left_Tranverse_Down);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_BackRun, IO_VALUE.LOW));
               // MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Up, IO_VALUE.LOW));
                //MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Down, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Down_Sig1, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Down_Sig2, IO_VALUE.HIGH));
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SB2W_L4_Shelf_To_Buf))
            {
                MoveInfo.NextMoveStep(MoveStep.SB2W_L5_Tranverse_Down);
                MoveInfo.Msg = "左侧横移下降";
                IOMove(IO_Type.Left_Buf_Far_StopDown, IO_VALUE.HIGH,20000);
                IOMove(IO_Type.LHigh_LineRun, IO_VALUE.HIGH);
                IOMove(IO_Type.Left_Buf_Run, IO_VALUE.HIGH, 20000);
                IOMove(IO_Type.Left_Tranverse_StopDown, IO_VALUE.HIGH,5000);
                //MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Shelf_Sig, IO_VALUE.LOW));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(20000));
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SB2W_L5_Tranverse_Down))
            {
                MoveInfo.NextMoveStep(MoveStep.SB2W_L6_Shelf_Leave_Buf);
                MoveInfo.Msg = "料架离开左侧工作位横移";
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(10000));
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SB2W_L6_Shelf_Leave_Buf))
            {
                MoveInfo.NextMoveStep(MoveStep.SB2W_L7_Tranverse_Finish);
                CheckAndMove(IO_Type.LHigh_LineRun, IO_VALUE.LOW);
                MoveInfo.Msg = "料架移到左侧工作位完成,停止链条";
                MoveInfo.EndMove();
            }
        }
        /// <summary>
        /// 左侧工作位到缓存位
        /// </summary>
        internal void LTransWork2BuffProcess()
        {
            if (MoveInfo.IsInWait)
            {
                CheckWait(MoveInfo);
            }
            if (MoveInfo.IsInWait)
            {
                return;
            }

            if (MoveInfo.MoveStep.Equals(MoveStep.SW2B_L1_GetShelf))
            {
                MoveInfo.NextMoveStep(MoveStep.SW2B_L2_Tranverse_Up);
               // CheckAndMove(IO_Type.Left_Tranverse_Down, IO_VALUE.LOW);
                //IOMove(IO_Type.Left_Tranverse_Up, IO_VALUE.HIGH);
                CylinderMove(MoveInfo, IO_Type.Left_Tranverse_Down, IO_Type.Left_Tranverse_Up);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                //MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Down, IO_VALUE.LOW));
                //MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Up, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Up_Sig1, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Up_Sig2, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Tranverse_Up_Sig1, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Tranverse_Up_Sig2, IO_VALUE.HIGH));
                MoveInfo.Msg = " 左侧横移上升";
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SW2B_L2_Tranverse_Up))
            {
                MoveInfo.NextMoveStep(MoveStep.SW2B_L3_Tranverse_Run);
                MoveInfo.Msg = " 左侧横移电机正转";
                CheckAndMove(IO_Type.Left_Tranverse_BackRun, IO_VALUE.LOW);
                IOMove(IO_Type.Left_Tranverse_Run, IO_VALUE.HIGH);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_BackRun, IO_VALUE.LOW));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Run, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Tranverse_InPosition_Sig, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SW2B_L3_Tranverse_Run))
            {
                MoveInfo.NextMoveStep(MoveStep.SW2B_L4_Shelf_To_Buf);
                MoveInfo.Msg = "料架到达缓存横移位置";
                IOMove(IO_Type.Left_Tranverse_Run, IO_VALUE.LOW);
                IOMove(IO_Type.Left_Tranverse_Up, IO_VALUE.LOW);
                CylinderMove(MoveInfo, IO_Type.Left_Tranverse_Up, IO_Type.Left_Tranverse_Down);
               // CheckAndMove(IO_Type.Left_Tranverse_Down, IO_VALUE.HIGH);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Run, IO_VALUE.LOW));
               // MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Up, IO_VALUE.LOW));
               // MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Tranverse_Down, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Tranverse_Down_Sig1, IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Tranverse_Down_Sig2, IO_VALUE.HIGH));
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SW2B_L4_Shelf_To_Buf))
            {
                if (IOValue(IO_Type.Left_Buf_Full_Shelf_Sig).Equals(IO_VALUE.LOW))
                {
                    MoveInfo.NextMoveStep(MoveStep.SW2B_L5_Tranverse_Down);
                    MoveInfo.Msg = "左侧横移下降";
                    CheckAndMove(IO_Type.Left_Buf_Far_StopDown, IO_VALUE.HIGH);
                    CheckAndMove(IO_Type.Left_Buf_Near_StopDown, IO_VALUE.LOW);
                    CheckAndMove(IO_Type.Left_Buf_BackRun, IO_VALUE.LOW);
                    IOMove(IO_Type.Left_Buf_Run, IO_VALUE.HIGH);
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Tranverse_InPosition_Sig, IO_VALUE.LOW));
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Left_Buf_Full_Shelf_Sig, IO_VALUE.HIGH));
                }
                else
                {
                    CheckAndMove(IO_Type.Left_Buf_Far_StopDown, IO_VALUE.HIGH);
                    CheckAndMove(IO_Type.Left_Buf_Near_StopDown, IO_VALUE.LOW);
                    MoveInfo.Msg = " 左侧缓存已满,无法将料架运离横移,结束处理";
                    MoveInfo.EndMove();
                }
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SW2B_L5_Tranverse_Down))
            {
                MoveInfo.NextMoveStep(MoveStep.SW2B_L6_Shelf_Leave_Buf);
                MoveInfo.Msg = "料架离开左侧缓存横移";
                CheckAndMove(IO_Type.Left_Buf_Far_StopDown, IO_VALUE.HIGH);
                IOMove(IO_Type.Left_Buf_Near_StopDown, IO_VALUE.HIGH, 10000);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(30000));
            }
            else if (MoveInfo.MoveStep.Equals(MoveStep.SW2B_L6_Shelf_Leave_Buf))
            {
                MoveInfo.NextMoveStep(MoveStep.SW2B_L7_Tranverse_Finish);
                CheckAndMove(IO_Type.Left_Buf_BackRun, IO_VALUE.LOW);
                CheckAndMove(IO_Type.Left_Buf_Run, IO_VALUE.LOW);
                CheckAndMove(IO_Type.Left_Buf_Far_StopDown, IO_VALUE.HIGH);
                CheckAndMove(IO_Type.Left_Buf_Near_StopDown, IO_VALUE.LOW);
                MoveInfo.Msg = "料架移到左侧缓存完成,停止链条";
                MoveInfo.EndMove();
            }
        }

        #endregion

    }
}