ChargePileManager.cs 3.1 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.XmlConfigOpManager.LoadChargePileInfos(ChargePiles);
            CheckPileDulp();
        }
        /// <summary>
        /// 检查是否存在一台agv占用多个充电桩
        /// </summary>
        public static void CheckPileDulp()
        {
            List<ChargePile> cps;
            foreach (Agv_Info item in AGVManager.agvInfo)
            {
                cps = ChargePiles.GetChargePilesByAgv(item);
                if (cps != null && cps.Count > 1)
                {
                    foreach (ChargePile cp in cps)
                    {
                        if (cp.Fixed)
                        {
                            System.Windows.Forms.MessageBox.Show($"{item.Name} 有固定充电桩 {cp.AliceName},不允许在其他充电桩上配置该车,请检查配置文件{"chargeinfos.xml"}", "警告");
                            return;
                        }

                    }

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

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

                }

            }
            return false;
        }
        public static void StartCharge(Agv_Info agv, string chargename)
        {
            ChargePiles.GetChargePileByName(chargename).Occupy(agv);
            agv.IsInCharge = true;
        }
        public static void StopCharge(Agv_Info 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(Agv_Info agv)
        {
            bool isRandom = true;
            ChargePile cp = ChargePiles.GetChargePileByAgv(agv);
            if(cp !=null)
            {
                isRandom = !cp.Fixed;
            }
            return isRandom;
        }
    }


}