VMILineBean_Partial.cs 4.3 KB
using OnlineStore.Common;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace OnlineStore.DeviceLibrary
{
    partial class VMILineBean
    {
        #region CheckWait处理

        private DateTime preCheckAxisTime = DateTime.Now;
        protected DateTime preRWTime = DateTime.Now;
        internal void CheckWait(LineMoveInfo moveInfo)
        {
            try
            {
                List<WaitResultInfo> list = moveInfo.WaitList;
                if (list.Count <= 0)
                {
                    moveInfo.EndStepWait();
                    return;
                }

                //当等待超过一分钟时,需要打印提示 
                TimeSpan span = DateTime.Now - moveInfo.LastSetpTime;
                string NotOkMsg = "";
                bool isOk = true;
                if (moveInfo.OneWaitCanEndStep)
                {
                    isOk = false;
                }
                foreach (WaitResultInfo wait in list)
                {
                    if (wait.IsEnd)
                    {
                        continue;
                    }
                    NotOkMsg = " [" + wait.ToStr() + "] ";
                    if (wait.WaitType.Equals(WaitEnum.W001_AxisMove))
                    {

                    }
                    else if (wait.WaitType.Equals(WaitEnum.W002_IOValue))
                    {
                        wait.IsEnd = IOManager.IOValue(wait.IoType).Equals(wait.IoValue);
                    }
                    else if (wait.WaitType.Equals(WaitEnum.W003_Time))
                    {
                        wait.IsEnd = (span.TotalMilliseconds >= wait.TimeMSeconds);
                    }

                    if (wait.IsEnd && moveInfo.OneWaitCanEndStep)
                    {
                        isOk = true;
                        break;
                    }
                    else if (!moveInfo.OneWaitCanEndStep)
                    {
                        isOk = false;
                        break;
                    }
                }
                if (isOk)
                {
                    moveInfo.EndStepWait();
                }
                else if (span.TotalSeconds > moveInfo.TimeOutSeconds)
                {
                    WarnMsg = Name + "[" + moveInfo.MoveType + "][" + moveInfo.MoveStep + "]等待" + NotOkMsg
                        + "超时[" + Math.Round(span.TotalSeconds, 1) + "]秒";
                    LogUtil.error(WarnMsg);
                    Alarm(AlarmType.IoSingleTimeOut);
                }
            }
            catch (Exception ex)
            {
                LogUtil.error(Name + " [" + moveInfo.MoveStep + "] CheckWait 出错:", ex);
            }
        }

        public   void StopIOMove(string ioType, int ms = 1000)
        {
            Task.Factory.StartNew(delegate
            {
                IOManager.IOMove(ioType, IO_VALUE.HIGH);
                Thread.Sleep(ms);
                IOManager.IOMove(ioType, IO_VALUE.LOW);
            });
        }
        public void SetWarnMsg(string msg = "")
        {
            if (String.IsNullOrEmpty(msg).Equals(false))
            {
                if (WarnMsg.Equals(msg))
                {
                    if (msg.StartsWith(Name))
                    {
                        LogUtil.error(msg, 105);
                    }
                    else
                    {
                        LogUtil.error(Name + msg, 105);
                    }
                }
                else
                {
                    if (msg.StartsWith(Name))
                    {
                        LogUtil.error(msg);
                    }
                    else
                    {
                        LogUtil.error(Name + msg);
                    }
                }
            }

            WarnMsg = msg;
        }

        public string GetRunInfo()
        {
            return "进料入口料架: "+LastInShelfId+"    进料出口料架: "+LastOutShelfId+"\r\n"+
                "进料出口"+Config.InL_AgvName+":"+AgvClient.GetAction(Config.InL_AgvName)+"    出料进口" + Config.OutL_AgvName + ":"+ AgvClient.GetAction(Config.OutL_AgvName) + "";
        }
        #endregion
    }

}