ChargeJob.cs 3.4 KB
using System;
using Model;

namespace BLL
{
    public class ChargeJob : IJob
    {
        private AgvInfo _info;
        private MissionJob move;
        private string mission;
        private JobStep<ChargeStep> chargeStep;
        private int currBattery;

        public ChargeJob()
        {
            chargeStep = new JobStep<ChargeStep>(ChargeStep.None);
            LogOut.Debug("加载ChargeJob");
        }

        public bool IsEnd { get; private set; }

        public IJob Execute(AgvInfo info)
        {
            _info = info;
            if (chargeStep.Equals(ChargeStep.None))
            {
                currBattery = _info.Battery;
                if (_info.IsWorkshop4D)
                    SendCharge();
                else
                    PassDoor4D();
            }
            else if (chargeStep.Equals(ChargeStep.PassDoor))
            {
                move.Execute(_info);
                if (move.IsEnd)
                    SendCharge();
            }
            else if (chargeStep.Equals(ChargeStep.MoveStation))
            {
                move.Execute(_info);
                MoveStation();
            }
            else if (chargeStep.Equals(ChargeStep.Charging))
            {
                if (_info.Battery == _info.BatteryMax)
                {
                    chargeStep.Msg = _info.Name + "电量达到" + _info.BatteryMax;
                    chargeStep.NextStep(ChargeStep.End);
                }
                else if (_info.Battery > _info.BatteryMin)
                {
                    //IJob job = SteelManage.GetSteelJob(_info);
                    //if (job != null)
                    //{
                    //    Common.mir.Del_Mission(_info.IP, _info.Authorization);
                    //    return job;
                    //}
                }
            }
            else if (chargeStep.Equals(ChargeStep.End))
            {
                MiR_API.Del_Mission(_info.IP, _info.Authorization);
                chargeStep.Msg = _info.Name + "充电工作结束,回待机位";
                return new StandbyJob();
            }

            return this;
        }

        /// <summary>
        /// 发送充电任务
        /// </summary>
        private void SendCharge()
        {
            mission = Common.MISSION_CHARGE + _info.Name;
            _info.Place = mission;
            move = new MissionJob(mission);
            move.Execute(_info);
            chargeStep.NextStep(ChargeStep.MoveStation);
            chargeStep.Msg = _info.Name + "发送任务" + mission;
        }

        /// <summary>
        /// 过车间门去4D
        /// </summary>
        private void PassDoor4D()
        {
            mission = Common.MISSION_PASS_DOOR_4D;
            _info.Place = mission;
            move = new MissionJob(mission);
            move.Execute(_info);
            chargeStep.NextStep(ChargeStep.PassDoor);
            chargeStep.Msg = _info.Name + "发送任务" + mission;
        }

        /// <summary>
        /// 移动到充电桩
        /// </summary>
        private void MoveStation()
        {
            if (_info.Battery > currBattery)
            {
                chargeStep.Msg = _info.Name + "到达充电位,准备充电";
                chargeStep.NextStep(ChargeStep.Charging);
            }
        }



        private enum ChargeStep
        {
            None,
            End,
            PassDoor,
            MoveStation,
            Charging
        }
    }

}