StoreBean.cs 7.5 KB
using Asa;
using HuichuanLibrary;
using log4net;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;

namespace OnlineStore.DeviceLibrary
{ 
    public partial class StoreBean : KTK_Store
    { 
        private System.Timers.Timer ledProcessTimer = null;

        public Dictionary<int, BoxConfig> BoxConfigMap { get; set; }
        public Dictionary<int, BoxBean> BoxMap = new Dictionary<int, BoxBean>();
        public bool UseBuzzer = true;
        public StoreConfig Config { get; set; }  
        #region  初始化

        internal bool canStart = false;
        public StoreBean(StoreConfig lineConfig, Dictionary<int, BoxConfig> configList)
        {
            BoxConfigMap = new Dictionary<int, BoxConfig>();
            BoxMap = new Dictionary<int, BoxBean>();
            if (lineConfig.IOSingle_TimerOut <= 0)
            {
                lineConfig.IOSingle_TimerOut = 5000;
            }
            Init();
            InitTimer();
            this.baseConfig = lineConfig;
            this.Config = lineConfig;
            this.DeviceID = lineConfig.DeviceID;

            MoveInfo = new StoreMoveInfo(DeviceID);
            Name = (" Store_" + Config.CID + " ").ToUpper();
            List<string> ioList = new List<string>();

            HCBoardManager.InitConfig();
            IOManager.Init();
            AxisManager.Init();
            AxisManager.instance.OpenCard();


            foreach (BoxConfig config in configList.Values)
            {
                BoxBean equip = new BoxBean(config);
                 
                BoxMap.Add(config.DeviceID, equip);
                BoxConfigMap.Add(config.DeviceID, config); 
            }

            //先初始化设备 
            Task.Factory.StartNew(delegate
            { 
                IOManager.instance.ConnectionIOList(ioList);
           
                IOMove(IO_Type.Alarm_HddLed, IO_VALUE.LOW);
                IOMove(IO_Type.AutoRun_HddLed, IO_VALUE.LOW);
                IOMove(IO_Type.RunSign_HddLed, IO_VALUE.LOW);
                mainTimer.Enabled = true;
                ledProcessTimer.Enabled = true;
                canStart = true; 
            });
        }
         
    

        private void IoCheckTimerProcess(object sender, ElapsedEventArgs e)
        {
        }
        #endregion

        public override bool StartRun( )
        {
            if (!canStart)
            {
                SetWarnMsg("启动失败:设备未初始化完成");
                return false;
            }
            if (BoxConfigMap == null)
            {
                SetWarnMsg("启动失败:未加载到料仓配置");
                return false;
            }
            if (IOValue(IO_Type.SuddenStop_BTN).Equals(IO_VALUE.LOW))
            {
                SetWarnMsg("启动失败:急停未开");
            }
            else if (IOValue(IO_Type.Airpressure_Check).Equals(IO_VALUE.LOW))
            {
                SetWarnMsg("启动失败:没有气压信号");
            }
            else
            {
                LogUtil.info(Name + "开始启动,连接agv调度,连接rfid,启动时间:" + StartTime.ToString());
                storeRunStatus = StoreRunStatus.HomeMoving;
                StartTime = DateTime.Now; 

                mainTimer.Enabled = false;
                isInSuddenDown = false;
                isNoAirCheck = false;
                alarmType = StoreAlarmType.None;
                WarnMsg = "";

                foreach (BoxBean box in this.BoxMap.Values)
                {
                    box.StartRun();
                }

                ledProcessTimer.Enabled = true;
                mainTimer.Enabled = true;
                return true;
            }
            return false;
        }

        public override void Reset(bool isNeedClearAuto = true)
        {
            mainTimer.Enabled = false;

            //停止运动
            MoveInfo.EndMove();

            storeRunStatus = StoreRunStatus.Reset;

            mainTimer.Enabled = false;
            isInSuddenDown = false;
            isNoAirCheck = false;
            alarmType = StoreAlarmType.None;
            WarnMsg = "";

            foreach (BoxBean equip in BoxMap.Values)
            {
                if (!equip.alarmType.Equals(StoreAlarmType.None))
                {
                    LogUtil.info(Name + "收到复位信号," + equip.Name + " 需要复位");
                    equip.Reset();
                }
                else
                {
                    LogUtil.info(Name + "收到复位信号," + equip.Name + " 正常无报警,不需要复位");
                }
            }
            mainTimer.Enabled = true;
        }


        public override void StopRun()
        {
            mainTimer.Enabled = false;
            //ledProcessTimer.Enabled = false; 
            //停止运行时,把阻挡气缸上升
            StopMove();
            foreach (BoxBean equip in BoxMap.Values)
            {
                equip.StopRun();
            }
            storeRunStatus = StoreRunStatus.Wait;
            // RFIDManager.Close();
            TimeSpan span = DateTime.Now - StartTime;
            LogUtil.info(Name + ",停止运行,关闭rfid,总运行时间:" + span.ToString());
        }

     
     
        protected override void timersTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
             

        }



        public override void StopMove()
        {
            foreach (BoxBean equip in this.BoxMap.Values)
            {
                //  if (!equip.IsDebug)
                {
                    equip.StopMove();
                }
            }
            MoveInfo.EndMove();
        }

        protected override void ResetProcess()
        {
            bool isOk = true;
            //判断是否所有的已经返回完成

            foreach (BoxBean box in this.BoxMap.Values)
            {
                if ((box.storeRunStatus.Equals(StoreRunStatus.HomeMoving) || box.storeRunStatus.Equals(StoreRunStatus.Reset)))
                //if ((box.storeRunStatus.Equals(StoreRunStatus.HomeMoving) || box.storeRunStatus.Equals(StoreRunStatus.Reset)) && box.IsDebug.Equals(false))
                {
                    if (box.alarmType.Equals(StoreAlarmType.None))
                    {
                        isOk = false;
                        break;
                    }
                    else
                    {
                        WarnMsg = box.Name + "在复位过程中报警,需要重新复位";
                    }
                }
            }

            if (isOk)
            {
                //所有原点重置完成
                storeRunStatus = StoreRunStatus.Runing; 
                LogUtil.info(Name + "所有设备重置完成");
            }
        }

     

        
        public override void Alarm(StoreAlarmType alarmType, string alarmDetial, string alarmMsg, StoreMoveType storeMoveType)
        {

        }
        #region 出库

        public override bool StartOutStoreMove(InOutParam param)
        {

            return true;
        }
        protected override void OutStoreProcess()
        {
        }
        #endregion

        #region 入库 
        public override void StartInStoreMove(InOutParam param)
        {
        }
        protected override void InStoreProcess()
        {
        }

        #endregion

    }
}