LineSolderingRobot_Partial.cs 8.7 KB
using URSoldering.Common;
using URSoldering.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace URSoldering.DeviceLibrary
{
    public partial class URSolderingRobot
    {
        public DateTime LastStartWeldTime = DateTime.Now;
        public DateTime LastEndWeldTime = DateTime.Now;
        public bool IsWeld = false;
        public delegate void GetCode();
        public   event GetCode GetCodeFun;

        public delegate void AOICheck();
        public   event AOICheck AOICheckFun;
        public bool IsAutoRun = false;
        private void LineLog(string msg)
        {
            LogUtil.debug(RobotName + msg);
        }
        private void BusyProcess()
        {
            //if (LineStep.IsInWait)
            //{
            //    CheckWait();
            //}
            //if(LineStep.IsInWait)
            //{
            //    return;
            //}
            //if (LineStep.moveStep.Equals(MoveStep.BUSY01_Weld))
            //{
            //    //if (WeldRobotBean.WeldMoveStep.moveType.Equals(MoveType.None))
            //    if (WeldRobotBean.IsInWeld.Equals(false))
            //    { 
            //        LastEndWeldTime = DateTime.Now;
            //        TimeSpan span = LastEndWeldTime - LastStartWeldTime;
            //        if (BoardManager.CurrBoard.WeldTime.TotalSeconds <= 0)
            //        {
            //            BoardManager.CurrBoard.WeldTime = span;
            //        }
            //        else
            //        {
            //            BoardManager.CurrBoard.WeldTime = new TimeSpan(0, 0, (int)(BoardManager.CurrBoard.WeldTime.TotalSeconds + span.TotalSeconds) / 2);
            //        }
            //        BoardManager.Update(BoardManager.CurrBoard);
            //        LogUtil.info("Busy处理:" + "焊接结束,焊接耗时"+FormUtil.GetSpanStr(span)+ ",累积平均耗时" + FormUtil.GetSpanStr(BoardManager.CurrBoard.WeldTime) + ",阻挡气缸下降");
            //        LineStep.NextMoveStep(MoveStep.BUSY03_CylinderDown);
            //        StopCylinderDownAndWait();
            //    }
            //} 
            ////焊接完成,流水线继续转动,直到出料口检测到信号 
            //else if (LineStep.moveStep.Equals(MoveStep.BUSY03_CylinderDown))
            //{
            //    LineLog("Busy处理:" + "流水线转动,等待出料口信号");
            //    LineStep.NextMoveStep(MoveStep.BUSY04_LineMove);
            //    LineStartMove();
            //    LineStep.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineOutCheck, IO_VALUE.HIGH));
            //}
            //else if (LineStep.moveStep.Equals(MoveStep.BUSY04_LineMove))
            //{
            //    LineStopMove();
            //    if (IsAutoRun)
            //    {
            //        LineLog("Busy处理:" + "等待3秒钟后流水线倒转");
            //        LineStep.NextMoveStep(MoveStep.BUSY05_Wait);
            //        LineStep.WaitList.Add(WaitResultInfo.WaitTime(2000));
            //    }
            //    else
            //    {
            //        LineLog("Busy处理:" + "停止转动");
            //        StopCylinderUp();
            //        Status = RobotStatus.Runing;
            //    }
            //}
            //else if (LineStep.moveStep.Equals(MoveStep.BUSY05_Wait))
            //{
            //    LineLog("Busy处理:" + "流水线转动,等待出料口信号");
            //    LineStep.NextMoveStep(MoveStep.BUSY06_WaitInSingle);
            //    LineBackMove();
            //    LineStep.WaitList.Add(WaitResultInfo.WaitIO(IO_Type.LineInCheck, IO_VALUE.HIGH));
            //}
            //else if (LineStep.moveStep.Equals(MoveStep.BUSY06_WaitInSingle))
            //{
            //    LineLog("Busy处理:" + "板子到达入料口,停止转动");
            //    LineStopMove();
            //    StopCylinderUp();
            //    Status = RobotStatus.Runing;
            //}
        }
        //private void LineBackMove()
        //{
        //    ShuoKeControls.VolMove(Config.Line_Slv,   Config.Line_EndSpeed);
        //    KNDIOMove(IO_Type.LineStart, IO_VALUE.HIGH);
        //}
        //private void LineStartMove()
        //{
        //    ShuoKeControls.VolMove(Config.Line_Slv, 0- Config.Line_EndSpeed);
        //    KNDIOMove(IO_Type.LineStart, IO_VALUE.HIGH);
        //}
        //private void LineStopMove()
        //{
        //    ShuoKeControls.SuddownStop(Config.Line_Slv);
        //    KNDIOMove(IO_Type.LineStart, IO_VALUE.LOW);
        //}
        
        /// <summary>
        /// 判断是否还有未完成的工作
        /// </summary>
        public bool NeedWork()
        {
            if (Status > RobotStatus.Wait)
            { 
                if (WeldRobotBean.WeldMoveStep.moveType.Equals(MoveType.Weld))
                {
                    return true;
                } 
            }
            return false;
        }
        private   void CheckWait()
        {
            int ioSingleTimeOutSeconds = 30000;
            List<WaitResultInfo> list = new List<WaitResultInfo>(LineStep.WaitList);
            //当等待超过一分钟时,需要打印提示 
            TimeSpan span = DateTime.Now - LineStep.LastSetpTime;
            string NotOkMsg = "";
            if (list.Count > 0)
            {
                bool isOk = true;
                foreach (WaitResultInfo wait in list)
                {
                    if (wait.WaitType == 1)
                    {
                        if (!RobotBean.KNDIOValue(wait.IoType).Equals(wait.IoValue))
                        {
                            //一分钟还未检测到
                            if (span.TotalMilliseconds > ioSingleTimeOutSeconds)
                            {
                                ConfigIO io = RobotBean.getWaitIO(wait.IoType);
                                NotOkMsg = "信号(" + io.Explain + "=" + wait.IoValue + ")";
                                WarnMsg = RobotName + " 等待信号(" + io.Explain + "=" + wait.IoValue + ") 超时!";
                                Alarm(AlarmType.IoSingleTimeOut);
                                LogUtil.error(LOGGER, WarnMsg, 13);
                            }
                            isOk = false;
                            break;
                        }
                        else if (LineStep.OneWaitOk)
                        {
                            isOk = true;
                            break;
                        }
                    }
                    else if (wait.WaitType == 2)
                    {
                        if (span.TotalMilliseconds < wait.TimeMSeconds)
                        {
                            NotOkMsg = "时间[" + wait.TimeMSeconds + "]毫秒";
                            isOk = false;
                            break;
                        }
                        else if (LineStep.OneWaitOk)
                        {
                            isOk = true;
                            break; 
                        } 
                    }
                   
                }
                if (isOk)
                {
                    LineStep.EndStepWait();
                }
                if (LineStep.IsInWait)
                {
                    if (span.TotalMinutes > 1)
                    {
                        if (NotOkMsg.Equals(""))
                        {
                            WarnMsg = "等待超时[" + LineStep.moveType + "][" + LineStep.moveStep + "][" + NotOkMsg + "]已等待[" + Math.Round(span.TotalMinutes, 1) + "]分钟";
                        }
                        else
                        {
                            WarnMsg = "等待超时[" + LineStep.moveType + "][" + LineStep.moveStep + "]已等待[" + Math.Round(span.TotalMinutes, 1) + "]分钟,";
                            foreach (WaitResultInfo wait in list)
                            {
                                WarnMsg = WarnMsg + "\r\n" + wait.ToStr();
                            }
                        }
                        Alarm(AlarmType.StepTimeOut);
                        LogUtil.error(LOGGER, WarnMsg, 12); 
                    } 
                }
            }
            else
            {
                LineStep.EndStepWait();
            }
        }

        private void Alarm(AlarmType alarmType)
        {
            this.alarmType = alarmType;
            if (AlarmType.SuddenStop.Equals(alarmType))
            {
                KNDIOMove(IO_Type.AlarmSingle, IO_VALUE.HIGH);
                WarnMsg = "收到急停信号";
                WeldRobotBean.Alarm(AlarmType.SuddenStop); 
                SendWireManager.Release();
                StopMove();
            }
        }
    }

}