DischargeLine_Partial.cs 8.2 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.Equals(LineRunStatus.Runing).Equals(false))
            {
                return false;
            }
            if (lineNum.Equals(1))
            {
                //if (LineRuning.Equals(true) && LastMoveDO.Equals(IO_Type.DLine_Run1))
                //{
                //    return false;
                //}
                //if (MoveInfo.MoveType.Equals(LineMoveType.None)&& IOValue(IO_Type.ent).Equals(IO_VALUE.LOW))
                //{
                //    MoveInfo.NewMove(LineMoveType.OutStore);
                //    return true;
                //}
            }
            else if (lineNum.Equals(2))
            {
                //if (LineRuning.Equals(true) && LastMoveDO.Equals(IO_Type.DLine_Run2))
                //{
                //    return false;
                //}
                //if (SecondMoveInfo.MoveType.Equals(LineMoveType.None) && IOValue(IO_Type.EntryTray_Check2).Equals(IO_VALUE.LOW))
                //{
                //    SecondMoveInfo.NewMove(LineMoveType.OutStore);
                //    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("检测到皮带线3出口有料,等待1000后扫码");
                MoveInfo.NextMoveStep(LineMoveStep.DO_01_WaitTime);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                LastCodeList = new List<string>();
                LastHeight = 0;
                LastWidth = 0;
                return true;
            }
            else
            {
                LogUtil.error(Name + " 启动出料失败,当前 storeStatus=" + runStatus);
                return false;
            }
        }
        private List<string> LastCodeList = new List<string>();
        private int LastHeight = 0;
        private int LastWidth = 0;
        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))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DO_02_ScanCode);

                List<string> cameraList = Config.GetCameraList();
                if (cameraList.Count > 0)
                {
                    LogInfo("检测到皮带线3出口有料,开始扫码");
                    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("检测到皮带线3出口有料,未取到相机名称,不扫码,等待1000后继续");
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(6000));
                }
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DO_02_ScanCode))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DO_03_GetTraySize);
                string lastCode = "";
                foreach (string code in LastCodeList)
                {
                    lastCode += code;
                }
                //TODO 
                LastWidth = 7;
                LastHeight = 8;
                LogInfo("检测到皮带线3出口有料,二维码[" + lastCode + "] 获取料盘尺寸【" + LastWidth + "X" + LastHeight + "】");
            }
            else if (MoveInfo.MoveStep.Equals(LineMoveStep.DO_03_GetTraySize))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DO_04_SeparateDeviceMove);
                if (LastWidth.Equals(7))
                {
                    LogInfo("检测到皮带线3出口有料,料盘尺寸【" + LastWidth + "X" + LastHeight + "】上升分盘定位气缸");
                    CylinderMove(MoveInfo, IO_Type.SeparateDevice_Down, IO_Type.SeparateDevice_Up);
                }
                else
                {
                    LogInfo("检测到皮带线3出口有料,料盘尺寸【" + LastWidth + "X" + LastHeight + "】下降分盘定位气缸");
                    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("检测到皮带线3出口有料,转动皮带线,同时转动分盘装置");
                    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("检测到皮带线3出口有料,等待料盘到达分盘装置位置");
                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_06_Wait_SeparateDevice_Check))
            {
                MoveInfo.NextMoveStep(LineMoveStep.DO_06_Wait_SeparateDevice_Check);
                LogInfo("检测到皮带线3出口有料,最多等待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("检测到皮带线3出口有料,送料结束,停止皮带线");
            }
        }
        #endregion 
    }
}