X_RAY_Equip_Partial.cs 10.8 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;
using System.Timers;

namespace OnlineStore.DeviceLibrary
{
    partial class X_RAY_Equip
    {

        #region Label 
        public override bool StartLabelling(WorkParam param)
        {
            return false;
        }
        protected override void LabellingProcess()
        {
        }
        private bool CountIsOk()
        {

            return false;
        }

        #endregion

        #region 工作 
        public override bool StartWorking(WorkParam param)
        {
            if (!MoveInfo.MoveType.Equals(RobotMoveType.None))
            {
                return false ;
            }
            //出口有料
            if (IOValue(IO_Type.X_ReelCheck).Equals(IO_VALUE.HIGH))
            {
                MoveInfo.NewMove(RobotMoveType.Working);
                MoveInfo.MoveParam.SetReelInfo(Work_ReelInfo);
                if (Work_ReelInfo.WareCount <= 0)
                {
                    runStatus = RobotRunStatus.Busy;
                    MoveInfo.NewMove(RobotMoveType.Working);
                    MoveInfo.MoveParam.SetReelInfo(Work_ReelInfo);
                    MoveInfo.NextMoveStep(StepEnum.XW06_WaitTime);
                    WorkLog("扫描区有料["+Work_ReelInfo.ToStr()+"],还未进行点料,开始处理");
                    IOMove(IO_Type.X_InLine_Run, IO_VALUE.HIGH);
                    IOMove(IO_Type.X_MLine_Run, IO_VALUE.HIGH);
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.X_ReelCheck, IO_VALUE.HIGH));
                }
                else
                {
                    runStatus = RobotRunStatus.Busy;
                    MoveInfo.NewMove(RobotMoveType.Working);
                    MoveInfo.MoveParam.SetReelInfo(Work_ReelInfo);
                    MoveInfo.NextMoveStep(StepEnum.XW21_WaitOutNoReel);
                    WorkLog("扫描区有料[" + Work_ReelInfo.ToStr() + "],点料已完成,准备放出料盘"); 
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.LOW));
                }
            }else if (IOValue(IO_Type.X_InLine_Check).Equals(IO_VALUE.HIGH))
            {
                runStatus = RobotRunStatus.Busy;
                MoveInfo.NewMove(RobotMoveType.Working);
                MoveInfo.MoveParam.SetReelInfo(In_ReelInfo);
                MoveInfo.NextMoveStep(StepEnum.XW01_WaitInReel);
                WorkLog("入口皮带线有料[" + In_ReelInfo.ToStr() + "],开始处理");
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.X_InLine_Check,IO_VALUE.HIGH));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.X_ReelCheck, IO_VALUE.LOW));

            }
            return false;
        }

        protected override void WorkingProcess()
        {
            if (MoveInfo.IsInWait)
            {
                CheckWait(MoveInfo);
            }
            if (MoveInfo.IsInWait)
            {
                return;
            }
            if (MoveInfo.IsStep(StepEnum.XW01_WaitInReel))
            {
                MoveInfo.NextMoveStep(StepEnum.XW02_InDoorOpen);
                WorkLog("料盘处理:左侧门打开,挡停下降");
                CylinderMove(MoveInfo, IO_Type.X_InDoor_Up, IO_Type.X_InDoor_Down);
                CylinderMove(MoveInfo, IO_Type.X_StopCylinder_Up, IO_Type.X_StopCylinder_Down);
            }
            else if (MoveInfo.IsStep(StepEnum.XW02_InDoorOpen))
            {
            //    MoveInfo.NextMoveStep(StepEnum.XW03_StopCylinderDown);
            //    WorkLog("料盘处理:挡停下降");
            //    CylinderMove(MoveInfo, IO_Type.X_StopCylinder_Up, IO_Type.X_StopCylinder_Down);
            //}
            //else if (MoveInfo.IsStep(StepEnum.XW03_StopCylinderDown))
            //{
                MoveInfo.NextMoveStep(StepEnum.XW04_InLineRun);
                WorkLog("料盘处理:入口和中间皮带线转动,");
                IOMove(IO_Type.X_InLine_Run, IO_VALUE.HIGH);
                IOMove(IO_Type.X_MLine_Run, IO_VALUE.HIGH);
            }
            else if (MoveInfo.IsStep(StepEnum.XW04_InLineRun))
            {
                MoveInfo.NextMoveStep(StepEnum.XW05_WaitMCheck);
                WorkLog("料盘处理:等待扫描区域信号检测");
                IOMove(IO_Type.X_InLine_Run, IO_VALUE.HIGH);
                IOMove(IO_Type.X_MLine_Run, IO_VALUE.HIGH);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.X_ReelCheck, IO_VALUE.HIGH));
            }
            else if (MoveInfo.IsStep(StepEnum.XW05_WaitMCheck))
            {
                MoveInfo.NextMoveStep(StepEnum.XW06_WaitTime);
                WorkLog("料盘处理:更新Work_ReelInfo,清空 In_ReelInfo,再转动2秒钟");
                Work_ReelInfo = In_ReelInfo.GetReelInfo();
                In_ReelInfo = new ReelInfo();
                IOMove(IO_Type.X_InLine_Run, IO_VALUE.HIGH);
                IOMove(IO_Type.X_MLine_Run, IO_VALUE.HIGH);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.X_ReelCheck, IO_VALUE.HIGH));
            }
            else if (MoveInfo.IsStep(StepEnum.XW06_WaitTime))
            {
                MoveInfo.NextMoveStep(StepEnum.XW07_InLineStop);
                WorkLog("料盘处理:停止入口皮带线,中间皮带线");
                IOMove(IO_Type.X_InLine_Run, IO_VALUE.LOW);
                IOMove(IO_Type.X_MLine_Run, IO_VALUE.LOW);
            }
            else if (MoveInfo.IsStep(StepEnum.XW07_InLineStop))
            {
                MoveInfo.NextMoveStep(StepEnum.XW08_DoorClose);
                WorkLog("料盘处理:左侧门关闭,右侧门关闭,准备开始点料");
                CylinderMove(MoveInfo, IO_Type.X_InDoor_Down, IO_Type.X_InDoor_Up);
                CylinderMove(MoveInfo, IO_Type.X_OutDoor_Down, IO_Type.X_OutDoor_Up);

                //       MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.X_DoorLimit_Down, IO_VALUE.HIGH));
                //      MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.X_DoorLimit_Up, IO_VALUE.HIGH));
            }


            #region 点料处理

            else if (MoveInfo.IsStep(StepEnum.XW08_DoorClose))
            {
                MoveInfo.NextMoveStep(StepEnum.XW11_StartCount);
                WorkLog("料盘处理:开始点料");
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
            }
            else if (MoveInfo.IsStep(StepEnum.XW11_StartCount))
            {
                MoveInfo.NextMoveStep(StepEnum.XW12_EndCount);
                if (Work_ReelInfo.WareCount <= 0)
                {
                    MoveInfo.MoveParam.WareCount = 99999;
                    Work_ReelInfo.WareCount = 99999;
                }
                WorkLog("料盘处理:点料结束,关闭X关机互锁信号");
                IOMove(IO_Type.X_Lock_On, IO_VALUE.LOW);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(1000));
                Task.Factory.StartNew(delegate {
                    SServerManager.Return_Material(Name, MoveInfo.MoveParam.WareCode, Work_ReelInfo.WareCount);
                });
            }
            #endregion
            else if (MoveInfo.IsStep(StepEnum.XW12_EndCount))
            {
                MoveInfo.NextMoveStep(StepEnum.XW21_WaitOutNoReel);
                MoveInfo.TimeOutSeconds = 120;
                WorkLog("料盘处理:等待出口无料盘");
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.LOW));
            }
            else if (MoveInfo.IsStep(StepEnum.XW21_WaitOutNoReel))
            {
                MoveInfo.NextMoveStep(StepEnum.XW22_OutDoorOpen);
                WorkLog("料盘处理:右侧门打开,挡停放行");
                CylinderMove(MoveInfo, IO_Type.X_OutDoor_Up, IO_Type.X_OutDoor_Down);
                CylinderMove(MoveInfo, IO_Type.X_StopCylinder_Down, IO_Type.X_StopCylinder_Up);
            }
            else if (MoveInfo.IsStep(StepEnum.XW22_OutDoorOpen))
            {
                MoveInfo.NextMoveStep(StepEnum.XW23_OutLineRun);
                WorkLog("料盘处理:中间皮带线,出口皮带线转动");
                IOMove(IO_Type.X_MLine_Run, IO_VALUE.HIGH);
                IOMove(IO_Type.X_OLine_Run, IO_VALUE.HIGH);
            }
            else if (MoveInfo.IsStep(StepEnum.XW23_OutLineRun))
            {
                MoveInfo.NextMoveStep(StepEnum.XW24_WaitOutCheck);
                WorkLog("料盘处理:等待出口皮带线检测到料盘");
                IOMove(IO_Type.X_MLine_Run, IO_VALUE.HIGH);
                IOMove(IO_Type.X_OLine_Run, IO_VALUE.HIGH);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.HIGH));
            }
            else if (MoveInfo.IsStep(StepEnum.XW24_WaitOutCheck))
            {
                MoveInfo.NextMoveStep(StepEnum.XW25_WaitTime);
                WorkLog("料盘处理:清空 Work_ReelInfo,更新  再转动2秒");
                Out_ReelInfo = Work_ReelInfo.GetReelInfo();
                Work_ReelInfo = new ReelInfo();
                IOMove(IO_Type.X_MLine_Run, IO_VALUE.HIGH);
                IOMove(IO_Type.X_OLine_Run, IO_VALUE.HIGH);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(2000));
                MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.Out_TrayCheck, IO_VALUE.HIGH));
            }

            else if (MoveInfo.IsStep(StepEnum.XW25_WaitTime))
            {
                MoveInfo.NextMoveStep(StepEnum.XW26_OutLineStop);
                WorkLog("料盘处理:中间皮带线,出口皮带线停止");
                IOMove(IO_Type.X_MLine_Run, IO_VALUE.LOW);
                IOMove(IO_Type.X_OLine_Run, IO_VALUE.LOW);
            }
            else if (MoveInfo.IsStep(StepEnum.XW26_OutLineStop))
            {
                MoveInfo.NextMoveStep(StepEnum.XW27_OutDoorClose);
                WorkLog("料盘处理:出口门关闭,挡停下降");
                CylinderMove(MoveInfo, IO_Type.X_OutDoor_Down, IO_Type.X_OutDoor_Up);
                CylinderMove(MoveInfo, IO_Type.X_StopCylinder_Up, IO_Type.X_StopCylinder_Down);
            }
            else if (MoveInfo.IsStep(StepEnum.XW27_OutDoorClose))
            {
                MoveInfo.EndMove();
                WorkLog("料盘处理:料盘处理结束");
                //       MoveInfo.NextMoveStep(StepEnum.XW28_EndPro);
            }
            else if (MoveInfo.IsStep(StepEnum.XW28_EndPro))
            {
                MoveInfo.EndMove();
            } 
           
        }
      
    

        private bool IsInStoreNeed()
        {
            return false;
        }
        #endregion



    }
}