StandyJob.cs 4.6 KB
using Common;

namespace DeviceLibrary
{
    /// <summary>
    /// 待机任务
    /// </summary>
    public class StandyJob : Job
    {
        /// <summary>
        /// 出完满料后-空车返回任务
        /// </summary>
        /// <param name="agvPlae">小车当前位置,空表示在待机位</param>
        public StandyJob(string agvPlae)
        {
            this.agvPlace = agvPlae;
        }


        /// <summary>
        /// 接收任务时,agv的位置
        /// </summary>
        private string agvPlace = "";

        private string runInfo = "";
        /// <summary>
        /// 运行信息
        /// </summary>
        public override string RunInfo
        {
            get { return string.Format("待机任务[{0}][{1}]:{2}", CurTaskID, CurTaskState, runInfo); }
        }

        private JobStep<EXECUTE_STEP> curJobStep = new JobStep<EXECUTE_STEP>(EXECUTE_STEP.NONE);

        /// <summary>
        /// 空车返回执行
        /// </summary>
        /// <param name="agv"></param>
        public override Job Execute(Agv_Info agv)
        {
            string msg = agv.Name + " ";
            bool rtn = false;
            agv.Msg = "";

            CurTaskState = MissionSys.GetTakJobState(CurTaskID);
            if (curJobStep.IsStep(EXECUTE_STEP.NONE))
            {
                    if (agvPlace.Equals(SettingString.Standby))//在待机位不操作
                    {
                    curJobStep.ToNextStep(EXECUTE_STEP.END);
                        runInfo = "在待机位,不执行操作";
                        msg += runInfo;
                    curJobStep.Msg = msg;
                    }

                    else if (agvPlace.StartsWith(SettingString.RoomC_Name_Prefix))
                    {
                    curJobStep.ToNextStep(EXECUTE_STEP.WAIT_AGV_REACH_4D_DOOR);
                        runInfo = "从当前位置" + agvPlace + "回到待机位,先到"+SettingString.RoomD_Name+"门";
                        msg += runInfo;
                    curJobStep.Msg = msg;
                        MissionSys.AssignMission(agv, SettingString.DoorCToD);
                        UpdateJobTaskInfo(agv.CurTarName, agv.CurTaskID);
                    }
                    else
                    {
                    curJobStep.ToNextStep(EXECUTE_STEP.WAIT_REACH_STANDBY);
                        runInfo = "从当前位置" + agvPlace + "回到待机位";
                        msg += runInfo;
                    curJobStep.Msg = msg;

                        MissionSys.AssignMission(agv, SettingString.Standby);
                        UpdateJobTaskInfo(agv.CurTarName, agv.CurTaskID);
                    }

            }

            else if (curJobStep.IsStep(EXECUTE_STEP.WAIT_AGV_REACH_4D_DOOR))
            {
                if (MissionSys.CheckTaskFinished(agv, SettingString.DoorCToD, CurTaskState))
                {
                    curJobStep.ToNextStep(EXECUTE_STEP.WAIT_REACH_STANDBY);
                    runInfo = "从"+SettingString.RoomD_Name+"门回到待机位";
                    msg += runInfo;
                    curJobStep.Msg = msg;

                    MissionSys.AssignMission(agv, SettingString.Standby);
                    UpdateJobTaskInfo(agv.CurTarName, agv.CurTaskID);
                }
            }
            else if (curJobStep.IsStep(EXECUTE_STEP.WAIT_REACH_STANDBY))
            {
                if (MissionSys.CheckTaskFinished(agv, SettingString.Standby, CurTaskState))
                {
                    curJobStep.ToNextStep(EXECUTE_STEP.END);
                    runInfo = "到达待机位";
                    msg += runInfo;
                    curJobStep.Msg = msg;
                }
            }
            else if (curJobStep.IsStep(EXECUTE_STEP.END))
            {
                Job job = AGVManager.control.GetJob(agv);
                if (job != null && !(job is StandyJob))
                {
                    runInfo = "在待机位检测到任务,执行任务";
                    msg += runInfo;
                    curJobStep.Msg = msg;
                    return job;
                }
            }
            return this;
        }

        /// <summary>
        /// 执行流程
        /// </summary>
        private enum EXECUTE_STEP
        {
            /// <summary>
            /// 
            /// </summary>
            NONE,

            /// <summary>
            /// 等待到达4D门
            /// </summary>
            WAIT_AGV_REACH_4D_DOOR,
            /// <summary>
            /// 等待到达待机位
            /// </summary>
            WAIT_REACH_STANDBY,
            /// <summary>
            /// 
            /// </summary>
            END
        }
    }

}