X_RAY_Equip.cs 7.1 KB
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{ 
    public partial class X_RAY_Equip : EquipBase
    {
        public ReelInfo In_ReelInfo = new ReelInfo();
        public ReelInfo Work_ReelInfo = new ReelInfo();
        public ReelInfo Out_ReelInfo = new ReelInfo();

        public XRay_Config Config; 

        public X_RAY_Equip(string cid, XRay_Config config)
        {
            this.DeviceID = config.Id;
            this.Config = config;
            baseConfig = config;
            IsDebug = config.IsDebug.Equals(1);
            Name = (" " + "XRay" +   " ").ToUpper();

            Init(); 
            MoveInfo = new RobotMoveInfo(Name);
            SecMoveInfo = new RobotMoveInfo(  Name.Trim() + "-SMove"); 
        }

        public override bool StartRun()
        {
            if (CanStartRun().Equals(false))
            {
                return false;
            }

            SetAllTimer(false );
            MoveInfo.EndMove();
            SecMoveInfo.EndMove();
            runStatus = RobotRunStatus.HomeMoving;
            MoveInfo.NewMove(RobotMoveType.RHome);
            LogInfo("开始 原点返回:   ");
            StartReset();

            SetAllTimer(true);
            return true;
        }


        public override bool Reset()
        {
            StopMove();  
            runStatus = RobotRunStatus.Reset;
            MoveInfo.NewMove(RobotMoveType.Reset);
            LogInfo("开始重置:   ");
            StartReset();
            return true;
        }

        private void StartReset()
        {
            TimerMaxSeconds = 10;
            SetWarnMsg("");
            alarmType = AlarmType.None;
            isInSuddenDown = false;
            isNoAirCheck = false; 
            isInPro = false;
            MoveInfo.NextMoveStep(StepEnum.XR01_CloseXLock);
            WorkLog(  "XRay复位 :关闭X光机");
            IOMove(IO_Type.X_Lock_On, IO_VALUE.LOW);

        }

        protected override void ResetProcess()
        {
            if (MoveInfo.IsInWait)
            {
                CheckWait(MoveInfo);
            }
            if (MoveInfo.IsInWait)
            {
                return;
            }
            if (MoveInfo.IsStep(StepEnum.XR01_CloseXLock))
            {
                MoveInfo.NextMoveStep(StepEnum.XR02_DoorOpen);
                WorkLog("XRay复位 :左侧们打开,右侧门打开,挡停不动作");
                CylinderMove(MoveInfo, IO_Type.X_InDoor_Up, IO_Type.X_InDoor_Down);
                CylinderMove(MoveInfo, IO_Type.X_OutDoor_Up, IO_Type.X_OutDoor_Down);
            }
            else if (MoveInfo.IsStep(StepEnum.XR02_DoorOpen))
            {
                MoveInfo.NextMoveStep(StepEnum.XR03_LineRun);
                WorkLog(" XRay复位:  皮带转动3秒");
                if (IOValue(IO_Type.X_InLine_Check).Equals(IO_VALUE.LOW))
                {
                    IOMove(IO_Type.X_InLine_Run, IO_VALUE.HIGH);
                }
                IOMove(IO_Type.X_MLine_Run, IO_VALUE.HIGH);
                IOMove(IO_Type.X_OLine_Run, IO_VALUE.HIGH);
                MoveInfo.WaitList.Add(WaitResultInfo.WaitTime(3000));
            }
            else if (MoveInfo.IsStep(StepEnum.XR03_LineRun))
            {
                MoveInfo.NextMoveStep(StepEnum.XR04_LineStop);
                WorkLog(" XRay复位: 皮带停止转动");
                IOMove(IO_Type.X_InLine_Run, IO_VALUE.LOW);
                IOMove(IO_Type.X_MLine_Run, IO_VALUE.LOW);
                IOMove(IO_Type.X_OLine_Run, IO_VALUE.LOW);
            }
            else if (MoveInfo.IsStep(StepEnum.XR04_LineStop))
            {
                MoveInfo.NextMoveStep(StepEnum.XR05_DoorClose);
                WorkLog(" XRay复位: 左右门关闭,挡停下降 ");
                CylinderMove(MoveInfo, IO_Type.X_InDoor_Up, IO_Type.X_InDoor_Down);
                CylinderMove(MoveInfo, IO_Type.X_OutDoor_Up, IO_Type.X_OutDoor_Down);
                CylinderMove(MoveInfo, IO_Type.X_StopCylinder_Up, IO_Type.X_StopCylinder_Down);
            }
            else if (MoveInfo.IsStep(StepEnum.XR05_DoorClose))
            {
                WorkLog(" XRay复位 :完成!");
                MoveInfo.EndMove();
                runStatus = RobotRunStatus.Runing;
            }
        }
        
        internal override void StopMove()
        {
            SecMoveInfo.EndMove();
            MoveInfo.EndMove();

            IOMove(IO_Type.X_Lock_On, IO_VALUE.LOW);
            IOMove(IO_Type.X_InLine_Run, IO_VALUE.LOW);
            IOMove(IO_Type.X_MLine_Run, IO_VALUE.LOW);
            IOMove(IO_Type.X_InDoor_Up, IO_VALUE.LOW);
            IOMove(IO_Type.X_InDoor_Down, IO_VALUE.LOW);
            IOMove(IO_Type.X_OutDoor_Up, IO_VALUE.LOW);
            IOMove(IO_Type.X_OutDoor_Down, IO_VALUE.LOW);
            IOMove(IO_Type.X_StopCylinder_Up, IO_VALUE.LOW);
            IOMove(IO_Type.X_StopCylinder_Down, IO_VALUE.LOW);
        }


        public override void StopRun()
        {
            SetAllTimer(false);
            StopMove(); 
            runStatus = RobotRunStatus.Wait;
        }


        protected override void BaseTimerProcess()
        {
            if (isInSuddenDown || isNoAirCheck)
            {
                return;
            }
            BusyMoveProcess();
            IOTimeOutProcess();
            //判断流水线打开了才可以运行 
            if (SecMoveInfo.MoveType.Equals(RobotMoveType.None))
            { 


            }

            if(NoAlarm()&& MoveInfo.MoveType.Equals(RobotMoveType.None))
            {
                if (IOValue(IO_Type.X_ReelCheck).Equals(IO_VALUE.HIGH)||IOValue(IO_Type.X_InLine_Check  ).Equals(IO_VALUE.HIGH))
                {
                    StartWorking(new WorkParam());
                }
  
            }
        }

        public bool LockOnCanMove()
        {
            if (IOValue(IO_Type.SuddenStop_BTN).Equals(IO_VALUE.HIGH)
                && IOValue(IO_Type.X_DoorLimit_Down).Equals(IO_VALUE.HIGH)
                && IOValue(IO_Type.X_DoorLimit_Up).Equals(IO_VALUE.HIGH)
                && IOValue(IO_Type.X_InDoor_Up).Equals(IO_VALUE.HIGH)
                && IOValue(IO_Type.X_OutDoor_Up).Equals(IO_VALUE.HIGH)
                && IOValue(IO_Type.X_InDoor_Down).Equals(IO_VALUE.LOW)
                && IOValue(IO_Type.X_OutDoor_Down).Equals(IO_VALUE.LOW)
                )
            {
                return true;
            }
            return false;
        }

        public override string GetMoveStr()
        {
            string msg = "";
            int tLength = 15;

            msg += "runS:  " + runStatus + "\n";
            msg += "alarm:  " + alarmType + "\n";
            msg += "Move:" + MoveInfo.MoveType + " " + MoveInfo.MoveStep + "\n";

            msg += "入口料盘:" + In_ReelInfo.ToStr() + " \r\n";
            msg += "扫描区料盘:" + Work_ReelInfo.ToStr() + " \r\n";
            msg += "出口料盘:" + Out_ReelInfo.ToStr() + " \r\n";

            return msg;
        }
    } 
}