ChargePileManager.cs 2.3 KB
using Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Concurrent;
using DeviceLibrary.bean;
namespace DeviceLibrary
{
    public class ChargePileManager
    {

        static ChargePiles ChargePiles;

        public static void Init()
        {
            ChargePiles = new ChargePiles();
            manager.XmlConfigOperation.LoadChargePileInfos(ChargePiles);
        }

        public static ChargePiles GetChargePiles()
        {
            return ChargePiles;
        }
        static object loc = new object();
        /// <summary>
        /// 是否有充电桩用于充电
        /// </summary>
        /// <param name="agv"></param>
        /// <returns>充电任务结果</returns>
        public static bool HasEmpty(AgvInfo agv, out ChargePile charge)
        {
            charge = null;

            lock (loc)
            {
                List<ChargePile> cps = ChargePiles.GetChargePilesByAgv(agv);
                {
                    foreach (ChargePile item in cps)
                    {
                        if (item.HasEmpty(agv))
                        {
                            charge = item;
                            return true;
                        }
                    }

                }

            }
            return false;
        }
        public static void StartCharge(AgvInfo agv, string chargename)
        {
            ChargePiles.GetChargePileByName(chargename).Occupy(agv);
            agv.IsInCharge = true;
        }
        public static void StopCharge(AgvInfo agv)
        {
            List<ChargePile> cps = ChargePiles.GetChargePilesByAgv(agv);
            foreach (ChargePile item in cps)
            {
                if (agv.Equals(item.OccupiedAgv))
                {
                    item.DelOccupy(agv);
                    agv.IsInCharge = false;
                    return;
                }
            }
        }
        public static bool CheckIsRandom(AgvInfo agv)
        {
            bool isRandom = true;
            ChargePile cp = ChargePiles.GetChargePileByAgv(agv);
            if (cp != null)
            {
                isRandom = !cp.Fixed;
            }
            return isRandom;
        }
    }


}