StoreBean.cs 7.8 KB
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;

namespace OnlineStore.DeviceLibrary
{
   public  class StoreBean:KTK_Store
    {  
        public Dictionary<int, AC_SA_Config> BoxConfigMap { get; set; }
        public Dictionary<int, AC_SA_BoxBean> BoxMap = new Dictionary<int, AC_SA_BoxBean>();
          
        #region  初始化

        private bool canStart = false;
        public StoreBean(  Dictionary<int, AC_SA_Config> configList)
        {
            BoxConfigMap = new Dictionary<int, AC_SA_Config>();
            BoxMap = new Dictionary<int, AC_SA_BoxBean>();
        
            Init();
            InitTimer();
            baseConfig = lineConfig;
            this.Config = lineConfig;
            this.DeviceID = lineConfig.DeviceID;

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

            AddDeviceName(ioList, Config.DIODeviceNameList);
            foreach (AC_SA_Config config in configList.Values)
            {
                AC_SA_BoxBean equip = new AC_SA_BoxBean(config);

                AddDeviceName(ioList, config.DIODeviceNameList);
                BoxMap.Add(config.DeviceID, equip);
                BoxConfigMap.Add(config.DeviceID, config);
            }

            IOManager.Init();
            //先初始化设备

            //初始化摄像机配置  
            CodeManager.LoadConfig();

            Task.Factory.StartNew(delegate
            {
                IOManager.instance.ConnectionIOList(ioList);
                addLastDI(IO_Type.Airpressure_Check, IOValue(IO_Type.Airpressure_Check));
                addLastDI(IO_Type.SuddenStop_BTN, IOValue(IO_Type.SuddenStop_BTN));
                addLastDI(IO_Type.Reset_BTN, IOValue(IO_Type.Reset_BTN));
                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;

                canStart = true;

            });
        }


        private void AddDeviceName(List<string> targetList, List<string> list)
        {
            foreach (string str in list)
            {
                if (!targetList.Contains(str))
                {
                    targetList.Add(str);
                }
            }
        } 

        #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 + "开始启动,启动时间:" + StartTime.ToString());
                storeRunStatus = StoreRunStatus.HomeMoving;
                StartTime = DateTime.Now;

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

                foreach (AC_SA_BoxBean moveEquip in this.BoxMap.Values)
                {
                    if (!moveEquip.IsDebug)
                    {
                        moveEquip.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 (AC_SA_BoxBean equip in BoxMap.Values)
            {
                //调试状态不再重置
                if (!equip.IsDebug)
                {
                    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 (AC_SA_BoxBean equip in BoxMap.Values)
            {
                equip.StopRun();
            }
            storeRunStatus = StoreRunStatus.Wait;

            TimeSpan span = DateTime.Now - StartTime;
            LogUtil.info(Name + ",停止运行,总运行时间:" + span.ToString());
        }
         

         

        public override void StopMove()
        {

            foreach (AC_SA_BoxBean equip in this.BoxMap.Values)
            {
                if (!equip.IsDebug)
                {
                    equip.StopMove();
                }
            }
            MoveInfo.EndMove();

        }

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

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

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

        private void SetWarnMsg(string msg)
        {
            WarnMsg = msg;
            LogUtil.error(Name + WarnMsg);
        }

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

        }

        protected override void ReturnHomeProcess()
        {

        }

        public override void StopMove(bool IsCloseAxis)
        { 
        }

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

        public override bool StartOutStoreMove(InOutStoreParam param)
        {
            return false;
        }

        protected override void OutStoreProcess()
        { 
        }

        public override void StartInStoreMove(InOutStoreParam param)
        { }

        protected override void InStoreProcess()
        { 
        }
    }
}