HY_Coveryor.cs 7.4 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;

namespace OnlineStore.DeviceLibrary
{
    /// <summary>
    /// 接驳台横移, SMove处理托盘,Move处理料盘移栽
    /// </summary>
    public partial class HY_Coveryor : HYEquipBase
    {
        public HY_Coveryor(string cid, HYEquip_Config config) : base(cid, config)
        {
            if (DeviceID.Equals(210))
            {
                Name = (" J1HY" + (DeviceID % 100).ToString().PadLeft(2, '0') + " ").ToUpper(); 
            }
            else if (DeviceID.Equals(212))
            { 
                Name = (" J2HY" + (DeviceID % 100).ToString().PadLeft(2, '0') + " ").ToUpper();
            }
            else
            { 
                Name = (" J3HY" + (DeviceID % 100).ToString().PadLeft(2, '0') + " ").ToUpper();
            }
            MoveInfo.Name = Name;
            SecondMoveInfo.Name = Name;
        }

        public override bool StartRun(bool isDebug = false)
        {
            if (CanStartRun().Equals(false))
            {
                return false;
            }
            if (!RunAxis(true, UpdownAxis))
            {
                return false;
            }
            // mainTimer.Enabled = false;
            mainStop();
            MoveInfo.EndMove(); 
            runStatus = LineRunStatus.HomeMoving;
            MoveInfo.NewMove(LineMoveType.RHome);
            StartReset();
            if (isDebug)
            {
                //mainTimer.Interval = 300;
                //mainTimer.Enabled = true;
                mainStart();
                LogInfo("StartRun 设置 Interval=300,启动定时器");
            }
            return true;
        }
        public override bool Reset()
        {
            StopMove();
            if (!RunAxis(true, UpdownAxis))
            {
                return false;
            }
            runStatus = LineRunStatus.Reset;
            MoveInfo.NewMove(LineMoveType.Reset);
            StartReset();
            return true;
        }

        private void StartReset()
        {
            SecondMoveInfo.EndMove();
            ResetClearData();
            MoveInfo.NextMoveStep(LineMoveStep.JHY_R01_UpdownHome);
            LogInfo(MoveInfo.MoveType + " " + MoveInfo.MoveStep + ":  电机停止,升降轴回原点,阻挡上升,定位气缸下降,顶升气缸下降");

            LineStop(MoveInfo);
            IOMove(IO_Type.HY_FrontStopDown, IO_VALUE.LOW);
            CylinderMove(MoveInfo, IO_Type.HY_TopCylinder_Up, IO_Type.HY_TopCylinder_Down);
            LocationCylinderDown(MoveInfo);
            UpdownAxis.HomeMove(MoveInfo);

            isInPro = false;
        }

        protected override void ResetProcess()
        {
            if (MoveInfo.IsInWait)
            {
                CheckWait(MoveInfo);
            }
            if (!MoveInfo.IsInWait)
            {

                if (MoveInfo.IsStep(LineMoveStep.JHY_R01_UpdownHome))
                {
                    MoveInfo.NextMoveStep(LineMoveStep.JHY_R02_UpdownUp);
                    LogInfo(MoveInfo.MoveType + " " + MoveInfo.MoveStep + ":  升降轴到P1");
                    UpdownAxis.AbsMove(MoveInfo, Config.UpDownAxisP1, Config.UpdownAxis_P1Speed);
                }
                else if (MoveInfo.IsStep(LineMoveStep.JHY_R02_UpdownUp))
                {
                    MoveInfo.NextMoveStep(LineMoveStep.JHY_R03_LocationDown);
                    LogInfo(MoveInfo.MoveType + " " + MoveInfo.MoveStep + ":  接驳台取料端");
                    CylinderMove(MoveInfo, IO_Type.HY_MoveCylinder_Give, IO_Type.HY_MoveCylinder_Take);
                }
                else if (MoveInfo.IsStep(LineMoveStep.JHY_R03_LocationDown))
                {
                    MoveInfo.NextMoveStep(LineMoveStep.JHY_R04_TopDown);
                    LogInfo(MoveInfo.MoveType + " " + MoveInfo.MoveStep + ":  夹紧气缸放松");
                    CylinderMove(MoveInfo, IO_Type.HY_ClampCylinder_Work, IO_Type.HY_ClampCylinder_Relax);
                }
                else if (MoveInfo.IsStep(LineMoveStep.JHY_R04_TopDown))
                {
                    MoveInfo.NextMoveStep(LineMoveStep.JHY_R05_ClampCheck);
                    LogInfo(MoveInfo.MoveType + " " + MoveInfo.MoveStep + ":  等待夹爪无信号");
                    MoveInfo.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.HY_ClampCylinder_Check, IO_VALUE.LOW));
                }
                else if (MoveInfo.IsStep(LineMoveStep.JHY_R05_ClampCheck))
                {
                    if (!IsMainStarted)
                    {
                        //mainTimer.Enabled = true;
                        mainStart();
                        SetInterval(180);
                        LogInfo("复位完成 设置 mainTimer.Enabled = true ");
                    }
                    //mainTimer.Interval = 180;
                    SetInterval(180);
                    LogInfo("复位完成 设置 Interval=180 ");
                    LogInfo(MoveInfo.MoveType + " 完成!");
                    MoveEndS();
                }
                else
                {
                    LogUtil.error(Name + " ResetProcess 未找到[" + MoveInfo.MoveType + "][" + MoveInfo.MoveStep + "]的处理");
                }
            }
        }
        internal override void StopMove(string stopDes = "")
        {
            LogInfo("停止运动:关闭所有DO  ");
            MoveInfo.EndMove();
            SecondMoveInfo.EndMove();
            if (UpdownAxis != null)
            {
                UpdownAxis.SuddenStop();
                CloseAxis(UpdownAxis);
            }
            CloseAllDO();
            //LineStop();
            //IOMove(IO_Type.HY_FrontStopDown, IO_VALUE.LOW);
            //CylinderMove(null, IO_Type.HY_LocationCylinder_Up, IO_Type.HY_LocationCylinder_Down);
            //CylinderMove(null, IO_Type.HY_TopCylinder_Up, IO_Type.HY_TopCylinder_Down);
        }
        public override void StopRun()
        {
            //if (mainTimer != null)
            //{
            //    mainTimer.Enabled = false;
            //}
            mainStop();
            StopMove();
            //CheckAndMove(IO_Type.HY_ClampCylinder_Work, IO_VALUE.LOW);
            //CheckAndMove(IO_Type.HY_ClampCylinder_Relax, IO_VALUE.LOW);
            runStatus = LineRunStatus.Wait;
        }

        private int GetRobotIndex()
        {
            //机器人索引号
            int robotIndex = 0;
            if (DeviceID.Equals(212))
            {
                robotIndex = 1;
            }
            else if (DeviceID.Equals(210))
            {
                robotIndex = 2;
            }
            return robotIndex;
        }
        protected override void BaseTimerProcess()
        {
            if (isInSuddenDown || isNoAirCheck)
            {
                return;
            }
            IOTimeOutProcess();
            BusyMoveProcess();
            if (SecondMoveInfo.MoveType.Equals(LineMoveType.None) && (!MoveStop))
            {
                if (LineManager.Line.OutHyCanProLine() && LineManager.Line.HYProcessNewTray())
                {
                    CheckFixture();
                }
            }
            if (UseAxis && runStatus >= LineRunStatus.Runing)
            {
                CheckAxisAlarm(UpdownAxis);
            }

            HasTrayProcess();
        } 
    }
}