StoreMoveInfo.cs 10.4 KB
using OnlineStore.Common;
using OnlineStore.DeviceLibrary;
using OnlineStore.LoadCSVLibrary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 

namespace OnlineStore.DeviceLibrary
{
    /// <summary>
    /// 料仓当前运动信息类(出入库状态,步骤记录)
    /// </summary>
    public class StoreMoveInfo
    {
        public string Name = "";
        public int TimeOutSeconds = 60;
        public StoreMoveInfo(int storeId)
        {
            MoveType = MoveType.None; 
            MoveParam = new InOutParam(MoveType.None, "");
            this.storeId = storeId;
            this.moveStep = StoreMoveStep.Wait;
            IsInWait = false;
            MoveNum = 0;
        }

        public int MoveNum { get; set; }

        public DateTime LastSetpTime { get; set; }

        /// <summary>
        /// =true表示满足一个等待条件,就可以完成此步骤的等待
        /// </summary>
        public bool OneWaitCanEndStep = false;
         
        public MoveType MoveType = MoveType.None;
   
        /// <summary>
        ///出入库参数
        /// </summary>
        public InOutParam MoveParam { get; set; }
        /// <summary>
        /// 当前运动是哪个料仓
        /// </summary>
        public int storeId { get; set; }

        /// <summary>
        /// 是否再当前步骤等待中
        /// </summary>
        public bool IsInWait { get; set; }
        /// <summary>
        /// 上一个执行步骤
        /// </summary>
        public StoreMoveStep PreMoveStep { get; set; }
        /// <summary>
        /// 当前执行到的步骤
        /// </summary>
        private StoreMoveStep moveStep;
        /// <summary>
        /// 可以循环运动的次数(轴卡运动才需要)
        /// </summary>
        public int CanWhileCount = 0;
        /// <summary>
        /// 料仓运动步骤记录
        /// </summary>
        public StoreMoveStep MoveStep
        {
            get { return moveStep; }
        }
 
        public void NextMoveStep(StoreMoveStep step)
        {
            PreMoveStep = moveStep;
            moveStep = step;
            LastSetpTime = DateTime.Now; 
            IsInWait = true;
            WaitList = new List<WaitResultInfo>();
            OneWaitCanEndStep = false;
            CanWhileCount = 5;
        }
        /// <summary>
        /// 当前步骤执行完成
        /// </summary>
        public void EndStepWait()
        {
            IsInWait = false;
            WaitList = new List<WaitResultInfo>();
        }
        public void NewMove(MoveType type )
        {
            moveStep = StoreMoveStep.Wait;
            MoveType = type; 
            LastSetpTime = DateTime.Now;
            WaitList = new List<WaitResultInfo>();
            MoveNum++;
        }

        public bool IsStep(StoreMoveStep step)
        {
            return MoveStep.Equals(step);
        }

        public void NewMove(MoveType type, InOutParam param)
        {
            moveStep = StoreMoveStep.Wait;
            this.MoveType = type;
            this.MoveParam = param;
            LastSetpTime = DateTime.Now;
            WaitList = new List<WaitResultInfo>();
        }
        public void EndMove()
        {
            this.MoveType = MoveType.None;
            this.MoveParam = null; 
            moveStep = StoreMoveStep.Wait;
            LastSetpTime = DateTime.Now;
            IsInWait = false;
            WaitList = new List<WaitResultInfo>();
            CanWhileCount = 0;
        }
        public StoreMoveInfo clone()
        {
            return (StoreMoveInfo)this.MemberwiseClone();
        }

        public List<WaitResultInfo> WaitList = new List<WaitResultInfo>();
        /// <summary>
        /// 重置之后继续出入库时,退回上一个步骤执行
        /// </summary>
        public void BackStep()
        {
            moveStep = PreMoveStep;
            IsInWait = false;
        }
    }

    public class WaitResultInfo
    {
        private WaitResultInfo()
        {
        }

        public static  WaitResultInfo WaitIO(string ioType, IO_VALUE ioValue)
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = 2;
            wait.IoType = ioType;
            wait.IoValue = ioValue;
            wait.IsEnd = false;
            return wait;
        }
        public static WaitResultInfo WaitAxis(ConfigMoveAxis axis,int targetPosition,int targetSpeed )
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = 1;
            wait.AxisInfo = axis;
            wait.IsHomeMove = false;
            wait.TargetPosition = targetPosition;
            wait.TargetSpeed = targetSpeed;
            wait.IsEnd = false;
            return wait;
        }
        public static WaitResultInfo WaitAxis(ConfigMoveAxis axis, bool isHomeMove)
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = 1;
            wait.AxisInfo = axis;
            wait.IsHomeMove = true;
            wait.IsEnd = false;
            return wait;
        }
        //public static WaitResultInfo WaitStell(byte slvAddr, int targetPosition, int speed)
        //{
        //    WaitResultInfo wait = new WaitResultInfo();
        //    wait.CanWhileMoveCount =10;
        //    wait.WaitType = 4;
        //    wait.SlvAddr = slvAddr;
        //    wait.IsHomeMove = false;
        //    wait.TargetPosition = targetPosition;
        //    wait.TargetSpeed = speed;
        //    wait.IsEnd = false;
        //    return wait;
        //}
        // public static WaitResultInfo WaitStellHome(byte slvAddr, int targetPosition, int speed)
        //{
        //    WaitResultInfo wait = new WaitResultInfo();
        //    wait.CanWhileMoveCount = 10;
        //    wait.WaitType = 4;
        //    wait.SlvAddr = slvAddr;
        //    wait.IsHomeMove = true;
        //    wait.TargetPosition = 0;
        //    wait.TargetSpeed = speed;
        //    wait.IsEnd = false;
        //    return wait;
        //}
        // public static WaitResultInfo WaitShuoKe(int slvAddr, int targetPosition, bool isHome)
        // {
        //     WaitResultInfo wait = new WaitResultInfo();
        //     wait.CanWhileMoveCount = 0;
        //     wait.WaitType = 5;
        //     wait.SlvAddr =(byte) slvAddr;
        //     wait.TargetPosition = targetPosition;
        //     wait.IsHomeMove = isHome;
        //     return wait;
        // }
        public static WaitResultInfo WaitTime(int MScends)
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = 3;
            wait.TimeMSeconds = MScends;
            wait.IsEnd = false;
            return wait;
        }
        public static WaitResultInfo WaitAxisOrg(ConfigMoveAxis axis,IO_VALUE value )
        {
            WaitResultInfo wait = new WaitResultInfo();
            wait.CanWhileMoveCount = 0;
            wait.WaitType = 6;
            wait.AxisInfo = axis;
            wait.IsHomeMove = true;
            wait.IoValue = value;
            wait.IsEnd = false;
            return wait;
        }
 
        public string ToStr()
        {
            if (WaitType == 1)
            {
                if (IsHomeMove)
                {
                    return "轴【" + AxisInfo.DisplayStr  + "】原点返回";
                }
                else
                {
                    return "轴【" + AxisInfo.DisplayStr + "】绝对运动,目标位置【" + TargetPosition + "】";
                }
            }
            else if (WaitType == 2)
            {
                return "IO信号等待,IO类型【" + IoType + "】,等待值【" + IoValue + "】";
            }
            else if (WaitType == 3)
            {
                return "时间等待:【" + TimeMSeconds + "】毫秒";
            }
            else if (WaitType == 4)
            {
                return "电钢目标位置:【" + TargetPosition + "】 ";
            }
            else if (WaitType == 5)
            {
                return "硕科电机目标位置:【" + TargetPosition + "】 ";
            }
            else if (WaitType == 6)
            {
                return "轴【" + AxisInfo.DisplayStr  + "】ORG信号:【" + IoValue + "】 ";
            } 
            else 
            {
                return "Wait位置类型:WaitType=【" + WaitType + "】";
            }
        }
        /// <summary>
        /// 当未结束时可以重复运动的次数
        /// </summary>
        public int CanWhileMoveCount { get; set; }
        /// <summary>
        /// 等待结果,1=轴运动,2=IO运动,3=时间,4=电钢,5=硕科电机,6=等待轴原点信号
        /// </summary>
        public int WaitType { get; set; }
        /// <summary>
        /// 轴运动时表示轴信息
        /// </summary>
        public ConfigMoveAxis AxisInfo { get; set; }
        /// <summary>
        /// 电钢地址
        /// </summary>
        public byte SlvAddr { 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 bool IsEnd{ get; set; }
        /// <summary>
        /// 高度
        /// </summary>
        public int HeightValue { get; set; }
    }
    public enum MoveType
    {
        /// <summary>
        /// 没有任何操作
        /// </summary>
        None = 0,
   
    
        /// <summary>
        /// 重置
        /// </summary>
        StoreReset = 1,

        /// <summary>
        /// 入库
        /// </summary>
        InStore = 5,
        /// <summary>
        /// 出库
        /// </summary>
        OutStore = 6,
       
    }
}