TSAVStatus.cs 10.3 KB
using PUSICANLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TSA_V.Common;

namespace TSA_V.DeviceLibrary
{
    public enum WaitTypeEnum
    {/// <summary>
     /// 等待结果,1=节点目标位置,2=节点原点返回,,3=时间, 4=烙铁加温,5=等待XY轴运动结束,6=IO信号
     /// </summary>
        None = 0,
        NodeMove_1 = 1,
        NodeHome_2 = 2,
        Time_3 = 3,
        Temp_4 = 4,
        XYMoveEnd_5 = 5,
        IOSingle_6 = 6,
        WaitCode_7=7,
    }
    public class WaitResultInfo
    {
        private WaitResultInfo()
        {
            IsEnd = false;
        }

        public static WaitResultInfo WaitIO(string ioType, IO_VALUE ioValue)
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = WaitTypeEnum.IOSingle_6;
            wait.IoType = ioType;
            wait.IoValue = ioValue;
            return wait;
        }
        public static WaitResultInfo WaitNode(NodeInfo node, int targetPosition)
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = WaitTypeEnum.NodeMove_1;
            wait.Node = node;
            wait.IsHomeMove = false;
            wait.TargetPosition = targetPosition;
            return wait;
        } 
        public static WaitResultInfo WaitNode(NodeInfo node, bool isHomeMove)
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = WaitTypeEnum.NodeHome_2;
            wait.Node = node;
            wait.IsHomeMove = true;
            return wait;
        }
        public static WaitResultInfo WaitTime(int MScends)
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = WaitTypeEnum.Time_3;
            wait.TimeMSeconds = MScends;
            return wait;
        }
        public static WaitResultInfo WaitSoldering(int temp, int tempMin, int tempMax)
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = WaitTypeEnum.Temp_4;
            wait.Temperature = temp;
            wait.TemperatureMax = tempMax;
            wait.TemperatureMin = tempMin;
            return wait;
        }
        public static WaitResultInfo WaitCodeOk()
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = WaitTypeEnum.WaitCode_7;
            return wait;
        }
        public string ToStr()
        {
            if (WaitType.Equals(WaitTypeEnum.NodeMove_1))
            {
                return "[" + Node.NodeName + "]目标位置[" + TargetPosition + "]";
            }
            else if (WaitType.Equals(WaitTypeEnum.NodeHome_2))
            {
                return "[" + Node.NodeName + "]原点返回";
            }
            else if (WaitType.Equals(WaitTypeEnum.IOSingle_6))
            {
                ConfigIO io = IOManager.getWaitIO(IoType);
                return "IO等待[" + io.DisplayStr + "]=[" + IoValue + "]";
            }
            else if (WaitType.Equals(WaitTypeEnum.Time_3))
            {
                return "时间[" + TimeMSeconds + "]毫秒";
            }
            else if (WaitType.Equals(WaitTypeEnum.XYMoveEnd_5))
            {
                return "XY轴目标 [" + AxisValue + "] ";
                //return "XY轴目标[" + MoveAxis.PortName + "][" + AxisValue + "] ";
            }
            else if (WaitType.Equals(WaitTypeEnum.Temp_4))
            {
                return "烙铁温度[" + Temperature + "] ";
            }
            else if (WaitType.Equals(WaitTypeEnum.WaitCode_7))
            {
                return "输入条码 ";
            }
            else
            {
                return "Wait位置类型:WaitType=【" + WaitType + "】";
            }
        }
        public bool IsEnd { get; set; }
        //public DACBean MoveAxis { get; set; }

        public double AxisValue { get; set; }
        /// <summary>
        /// 当未结束时可以重复运动的次数
        /// </summary>
        public int CanWhileMoveCount { get; set; }
        /// <summary>
        /// 等待结果,1=节点目标位置,2=节点原点返回,,3=时间, 4=烙铁加温,5=等待XY轴运动结束,6=IO信号
        /// </summary>
        public WaitTypeEnum WaitType { get; set; }
        /// <summary>
        /// 轴运动时表示轴信息
        /// </summary>
        public NodeInfo Node { get; set; }

        /// <summary>
        /// IO类型
        /// </summary>
        public String IoType { get; set; }
        /// <summary>
        /// IO值
        /// </summary>
        public IO_VALUE IoValue { get; set; }
        /// <summary>
        /// 等待的毫秒
        /// </summary>
        public int TimeMSeconds { get; set; }
        /// <summary>
        /// 是否是原点返回
        /// </summary>
        public bool IsHomeMove = false;

        /// <summary>
        /// 电机目标位置
        /// </summary>
        public int TargetPosition { get; set; }
        /// <summary>
        /// 电机目标速度
        /// </summary>
        public int TargetSpeed { get; set; }

        /// <summary>
        /// 等待的温度温度
        /// </summary>
        public int Temperature { get; set; }
        /// <summary>
        /// 温度下限
        /// </summary>
        public int TemperatureMin { get; set; }
        /// <summary>
        /// 温度上限
        /// </summary>
        public int TemperatureMax { get; set; }


        public int WhileMoveCount = 0;

        public static bool GetWaitResult(List<WaitResultInfo> waitList, TimeSpan span,bool oneOkCanEnd, out string waitMsg)
        {

            waitMsg = "";
            if (!IOManager.ShuddenOK())
                return false;
            try
            {
                if (waitList.Count <= 0)
                {
                    return true;
                }
                bool isOk = true;
                if (oneOkCanEnd)
                {
                    isOk = false;
                }
                foreach (WaitResultInfo wait in waitList)
                {
                    if (wait.IsEnd)
                    {
                        continue;
                    }
                    waitMsg = wait.ToStr();
                    if (wait.WaitType.Equals(WaitTypeEnum.NodeMove_1))
                    {
                        string msg = "";

                        wait.IsEnd = PUSICANControl.MoveIsEnd(wait.Node.NodeId, wait.TargetPosition,out msg,out bool canWhileMove);
                        waitMsg = waitMsg + msg;

                        if (span.TotalSeconds >= 5 && canWhileMove && wait.WhileMoveCount.Equals(0))
                        {
                            wait.WhileMoveCount++;
                            LogUtil.info(waitMsg + ". 自动重新运动一次"+wait.WhileMoveCount); 
                            PUSICANControl.AbsMove(wait.Node.NodeId, wait.TargetPosition);
                        }
                    }
                    else if (wait.WaitType.Equals(WaitTypeEnum.NodeHome_2))
                    {
                        if (!TSAVBean.IsInSuddenDown)
                            wait.IsEnd = PUSICANControl.IsHomeEnd(wait.Node.NodeId);
                    }
                    else if (wait.WaitType.Equals(WaitTypeEnum.IOSingle_6))
                    {
                        wait.IsEnd = IOManager.IOValue(wait.IoType).Equals(wait.IoValue);
                    }
                    else if (wait.WaitType.Equals(WaitTypeEnum.Time_3))
                    {
                        wait.IsEnd =( span.TotalMilliseconds >= wait.TimeMSeconds);
                    }
                    else if (wait.WaitType.Equals(WaitTypeEnum.Temp_4))
                    {
                       // wait.IsEnd = SolderingManager.IsRightTemp(wait.Temperature, wait.TemperatureMin, wait.TemperatureMax);
                    }
                    else if (wait.WaitType.Equals(WaitTypeEnum.XYMoveEnd_5))
                    {
                        //wait.IsEnd = wait.MoveAxis.LastVoltage.Equals(wait.AxisValue);
                        wait.IsEnd = true;

                    }
                    else if (wait.WaitType.Equals(WaitTypeEnum.WaitCode_7))
                    {
                        return MesUtil.CodeISOk;
                    }
                    if (!wait.IsEnd)
                    {
                        if (oneOkCanEnd.Equals(false))
                        {
                            isOk = false;
                            break;
                        }
                    }else
                    {
                        if (oneOkCanEnd)
                        {
                            isOk = true;
                            break;
                        }
                    }
                }
                return isOk;


            }
            catch (Exception ex)
            {
                LogUtil.error("出错:" + ex.ToString());
                return false;
            }

        }
    }
    public enum  TSAVStatus
    {
        /// <summary>
        /// 等待启动
        /// </summary>
        Wait=0,
        /// <summary>
        /// 重置中
        /// </summary>
        Reset=1,
        /// <summary>
        /// 运行中
        /// </summary>
        Runing=2,
    }
    /// <summary>
    /// 重置的步骤
    /// </summary>
    public enum ResetStep
    {
        /// <summary>
        /// 打开CAN协议
        /// </summary>
        OpenCan_0=0,
        /// <summary>
        /// 添加节点
        /// </summary>
        AddNode_1=1,
        /// <summary>
        /// 等待XY节点上线,并设置默认的参数
        /// </summary>
        XYNodeOnline_2 = 2,

        /// <summary>
        /// 等待XY轴回原点
        /// </summary>
        XYHomeMove_3=3,
        /// <summary>
        /// 等待所有旋转轴在线,并初始化默认参数
        /// </summary>
        RNodeOnline_4 = 4,
        /// <summary>
        /// 所有旋转轴回原点
        /// </summary>
        NodeGoHome_5=5,
        /// <summary>
        /// 所有转盘转到待机点
        /// </summary>
        NodeGoDefaultPosition_6=6,
    }
}