KTK_DeviceBase.cs 8.7 KB
using log4net;
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
 

namespace OnlineStore.DeviceLibrary
{
    public abstract class KTK_DeviceBase
    {
        /// <summary>
        /// 料仓单个调试状态(默认不是调试状态)
        /// </summary>
        public bool IsDebug = false;
        public Dictionary<string, ConfigIO> DIList { get; set; }
        public Dictionary<string, ConfigIO> DOList { get; set; }
        /// <summary>
        ///1=设备联机(正常就绪)(入库后,BOX恢复原始状态)(出库后,移载装置恢复原始状态),
        ///2=急停,3=故障,4=警告,5=调试
        ///  6=入库执行中,7=入仓完成,8=入仓失败
        /// 9=出库执行,10=出仓完成,11=出库失败
        /// </summary>
        public StoreStatus storeStatus = StoreStatus.ResetMove;
        /// <summary>
        /// 提示消息,一般发给服务器后清空(LineBean表示报警提示消息,BoxBean表示出入库失败的原因记录)
        /// </summary>
       // public string WarnMsg = "";
        /// <summary>
        /// 日志颜色
        /// </summary>
        protected static Color storeMoveColor = Color.Blue;
        protected static readonly ILog LOGGER = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        public string StoreName { get; set; }
        public int StoreID { get; set; }
        /// <summary>
        /// 料仓状态
        /// </summary>
        private StoreRunStatus storerunstatus = StoreRunStatus.Wait;
        /// <summary>
        /// 定时器
        /// </summary>
        protected System.Timers.Timer mainTimer;

        private bool isInit = false;
        /// <summary>
        /// 初始化
        /// </summary>
        protected virtual void Init()
        {
            if (!isInit)
            {
                StoreMove = new StoreMoveInfo(StoreID);

                mainTimer = new System.Timers.Timer();
                mainTimer.Enabled = false;
                mainTimer.Interval = 300;
                mainTimer.Elapsed += timersTimer_Elapsed;
                mainTimer.AutoReset = true;
                isInit = true;
            }
        }
        public StoreRunStatus storeRunStatus
        {
            get
            {
                return storerunstatus;
            }
            set
            {
                StoreRunStatus oldStatus = storerunstatus;
                storerunstatus = value;
            }
        }

        /// <summary>
        /// 移动信息
        /// </summary>
        public StoreMoveInfo StoreMove = null;
        
        /// <summary>
        /// 定时处理,监听信号,监听IO
        /// </summary> 
        protected abstract void timersTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e);
        #region 出库
        /// <summary>
        /// 开始出库运动
        /// </summary> 
        public abstract bool StartOutStoreMove(InOutStoreParam param);
        protected abstract void OutStoreProcess();
        #endregion

        #region 入库
        /// <summary>
        /// 开始入库移动移动
        /// </summary> 
        public abstract void StartInStoreMove(InOutStoreParam param);
        protected abstract void InStoreProcess();
        #endregion




        public string GetRunStr(StoreRunStatus runStatus)
        {
            string sta = ResourceControl.GetString(ResourceControl.Run, "运行中");
            string aa = "";
            switch (runStatus)
            {
                case StoreRunStatus.Busy:
                    sta = ResourceControl.GetString(ResourceControl.Busy, "忙碌");
                    break;
                case StoreRunStatus.HomeMoving:
                    sta = ResourceControl.GetString(ResourceControl.HomeMove, "原点返回");
                    break;
                case StoreRunStatus.Reset:
                    sta = ResourceControl.GetString(ResourceControl.Reset, "重置");
                    break;
                case StoreRunStatus.Runing:
                    sta = ResourceControl.GetString(ResourceControl.Runing, "运行中");
                    break;
                case StoreRunStatus.Wait:
                    sta = ResourceControl.GetString(ResourceControl.Wait, "等待启动");
                    break;
            }
            if (runStatus > StoreRunStatus.Wait)
            {
                //"0":"急停中",   "1":"设备联机",   "2":"故障中", "3":"入库执行中",  "4":"出库执行中",   5":"料盘入仓位完成",   "6":"料盘出仓位完成",  7":"设备调试中",
                switch (storeStatus)
                {
                    case StoreStatus.Debugging:
                        aa = ResourceControl.GetString(ResourceControl.Debugging, "设备调试中");
                        break;
                    case StoreStatus.InStoreEnd:
                        aa = ResourceControl.GetString(ResourceControl.InStoreEnd, "料盘入仓位完成");
                        break;
                    case StoreStatus.InStoreExecute:
                        aa = ResourceControl.GetString(ResourceControl.InStoreExecute, "入库执行中");
                        break;
                    case StoreStatus.InTrouble:
                        aa = ResourceControl.GetString(ResourceControl.InTrouble, "故障中");
                        break;
                    case StoreStatus.OutStoreBoxEnd:
                        aa = ResourceControl.GetString(ResourceControl.OutStoreBoxEnd, "料盘出仓位完成");
                        break;
                    case StoreStatus.OutStoreExecute:
                        aa = ResourceControl.GetString(ResourceControl.OutStoreExecute, "出库执行中");
                        break;
                    case StoreStatus.StoreOnline:
                        aa = ResourceControl.GetString(ResourceControl.StoreOnline, "设备联机");
                        break;
                    case StoreStatus.SuddenStop:
                        aa = ResourceControl.GetString(ResourceControl.SuddenStop, "急停中");
                        break;
                    case StoreStatus.OutMoveExecute:
                        aa = ResourceControl.GetString(ResourceControl.OutMoveExecute, "出库完成");
                        break;
                    case StoreStatus.InStoreFaild:
                        aa = ResourceControl.GetString(ResourceControl.InStoreFailed, "入库失败") + "(" + WarnObj.WarnMsg + ")";
                        break;
                   case StoreStatus.OutStorEnd:
                        aa = ResourceControl.GetString(ResourceControl.OutStorEnd, "出库完成") + "(" + WarnObj.WarnMsg + ")";
                        break;
                }
                if (!String.IsNullOrEmpty(aa))
                {
                    return sta + "_" + aa;
                }
                else
                {
                    return sta;
                }
            }
            else
            {
                return sta;
            }
        }
        public WarnInfo WarnObj = new WarnInfo();
        public void SetWarnMsg(string code="", params string[] param)
        {
            if (code.Equals(""))
            {
                //   WarnMsg =msg;
                WarnObj.WarnMsg = "";
                WarnObj.WarnMsgEn = "";
                WarnObj.MsgCode = "";
                WarnObj.MsgParam = param;
            }
            else
            {
                // WarnMsg = String.Format(msg, param);
                WarnObj.WarnMsg = ResourceControl.GetChinaString(code, param);
                WarnObj.WarnMsgEn = ResourceControl.GetEnglishString(code, param);
                WarnObj.MsgCode = code;
                WarnObj.MsgParam = param;
            }
        }
        public void SetWarnMsgAndLog(string code, params string[] param)
        {
            SetWarnMsg(code, param);
            LogUtil.error("WarnObj:  Type[" + WarnObj.MsgCode + "]Msg[" + WarnObj.WarnMsg + "]");
        }
        //public void SetWaitWarnMsg(string myType, string type, params string[] param)
        //{
        //    WarnObj.WarnMsg = myType;
        //    WarnObj.MsgCode = type;
        //    WarnObj.WarnMsgEn=
        //    WarnObj.MsgParam = param;
        //}

    }
    public class WarnInfo
    {
        public WarnInfo()
        {
            WarnMsgEn = "";
            MsgCode = "";
            WarnMsg = "";
            MsgParam = null;
        }

        public string MsgCode { set; get; }
        public string WarnMsg { set; get; }
        public string WarnMsgEn {set;get;}
        public string[] MsgParam { set; get; }
    }
}