DischargeLine_Partial.cs 10.8 KB
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
    partial class DischargeLine
    { 
        private int LastWidth = 0;
        private DateTime SeparateStopTime = DateTime.Now;
        protected override bool CheckWaitResult(LineMoveInfo moveInfo, WaitResultInfo wait)
        {
            if (wait.WaitType.Equals(WaitEnum.W301_DLineScanCode))
            {
                //if (String.IsNullOrEmpty(LastCode).Equals(false))
                //{
                //    return true;
                //}
            }
            return false;
        }

        private int GetRobotIndex()
        {
            int robotIndex = 1;
            if (DeviceID.Equals(301))
            {
                robotIndex = 2;
            }return robotIndex;
        }

        #region 是否可移栽料盘


        internal bool CanStartOut(int lineNum)
        {
            if (NoErrorAlarm() || runStatus > LineRunStatus.HomeMoving)
            {
                if (lineNum.Equals(1) && TrayLine1.MoveInfo.MoveType.Equals(LineMoveType.None))
                {
                    return true;
                }
                if (lineNum.Equals(2) && TrayLine2.MoveInfo.MoveType.Equals(LineMoveType.None))
                {
                    return true;
                }
            }

            return false;
        }

        #endregion

        #region 料盘移栽处理
        public override bool StartOutStoreMove(InOutParam param)
        {
            if (runStatus.Equals(LineRunStatus.Runing))
            {
                StationInfo_Move = new StationTrayInfo(StationInfo_NG.TrayValue, StationInfo_NG.CodeStr);
                runStatus = LineRunStatus.Busy;
                MoveInfo.MoveParam = param;
                MoveInfo.NewMove(LineMoveType.OutStore);
                LogUtil.info(hengyiName + "出口有料,NG气缸后退,等待100后获取盘尺寸");
                MoveInfo.NextMoveStep(LineMoveStep.DO_02_ScanCode);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(100));
                ScanNgBack(MoveInfo);
                //LastCodeList = new List<string>();
              //  LastCode = StationInfo_Move.CodeStr;
                LastWidth = 0;
             //   scanCodeCount = 0;
                return true;
            }
            else
            {
                LogUtil.error(Name + " 启动出料失败,当前 storeStatus=" + runStatus);
                return false;
            }
        }  
        private bool TrayProcessCanStartLine()
        {
            if (TrayLine2.Line3CanRun && TrayLine1.Line3CanRun
                  && Line3TurnIsStop()
                  && Line3Turn.CanStart()
                  && ScanNgIsBack()
                  && (ScanIsEnd())
                  )
            {
                return true;
            }
            return false;
        }
        private void DON_03_GetTraySize()
        {
            MoveInfo.NextMoveStep(LineMoveStep.DON_03_GetTraySize);
            MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
            LastWidth = 0;
            int robotIndex = GetRobotIndex();
            string result = SServerManager.GetTraySize(Name, robotIndex, StationInfo_Move.CodeStr, out LastWidth);
            LogUtil.info(hengyiName + MoveInfo.SLog + "送料: [" + StationInfo_Move.CodeStr + "] 获取尺寸【" + LastWidth + "】【" + result + "】");
            if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_03_GetTraySize))
            {
                DON_04_SUpDownMove();
            }
        }
        private void DON_04_SUpDownMove()
        {
            MoveInfo.NextMoveStep(LineMoveStep.DON_04_SUpDownMove);
            if (LastWidth.Equals(7))
            {
                SeparateLineRun();
                LogUtil.info(hengyiName + MoveInfo.SLog + "送料:【" + LastWidth + "】寸,上升分盘定位气缸");
                CylinderMove(MoveInfo, IO_Type.SeparateDevice_Down, IO_Type.SeparateDevice_Up);
            }
            else if (LastWidth > 0)
            {
                SeparateLineRun();
                LogUtil.info(hengyiName + MoveInfo.SLog + "送料: 【" + LastWidth + "】寸,下降分盘定位气缸");
                CylinderMove(MoveInfo, IO_Type.SeparateDevice_Up, IO_Type.SeparateDevice_Down);
            }
            else
            {
                MoveInfo.NextMoveStep(LineMoveStep.DON_12_NGCylinderForward);
                LogUtil.info(hengyiName + MoveInfo.SLog + "NG料:NG气缸前进");
                ScanNgForward(MoveInfo);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
            }
        }
        protected override void OutStoreProcess()
        {
            if (MoveInfo.IsInWait)
            {
                CheckWait(MoveInfo);
            }
            if (SecondMoveInfo.IsInWait)
            {
                CheckWait(SecondMoveInfo);
            }
            if (MoveInfo.IsInWait)
            {
                return;
            }

            #region 新方式的横移料盘处理,扫码工位与NG工位分开处理
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_01_WaitTime))
            {
                DON_03_GetTraySize();
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_03_GetTraySize))
            {
                DON_04_SUpDownMove();

            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_04_SUpDownMove))
            {
                if (TrayProcessCanStartLine())
                {
                    MoveInfo.NextMoveStep(LineMoveStep.DON_05_LineRun);
                    LogUtil.info(hengyiName + MoveInfo.SLog + "送料,NG->接驳台,转动接驳台皮带");
                    //  IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.HIGH);
                    Line3Turn.StartLineRun(Line3EndProcess);
                    SeparateLineRun(MoveInfo);
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Location_Check3, IO_VALUE.HIGH));
                }
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_05_LineRun))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DON_07_SeparateCheck);
                //  Line3LastTrayP++;
                LogUtil.info(hengyiName + MoveInfo.SLog + "送料,等待料盘到达接驳台 ");
                MoveInfo.TimeOutSeconds = 40; 
                //MoveInfo.OneWaitCanEndStep = true;
                //MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(65000));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SeparateDevice_Check, IO_VALUE.HIGH));
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_07_SeparateCheck))
            {
                TimeSpan span = DateTime.Now - MoveInfo.LastSetpTime;
                MoveInfo.NextMoveStep(LineMoveStep.DON_08_CRun);
                IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.HIGH);
                if (IOValue(IO_Type.SeparateDevice_Check).Equals(IO_VALUE.HIGH))
                {
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(10000));
                    SeparateStopTime = DateTime.Now.AddSeconds(30);
                    int robotIndex = GetRobotIndex();
                    LogUtil.info(hengyiName + MoveInfo.SLog + "送料,接驳台有料,调用arriveRobotLocation=" + robotIndex + "[" + StationInfo_Move.CodeStr + "]");
                    string msg = SServerManager.arriveRobotLocation(Name, robotIndex, StationInfo_Move.CodeStr);
                    MoveEndS();
                    LogUtil.info(hengyiName + MoveInfo.SLog + "送料结束 [" + msg + "]");
                }
                else
                {
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
                    MoveInfo.NextMoveStep(LineMoveStep.DON_07_SeparateCheck);
                    LogUtil.info(hengyiName + MoveInfo.SLog + "送料,未检测到SeparateDevice_Check,再次 等待料盘到达接驳台 ");
                    MoveInfo.TimeOutSeconds = 40;
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SeparateDevice_Check, IO_VALUE.HIGH));
                }
               
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_08_CRun))
            {
                SeparateStopRun();
                MoveEndS();
                LogUtil.info(hengyiName + MoveInfo.SLog + "送料结束,停止接驳台皮带线 ");
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_12_NGCylinderForward))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DON_13_NGCylinderWait);
                LogUtil.info(hengyiName + MoveInfo.SLog + ",NG气缸等待1500后后退");
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1500));
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_13_NGCylinderWait))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DON_14_NGCylinderBack);
                LogUtil.info(hengyiName + MoveInfo.SLog + "NG气缸后退");
                ScanNgBack(MoveInfo);
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DON_14_NGCylinderBack))
            {
                SeparateStopRun();
                MoveEndS();
                LogUtil.info(hengyiName + MoveInfo.SLog + "NG处理结束,停止接驳台皮带线  ");
                // StationInfo_NG = new StationTrayInfo();

            }
            #endregion
        }
        #endregion


        #region 料盘新移栽处理:扫码提前,增加NG气缸

        public bool StartNOutStoreMove(InOutParam param)
        {
            if (runStatus.Equals(LineRunStatus.Runing))
            {
                StationInfo_Move = new StationTrayInfo(StationInfo_NG.TrayValue, StationInfo_NG.CodeStr);
                runStatus = LineRunStatus.Busy;
                MoveInfo.MoveParam = param;
                MoveInfo.NewMove(LineMoveType.OutStore);
                LogUtil.info(hengyiName + "NG工位有料,NG气缸后退,等待100后获取尺寸,清理NG工位");
                StationInfo_NG = new StationTrayInfo();
                LastWidth = 0; 
                MoveInfo.NextMoveStep(LineMoveStep.DON_01_WaitTime);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(100));
                if (ScanNgIsBack())
                {
                    DON_03_GetTraySize();
                }
                else
                {
                    ScanNgBack(MoveInfo);
                }
                return true;
            }
            else
            {
                LogUtil.error(Name + " 启动出料失败,当前 storeStatus=" + runStatus);
                return false;
            }
        }
        #endregion

    }
}