StandyJob.cs 4.0 KB
using Common;
using DeviceLibrary.bean;

namespace DeviceLibrary
{
    /// <summary>
    /// 待机任务
    /// </summary>
    public class StandyJob : Job
    {
        /// <summary>
        /// 待机任务
        /// </summary>
        /// <param name="agvPlae">小车当前位置,空表示在待机位</param>
        public StandyJob(JobParam jobParam) : base(jobParam)
        {
            JobName = "待机任务";
        }
        int BatteryMax = ChargePileManager.GetChargePiles().BatteryMax;
        int BatteryMin = ChargePileManager.GetChargePiles().BatteryMin;
        int BatteryMid = ChargePileManager.GetChargePiles().BatteryMiddle;
        /// <summary>
        /// 待机任务
        /// </summary>
        /// <param name="agv"></param>
        public override Job Run(Agv_Info agv)
        {
            if (JobRunStep.IsStep(RunStep.NONE))
            {
                {
                    if (JobParam.SrcNode.Area.Equals(Area.Air_C))
                    {
                        JobRunStep.ToNextStep(RunStep.WAIT_OUT_AIR_DOOR);
                        runInfo = string.Format("从{2}回到待机位,先过风淋门", agv.Battery, BatteryMax, JobParam.SrcNode.Name);
                        JobRunStep.Msg = runInfo;

                       AllocateTask(agv, SettingString.DoorAirOut);
                    }
                    else if (JobParam.SrcNode.Area.Equals(Area.C))
                    {
                        JobRunStep.ToNextStep(RunStep.WAIT_IN_ROOM_D);
                        runInfo = string.Format("从{2}回到待机位,先过门", agv.Battery, BatteryMax, JobParam.SrcNode.Name);
                        JobRunStep.Msg = runInfo;

                       AllocateTask(agv, SettingString.DoorCToD);
                    }
                    else
                    {
                        JobRunStep.ToNextStep(RunStep.STANDBY_WAIT_REACH_STANDBY);
                        runInfo = "从" + JobParam.SrcNode + "回到待机位";
                        JobRunStep.Msg = runInfo;
                       AllocateTask(agv, SettingString.Standby);
                    }
                }

            }
            else if (JobRunStep.IsStep(RunStep.WAIT_OUT_AIR_DOOR))
            {
                if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.WAIT_IN_ROOM_D);
                    runInfo = string.Format("从{1}回到待机位,先过门", agv.Battery, JobParam.SrcNode.Name);
                    JobRunStep.Msg = runInfo;
                   AllocateTask(agv, SettingString.DoorCToD);
                }
            }
            else if (JobRunStep.IsStep(RunStep.WAIT_IN_ROOM_D))
            {
                if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.STANDBY_WAIT_REACH_STANDBY);
                    runInfo = "从" + JobParam.SrcNode + "回到待机位";
                    JobRunStep.Msg = runInfo;
                   AllocateTask(agv, SettingString.Standby);
                }
            }
            else if (JobRunStep.IsStep(RunStep.STANDBY_WAIT_REACH_STANDBY))
            {
                //if (agv.TaskRunState.CheckTaskFinished(agv.Name))
                {
                    JobRunStep.ToNextStep(RunStep.END);
                   // runInfo = "到达待机位";
                    //JobRunStep.Msg = runInfo;
                }
            }
            else if (JobRunStep.IsStep(RunStep.END))
            {
                Job job = AGVManager.control.GetJob(agv);
                if (job != null && !(job is StandyJob))
                {
                    if (job is ChargeJob && agv.Battery > BatteryMid)
                        return null;
                    runInfo = "在待机位检测到任务,执行任务";
                    JobRunStep.Msg = runInfo;
                    JobRunStep.EndJob();
                    return job;
                }
            }

            return this;
        }
    }

}