DischargeLine.cs 8.0 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
{
    /// <summary>
    /// 流水线自动料仓-出料装置类
    /// </summary>
    public partial class DischargeLine : EquipBase
    {

        public DischargeLine_Config Config;

        public DischargeLine(string cid, DischargeLine_Config config)
        {
            baseConfig = config;
            this.DeviceID = config.Id;
            this.Config = config;
            IsDebug = config.IsDebug.Equals(1);
            baseConfig = config;
            Name = (" " + "_出料皮带线_" + DeviceID % 100 + " ").ToUpper();
            Init();
            UseAxis = false;
            MoveInfo = new LineMoveInfo(DeviceID, "出料皮带线-" + DeviceID + "-MoveInfo");
            SecondMoveInfo = new LineMoveInfo(DeviceID, "出料皮带线-" + DeviceID + "-SecondMoveInfo");
        }

        /// <summary>
        /// 开始运行
        /// </summary>
        public override bool StartRun(bool isDebug = false)
        {
            preTrayNum = 0;
            currMoveTrayNum = 0;
            mainTimer.Enabled = false;
            MoveInfo.EndMove();
            SecondMoveInfo.EndMove();
            lineStatus = LineStatus.StoreOnline;
            //TODO 调试时暂时注释
            runStatus = LineRunStatus.HomeMoving;
            bool result = ReturnHome();
            if (result && isDebug)
            {
                mainTimer.Enabled = true;
            }
            return result;
        }


        /// <summary>
        /// 停止运行
        /// </summary>
        public override void StopRun()
        {
            if (mainTimer != null)
            {
                mainTimer.Enabled = false;
            }
            StopMove();
            //停止运行时,把所有IO 置零
            IOMove(IO_Type.DLine_RunStatus, IO_VALUE.LOW);
            IOMove(IO_Type.DLine_RunAlarm, IO_VALUE.LOW);
            IOMove(IO_Type.DLine_Run1, IO_VALUE.LOW);
            IOMove(IO_Type.DLine_Run2, IO_VALUE.LOW);
            IOMove(IO_Type.DLine_Run3, IO_VALUE.LOW);
            IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.LOW);
            IOMove(IO_Type.SeparateDevice_Up, IO_VALUE.LOW);
            IOMove(IO_Type.SeparateDevice_Down, IO_VALUE.LOW);
            runStatus = LineRunStatus.Wait;
        }

        public override void TimerProcess()
        {
            if (IOValue(IO_Type.DLine_SuddenStop).Equals(IO_VALUE.LOW))
            {
                WarnMsg = Name + "收到急停信号";
                LogUtil.error(WarnMsg);
                Alarm(LineAlarmType.SuddenStop);
                return;
            }

            if (IOValue(IO_Type.DLine_Reset).Equals(IO_VALUE.HIGH))
            {
                if (alarmType.Equals(LineAlarmType.None))
                {
                    if (MoveInfo.MoveType.Equals(LineMoveType.None))
                    {
                        LogUtil.error(Name + "收到复位信号,当前无报警,不需要复位");
                    }
                    else
                    {
                        LogUtil.error(Name + "收到复位信号,当前无报警,正在" + MoveInfo.MoveType + "处理中,不需要复位");
                    }
                }
                else
                {
                    LogUtil.info(Name + "收到复位信号,开始复位");
                    Reset();
                }
                return;
            }

            BusyMoveProcess();
            //判断流水线打开了才可以运行 
            if (SecondMoveInfo.MoveType.Equals(LineMoveType.None))
            {
                //LineBean lineBean = LineManager.Line;
                //if (lineBean.isCanProcessLine() && IOManager.IOValue(IO_Type.DriveMotor_Run, 0).Equals(IO_VALUE.HIGH) && lineBean.runStatus >= LineRunStatus.Runing && lineBean.IsSleep.Equals(false))
                //{
                //    StartCheckFixture();
                //}
            }
            IOTimeOutProcess();

        }
   
     

        /// <summary>
        /// 出料装置原点返回
        /// </summary>
        public bool ReturnHome()
        {
            mainTimer.Stop();
            MoveInfo.EndMove();
            SecondMoveInfo.EndMove();
            alarmType = LineAlarmType.None;
            runStatus = LineRunStatus.HomeMoving;
            LogInfo("开始原点返回:  (重置灯状态,定位气缸下降  )开始");
            MoveInfo.NewMove(LineMoveType.ReturnHome);
            StartReset();
            return true;
        }
        /// <summary>
        /// 出料装置重置
        /// </summary>
        public override bool Reset()
        {
            WarnMsg = ""; 
            MoveInfo.EndMove();
            SecondMoveInfo.EndMove(); 
            alarmType = LineAlarmType.None; 
            LogInfo("开始重置: (重置灯状态,定位气缸下降  )开始;");
            runStatus = LineRunStatus.Reset;
            MoveInfo.NewMove(LineMoveType.Reset);
            StartReset();
            return true;
        }
        private void StartReset()
        {
            MoveInfo.NextMoveStep(LineMoveStep.DL_R_CylinderDown);
            CylinderMove(MoveInfo, IO_Type.SeparateDevice_Up, IO_Type.SeparateDevice_Down);
            IOMove(IO_Type.DLine_RunStatus, IO_VALUE.HIGH);
            IOMove(IO_Type.DLine_RunAlarm, IO_VALUE.LOW);
            if (IsDebug)
            {
                mainTimer.Start();
            }
            isInPro = false;
        }
        /// <summary>
        /// 重置处理
        /// </summary>
        protected override void ResetProcess()
        {
            ReturnHomeProcess();
        }
        /// <summary>
        /// 原点返回处理
        /// </summary>
        protected override void ReturnHomeProcess()
        {
            if (MoveInfo.IsInWait)
            {
                CheckWait(MoveInfo);
            }
            else if (SecondMoveInfo.IsInWait)
            {
                CheckWait(SecondMoveInfo);
            }
            if (!MoveInfo.IsInWait && !SecondMoveInfo.IsInWait)
            {
                switch (MoveInfo.MoveStep)
                {
                    case LineMoveStep.DL_R_CylinderDown: 
                        LogInfo(MoveInfo.MoveType + "完成,开始转动皮带!");
                        MoveInfo.NextMoveStep(LineMoveStep.DL_R_StartRun);
                        IOMove(IO_Type.DLine_Run1, IO_VALUE.HIGH);
                        IOMove(IO_Type.DLine_Run2, IO_VALUE.HIGH);
                        IOMove(IO_Type.DLine_Run3, IO_VALUE.HIGH);
                        IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.HIGH);
                        break;
                    case LineMoveStep.DL_R_StartRun:
                        LogInfo(MoveInfo.MoveType + "完成!");
                        runStatus = LineRunStatus.Runing;
                        MoveInfo.EndMove();
                        SecondMoveInfo.EndMove();
                        break;
                  
                    default: break;
                }
            }

        }

        protected override void StopMoveProcess()
        { 
        }
        /// <summary>
        /// 停止运动
        /// </summary>
        public override void StopMove()
        {
           
            runStatus = LineRunStatus.Busy;
            MoveInfo.EndMove();
            SecondMoveInfo.EndMove();

            LogInfo("停止运动:(定位气缸下降,皮带线停转 )开始 ");
            CylinderMove(null, IO_Type.SeparateDevice_Up, IO_Type.SeparateDevice_Down);

            IOMove(IO_Type.DLine_Run1, IO_VALUE.LOW);
            IOMove(IO_Type.DLine_Run2, IO_VALUE.LOW);
            IOMove(IO_Type.DLine_Run3, IO_VALUE.LOW);
            IOMove(IO_Type.SeparateDevice_Run, IO_VALUE.LOW);
        }
 

        public override void  StartInStoreMove(InOutParam param)
        {
            
        }

        protected override void InStoreProcess()
        { 
        }
         
    }
}