TakeEmptyShelfJob.cs 2.8 KB
using Acc.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Acc.AgvManager.demo
{
    /// <summary>
    /// 回收空料架任务
    /// </summary>
    public class TakeEmptyShelfJob : Job
    {
        public TakeEmptyShelfJob(string palce, int priority)
        {
            emptyShelfPlace = palce;
            _priority = priority;
        }

        /// <summary>
        /// 空料架位置点
        /// </summary>
        private string emptyShelfPlace = PLACE.NONE;

        /// <summary>
        /// 优先级
        /// </summary>
        private int _priority;

        private JobStep<TAKE_EMPTY_STEP> TakeEmptyStep = new JobStep<TAKE_EMPTY_STEP>(TAKE_EMPTY_STEP.NONE);
        
        public override void Execute(AgvBean agvBean, Dictionary<string, Node> nodeMap, Dictionary<string, AgvBean> agvBeanMap)
        {

            if (TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.NONE))
            {
                LogUtil.info("开始执行回收空料架任务,发送到AGV");
                TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_AGV_START_TAKE_TASK);
                Node node = AgvManager.GetNode(emptyShelfPlace);
                if(node != null)
                {
                    if(node is LineNode)
                    {
                        LineNode lineNode = (LineNode)node;
                        lineNode.StartOneTask(agvBean.Name);
                        AgvManager.UpdateNode(node);
                    }
                }
            }
            else if (TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.WAIT_AGV_START_TAKE_TASK))
            {
                //判断小车是否开始执行任务
                bool isTaskStart = false;
                if (isTaskStart)
                {
                    LogUtil.info("AGV已接收并开始执行回收空料架任务,等待到达取架点");
                    TakeEmptyStep.ToNextStep(TAKE_EMPTY_STEP.WAIT_REACH_TAKE_PLACE);
                }
            }
        }

        public override int GetPriority()
        {
            return _priority;
        }

        public override bool IsEnd()
        {
            return TakeEmptyStep.IsStep(TAKE_EMPTY_STEP.END);
        }
    }
    /// <summary>
    /// AGV离开A4
    /// </summary>
    public enum TAKE_EMPTY_STEP
    {
        NONE,
        /// <summary>
        /// 等待AGV开始执行去取架点任务
        /// </summary>
        WAIT_AGV_START_TAKE_TASK,
        /// <summary>
        /// 等待AGV到达取架点
        /// </summary>
        WAIT_REACH_TAKE_PLACE,
        /// <summary>
        /// AGV到达取架点
        /// </summary>
        REACH_TAKE_PLACE,
        
        /// <summary>
        /// 送上双层线
        /// </summary>
        END
    }
}