DischargeLine_Partial.cs 8.1 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
    {
        protected override bool CheckWaitResult(LineMoveInfo moveInfo, WaitResultInfo wait)
        {
            if (wait.WaitType.Equals(WaitEnum.W301_DLineScanCode))
            {
                if (LastCodeList.Count > 0)
                {
                    return true;
                }
            }
            return false;
        }
        #region 是否可移栽料盘


        internal bool CanStartOut(int lineNum)
        {
            if (NoAlarm() || 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))
            {
                runStatus = LineRunStatus.Busy;
                MoveInfo.MoveParam = param;
                MoveInfo.NewMove(LineMoveType.OutStore);
                LogInfo(hengyiName+ "出口有料,等待1000后扫码");
                MoveInfo.NextMoveStep(LineMoveStep.DO_01_WaitTime);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                LastCodeList = new List<string>();
             //   LastHeight = 0;
                LastWidth = 0;
                scanCodeCount = 0;
                return true;
            }
            else
            {
                LogUtil.error(Name + " 启动出料失败,当前 storeStatus=" + runStatus);
                return false;
            }
        }
        private List<string> LastCodeList = new List<string>();
        private int LastWidth = 0;
        private int  scanCodeCount=0;
        private void ScanCode()
        {
            MoveInfo.NextMoveStep(LineMoveStep.DO_02_ScanCode);

            List<string> cameraList = Config.GetCameraList();
            if (cameraList.Count > 0)
            {
                scanCodeCount++;
                LogInfo(hengyiName + "出口有料,开始第【"+scanCodeCount+"】次扫码");
                MoveInfo.OneWaitCanEndStep = true;
                MoveInfo.WaitList.Add(WaitResultInfo.WaitDLineScanCode());
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(6000));
                try
                {
                    Task<List<string>> scanTask = Task.Factory.StartNew(delegate
                    {

                        LastCodeList = CodeManager.CameraScan(Config.GetCameraList());
                        if (LastCodeList.Count <= 0)
                        {
                            LastCodeList = CodeManager.CameraScan(Config.GetCameraList());
                        }
                        return LastCodeList;
                    });
                }
                catch (Exception ex)
                {
                    LogUtil.error("FI_13_ScanCode扫码出错:" + ex.ToString());
                }
            }
            else
            {
                LogInfo(hengyiName + "出口有料,未取到相机名称,不扫码,等待1000后继续");
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(6000));
            }
        }
        protected override void OutStoreProcess()
        {
            if (MoveInfo.IsInWait)
            {
                CheckWait(MoveInfo);
            }
            if (SecondMoveInfo.IsInWait)
            {
                CheckWait(SecondMoveInfo);
            }
            if (MoveInfo.IsInWait)
            {
                return;
            }
            if (MoveInfo.MoveStep.Equals(LineMoveStep.DO_01_WaitTime))
            {
                ScanCode();
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DO_02_ScanCode))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DO_03_GetTraySize);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
                string lastCode = "";
                foreach (string code in LastCodeList)
                {
                    lastCode += code;
                }
                //如果未扫到条码,重新扫码3次
                if (scanCodeCount < 3 && lastCode.Equals("") && Config.GetCameraList().Count > 0)
                {
                    ScanCode();
                }
                else
                {
                    LastWidth = 0;
                    int robotIndex = 1;
                    if (DeviceID.Equals(301))
                    {
                        robotIndex = 2;
                    }
                    string result = SServerManager.GetTraySize(Name, robotIndex, LastCodeList, out LastWidth);
                    LogInfo(hengyiName + "出口有料,二维码[" + lastCode + "] 获取料盘尺寸【" + LastWidth + "】【" + result + "】");
                }
                //  MoveInfo.EndMove();
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DO_03_GetTraySize))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DO_04_SeparateDeviceMove);
                if (LastWidth.Equals(7))
                {
                    LogInfo(hengyiName + "出口有料,料盘尺寸【" + LastWidth + "】上升分盘定位气缸");
                    CylinderMove(MoveInfo, IO_Type.SeparateDevice_Down, IO_Type.SeparateDevice_Up);
                }
                else
                {
                    LogInfo(hengyiName + "出口有料,料盘尺寸【" + LastWidth + "】下降分盘定位气缸");
                    CylinderMove(MoveInfo, IO_Type.SeparateDevice_Up, IO_Type.SeparateDevice_Down);
                }
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DO_04_SeparateDeviceMove))
            {
                if (TrayLine2.Line3CanRun && TrayLine1.Line3CanRun)
                {
                    MoveInfo.NextMoveStep(LineMoveStep.DO_05_LineRun);
                    LogInfo(hengyiName + "出口有料,转动皮带线,同时转动分盘装置");
                    IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.HIGH);
                    Line3Turn.StartLineRun(IO_Type.DLine_Run3, IO_Type.Location_Check3, Line3EndProcess);

                    MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Location_Check3, IO_VALUE.HIGH));
                }
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DO_05_LineRun))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DO_06_Wait_SeparateDevice_Check);
                Line3LastTrayP++;
                LogInfo(hengyiName + "出口有料,等待料盘到达分盘装置位置");
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.SeparateDevice_Check, IO_VALUE.HIGH));
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DO_06_Wait_SeparateDevice_Check))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DO_07_CRun);
                LogInfo(hengyiName + "出口有料,最多等待2000");
                MoveInfo.OneWaitCanEndStep = true;
                IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.HIGH);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DO_07_CRun))
            {
                runStatus = LineRunStatus.Runing;
                MoveInfo.EndMove();
                IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.LOW);
                LogInfo(hengyiName + "出口有料,送料结束,停止皮带线");
            }
        }
        #endregion 
    }
}